summaryrefslogtreecommitdiff
path: root/roles/kodi
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2022-09-11 22:49:49 +0200
committerChristian Pointner <equinox@spreadspace.org>2022-09-11 22:49:49 +0200
commitb624aeb2dca95f26c24a8d96b425fcb0b9153f39 (patch)
tree94b1ed289b6a14aa59598e8bce5e8d85ab35ae53 /roles/kodi
parentsome more tweasks for raspi based kodi (diff)
add role for kodi standalone deployments
Diffstat (limited to 'roles/kodi')
-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
6 files changed, 133 insertions, 0 deletions
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;
+ }
+ }
+});