mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-21 10:25:11 -04:00
consolidate ansible setup into roles dir
This commit is contained in:
parent
25db6826ec
commit
c55cd46ecb
27 changed files with 763 additions and 91 deletions
4
archivebox/playbooks/install_all.yml
Normal file → Executable file
4
archivebox/playbooks/install_all.yml
Normal file → Executable file
|
@ -1,3 +1,4 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
- import_playbook: install_ytdlp.yml
|
||||
vars:
|
||||
|
@ -7,6 +8,9 @@
|
|||
vars:
|
||||
state: 'present'
|
||||
|
||||
- import_playbook: install_puppeteer.yml
|
||||
vars:
|
||||
state: 'present'
|
||||
|
||||
- import_playbook: install_package.yml
|
||||
vars:
|
||||
|
|
3
archivebox/playbooks/install_npm.yml
Normal file → Executable file
3
archivebox/playbooks/install_npm.yml
Normal file → Executable file
|
@ -1,3 +1,4 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
|
||||
- import_playbook: install_package.yml
|
||||
|
@ -71,7 +72,7 @@
|
|||
installer_version: "{{BINARIES.npm.version}}"
|
||||
PATH: "{{LIB_DIR_NPM_BIN}}"
|
||||
when: BINPROVIDERS.npm is not defined
|
||||
|
||||
|
||||
- set_fact:
|
||||
BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(NODE_BINPROVIDERS) }}"
|
||||
cacheable: true
|
||||
|
|
1
archivebox/playbooks/install_package.yml
Normal file → Executable file
1
archivebox/playbooks/install_package.yml
Normal file → Executable file
|
@ -1,3 +1,4 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
- name: "Install using apt/brew/pkg/yum/etc."
|
||||
hosts: localhost
|
||||
|
|
3
archivebox/playbooks/install_pip.yml
Normal file → Executable file
3
archivebox/playbooks/install_pip.yml
Normal file → Executable file
|
@ -1,3 +1,4 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
|
||||
- import_playbook: load_binaries.yml
|
||||
|
@ -64,7 +65,7 @@
|
|||
installer_version: "{{BINARIES.pip.version}}"
|
||||
PATH: "{{LIB_DIR_PIP_BIN}}"
|
||||
when: BINPROVIDERS.pip is not defined
|
||||
|
||||
|
||||
- set_fact:
|
||||
BINPROVIDERS: "{{ BINPROVIDERS | default({}) | combine(PIP_BINPROVIDERS) }}"
|
||||
cacheable: true
|
||||
|
|
111
archivebox/playbooks/install_puppeteer.yml
Normal file → Executable file
111
archivebox/playbooks/install_puppeteer.yml
Normal file → Executable file
|
@ -1,71 +1,88 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
- import_playbook: install_npm.yml
|
||||
vars:
|
||||
packages:
|
||||
- 'puppeteer'
|
||||
- '@puppeteer/browsers'
|
||||
state: 'latest'
|
||||
|
||||
- name: "Install puppeteer, puppeteer/browsers, and chrome"
|
||||
hosts: localhost
|
||||
gather_facts: no
|
||||
vars:
|
||||
DATA_DIR: '/Volumes/NVME/Users/squash/Code/archiveboxes/archivebox7/data4'
|
||||
DATA_DIR: '{{playbook_dir}}'
|
||||
LIB_DIR: '{{DATA_DIR}}/lib'
|
||||
LIB_DIR_NPM: '{{LIB_DIR}}/npm'
|
||||
LIB_DIR_NPM_BIN: '{{LIB_DIR_NPM}}/node_modules/.bin'
|
||||
LIB_DIR_BROWSERS: '{{LIB_DIR}}/browsers'
|
||||
LIB_DIR_BIN: '{{LIB_DIR}}/bin'
|
||||
CHROME_RELEASE_CHANNEL: 'chrome@stable'
|
||||
CHROME_VERSION_MIN: '128.0.6613.137'
|
||||
environment:
|
||||
PATH: "{{LIB_DIR_NPM_BIN}}:{{ ansible_env.PATH }}"
|
||||
tasks:
|
||||
- include_role:
|
||||
name: setup_lib_npm
|
||||
vars:
|
||||
MIN_NODE_VERSION: '20.0.0'
|
||||
MIN_NPM_VERSION: '10.0.0'
|
||||
|
||||
- name: "Install npm packages: [puppeteer, @puppeteer/browsers]"
|
||||
community.general.npm:
|
||||
name: '{{item}}'
|
||||
state: "present"
|
||||
path: '{{BINPROVIDERS.npm.root_path}}'
|
||||
loop:
|
||||
- 'puppeteer'
|
||||
- '@puppeteer/browsers'
|
||||
|
||||
- name: Make sure prerequisite folders exist
|
||||
file:
|
||||
path: '{{item}}'
|
||||
path: '{{LIB_DIR_BROWSERS}}'
|
||||
state: directory
|
||||
recurse: true
|
||||
|
||||
- name: Load puppeteer binary from installed NPM package
|
||||
include_role:
|
||||
name: load_binaries
|
||||
vars:
|
||||
load_binaries:
|
||||
- name: puppeteer
|
||||
bin_name: 'puppeteer'
|
||||
version_cmd: 'puppeteer --version'
|
||||
PATH: '{{BINPROVIDERS.npm.PATH}}'
|
||||
|
||||
- name: Load chrome binary from environment PATH
|
||||
include_role:
|
||||
name: load_binaries
|
||||
vars:
|
||||
load_binaries:
|
||||
- name: 'chrome'
|
||||
bin_name: '{{item}}'
|
||||
PATH: '{{ansible_env.PATH}}'
|
||||
loop:
|
||||
- '{{LIB_DIR_BROWSERS}}'
|
||||
- '{{LIB_DIR_BIN}}'
|
||||
|
||||
- name: Make sure Node and NPM are installed
|
||||
assert:
|
||||
that:
|
||||
- BINARIES.node.version
|
||||
- BINARIES.npm.version
|
||||
quiet: true
|
||||
|
||||
- name: Get installed puppeteer version
|
||||
command: 'puppeteer --version'
|
||||
register: PUPPETEER_VERSION_FULL
|
||||
changed_when: False
|
||||
- chrome
|
||||
- chrome-browser
|
||||
- chromium
|
||||
- chromium-browser
|
||||
- google-chrome
|
||||
- google-chrome-browser
|
||||
- google-chrome-stable
|
||||
- google-chrome-beta
|
||||
- google-chrome-canary
|
||||
- google-chrome-unstable
|
||||
- google-chrome-dev
|
||||
|
||||
###################################################################################
|
||||
- name: Install Chrome browser using puppeteer/browsers
|
||||
command: 'npx @puppeteer/browsers install {{CHROME_RELEASE_CHANNEL}} --path {{LIB_DIR_BROWSERS}}'
|
||||
register: CHROME_VERSION_FULL
|
||||
# -> 'chrome@128.0.6613.137 /data/lib/browsers/chrome/linux_arm-128.0.6613.138/chrome-linux-arm64/...'
|
||||
environment:
|
||||
PATH: "{{BINPROVIDERS.npm.PATH}}:{{ ansible_env.PATH }}"
|
||||
changed_when: CHROME_VERSION_MIN not in CHROME_VERSION_FULL.stdout
|
||||
when: BINARIES.chrome is not defined
|
||||
# -> 'chrome@128.0.6613.137 /data/lib/browsers/chrome/linux_arm-128.0.6613.138/chrome-linux-arm64/...'
|
||||
|
||||
###################################################################################
|
||||
- set_fact:
|
||||
PUPPETEER_ABSPATH: "{{LIB_DIR_NPM_BIN}}/puppeteer"
|
||||
PUPPETEER_VERSION: "{{ PUPPETEER_VERSION_FULL.stdout_lines|first }}"
|
||||
CHROME_ABSPATH: "{{ CHROME_VERSION_FULL.stdout_lines|last|split(' ', 1)|last }}"
|
||||
CHROME_VERSION: "{{ CHROME_VERSION_FULL.stdout_lines|last|split('@', 1)|last|split(' ', 1)|first }}"
|
||||
|
||||
- name: Check that installed Chrome matches expected version
|
||||
assert:
|
||||
that: CHROME_VERSION_MIN is version(CHROME_VERSION, '>=')
|
||||
quiet: true
|
||||
when: BINARIES.chrome is not defined
|
||||
|
||||
- name: Create ./bin/chrome symlink to ./browsers/chrome/... binary
|
||||
copy:
|
||||
content: |
|
||||
#!/bin/bash
|
||||
exec '{{CHROME_ABSPATH}}' "$@"
|
||||
exec '{{CHROME_ABSPATH|default(BINARIES.chrome.abspath)}}' "$@"
|
||||
dest: "{{LIB_DIR_BIN}}/chrome"
|
||||
- file:
|
||||
path: "{{LIB_DIR_BIN}}/chrome"
|
||||
|
@ -74,18 +91,22 @@
|
|||
|
||||
###################################################################################
|
||||
- set_fact:
|
||||
PUPPETEER_DEPENDENCIES:
|
||||
node: "{{BINARIES.node}}"
|
||||
npm: "{{BINARIES.npm}}"
|
||||
PUPPETEER_BINARIES:
|
||||
puppeteer:
|
||||
abspath: "{{PUPPETEER_ABSPATH}}"
|
||||
version: "{{PUPPETEER_VERSION}}"
|
||||
chrome:
|
||||
abspath: "{{CHROME_ABSPATH}}"
|
||||
version: "{{CHROME_VERSION}}"
|
||||
bin_name: 'chrome'
|
||||
abspath: "{{CHROME_ABSPATH|default(BINARIES.chrome.abspath)}}"
|
||||
version: "{{CHROME_VERSION|default(BINARIES.chrome.version)}}"
|
||||
symlink: "{{LIB_DIR_BIN}}/chrome"
|
||||
version_cmd: "chrome --version"
|
||||
|
||||
- name: Check that installed Chrome matches expected version
|
||||
assert:
|
||||
that: PUPPETEER_BINARIES.chrome.version is version(CHROME_VERSION_MIN, '>=')
|
||||
quiet: true
|
||||
|
||||
- set_fact:
|
||||
BINARIES: "{{ BINARIES | combine(PUPPETEER_BINARIES) }}"
|
||||
cacheable: true
|
||||
|
||||
- debug:
|
||||
msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"
|
||||
|
|
40
archivebox/playbooks/install_singlefile.yml
Normal file → Executable file
40
archivebox/playbooks/install_singlefile.yml
Normal file → Executable file
|
@ -1,16 +1,8 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
|
||||
- import_playbook: install_npm.yml
|
||||
vars:
|
||||
install_npm:
|
||||
singlefile: {packages: ['single-file-cli@1.1.54']}
|
||||
state: 'present'
|
||||
|
||||
- import_playbook: load_binaries.yml
|
||||
vars:
|
||||
load_binaries:
|
||||
singlefile: {bin_name: 'single-file', version_cmd: 'single-file --version', PATH: '{{BINPROVIDERS.npm.PATH}}'}
|
||||
|
||||
- import_playbook: ../puppeteer/install_puppeteer.yml
|
||||
when: BINARIES.chrome is not defined
|
||||
|
||||
- name: "Install Singlefile"
|
||||
hosts: localhost
|
||||
|
@ -18,12 +10,26 @@
|
|||
vars:
|
||||
SINGLEFILE_VERSION_EXACT: '1.1.54'
|
||||
tasks:
|
||||
- name: Make sure Node and NPM are installed
|
||||
assert:
|
||||
that:
|
||||
- BINARIES.node.version
|
||||
- BINARIES.npm.version
|
||||
quiet: true
|
||||
- include_role:
|
||||
name: setup_lib_npm
|
||||
vars:
|
||||
MIN_NODE_VERSION: '20.0.0'
|
||||
MIN_NPM_VERSION: '10.0.0'
|
||||
|
||||
- name: "Install npm packages: [single-file-cli]"
|
||||
community.general.npm:
|
||||
name: 'single-file-cli@1.1.54'
|
||||
state: "present"
|
||||
path: '{{BINPROVIDERS.npm.root_path}}'
|
||||
|
||||
- name: Load single-file binary from installed NPM package
|
||||
include_role:
|
||||
name: load_binary
|
||||
vars:
|
||||
name: singlefile
|
||||
bin_name: 'single-file'
|
||||
version_cmd: 'single-file --version'
|
||||
PATH: '{{BINPROVIDERS.npm.PATH}}'
|
||||
|
||||
- name: Check that installed Singlefile version matches expected version
|
||||
assert:
|
||||
|
|
61
archivebox/playbooks/install_ytdlp.yml
Normal file → Executable file
61
archivebox/playbooks/install_ytdlp.yml
Normal file → Executable file
|
@ -1,37 +1,24 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
- import_playbook: install_package.yml
|
||||
vars:
|
||||
install_packages:
|
||||
ffmpeg: {packages: ['ffmpeg']}
|
||||
state: 'present'
|
||||
|
||||
- import_playbook: install_pip.yml
|
||||
vars:
|
||||
install_pip:
|
||||
ytdlp: {packages: ['yt-dlp']}
|
||||
state: 'present'
|
||||
|
||||
- import_playbook: load_binaries.yml
|
||||
vars:
|
||||
load_binaries:
|
||||
ffmpeg: {bin_name: 'ffmpeg', version_cmd: 'ffmpeg -version'}
|
||||
ytdlp: {bin_name: 'yt-dlp', version_cmd: 'yt-dlp --version'}
|
||||
|
||||
|
||||
- name: "Install YT-DLP"
|
||||
hosts: localhost
|
||||
gather_facts: no
|
||||
vars:
|
||||
YTDLP_VERSION_MIN: '2024.8.6'
|
||||
tasks:
|
||||
- name: Make sure Python and Pip are installed
|
||||
assert:
|
||||
that:
|
||||
- BINARIES.python.version
|
||||
- BINARIES.pip.version
|
||||
- BINARIES.ffmpeg.version
|
||||
- BINARIES.ytdlp.version
|
||||
quiet: true
|
||||
- include_role:
|
||||
name: setup_lib_pip
|
||||
vars:
|
||||
MIN_PYTHON_VERSION: '3.10.0'
|
||||
MIN_PIP_VERSION: '22.0'
|
||||
|
||||
- name: "Install pip packages: {{install_pip}}"
|
||||
ansible.builtin.pip:
|
||||
name: 'yt-dlp'
|
||||
state: "present"
|
||||
virtualenv: '{{LIB_DIR_PIP}}/venv'
|
||||
virtualenv_python: "{{BINARIES.python.abspath}}"
|
||||
virtualenv_site_packages: yes
|
||||
|
||||
- name: Check that installed YT-DLP matches expected version
|
||||
assert:
|
||||
|
@ -40,3 +27,23 @@
|
|||
|
||||
- debug:
|
||||
msg: "{{ {'BINARIES': BINARIES, 'BINPROVIDERS': BINPROVIDERS} }}"
|
||||
|
||||
|
||||
|
||||
# - import_playbook: install_package.yml
|
||||
# vars:
|
||||
# install_packages:
|
||||
# ffmpeg: {packages: ['ffmpeg']}
|
||||
# state: 'present'
|
||||
|
||||
# - import_playbook: install_pip.yml
|
||||
# vars:
|
||||
# install_pip:
|
||||
# ytdlp: {packages: ['yt-dlp']}
|
||||
# state: 'present'
|
||||
|
||||
# - import_playbook: load_binaries.yml
|
||||
# vars:
|
||||
# load_binaries:
|
||||
# ffmpeg: {bin_name: 'ffmpeg', version_cmd: 'ffmpeg -version'}
|
||||
# ytdlp: {bin_name: 'yt-dlp', version_cmd: 'yt-dlp --version'}
|
||||
|
|
1
archivebox/playbooks/load_binaries.yml
Normal file → Executable file
1
archivebox/playbooks/load_binaries.yml
Normal file → Executable file
|
@ -1,3 +1,4 @@
|
|||
#!/usr/bin/env ansible-playbook
|
||||
---
|
||||
- name: Get binary abspaths and versions and add to BINARIES
|
||||
hosts: localhost
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue