summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2024-04-01 17:33:51 +0200
committerChristian Pointner <equinox@spreadspace.org>2024-04-01 17:33:51 +0200
commit23ecb54d0b05404997ec2f9c08c02551196bffa1 (patch)
tree40b8b8446b537f570e37c7591bc14e4c5e17b22d
parentele-media: upgrade kubernetes to 1.29.3 (diff)
add streaming/mpv-headless role (needs more testing)
-rw-r--r--dan/ele-tarvos.yml15
-rw-r--r--inventory/host_vars/ele-tarvos.yml49
-rw-r--r--roles/streaming/mpv-headless/defaults/main.yml10
-rw-r--r--roles/streaming/mpv-headless/tasks/main.yml93
4 files changed, 122 insertions, 45 deletions
diff --git a/dan/ele-tarvos.yml b/dan/ele-tarvos.yml
index f665de63..d034d970 100644
--- a/dan/ele-tarvos.yml
+++ b/dan/ele-tarvos.yml
@@ -12,17 +12,4 @@
- name: Payload Setup
hosts: ele-tarvos
roles:
- - role: apt-repo/spreadspace
- - role: ws/base
- - role: core/admin-users
- post_tasks:
- - name: install script to play videos fullscreen
- copy:
- dest: /usr/local/bin/play-video.sh
- mode: 0755
- content: |
- #!/bin/bash
-
- export DISPLAY=:0.0
- exec mpv --vo=gpu --keep-open=yes --fs --osd-level=0 \
- --term-status-msg='${?pause==yes:(Paused) }${time-remaining} ${time-pos} / ${duration} (${percent-pos}%) A-V: ${avsync}' "$@"
+ - role: streaming/mpv-headless
diff --git a/inventory/host_vars/ele-tarvos.yml b/inventory/host_vars/ele-tarvos.yml
index b467783b..ebdc1bde 100644
--- a/inventory/host_vars/ele-tarvos.yml
+++ b/inventory/host_vars/ele-tarvos.yml
@@ -1,11 +1,4 @@
---
-ubuntu_autoinstall_locale: de_AT
-ubuntu_autoinstall_keyboard_layout: de
-ubuntu_autoinstall_keyboard_variant: nodeadkeys
-ubuntu_autoinstall_timezone: Europe/Vienna
-
-ubuntu_autoinstall_desktop: xubuntu
-
install:
efi: no
disks:
@@ -30,6 +23,7 @@ install:
mountpoint: /home
kernel_cmdline:
- "consoleblank=0"
+ - "video=1920x1080@25"
network:
nameservers: "{{ network_zones.lan.dns }}"
@@ -41,30 +35,23 @@ network:
interfaces:
- *_network_primary_
-
-apt_repo_components:
- - main
- - restricted
- - universe
- - multiverse
-
-
base_modules_blacklist: "{{ base_modules_blacklist_all_but_sound }}"
-admin_users_host:
- - equinox
-
-ws_base_extra_packages:
- - chromium-browser
-
-ws_base_lightdm_defaults:
- autologin-user: elevate
- autologin-user-timeout: 0
-
-ws_base_xrandr_setup_script: |
- #!/bin/bash
-
- xrandr --output HDMI-1 --mode 1920x1080 --rate 50 --primary
-
- exit 0
+apt_repo_components:
+ - main
+ - contrib
+ - non-free-firmware
+ - non-free
+
+mpv_headless_media_storage:
+ type: lvm
+ vg: "{{ host_name }}"
+ lv: media
+ size: 20G
+ fs: ext4
+
+#mpv_headless_audio_device: "alsa/default"
+mpv_headless_audio_device: "alsa/hdmi"
+mpv_headless_video_mode: "1920x1080@25.00"
+#mpv_headless_video_mode: "1920x1080@50"
diff --git a/roles/streaming/mpv-headless/defaults/main.yml b/roles/streaming/mpv-headless/defaults/main.yml
new file mode 100644
index 00000000..b1ab265f
--- /dev/null
+++ b/roles/streaming/mpv-headless/defaults/main.yml
@@ -0,0 +1,10 @@
+---
+# mpv_headless_media_storage:
+# type: ...
+
+mpv_headless_audio_device: "alsa/hdmi"
+mpv_headless_video_mode: "1920x1080@50"
+
+mpv_headless_play_script: |
+ #!/bin/sh
+ exec mpv --audio-device='{{ mpv_headless_audio_device }}' --vo=gpu --hwdec=vaapi --gpu-context=drm --drm-mode='{{ mpv_headless_video_mode }}' $@
diff --git a/roles/streaming/mpv-headless/tasks/main.yml b/roles/streaming/mpv-headless/tasks/main.yml
new file mode 100644
index 00000000..064efeb2
--- /dev/null
+++ b/roles/streaming/mpv-headless/tasks/main.yml
@@ -0,0 +1,93 @@
+---
+- name: install packages
+ apt:
+ name:
+ - alsa-utils
+ - intel-gpu-tools
+ - vainfo
+ - va-driver-all
+ - firmware-linux
+ - ffmpeg
+ - mpv
+ state: present
+
+- name: install non-free vaapi drivers
+ when: "'non-free' in (apt_repo_components | default([])) "
+ apt:
+ name:
+ - i965-va-driver-shaders
+ - intel-media-va-driver-non-free
+ state: present
+
+- name: create player user
+ user:
+ name: player
+ home: /var/lib/player
+ create_home: no
+ shell: /bin/sh
+ system: yes
+ groups:
+ - video
+ - render
+ - audio
+ state: present
+
+- name: create empty user dir for player
+ file:
+ path: /var/lib/player
+ state: directory
+ owner: player
+ group: player
+
+- name: install .profile
+ copy:
+ content: |
+ if [ -z "$DISPLAY" ]; then
+ case $(tty) in
+ /dev/tty1)
+ setterm --clear=all --cursor off
+ sleep inf
+ ;;
+ esac
+ fi
+ dest: /var/lib/player/.profile
+ owner: player
+ group: player
+
+- name: install play script
+ copy:
+ content: "{{ mpv_headless_play_script }}"
+ dest: /var/lib/player/play
+ owner: player
+ group: player
+ mode: 0755
+
+- name: create override direcotry for getty@tty1 service unit
+ file:
+ path: /etc/systemd/system/getty@tty1.service.d
+ state: directory
+
+- name: generate override for getty@tty1 service unit
+ copy:
+ content: |
+ [Service]
+ ExecStart=
+ ExecStart=-/sbin/agetty --autologin player --noclear %I $TERM
+ RestartSec=2
+ StartLimitInterval=5
+ StartLimitBurst=3
+ dest: /etc/systemd/system/getty@tty1.service.d/autologin.conf
+
+- name: make sure getty@tty1 service unit is enabled and started
+ systemd:
+ daemon_reload: yes
+ name: getty@tty1.service
+ state: started
+ enabled: yes
+
+- name: prepare storage volume for /srv/media
+ when: mpv_headless_media_storage is defined
+ vars:
+ storage_volume: "{{ mpv_headless_media_storage | combine({'dest': '/srv/media'}) }}"
+ include_role:
+ name: "storage/{{ mpv_headless_media_storage.type }}/volume"