From 23ecb54d0b05404997ec2f9c08c02551196bffa1 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 1 Apr 2024 17:33:51 +0200 Subject: add streaming/mpv-headless role (needs more testing) --- dan/ele-tarvos.yml | 15 +---- inventory/host_vars/ele-tarvos.yml | 49 +++++--------- roles/streaming/mpv-headless/defaults/main.yml | 10 +++ roles/streaming/mpv-headless/tasks/main.yml | 93 ++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 45 deletions(-) create mode 100644 roles/streaming/mpv-headless/defaults/main.yml create mode 100644 roles/streaming/mpv-headless/tasks/main.yml 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" -- cgit v1.2.3