Files
ansible/roles/pi_shairport/tasks/main.yml
Martin Bauer a0546f5fa6 Recover from half-done installs and missing devices instead of failing for good
- pi_shairport: on trixie systemd.pc moved into systemd-dev, so configure found no
  unit directory and `make install` died on an empty `install -d` - after it had
  already installed the binary. `creates:` then saw the binary and never retried, and
  the next tasks failed on the missing unit. Install systemd-dev on trixie, and key
  `creates:` on the unit file.
- pi_irserver: with the IRTrans receiver unplugged at boot, irserver exited at once and
  stayed failed. Restart it every 10s with no start limit until the device shows up.
- pi_modern_shell_env: get_url sent a conditional request to the oh-my-posh CDN on every
  run, so a TLS handshake timeout there failed the whole play with the binary already
  installed. Only download it when it is missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:22:05 +02:00

44 lines
1.7 KiB
YAML

---
- name: Apt install dependencies
ansible.builtin.apt:
cache_valid_time: 7200
state: present
# systemd-dev: --with-systemd takes the unit directory from systemd.pc, which trixie
# moved out of the systemd package. Without it `make install` fails right after
# installing the binary, with an empty `install -d`.
name: >-
{{ ['build-essential', 'git', 'xmltoman', 'autoconf', 'automake', 'libtool',
'libpopt-dev', 'libconfig-dev', 'libasound2-dev', 'avahi-daemon',
'libavahi-client-dev', 'libssl-dev', 'libsoxr-dev']
+ (['systemd-dev'] if ansible_facts.distribution_major_version | int >= 13 else []) }}
- name: Build and Install Shairport sync (may take a while)
ansible.builtin.script: "build-shairport-sync.sh ${shairport_sync_version}"
args:
# The unit file rather than the binary: make install puts the binary in place
# first, so a build that failed halfway would otherwise never be retried.
creates: /lib/systemd/system/shairport-sync.service
notify: Restart shairport-sync
- name: Copy config
ansible.builtin.template:
src: shairport-sync.conf
dest: /etc/shairport-sync.conf
mode: "0644"
notify: Restart shairport-sync
- name: Modify service file to run as root
ansible.builtin.lineinfile:
path: /lib/systemd/system/shairport-sync.service
regexp: "^#?User="
line: "User=root"
notify: Restart shairport-sync
- name: Enable shairport-sync autostart
ansible.builtin.systemd:
name: shairport-sync
state: started
enabled: "yes"
daemon_reload: "yes"
- name: Add to sysdweb
ansible.builtin.include_role:
name: pi_sysdweb
vars:
pi_sysdweb_name: shairport-sync