Skip to content

Commit

Permalink
Merge pull request #11 from jacktrip/feature/device-mgmt
Browse files Browse the repository at this point in the history
Update image to include zita to support multiple USB devices
  • Loading branch information
arctan5x authored May 6, 2022
2 parents 8efba18 + 57a275c commit 9a846be
Show file tree
Hide file tree
Showing 15 changed files with 135 additions and 54 deletions.
19 changes: 18 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,29 @@ on:
- main

env:
JKTP_IMAGE_FILES_URL: https://files.jacktrip.org/binaries/jacktrip-image-files-20210812.tar.gz
JKTP_IMAGE_FILES_URL: https://files.jacktrip.org/binaries/jacktrip-image-files-20220504.tar.gz

jobs:
build:
name: Build
runs-on: ubuntu-18.04
steps:
- name: Setup QEMU
uses: docker/setup-qemu-action@v1
- name: Setup docker buildx
uses: docker/setup-buildx-action@v1
- name: Checkout jacktrip-agent
uses: actions/checkout@v2
with:
repository: jacktrip/jacktrip-agent
ref: develop
path: jacktrip-agent
- name: Build jacktrip-agent
run: |
cd ${GITHUB_WORKSPACE}/jacktrip-agent
make agent-arm
env:
DOCKER_BUILDKIT: 1
- name: Checkout pi-gen
uses: actions/checkout@v2
with:
Expand All @@ -28,6 +44,7 @@ jobs:
run: |
cd ${GITHUB_WORKSPACE}/pi-gen
wget -q -O - ${JKTP_IMAGE_FILES_URL} | tar -C jacktrip-image/00-sys-tweaks/files -xzvf -
cp ${GITHUB_WORKSPACE}/jacktrip-agent/jacktrip-agent-arm jacktrip-image/00-sys-tweaks/files/jacktrip-agent
- name: Patch files
run: |
cd ${GITHUB_WORKSPACE}/pi-gen
Expand Down
2 changes: 1 addition & 1 deletion 00-sys-tweaks/00-packages-nr
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
libjack-jackd2-0 jackd2 librtaudio6 libqt5core5a libqt5network5 libqt5xml5 libqt5gui5 libqt5widgets5 libqt5concurrent5
ntp perl usbutils jq klick ecasound ecatools net-tools tcpdump iftop iperf ethtool i2c-tools
ntp perl usbutils jq klick ecasound ecatools net-tools tcpdump iftop iperf ethtool i2c-tools zita-ajbridge
69 changes: 38 additions & 31 deletions 00-sys-tweaks/01-run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,44 @@ ini_ensure '.*dtparam=i2c1=.*' 'dtparam=i2c1=on'

mkdir -p "${ROOTFS_DIR}/var/lib/jacktrip"

install -m 644 files/asound.snd_rpi_hifiberry_dacplusadc.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.snd_rpi_hifiberry_dacplusadcpro.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.snd_rpi_hifiberry_digi.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.audioinjector-pi-soundcard.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.USB\ Audio\ Device.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.USB\ PnP\ Sound\ Device.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/jamulus.ini "${ROOTFS_DIR}/var/lib/jacktrip"

install -m 755 files/jacktrip-init.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-beacon.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-patches.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-credentials.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-wait-online.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-agent "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jack_delay "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jack_capture "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jack-peak-meter "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/Jamulus "${ROOTFS_DIR}/usr/local/bin"

install -m 644 files/jacktrip-patches.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-credentials.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-init.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-agent.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-clock.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jamulus.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jack.service "${ROOTFS_DIR}/etc/systemd/system/"

install -m 644 files/dhcpcd-wait.conf "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/wait.conf"
# add root to audio group for jackd socket access
usermod -a -G audio root

install -m 644 files/asound.snd_rpi_hifiberry_dacplusadc.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.snd_rpi_hifiberry_dacplusadcpro.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.snd_rpi_hifiberry_digi.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.audioinjector-pi-soundcard.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.USB\ Audio\ Device.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/asound.USB\ PnP\ Sound\ Device.state "${ROOTFS_DIR}/var/lib/jacktrip"
install -m 644 files/jamulus.ini "${ROOTFS_DIR}/var/lib/jacktrip"

install -m 755 files/jacktrip-init.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-beacon.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-patches.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-credentials.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-wait-online.sh "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip-agent "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jacktrip "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jack_delay "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jack_capture "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/jack-peak-meter "${ROOTFS_DIR}/usr/local/bin"
install -m 755 files/Jamulus "${ROOTFS_DIR}/usr/local/bin"

# add JACK_PROMISCUOUS_SERVER to allow other users to access jackd - groups don't actually work so using the environment variable
# see: http://manpages.ubuntu.com/manpages/bionic/man1/jackd.1.html
install -m 644 files/jack_env.sh "${ROOTFS_DIR}/etc/profile.d/"
install -m 644 files/jacktrip-patches.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-credentials.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-init.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-agent.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip-clock.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jamulus.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jacktrip.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/jack.service "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/[email protected] "${ROOTFS_DIR}/etc/systemd/system/"
install -m 644 files/[email protected] "${ROOTFS_DIR}/etc/systemd/system/"

install -m 644 files/dhcpcd-wait.conf "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/wait.conf"

if [ -f "${ROOTFS_DIR}/etc/security/limits.d/audio.conf.disabled" ]; then
mv "${ROOTFS_DIR}/etc/security/limits.d/audio.conf.disabled" "${ROOTFS_DIR}/etc/security/limits.d/audio.conf"
Expand All @@ -60,7 +68,6 @@ mkdir -p "${ROOTFS_DIR}/etc/jacktrip"
echo $(date "+%Y%m%d99") > "${ROOTFS_DIR}/etc/jacktrip/patch"

sed -i "s,ExecStart=.*,ExecStart=/usr/local/bin/jacktrip-wait-online.sh," "${ROOTFS_DIR}/lib/systemd/system/ifupdown-wait-online.service"
sed -i "s,ExecStart=/usr/local/bin/jackd,ExecStart=/usr/bin/jackd," "${ROOTFS_DIR}/etc/systemd/system/jack.service"

cp "${ROOTFS_DIR}/lib/systemd/system/ntp.service" "${ROOTFS_DIR}/etc/systemd/system/ntp.service"
sed -i "s,^PrivateTmp=true,#PrivateTmp=true," "${ROOTFS_DIR}/etc/systemd/system/ntp.service"
Expand Down
3 changes: 2 additions & 1 deletion 00-sys-tweaks/files/jack.service
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ Nice=-20
IOSchedulingClass=realtime
IOSchedulingPriority=0
Environment="JACK_NO_AUDIO_RESERVATION=1"
Environment="JACK_PROMISCUOUS_SERVER=audio"
EnvironmentFile=/tmp/default/jack
ExecStart=/usr/local/bin/jackd $JACK_OPTS
ExecStart=/usr/bin/jackd $JACK_OPTS
Restart=always
RestartSec=5
StandardOutput=journal
Expand Down
1 change: 1 addition & 0 deletions 00-sys-tweaks/files/jack_env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export JACK_PROMISCUOUS_SERVER=audio
1 change: 1 addition & 0 deletions 00-sys-tweaks/files/jacktrip-agent.service
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ After=jacktrip-init.service
Type=simple
User=root
Group=root
Environment="JACK_PROMISCUOUS_SERVER=audio"
EnvironmentFile=-/etc/default/jacktrip-agent
ExecStart=/usr/local/bin/jacktrip-agent $AGENT_OPTS
Restart=always
Expand Down
2 changes: 1 addition & 1 deletion 00-sys-tweaks/files/jacktrip-beacon.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash
#
# JackTrip Raspberry Pi Image: Bluetooth Beacon Service
# Copyright (c) 2021 JackTrip Labs Inc
# Copyright (c) 2020-2022 JackTrip Labs, Inc.

MACADDR=`cat /sys/class/net/eth0/address`

Expand Down
2 changes: 1 addition & 1 deletion 00-sys-tweaks/files/jacktrip-credentials.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash
#
# JackTrip Raspberry Pi Image: Credentials Service
# Copyright (c) 2020-2021 JackTrip Labs, Inc.
# Copyright (c) 2020-2022 JackTrip Labs, Inc.

CONFIG_DIR=/etc/jacktrip
CREDENTIALS_FILE="${CONFIG_DIR}/credentials"
Expand Down
22 changes: 6 additions & 16 deletions 00-sys-tweaks/files/jacktrip-init.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash
#
# JackTrip Raspberry Pi Image: Initialization Service
# Copyright (c) 2020 JackTrip Foundation
# Copyright (c) 2020-2022 JackTrip Labs, Inc.

CONFIG_DIR=/etc/jacktrip
ETC_AVAHI_SERVICES_DIR=/etc/avahi/services
Expand Down Expand Up @@ -55,13 +55,6 @@ function check_hat {
fi
}

# detect supported alsa sound card
function detect_card {
# Assume that the first ALSA card is the one we want to use (if it exists)
DEVICETYPE=$(aplay -l 2> /dev/null | grep -m 1 'card [0-9]\+:' | sed 's/card [0-9]\+: \([^]]\+\) \[\([^]]\+\)\].*$/\2/')
DEVICENAME=$(aplay -l 2> /dev/null | grep -m 1 'card [0-9]\+:' | sed 's/card [0-9]\+: \([^]]\+\) \[\([^]]\+\)\].*$/\1/')
}

# detect supported sound card (prefer HAT)
function detect_hat {
check_hat
Expand Down Expand Up @@ -104,7 +97,6 @@ function detect_hat {
fi
fi

detect_card
if [ "$DEVICETYPE" != "" ]; then
return
fi
Expand Down Expand Up @@ -168,13 +160,11 @@ function update_device {
# Detect sound card
detect_hat

# Keep trying, so that a USB device can later be plugged in
while [ "$DEVICETYPE" == "" ]; do
echo "Unable to detect sound device"
leds_flip
sleep 5
detect_card
done
# Use dummy device if no sound card is detected
if [ "$DEVICETYPE" == "" ]; then
DEVICETYPE="dummy"
DEVICENAME="dummy"
fi

# Ensure config directory exists
if [ ! -d ${CONFIG_DIR} ]; then
Expand Down
2 changes: 1 addition & 1 deletion 00-sys-tweaks/files/jacktrip-patches.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash
#
# JackTrip Raspberry Pi Image: Update Patches
# Copyright (c) 2020 JackTrip Foundation
# Copyright (c) 2020-2022 JackTrip Labs, Inc.

CONFIG_DIR=/etc/jacktrip
PATCH_FILE="${CONFIG_DIR}/patch"
Expand Down
1 change: 1 addition & 0 deletions 00-sys-tweaks/files/jacktrip.service
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ IOSchedulingClass=realtime
IOSchedulingPriority=0
Environment="JACK_NO_AUDIO_RESERVATION=1"
Environment="JACK_NO_START_SERVER=1"
Environment="JACK_PROMISCUOUS_SERVER=audio"
EnvironmentFile=/tmp/default/jacktrip
ExecStartPre=jack_wait -w -t 5
ExecStart=/usr/local/bin/jacktrip $JACKTRIP_OPTS
Expand Down
1 change: 1 addition & 0 deletions 00-sys-tweaks/files/jamulus.service
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ IOSchedulingClass=realtime
IOSchedulingPriority=0
Environment="JACK_NO_AUDIO_RESERVATION=1"
Environment="JACK_NO_START_SERVER=1"
Environment="JACK_PROMISCUOUS_SERVER=audio"
ExecStartPre=jack_wait -w -t 5
EnvironmentFile=/tmp/default/jamulus
ExecStart=/usr/local/bin/Jamulus $JAMULUS_OPTS
Expand Down
31 changes: 31 additions & 0 deletions 00-sys-tweaks/files/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
[Unit]
Description=JackTrip-Zita-A2J-Connections, %I
After=network.target jack.service

[Service]
Type=simple
User=jacktrip
Group=audio
NoNewPrivileges=true
ProtectSystem=true
ProtectHome=true
Nice=-20
IOSchedulingClass=realtime
IOSchedulingPriority=0
ExecStartPre=/usr/bin/jack_wait -w -t 5
Environment="JACK_PROMISCUOUS_SERVER=audio"
EnvironmentFile=/tmp/default/zita-a2j-%I-conf
ExecStart=/usr/bin/zita-a2j $ZITA_OPTS
Restart=on-failure
SuccessExitStatus=SIGKILL
RestartSec=3
StandardOutput=journal
StandardError=inherit
SyslogIdentifier=zita-a2j-%I
LimitMEMLOCK=infinity
LimitRTPRIO=99
LimitNOFILE=200000
LimitNPROC=200000

[Install]
WantedBy=multi-user.target
31 changes: 31 additions & 0 deletions 00-sys-tweaks/files/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
[Unit]
Description=JackTrip-Zita-J2A-Connections, %I
After=network.target jack.service

[Service]
Type=simple
User=jacktrip
Group=audio
NoNewPrivileges=true
ProtectSystem=true
ProtectHome=true
Nice=-20
IOSchedulingClass=realtime
IOSchedulingPriority=0
ExecStartPre=/usr/bin/jack_wait -w -t 5
Environment="JACK_PROMISCUOUS_SERVER=audio"
EnvironmentFile=/tmp/default/zita-j2a-%I-conf
ExecStart=/usr/bin/zita-j2a $ZITA_OPTS
Restart=on-failure
SuccessExitStatus=SIGKILL
RestartSec=3
StandardOutput=journal
StandardError=inherit
SyslogIdentifier=zita-j2a-%I
LimitMEMLOCK=infinity
LimitRTPRIO=99
LimitNOFILE=200000
LimitNPROC=200000

[Install]
WantedBy=multi-user.target
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ git clone -b buster https://github.com/RPi-Distro/pi-gen.git
cd pi-gen && git clone [email protected]:jacktrip/jacktrip-image.git
# Grab the latest binary files
wget -q -O - https://files.jacktrip.org/binaries/jacktrip-image-files-20220204.tar.gz |tar -C jacktrip-image/00-sys-tweaks/files -xzvf -
wget -q -O - https://files.jacktrip.org/binaries/jacktrip-image-files-20220504.tar.gz |tar -C jacktrip-image/00-sys-tweaks/files -xzvf -
# Copy pi-gen config file
cp jacktrip-image/config .
Expand Down

0 comments on commit 9a846be

Please sign in to comment.