diff --git a/group_vars/music.yaml b/group_vars/music.yaml index 457597a..123da07 100644 --- a/group_vars/music.yaml +++ b/group_vars/music.yaml @@ -19,3 +19,6 @@ nginx_sites: music_domain: music.bitlair.nl acme_san_domains: - [ music.bitlair.nl ] + +music_bitpanel_host: bitpanel.bitlair.nl +music_bitpanel_port: 1337 diff --git a/roles/music/defaults/main.yaml b/roles/music/defaults/main.yaml index d08ae0b..91ebc45 100644 --- a/roles/music/defaults/main.yaml +++ b/roles/music/defaults/main.yaml @@ -1,5 +1,7 @@ music_audio_user: audio +music_audio_user_id: 998 music_audio_group: audio +music_bitvis_user: bitvis music_librespot_user: librespot music_trollibox_user: trollibox diff --git a/roles/music/handlers/main.yaml b/roles/music/handlers/main.yaml index d4465ab..ad03474 100644 --- a/roles/music/handlers/main.yaml +++ b/roles/music/handlers/main.yaml @@ -2,6 +2,18 @@ - ansible.builtin.import_tasks: file: ../../common/handlers/main.yaml +- name: restart bitvis + ansible.builtin.systemd: + name: bitvis + state: restarted + daemon_reload: true + +- name: restart bitvis-tee + ansible.builtin.systemd: + name: bitvis-tee + state: restarted + daemon_reload: true + - name: restart mpd ansible.builtin.systemd: name: mpd diff --git a/roles/music/tasks/base.yaml b/roles/music/tasks/base.yaml index 7961b70..a10cfca 100644 --- a/roles/music/tasks/base.yaml +++ b/roles/music/tasks/base.yaml @@ -15,6 +15,19 @@ name: audio system: true +- name: Add {{ music_audio_user }} user + user: + name: "{{ music_audio_user }}" + uid: "{{ music_audio_user_id }}" + system: true + groups: + - audio + +- name: Enable linger for {{ music_audio_user }} + copy: + dest: "/var/lib/systemd/linger/{{ music_audio_user }}" + content: "" + - name: Set PULSE_SERVER env var for all shells copy: dest: /etc/profile.d/pulse-server.sh diff --git a/roles/music/tasks/bitvis.yaml b/roles/music/tasks/bitvis.yaml new file mode 100644 index 0000000..e88363a --- /dev/null +++ b/roles/music/tasks/bitvis.yaml @@ -0,0 +1,50 @@ +--- +- name: Install bitvis dependencies + apt: + name: + - bitvis + - bitvis-http + +- name: Create bitvis user + user: + name: "{{ music_bitvis_user }}" + system: true + home: /var/lib/bitvis + groups: + - "{{ music_audio_group }}" + +- name: Install bitvis-tee + ansible.builtin.template: + src: bitvis-tee.sh + dest: /opt/bitvis-tee.sh + owner: root + group: root + mode: 0755 + notify: restart {{ item }} + with_items: + - bitvis + - bitvis-tee + +- name: Install service file + ansible.builtin.template: + src: "{{ item }}.service" + dest: /etc/systemd/system/{{ item }}.service + owner: root + group: root + mode: 0644 + notify: restart {{ item }} + with_items: + - bitvis + - bitvis-tee + +- name: Enable service + ansible.builtin.systemd: + name: "{{ item }}" + state: started + enabled: true + daemon_reload: true + with_items: + - bitvis + - bitvis-tee + +- meta: flush_handlers diff --git a/roles/music/tasks/main.yaml b/roles/music/tasks/main.yaml index e8105ee..ced3697 100644 --- a/roles/music/tasks/main.yaml +++ b/roles/music/tasks/main.yaml @@ -11,6 +11,18 @@ tags: - music_mpd +- name: Bitvis + ansible.builtin.import_tasks: + file: bitvis.yaml + tags: + - music_bitvis + +- name: Import airplay + ansible.builtin.import_tasks: + file: airplay.yaml + tags: + - music_airplay + - name: Import trollibox ansible.builtin.import_tasks: file: trollibox.yaml diff --git a/roles/music/templates/bitvis-tee.service b/roles/music/templates/bitvis-tee.service new file mode 100644 index 0000000..6516b58 --- /dev/null +++ b/roles/music/templates/bitvis-tee.service @@ -0,0 +1,15 @@ +[Unit] +Description=Multiplexer for bitvis +Before=bitvis.service +After=bitvis-http.service +Requires=bitvis-http.service +PropagatesStopTo=bitvis.service +StopPropagatedFrom=bitvis.service + +[Service] +Type=forking +ExecStart=/usr/bin/screen -dmS bitvis-tee /opt/bitvis-tee.sh +User={{ music_bitvis_user }} + +[Install] +WantedBy=multi-user.target diff --git a/roles/music/templates/bitvis-tee.sh b/roles/music/templates/bitvis-tee.sh new file mode 100644 index 0000000..275dc25 --- /dev/null +++ b/roles/music/templates/bitvis-tee.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# {{ ansible_managed }} + +loop=`mktemp --suffix -bitvis` +mkfifo -f "$loop" +trap "rm -f $loop" EXIT TERM + +cat "$loop" | while true; do nc -4 -w 2 localhost 1338; done & +nc -klp 1337 | tee "$loop" | while true; do nc -w 2 {{ music_bitpanel_host }} {{ music_bitpanel_port }}; done diff --git a/roles/music/templates/bitvis.service b/roles/music/templates/bitvis.service new file mode 100644 index 0000000..a4cc1dd --- /dev/null +++ b/roles/music/templates/bitvis.service @@ -0,0 +1,16 @@ +[Unit] +Description=Audio visualizer for the bitpanel +After=network.target + +[Service] +Type=simple +Restart=always +RestartSec=10s +ExecStart=/usr/bin/pw-jack bitvis -a localhost -p 1337 -m localhost -o 6600 +ExecStartPost=/usr/bin/sleep 4 +ExecStartPost=/usr/bin/pw-link alsa_output.usb-ASUS_Xonar_U7_MKII-00.analog-stereo:monitor_FR bitvis:input +User={{ music_audio_user }} +Environment="XDG_RUNTIME_DIR=/run/user/{{ music_audio_user_id }}" + +[Install] +WantedBy=multi-user.target