summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chaos-at-home/ch-cm4-test.yml15
-rw-r--r--chaos-at-home/ch-mc.yml11
-rw-r--r--inventory/host_vars/ch-cm4-test.yml4
-rw-r--r--inventory/host_vars/ch-mc.yml10
-rw-r--r--roles/kodi/standalone/defaults/main.yml12
-rw-r--r--roles/kodi/standalone/handlers/main.yml5
-rw-r--r--roles/kodi/standalone/tasks/main.yml80
-rw-r--r--roles/kodi/standalone/templates/kodi.service.j219
-rw-r--r--roles/kodi/standalone/templates/polkit-legacy.pkla.j24
-rw-r--r--roles/kodi/standalone/templates/polkit.rules.j213
10 files changed, 163 insertions, 10 deletions
diff --git a/chaos-at-home/ch-cm4-test.yml b/chaos-at-home/ch-cm4-test.yml
index 467c0baf..2726fc07 100644
--- a/chaos-at-home/ch-cm4-test.yml
+++ b/chaos-at-home/ch-cm4-test.yml
@@ -7,6 +7,11 @@
- role: core/sshd/base
- role: core/zsh
- role: core/ntp
+
+- name: Payload Setup
+ hosts: ch-cm4-test
+ roles:
+ - role: kodi/standalone
post_tasks:
- name: mount fileserver volumes
mount:
@@ -15,13 +20,3 @@
fstype: nfs4
opts: nodev,x-systemd.automount,nofail,ro
state: mounted
-####
-## $ apt install kodi libgl1-mesa-dri udisks2
-## $ apt install git make
-## $ git clone --depth 1 https://github.com/graysky2/kodi-standalone-service
-## $ cd kodi-standalone-service
-## $ make install
-## $ systemd-sysusers
-## $ systemd-tmpfiles --create
-## $ systemctl enable kodi.service
-## $ systemctl set-default graphical.target
diff --git a/chaos-at-home/ch-mc.yml b/chaos-at-home/ch-mc.yml
index a9cb9707..8ded2b5a 100644
--- a/chaos-at-home/ch-mc.yml
+++ b/chaos-at-home/ch-mc.yml
@@ -7,11 +7,22 @@
- role: core/sshd/base
- role: core/zsh
- role: core/cpu-microcode
+
+- name: Payload Setup
+ hosts: ch-mc
+ roles:
- role: network/wakeonlan
+ # - role: apt-repo/backports
+ # - role: kodi/standalone
- role: apt-repo/kodi
- role: ws/base
- role: ws/users
post_tasks:
+ - name: install nfs client packages
+ apt:
+ name: nfs-common
+ state: present
+
- name: mount fileserver volumes
mount:
src: "{{ network_zones.lan.prefix | ansible.utils.ipaddr(network_zones.lan.offsets['ch-prometheus']) | ansible.utils.ipaddr('address') }}:/"
diff --git a/inventory/host_vars/ch-cm4-test.yml b/inventory/host_vars/ch-cm4-test.yml
index 9a013fdf..314f7f2b 100644
--- a/inventory/host_vars/ch-cm4-test.yml
+++ b/inventory/host_vars/ch-cm4-test.yml
@@ -23,3 +23,7 @@ raspios_boot_config:
line: 'hdmi_enable_4kp60=1'
base_entropy_generator: rngd
+
+
+kodi_standalone_support_packages_extra:
+ - libgl1-mesa-dri ## missing dep for RaspiOS Kodi Package, TODO: bugreport
diff --git a/inventory/host_vars/ch-mc.yml b/inventory/host_vars/ch-mc.yml
index 93578edd..45c2d82d 100644
--- a/inventory/host_vars/ch-mc.yml
+++ b/inventory/host_vars/ch-mc.yml
@@ -63,3 +63,13 @@ ws_base_lightdm_defaults:
ws_users:
- equinox
+
+
+# kodi_standalone_support_packages_extra:
+# - i965-va-driver-shaders
+
+# kodi_standalone_use_backports: yes
+# kodi_standalone_kodi_packages_extra:
+# - kodi-repository-kodi
+# - kodi-inputstream-adaptive
+# - kodi-inputstream-rtmp
diff --git a/roles/kodi/standalone/defaults/main.yml b/roles/kodi/standalone/defaults/main.yml
new file mode 100644
index 00000000..3995dc4d
--- /dev/null
+++ b/roles/kodi/standalone/defaults/main.yml
@@ -0,0 +1,12 @@
+---
+# kodi_standalone_support_packages_extra:
+# - i965-va-driver-shaders ## HW-Decode for older Intel GPU
+# - intel-media-va-driver-non-free ## HW-Decode for newer Intel GPU
+# - libgl1-mesa-dri ## missing dep for RaspiOS Kodi Package
+
+kodi_standalone_use_backports: no
+
+kodi_standalone_kodi_packages_extra:
+ #- kodi-repository-kodi ## raspios kodi package already includes this package, manually installing it breaks the install
+ - kodi-inputstream-adaptive
+ - kodi-inputstream-rtmp
diff --git a/roles/kodi/standalone/handlers/main.yml b/roles/kodi/standalone/handlers/main.yml
new file mode 100644
index 00000000..3880177e
--- /dev/null
+++ b/roles/kodi/standalone/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: restart kodi
+ service:
+ name: kodi
+ state: restarted
diff --git a/roles/kodi/standalone/tasks/main.yml b/roles/kodi/standalone/tasks/main.yml
new file mode 100644
index 00000000..5ac653fb
--- /dev/null
+++ b/roles/kodi/standalone/tasks/main.yml
@@ -0,0 +1,80 @@
+---
+- name: install support packages
+ apt:
+ name:
+ - policykit-1
+ - udisks2
+ - upower
+ - fonts-noto
+ - fonts-roboto
+ - fonts-roboto-fontface
+ state: present
+ notify: restart kodi
+
+- name: install extra support packages
+ when: kodi_standalone_support_packages_extra is defined
+ apt:
+ name: "{{ kodi_standalone_support_packages_extra }}"
+ state: present
+ notify: restart kodi
+
+- name: pin kodi packages to use backports
+ when: kodi_standalone_use_backports
+ copy:
+ content: |
+ Package: src:kodi {{ kodi_standalone_kodi_packages_extra | join(' ') }}
+ Pin: release n={{ ansible_distribution_release }}-backports
+ Pin-Priority: 990
+ dest: /etc/apt/preferences.d/kodi-backports.pref
+
+- name: install kodi packages
+ apt:
+ name: "{{ ['kodi'] | union(kodi_standalone_kodi_packages_extra) }}"
+ state: present
+ notify: restart kodi
+
+- name: add user for kodi
+ user:
+ name: kodi
+ state: present
+ password: "!"
+
+- name: make sure policykit config directories exist
+ loop:
+ - /etc/polkit-1/rules.d
+ - /etc/polkit-1/localauthority/50-local.d
+ file:
+ path: "{{ item }}"
+ state: directory
+
+- name: install policykit configuration
+ loop:
+ - src: polkit.rules.j2
+ dest: /etc/polkit-1/rules.d/kodi.rules
+ - src: polkit-legacy.pkla.j2
+ dest: /etc/polkit-1/localauthority/50-local.d/kodi.pkla
+ loop_control:
+ label: "{{ item.dest }}"
+ template:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ notify: restart kodi
+
+- name: install systemd service unit
+ template:
+ src: kodi.service.j2
+ dest: /etc/systemd/system/kodi.service
+ notify: restart kodi
+
+- name: make sure kodi service unit is enabled and started
+ systemd:
+ daemon_reload: yes
+ name: kodi.service
+ state: started
+ enabled: yes
+
+- name: make sure systemd default target is set to graphical.target
+ file:
+ src: /lib/systemd/system/graphical.target
+ dest: /etc/systemd/system/default.target
+ state: link
diff --git a/roles/kodi/standalone/templates/kodi.service.j2 b/roles/kodi/standalone/templates/kodi.service.j2
new file mode 100644
index 00000000..c349010e
--- /dev/null
+++ b/roles/kodi/standalone/templates/kodi.service.j2
@@ -0,0 +1,19 @@
+[Unit]
+Description=Kodi standalone (GBM)
+After=remote-fs.target systemd-user-sessions.service network-online.target nss-lookup.target sound.target bluetooth.target polkit.service upower.service mysqld.service lircd.service
+Wants=network-online.target polkit.service upower.service
+Conflicts=getty@tty1.service
+
+[Service]
+User=kodi
+Group=kodi
+SupplementaryGroups=video render audio input
+TTYPath=/dev/tty1
+ExecStart=/usr/bin/kodi --standalone
+ExecStop=/usr/bin/killall --user kodi --exact --wait kodi.bin
+Restart=always
+StandardInput=tty
+StandardOutput=journal
+
+[Install]
+Alias=display-manager.service
diff --git a/roles/kodi/standalone/templates/polkit-legacy.pkla.j2 b/roles/kodi/standalone/templates/polkit-legacy.pkla.j2
new file mode 100644
index 00000000..e1df2834
--- /dev/null
+++ b/roles/kodi/standalone/templates/polkit-legacy.pkla.j2
@@ -0,0 +1,4 @@
+[Allow kodi to ]
+Identity=unix-user:kodi
+Action=org.freedesktop.login1.*;org.freedesktop.udisks.*;org.freedesktop.udisks2.*
+ResultAny=yes
diff --git a/roles/kodi/standalone/templates/polkit.rules.j2 b/roles/kodi/standalone/templates/polkit.rules.j2
new file mode 100644
index 00000000..20f01b29
--- /dev/null
+++ b/roles/kodi/standalone/templates/polkit.rules.j2
@@ -0,0 +1,13 @@
+polkit.addRule(function(action, subject) {
+ if (subject.user == "kodi") {
+ if (action.id.indexOf("org.freedesktop.login1.") == 0) {
+ return polkit.Result.YES;
+ }
+ if (action.id.indexOf("org.freedesktop.udisks.") == 0) {
+ return polkit.Result.YES;
+ }
+ if (action.id.indexOf("org.freedesktop.udisks2.") == 0) {
+ return polkit.Result.YES;
+ }
+ }
+});