2022-09-08 17:24:53 +00:00
# 2022-09-08 @jredrejo's Ansible install scripts may provide guidelines:
# https://github.com/learningequality/pi-gen/blob/master/stage2/04-hostapd/common.yml
# https://github.com/learningequality/pi-gen/blob/master/stage2/04-hostapd/install.yml
# https://github.com/learningequality/pi-gen/blob/master/stage2/04-hostapd/offline.yml
# https://github.com/learningequality/pi-gen/blob/master/stage2/04-hostapd/online.yml
2023-03-27 21:38:12 +00:00
# Install Kolibri » Debian/Ubuntu
# https://kolibri.readthedocs.io/en/latest/install/ubuntu-debian.html
# Advanced management
# https://kolibri.readthedocs.io/en/latest/manage/advanced.html
# Working with Kolibri from the command line
# https://kolibri.readthedocs.io/en/latest/manage/command_line.html
# Customize Kolibri settings with the [ /library/kolibri/options.ini ] file
# https://kolibri.readthedocs.io/en/latest/manage/options_ini.html
# Test Kolibri server performance
# https://kolibri.readthedocs.io/en/latest/manage/performance.html
# Provisioning many servers
# https://kolibri.readthedocs.io/en/latest/install/provision.html
2023-06-10 13:10:47 +00:00
- name : Record (initial) disk space used
shell : df -B1 --output=used / | tail -1
2023-05-27 07:26:04 +00:00
register : df1
2019-09-05 05:16:40 +00:00
- name : Create Linux user {{ kolibri_user }} and add it to groups {{ apache_user }}, disk
user :
name : "{{ kolibri_user }}"
2023-03-29 20:19:27 +00:00
groups : "{{ apache_user }}" # 2023-03-29: Not really necessary (Kolibri is demonstrated to work without group 'www-data'). But it likely doesn't hurt.
#- disk # 2023-03-29: Tested to be unnec with USB sticks (with 64-bit RasPiOS). FWIW group 'disk' is "Mostly equivalent to root access" according to https://wiki.debian.org/SystemGroups
2019-09-05 05:16:40 +00:00
state : present
shell : /bin/false
system : yes
create_home : no
2023-03-24 00:58:42 +00:00
home : "{{ kolibri_home }}"
2019-09-05 05:16:40 +00:00
2021-07-06 19:26:01 +00:00
- name : Create directory {{ kolibri_home }} for Kolibri content, configuration, sqlite3 databases ({{ kolibri_user }}:{{ apache_user }}, by default 0755)
2019-09-05 05:16:40 +00:00
file :
2020-02-03 02:16:26 +00:00
state : directory
2019-09-05 05:16:40 +00:00
path : "{{ kolibri_home }}" # /library/kolibri
owner : "{{ kolibri_user }}" # kolibri
group : "{{ apache_user }}" # www-data (on Debian/Ubuntu/Raspbian)
2021-07-06 19:26:01 +00:00
- name : Create directory /etc/kolibri (by default 0755)
2019-09-05 05:16:40 +00:00
file :
state : directory
2020-02-03 02:16:26 +00:00
name : /etc/kolibri
2019-09-05 05:16:40 +00:00
- name : Save kolibri_user ({{ kolibri_user }}) to /etc/kolibri/username
copy :
content : "{{ kolibri_user }}"
dest : /etc/kolibri/username
- name : Save kolibri_home (KOLIBRI_HOME="{{ kolibri_home }}") to /etc/kolibri/daemon.conf
copy :
content : 'KOLIBRI_HOME="{{ kolibri_home }}"'
dest : /etc/kolibri/daemon.conf
2022-09-08 16:44:02 +00:00
2023-03-27 21:38:12 +00:00
# https://kolibri.readthedocs.io/en/latest/install/ubuntu-debian.html claims:
# "When you use the PPA installation method, upgrades to newer versions
# will be automatic, provided there is internet access available."
#
# IN REALITY: apt upgrading Kolibri is messy, as up-to-5 debconf screens prompt
# PPL WHO DON'T KNOW with the wrong default username, instead of 'kolibri' :/
# https://github.com/learningequality/kolibri-installer-debian/pull/117
# 2022-08-31: keyring /etc/apt/trusted.gpg DEPRECATED as detailed on #3343
- name : Download Kolibri's apt key to /usr/share/keyrings/learningequality-kolibri.gpg
shell : |
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys DC5BAA93F9E4AE4F0411F97C74F88ADB3194DD81
gpg --yes --output /usr/share/keyrings/learningequality-kolibri.gpg --export DC5BAA93F9E4AE4F0411F97C74F88ADB3194DD81
2024-06-25 22:47:28 +00:00
# 2024-06-25: Strongly consider PPA "kolibri-proposed" in future...
2024-06-25 22:25:23 +00:00
# https://github.com/learningequality/kolibri/issues/11892
# https://kolibri.readthedocs.io/en/latest/install/ubuntu-debian.html
- name : Add signed Kolibri PPA 'jammy'
2023-03-27 21:38:12 +00:00
apt_repository :
repo : "deb [signed-by=/usr/share/keyrings/learningequality-kolibri.gpg] http://ppa.launchpad.net/learningequality/kolibri/ubuntu jammy main"
2024-06-25 22:25:23 +00:00
# when: is_ubuntu and os_ver is version('ubuntu-2204', '>=') or is_linuxmint_21 or is_debian_12
# #when: is_ubuntu_2204 or is_ubuntu_2210 or is_debian_12 # MINT 21 COVERED BY is_ubuntu_2204
# - name: Add signed Kolibri PPA 'focal' (if other/older OS's)
# apt_repository:
# repo: "deb [signed-by=/usr/share/keyrings/learningequality-kolibri.gpg] http://ppa.launchpad.net/learningequality/kolibri/ubuntu focal main"
# when: not (is_ubuntu and os_ver is version('ubuntu-2204', '>=') or is_linuxmint_21 or is_debian_12)
# #when: not (is_ubuntu_2204 or is_ubuntu_2210 or is_debian_12)
2023-03-27 21:38:12 +00:00
# - name: Add Kolibri PPA repo 'ppa:learningequality/kolibri' (if is_ubuntu and not is_linuxmint)
# apt_repository:
# repo: ppa:learningequality/kolibri
# when: is_ubuntu and not is_linuxmint
# 2022-08-19: 'add-apt-repository ppa:learningequality/kolibri' works at CLI on
# Mint 21 (creating /etc/apt/sources.list.d/learningequality-kolibri-jammy.list)
# BUT equivalent Ansible command (STANZA ABOVE) failed with error...
# "Failed to update apt cache: E:The repository 'http://ppa.launchpad.net/learningequality/kolibri/ubuntu vanessa Release' does not have a Release file."
# ...so for now we special case Mint, similar to Debian (BOTH STANZAS BELOW!)
# 2022-08-19: https://github.com/learningequality/kolibri/issues/9647 also asks
# about the warning below, arising no matter if codename is 'focal' or 'jammy'
# with Kolibri 0.15.6 on Mint 21 -- if you run '/usr/bin/kolibri --version':
#
# /usr/lib/python3/dist-packages/pkg_resources/__init__.py:116: PkgResourcesDeprecationWarning: 0.1.43ubuntu1 is an invalid version and will not be supported in a future release
# warnings.warn(
# 2022-08-19: 'apt-key list' & 'apt-key del 3194 DD81' are useful if you also
# want to clear out Kolibri's key from the DEPRECATED /etc/apt/trusted.gpg
# - name: Add Kolibri PPA repo 'ppa:learningequality/kolibri' with codename 'jammy' (if is_linuxmint_21)
# apt_repository:
# repo: ppa:learningequality/kolibri
# codename: jammy # CONSOLIDATE THIS SPECIAL CASE STANZA WITH UBUNTU ABOVE IN FUTURE?
# when: is_linuxmint_21
# - name: Add Kolibri PPA repo 'ppa:learningequality/kolibri' with codename 'focal' (if is_debian or is_linuxmint_20)
# apt_repository:
# repo: ppa:learningequality/kolibri
# codename: focal # UPDATE THIS TO 'jammy' AFTER "RasPiOS Bookworm" (based on Debian 12) IS RELEASED! (ETA Q3 2023)
# when: is_debian or is_linuxmint_20
2024-06-25 15:55:31 +00:00
- name: '2024-06-25 TEMPORARY HACK : Hard code kolibri_deb_url to a Kolibri 0.17 pre-release, if Python >= 3.12 -- kolibri-proposed PPA should do this automatically in future!'
set_fact :
2024-08-05 22:44:18 +00:00
kolibri_deb_url : https://github.com/learningequality/kolibri/releases/download/v0.17.0-rc3/kolibri_0.17.0rc3-0ubuntu1_all.deb
2024-08-05 22:51:04 +00:00
when: python_version is version('3.12', '>=') # For Ubuntu 24.04, Mint 22, pre-releases of Ubuntu 24.10, and Debian 13 (even if it changes from Python 3.12 to 3.13). Regarding PPA kolibri-proposed not quite being ready yet, see : learningequality/kolibri#11892 learningequality/kolibri#11316
2024-06-25 15:55:31 +00:00
2023-03-27 21:38:12 +00:00
- name : apt install kolibri (using apt source specified above, if kolibri_deb_url ISN'T defined)
apt :
name : kolibri
when : kolibri_deb_url is undefined
# environment:
# KOLIBRI_HOME: "{{ kolibri_home }}" # 2023-03-27: These don't do a thing
# KOLIBRI_USER: "{{ kolibri_user }}" # for now.
- name : apt install {{ kolibri_deb_url }} (if kolibri_deb_url IS defined)
2019-09-05 05:16:40 +00:00
apt :
2023-01-24 17:12:59 +00:00
deb : "{{ kolibri_deb_url }}" # e.g. https://learningequality.org/r/kolibri-deb-latest
2022-07-30 22:45:51 +00:00
when : kolibri_deb_url is defined
2023-03-27 21:38:12 +00:00
# environment:
# KOLIBRI_HOME: "{{ kolibri_home }}" # 2023-03-27: These don't do a thing
# KOLIBRI_USER: "{{ kolibri_user }}" # for now.
2022-07-30 22:45:51 +00:00
2019-09-05 05:16:40 +00:00
2023-03-27 21:38:12 +00:00
- name : Run 'rm -rf /root/.kolibri' to remove "unavoidable" pollution created above
file :
state : absent
path : /root/.kolibri
2022-09-08 16:44:02 +00:00
2020-05-17 03:50:22 +00:00
- name: 'Install from template : /etc/systemd/system/kolibri.service'
2019-09-05 05:16:40 +00:00
template :
2020-05-17 03:50:22 +00:00
src : kolibri.service.j2
dest : /etc/systemd/system/kolibri.service
2020-02-03 02:16:26 +00:00
- name : Stop 'kolibri' systemd service, for Kolibri provisioning (after daemon_reload)
2019-09-05 05:16:40 +00:00
systemd :
daemon_reload : yes
2023-03-27 21:38:12 +00:00
name : kolibri
2019-09-05 05:16:40 +00:00
state : stopped
# 2019-10-01: Should no longer be nec, thanks to /etc/kolibri/daemon.conf
# containing KOLIBRI_HOME="/library/kolibri" (above)
2022-07-30 22:45:51 +00:00
# - name: Run Kolibri migrations to begin populating {{ kolibri_home }} # i.e. /library/kolibri
# shell: export KOLIBRI_HOME="{{ kolibri_home }}" && "{{ kolibri_exec_path }}" manage migrate
# ignore_errors: yes
# become: yes
# become_user: "{{ kolibri_user }}"
# when: kolibri_provision
2019-09-05 05:16:40 +00:00
2020-01-05 20:18:27 +00:00
# 2020-01-05: Deprecated per https://github.com/iiab/iiab/issues/2103
2022-07-30 22:45:51 +00:00
# - name: Set Kolibri default language ({{ kolibri_language }})
# shell: export KOLIBRI_HOME="{{ kolibri_home }}" && "{{ kolibri_exec_path }}" language setdefault "{{ kolibri_language }}"
# ignore_errors: yes
# become: yes
# become_user: "{{ kolibri_user }}"
# when: kolibri_provision
2019-09-05 05:16:40 +00:00
2023-03-27 21:38:12 +00:00
# Run "kolibri manage help provisiondevice" to see CLI options, e.g.:
# --facility_settings FACILITY_SETTINGS
# JSON file containing facility settings
# --device_settings DEVICE_SETTINGS
# JSON file containing device settings
2019-09-05 05:16:40 +00:00
- name: 'Provision Kolibri, while setting : facility name, admin acnt / password, preset type, and language'
shell : >
"{{ kolibri_exec_path }}" manage provisiondevice --facility "{{ kolibri_facility }}"
--superusername "{{ kolibri_admin_user }}" --superuserpassword "{{ kolibri_admin_password }}"
--preset "{{ kolibri_preset }}" --language_id "{{ kolibri_language }}"
#--preset "{{ kolibri_preset }}" --language_id "{{ kolibri_language }}" --verbosity 0 --noinput
ignore_errors : yes
become : yes
become_user : "{{ kolibri_user }}"
2020-10-16 20:46:19 +00:00
when : kolibri_provision
2023-03-27 21:38:12 +00:00
environment :
KOLIBRI_HOME : "{{ kolibri_home }}" # 2023-03-27: Required!
#KOLIBRI_USER: "{{ kolibri_user }}" # 2023-03-27: Not nec due to /etc/kolibri/username ?
2019-09-05 05:16:40 +00:00
2023-03-26 19:57:45 +00:00
# 2023-03-25: Likely overkill (let's strongly consider removing this stanza?)
# Certainly, setting owner (recursively) is advised when moving /library/kolibri :
# https://kolibri.readthedocs.io/en/latest/install/ubuntu-debian.html#changing-the-owner-of-kolibri-system-service
2023-03-27 21:38:12 +00:00
# 2023-03-27: Commented out on a provisional basis (Spring Cleaning)
# - name: chown -R {{ kolibri_user }}:{{ apache_user }} {{ kolibri_home }} for good measure?
# file:
# path: "{{ kolibri_home }}" # /library/kolibri
# owner: "{{ kolibri_user }}" # kolibri
# group: "{{ apache_user }}" # www-data (on Debian/Ubuntu/Raspbian)
# recurse: yes
# when: kolibri_provision
2019-09-05 05:16:40 +00:00
# 2019-10-07: Moved to roles/httpd/tasks/main.yml
# 2019-09-29: roles/kiwix/tasks/kiwix_install.yml installs 4 Apache modules
# for similar purposes (not all nec?) Only 1 (proxy_http) is needed here.
2022-07-30 22:45:51 +00:00
# - name: Enable Apache module proxy_http for http://box{{ kolibri_url }} # i.e. http://box/kolibri
# apache2_module:
# name: proxy_http
2019-09-05 05:16:40 +00:00
2020-01-30 09:00:00 +00:00
# RECORD Kolibri AS INSTALLED
2023-06-10 13:10:47 +00:00
- name : Record (final) disk space used
shell : df -B1 --output=used / | tail -1
2023-05-27 07:26:04 +00:00
register : df2
2023-06-10 13:10:47 +00:00
- name : Add 'kolibri_disk_usage = {{ df2.stdout|int - df1.stdout|int }}' to {{ iiab_ini_file }}
2023-05-27 07:26:04 +00:00
ini_file :
path : "{{ iiab_ini_file }}" # /etc/iiab/iiab.ini
section : kolibri
option : kolibri_disk_usage
2023-06-10 13:10:47 +00:00
value : "{{ df2.stdout|int - df1.stdout|int }}"
2023-05-27 07:26:04 +00:00
2020-01-30 09:00:00 +00:00
- name : "Set 'kolibri_installed: True'"
set_fact :
kolibri_installed : True
2020-01-12 23:15:33 +00:00
- name : "Add 'kolibri_installed: True' to {{ iiab_state_file }}"
2019-09-09 17:14:13 +00:00
lineinfile :
2020-02-04 00:54:04 +00:00
path : "{{ iiab_state_file }}" # /etc/iiab/iiab_state.yml
2019-09-09 17:14:13 +00:00
regexp : '^kolibri_installed'
2019-10-07 17:11:21 +00:00
line: 'kolibri_installed : True '