diff --git a/.build/software/shairport-sync/container_build.bash b/.build/software/shairport-sync/container_build.bash index 330187de1c..f01582ed90 100755 --- a/.build/software/shairport-sync/container_build.bash +++ b/.build/software/shairport-sync/container_build.bash @@ -43,7 +43,7 @@ do esac shift done -[[ $DISTRO =~ ^'buster'|'bullseye'|'bookworm'$ ]] || { G_DIETPI-NOTIFY 1 "Invalid distro \"$DISTRO\" passed, aborting..."; exit 1; } +[[ $DISTRO =~ ^('buster'|'bullseye'|'bookworm')$ ]] || { G_DIETPI-NOTIFY 1 "Invalid distro \"$DISTRO\" passed, aborting..."; exit 1; } case $ARCH in 'armv6l') image="DietPi_Container-ARMv6-${DISTRO^}" arch=1;; 'armv7l') image="DietPi_Container-ARMv7-${DISTRO^}" arch=2;; diff --git a/.build/software/squeezelite/build.bash b/.build/software/squeezelite/build.bash index efb4d8e550..9e578c6cba 100755 --- a/.build/software/squeezelite/build.bash +++ b/.build/software/squeezelite/build.bash @@ -138,13 +138,21 @@ DEPS_APT_VERSIONED=${DEPS_APT_VERSIONED%,} # shellcheck disable=SC2001 grep -q 'raspbian' /etc/os-release && DEPS_APT_VERSIONED=$(sed 's/+rp[it][0-9]\+[^)]*)/)/g' <<< "$DEPS_APT_VERSIONED") || DEPS_APT_VERSIONED=$(sed 's/+b[0-9]\+)/)/g' <<< "$DEPS_APT_VERSIONED") +# - Obtain version +version="$(mawk -F\" '/MAJOR_VERSION/{print $2;exit}' squeezelite-master/squeezelite.h).$(mawk -F\" '/MINOR_VERSION/{print $2;exit}' squeezelite-master/squeezelite.h)-$(mawk -F\" '/MICRO_VERSION/{print $2;exit}' squeezelite-master/squeezelite.h)" +G_EXEC curl -sSfo package.deb "https://dietpi.com/downloads/binaries/$G_DISTRO_NAME/squeezelite_$G_HW_ARCH_NAME.deb" +old_version=$(dpkg-deb -f package.deb Version) +G_EXEC rm package.deb +suffix=${old_version#*-dietpi} +[[ $old_version == "$version-"* ]] && suffix="dietpi$((suffix+1))" || suffix="dietpi1" + # - control cat << _EOF_ > "$DIR/DEBIAN/control" Package: squeezelite -Version: $(mawk -F\" '/MAJOR_VERSION/{print $2;exit}' squeezelite-master/squeezelite.h).$(mawk -F\" '/MINOR_VERSION/{print $2;exit}' squeezelite-master/squeezelite.h)-$(mawk -F\" '/MICRO_VERSION/{print $2;exit}' squeezelite-master/squeezelite.h)-dietpi1 +Version: $version-$suffix Architecture: $(dpkg --print-architecture) Maintainer: MichaIng -Date: $(date '+%a, %d %b %Y %T %z') +Date: $(date -u '+%a, %d %b %Y %T %z') Standards-Version: 4.6.2.0 Installed-Size: $(du -sk "$DIR" | mawk '{print $1}') Depends:$DEPS_APT_VERSIONED diff --git a/.build/software/squeezelite/container_build.bash b/.build/software/squeezelite/container_build.bash index 88c9ae2ba1..44d7019178 100755 --- a/.build/software/squeezelite/container_build.bash +++ b/.build/software/squeezelite/container_build.bash @@ -43,18 +43,13 @@ do esac shift done -case $DISTRO in - 5) distro='buster';; - 6) distro='bullseye';; - 7) distro='bookworm';; - *) G_DIETPI-NOTIFY 1 "Invalid distro \"$DISTRO\" passed, aborting..."; exit 1;; -esac +[[ $DISTRO =~ ^('buster'|'bullseye'|'bookworm')$ ]] || { G_DIETPI-NOTIFY 1 "Invalid distro \"$DISTRO\" passed, aborting..."; exit 1; } case $ARCH in - 1) image="DietPi_Container-ARMv6-${distro^}" arch='armv6l';; - 2) image="DietPi_Container-ARMv7-${distro^}" arch='armv7l';; - 3) image="DietPi_Container-ARMv8-${distro^}" arch='aarch64';; - 10) image="DietPi_Container-x86_64-${distro^}" arch='x86_64';; - 11) image='DietPi_Container-RISC-V-Sid' arch='riscv64';; + 'armv6l') image="DietPi_Container-ARMv6-${DISTRO^}" arch=1;; + 'armv7l') image="DietPi_Container-ARMv7-${DISTRO^}" arch=2;; + 'aarch64') image="DietPi_Container-ARMv8-${DISTRO^}" arch=3;; + 'x86_64') image="DietPi_Container-x86_64-${DISTRO^}" arch=10;; + 'riscv64') image='DietPi_Container-RISC-V-Sid' arch=11;; *) G_DIETPI-NOTIFY 1 "Invalid architecture \"$ARCH\" passed, aborting..."; exit 1;; esac @@ -62,7 +57,7 @@ esac # Dependencies ########################################## apackages=('7zip' 'parted' 'fdisk' 'systemd-container') -(( $G_HW_ARCH == $ARCH || ( $G_HW_ARCH < 10 && $G_HW_ARCH > $ARCH ) )) || apackages+=('qemu-user-static' 'binfmt-support') +(( $G_HW_ARCH == $arch || ( $G_HW_ARCH < 10 && $G_HW_ARCH > $arch ) )) || apackages+=('qemu-user-static' 'binfmt-support') G_AG_CHECK_INSTALL_PREREQ "${apackages[@]}" ########################################## @@ -92,7 +87,7 @@ G_EXEC mount "${FP_LOOP}p1" rootfs G_CONFIG_INJECT 'AUTO_SETUP_AUTOMATED=' 'AUTO_SETUP_AUTOMATED=1' rootfs/boot/dietpi.txt # Force ARMv6 arch on Raspbian -(( $ARCH == 1 )) && echo 'sed -i -e '\''/^G_HW_ARCH=/c\G_HW_ARCH=1'\'' -e '\''/^G_HW_ARCH_NAME=/c\G_HW_ARCH_NAME=armv6l'\'' /boot/dietpi/.hw_model' > rootfs/boot/Automation_Custom_PreScript.sh +(( $arch == 1 )) && echo 'sed -i -e '\''/^G_HW_ARCH=/c\G_HW_ARCH=1'\'' -e '\''/^G_HW_ARCH_NAME=/c\G_HW_ARCH_NAME=armv6l'\'' /boot/dietpi/.hw_model' > rootfs/boot/Automation_Custom_PreScript.sh # Avoid DietPi-Survey uploads to not mess with the statistics G_EXEC rm rootfs/root/.ssh/known_hosts @@ -109,7 +104,7 @@ cat << _EOF_ > rootfs/boot/Automation_Custom_Script.sh || exit 1 #!/bin/dash echo '[ INFO ] Running Squeezelite build script...' bash -c "\$(curl -sSf 'https://raw.githubusercontent.com/$G_GITOWNER/DietPi/$G_GITBRANCH/.build/software/squeezelite/build.bash')" -mv -v '/tmp/squeezelite_$arch.deb' / +mv -v '/tmp/squeezelite_$ARCH.deb' / poweroff _EOF_ @@ -117,5 +112,5 @@ _EOF_ # Boot container ########################################## systemd-nspawn -bD rootfs -[[ -f rootfs/squeezelite_$arch.deb ]] || exit 1 +[[ -f rootfs/squeezelite_$ARCH.deb ]] || exit 1 } diff --git a/.conf/desktop/lxqt/lxqt-bookworm.7z b/.conf/desktop/lxqt/lxqt-bookworm.7z new file mode 100644 index 0000000000..ddbf415a27 Binary files /dev/null and b/.conf/desktop/lxqt/lxqt-bookworm.7z differ diff --git a/.conf/desktop/lxqt/lxqt-stretch.7z b/.conf/desktop/lxqt/lxqt-stretch.7z deleted file mode 100644 index 119d1045a9..0000000000 Binary files a/.conf/desktop/lxqt/lxqt-stretch.7z and /dev/null differ diff --git a/.conf/dps_59/raspimjpeg.sh b/.conf/dps_59/raspimjpeg.sh index 3f2cea2948..fcfdf06a94 100644 --- a/.conf/dps_59/raspimjpeg.sh +++ b/.conf/dps_59/raspimjpeg.sh @@ -1,4 +1,4 @@ -#!/bin/dash +#!/bin/dash -e { #//////////////////////////////////// # DietPi Raspimjpeg control Script diff --git a/.github/workflows/dietpi-software.bash b/.github/workflows/dietpi-software.bash index 223e31b509..35883db7ec 100644 --- a/.github/workflows/dietpi-software.bash +++ b/.github/workflows/dietpi-software.bash @@ -47,152 +47,169 @@ do esac shift done -[[ $DISTRO =~ ^'buster'|'bullseye'|'bookworm'$ ]] || { G_DIETPI-NOTIFY 1 "Invalid distro \"$DISTRO\" passed, aborting..."; exit 1; } +[[ $DISTRO =~ ^('buster'|'bullseye'|'bookworm')$ ]] || { G_DIETPI-NOTIFY 1 "Invalid distro \"$DISTRO\" passed, aborting..."; exit 1; } case $ARCH in - 'armv6l') image="DietPi_Container-ARMv6-${DISTRO^}";; - 'armv7l') image="DietPi_Container-ARMv7-${DISTRO^}";; - 'aarch64') image="DietPi_Container-ARMv8-${DISTRO^}";; - 'x86_64') image="DietPi_Container-x86_64-${DISTRO^}";; - 'riscv64') image="DietPi_Container-RISC-V-Sid";; + 'armv6l') image="DietPi_Container-ARMv6-${DISTRO^}" arch=1;; + 'armv7l') image="DietPi_Container-ARMv7-${DISTRO^}" arch=2;; + 'aarch64') image="DietPi_Container-ARMv8-${DISTRO^}" arch=3;; + 'x86_64') image="DietPi_Container-x86_64-${DISTRO^}" arch=10;; + 'riscv64') image="DietPi_Container-RISC-V-Sid" arch=11;; *) G_DIETPI-NOTIFY 1 "Invalid architecture \"$ARCH\" passed, aborting..."; exit 1;; esac [[ $SOFTWARE =~ ^[0-9\ ]+$ ]] || { G_DIETPI-NOTIFY 1 "Invalid software list \"$SOFTWARE\" passed, aborting..."; exit 1; } -[[ $RPI =~ ^|'false'|'true'$ ]] || { G_DIETPI-NOTIFY 1 "Invalid RPi flag \"$RPI\" passed, aborting..."; exit 1; } +[[ $RPI =~ ^(|'false'|'true')$ ]] || { G_DIETPI-NOTIFY 1 "Invalid RPi flag \"$RPI\" passed, aborting..."; exit 1; } + +# Workaround for "Could not execute systemctl: at /usr/bin/deb-systemd-invoke line 145." during Apache2 DEB postinst in 32-bit ARM Bookworm container: https://lists.ubuntu.com/archives/foundations-bugs/2022-January/467253.html +[[ $SOFTWARE =~ (^| )83( |$) && $DISTRO == 'bookworm' ]] && (( $arch < 3 )) && { echo '[ WARN ] Installing Lighttpd instead of Apache due to a bug in 32-bit ARM containers'; SOFTWARE=$(sed -E 's/(^| )83( |$)/\184\2/g' <<< "$SOFTWARE"); } +# Remove Roon Extension Manager and Portainer from test installs as Docker cannot start in systemd containers +[[ $SOFTWARE =~ (^| )(86|185)( |$) ]] && { echo '[ WARN ] Removing Roon Extension Manager and Portainer from test installs as Docker cannot start in systemd containers'; SOFTWARE=$(sed -E 's/(^| )(86|186)( |$)/\1\3/g' <<< "$SOFTWARE"); } ########################################## # Create service and port lists ########################################## -aSERVICES=() aPORTS=() aCOMMANDS=() +aSERVICES=() aTCP=() aUDP=() aCOMMANDS=() aDELAY=() Process_Software() { local i for i in "$@" do case $i in - 'webserver') [[ $SOFTWARE =~ (^| )8[345]( |$) ]] || aSERVICES[83]='apache2' aPORTS[80]='tcp';; - 152) aSERVICES[i]='avahi-daemon' aPORTS[5353]='udp';; - 104) aSERVICES[i]='dropbear' aPORTS[22]='tcp';; - 105) aSERVICES[i]='ssh' aPORTS[22]='tcp';; - 194) aSERVICES[i]='postgresql';; - 29) aSERVICES[i]='xrdp' aPORTS[3389]='tcp';; - 30) aSERVICES[i]='nxserver' aPORTS[4000]='tcp';; - 200) aSERVICES[i]='dietpi-dashboard' aPORTS[5252]='tcp';; - 99) aSERVICES[i]='node_exporter' aPORTS[9100]='tcp';; - 44) aSERVICES[i]='transmission-daemon' aPORTS[9091]='tcp';; - 94) aSERVICES[i]='proftpd' aPORTS[21]='tcp';; - 96) aSERVICES[i]='smbd' aPORTS[139]='tcp' aPORTS[445]='tcp';; - 95) aSERVICES[i]='vsftpd' aPORTS[21]='tcp';; - 109) aSERVICES[i]='nfs-kernel-server' aPORTS[2049]='tcp';; - 83) aSERVICES[i]='apache2' aPORTS[80]='tcp';; - 85) aSERVICES[i]='nginx' aPORTS[80]='tcp';; - 84) aSERVICES[i]='lighttpd' aPORTS[80]='tcp';; - 88) aSERVICES[i]='mariadb' aPORTS[3306]='tcp';; - 91) aSERVICES[i]='redis-server' aPORTS[6379]='tcp';; - 89) case $DISTRO in 'buster') aSERVICES[i]='php7.3-fpm';; 'bullseye') aSERVICES[i]='php7.4-fpm';; *) aSERVICES[i]='php8.2-fpm';; esac;; - 125) aSERVICES[i]='synapse' aPORTS[8008]='tcp';; - 128) aSERVICES[i]='mpd' aPORTS[6600]='tcp';; - 133) aSERVICES[i]='yacy' aPORTS[8090]='tcp';; - 186) aSERVICES[i]='ipfs' aPORTS[5003]='tcp' aPORTS[8087]='tcp';; - 16) aSERVICES[i]='microblog-pub' aPORTS[8007]='tcp';; - 2) aSERVICES[i]='fahclient' aPORTS[7396]='tcp';; - 32) aSERVICES[i]='ympd' aPORTS[1337]='tcp';; - 148) aSERVICES[i]='mympd' aPORTS[1333]='tcp';; - 121) aSERVICES[i]='roonbridge' aPORTS[9003]='udp';; - 118) aSERVICES[i]='mopidy' aPORTS[6680]='tcp';; - 39) aSERVICES[i]='minidlna' aPORTS[8200]='tcp';; - 111) aSERVICES[i]='urbackupsrv' aPORTS[55414]='tcp';; + 'webserver') [[ $SOFTWARE =~ (^| )8[345]( |$) ]] || aSERVICES[84]='lighttpd' aTCP[84]='80';; # Lighttpd as default due to above bug in 32-bit ARM Bookworm containers + 0) aCOMMANDS[i]='ssh -V';; + 1) aCOMMANDS[i]='smbclient -V';; + 2) aSERVICES[i]='fahclient' aTCP[i]='7396';; + 7) aCOMMANDS[i]='ffmpeg -version';; + 9) aCOMMANDS[i]='node -v';; + 16) aSERVICES[i]='microblog-pub' aTCP[i]='8007';; + 17) aCOMMANDS[i]='git -v';; + 28|120) aSERVICES[i]='vncserver' aTCP[i]='5901';; + 29) aSERVICES[i]='xrdp' aTCP[i]='3389';; + 30) aSERVICES[i]='nxserver' aTCP[i]='4000';; + 32) aSERVICES[i]='ympd' aTCP[i]='1337';; + 33) (( $arch == 10 )) && aSERVICES[i]='airsonic' aTCP[i]='8080' aDELAY[i]=30;; # Fails in QEMU-emulated containers, probably due to missing device access + 35) aSERVICES[i]='logitechmediaserver' aTCP[i]='9000';; + 36) aCOMMANDS[i]='squeezelite -t';; # Service listens on random high UDP port and exits if no audio device has been found, which does not exist on GitHub Actions runners, respectively within the containers + 37) aSERVICES[i]='shairport-sync' aTCP[i]='5000';; # AirPlay 2 would be TCP port 7000 + 39) aSERVICES[i]='minidlna' aTCP[i]='8200';; + 41) aSERVICES[i]='emby-server' aTCP[i]='8096';; + 42) aSERVICES[i]='plexmediaserver' aTCP[i]='32400';; + 43) aSERVICES[i]='mumble-server' aTCP[i]='64738';; + 44) aSERVICES[i]='transmission-daemon' aTCP[i]='9091';; + 45) aSERVICES[i]='deluged deluge-web' aTCP[i]='8112 58846 6882';; + 46) aSERVICES[i]='qbittorrent' aTCP[i]='1340 6881';; + 49) aSERVICES[i]='gogs' aTCP[i]='3000';; + 50) aSERVICES[i]='syncthing' aTCP[i]='8384';; + 51) aCOMMANDS[i]='/usr/games/opentyrian/opentyrian -h';; + 52) aSERVICES[i]='cuberite' aTCP[i]='1339'; (( $arch < 10 )) && aDELAY[i]=120;; + 53) aSERVICES[i]='mineos' aTCP[i]='8443';; + 58) aCOMMANDS[i]='tailscale version';; # aSERVICES[i]='tailscaled' aUDP[i]='41641' GitHub Action runners to not support the TUN module 59) aSERVICES[i]='raspimjpeg';; - 45) aSERVICES[i]='deluged deluge-web' aPORTS[8112]='tcp' aPORTS[58846]='tcp' aPORTS[6882]='tcp';; - 115) aSERVICES[i]='webmin' aPORTS[10000]='tcp';; - 135) aSERVICES[i]='icecast2 darkice' aPORTS[8000]='tcp';; - #184) aSERVICES[i]='tor' aPORTS[443]='tcp' aPORTS[9051]='tcp';; # Cannot be installed non-interactively, ports can be chosen and depend on chosen relay type - 182) aSERVICES[i]='unbound' aPORTS[53]='udp'; [[ ${aSERVICES[126]} ]] && aPORTS[5353]='udp';; # Uses port 5353 if Pi-hole or AdGuard Home is installed, but those do listen on port 53 instead - #93) aSERVICES[i]='pihole-FTL' aPORTS[53]='udp';; # Cannot be installed non-interactively - 126) aSERVICES[i]='adguardhome' aPORTS[53]='udp' aPORTS[8083]='tcp'; [[ ${aSERVICES[182]} ]] && aPORTS[5353]='udp';; # Unbound uses port 5353 if AdGuard Home is installed - 33) aSERVICES[i]='airsonic' aPORTS[8080]='tcp';; - 204) aSERVICES[i]='navidrome' aPORTS[4533]='tcp';; - 100) aSERVICES[i]='pijuice';; # aPORTS[????]='tcp';; - #171) aSERVICES[i]='frps frpc' aPORTS[7000]='tcp' aPORTS[7500]='tcp' aPORTS[7400]='tcp';; # Cannot be installed non-interactively, ports on chosen type - 122) aSERVICES[i]='node-red' aPORTS[1880]='tcp';; - 123) aSERVICES[i]='mosquitto' aPORTS[1883]='tcp';; - 131) aSERVICES[i]='blynkserver' aPORTS[9443]='tcp';; - 124) aSERVICES[i]='networkaudiod';; # aPORTS[????]='tcp';; - 71) aSERVICES[i]='webiopi' aPORTS[8002]='tcp';; - 98) aSERVICES[i]='haproxy' aPORTS[80]='tcp';; - 35) aSERVICES[i]='logitechmediaserver' aPORTS[9000]='tcp';; - 28|120) aSERVICES[i]='vncserver' aPORTS[5901]='tcp';; + #60) aUDP[i]='53 68';; Cannot be installed in CI since a WiFi interface is required + #61) aSERVICES[i]='tor' aUDP[i]='9040';; Cannot be installed in CI since a WiFi interface is required + 62) aCOMMANDS[i]='box86 -v';; + 65) aSERVICES[i]='netdata' aTCP[i]='19999';; + 66) aSERVICES[i]='rpimonitor' aTCP[i]='8888';; + 67) aCOMMANDS[i]='firefox-esr -v';; + 68) aSERVICES[i]='schannel' aUDP[i]='5980';; # remoteit@.service service listens on random high UDP port + 70) aCOMMANDS[i]='gpio -v | grep '\''gpio version'\';; + 71) aSERVICES[i]='webiopi' aTCP[i]='8002';; 73) aSERVICES[i]='fail2ban';; - 74) aSERVICES[i]='influxdb' aPORTS[8086]='tcp' aPORTS[8088]='tcp';; - 77) aSERVICES[i]='grafana-server' aPORTS[3001]='tcp';; - 80) aSERVICES[i]='ubooquity' aPORTS[2038]='tcp' aPORTS[2039]='tcp';; - 179) aSERVICES[i]='komga' aPORTS[2037]='tcp';; - 58) aSERVICES[i]='tailscale';; # aPORTS[????]='udp';; - 97) aSERVICES[i]='openvpn' aPORTS[1194]='udp';; + 74) aSERVICES[i]='influxdb' aTCP[i]='8086 8088';; + 77) aSERVICES[i]='grafana-server' aTCP[i]='3001'; (( $arch < 10 )) && aDELAY[i]=30;; + 80) aSERVICES[i]='ubooquity' aTCP[i]='2038 2039'; (( $arch == 10 )) || aDELAY[i]=30;; + 83) aSERVICES[i]='apache2' aTCP[i]='80';; + 84) aSERVICES[i]='lighttpd' aTCP[i]='80';; + 85) aSERVICES[i]='nginx' aTCP[i]='80';; + #86) aSERVICES[i]='roon-extension-manager';; # Docker does not start in systemd containers (without dedicated network) + 88) aSERVICES[i]='mariadb' aTCP[i]='3306';; + 89) case $DISTRO in 'buster') aSERVICES[i]='php7.3-fpm';; 'bullseye') aSERVICES[i]='php7.4-fpm';; *) aSERVICES[i]='php8.2-fpm';; esac;; + 91) aSERVICES[i]='redis-server' aTCP[i]='6379';; + #93) aSERVICES[i]='pihole-FTL' aUDP[i]='53';; # Cannot be installed non-interactively + 94) aSERVICES[i]='proftpd' aTCP[i]='21';; + 95) aSERVICES[i]='vsftpd' aTCP[i]='21';; + 96) aSERVICES[i]='smbd' aTCP[i]='139 445';; + 97) aSERVICES[i]='openvpn' aUDP[i]='1194';; + 98) aSERVICES[i]='haproxy' aTCP[i]='80';; + 99) aSERVICES[i]='node_exporter' aTCP[i]='9100';; + 100) aSERVICES[i]='pijuice';; # aTCP[i]='????';; + 104) aSERVICES[i]='dropbear' aTCP[i]='22';; + 105) aSERVICES[i]='ssh' aTCP[i]='22';; + 106) aSERVICES[i]='lidarr' aTCP[i]='8686';; + 107) aSERVICES[i]='rtorrent' aTCP[i]='49164' aUDP[i]='6881';; + 109) aSERVICES[i]='nfs-kernel-server' aTCP[i]='2049';; + 111) aSERVICES[i]='urbackupsrv' aTCP[i]='55414';; + 115) aSERVICES[i]='webmin' aTCP[i]='10000';; + 116) aSERVICES[i]='medusa' aTCP[i]='8081';; #117) :;; # ToDo: Implement automated install via /boot/unattended_pivpn.conf - 201) aSERVICES[i]='zerotier-one' aPORTS[9993]='tcp';; - #60) aPORTS[53]='udp' aPORTS[68]='udp';; Cannot be installed in CI since a WiFi interface is required - #61) aSERVICES[i]='tor' aPORTS[9040]='udp';; Cannot be installed in CI since a WiFi interface is required - 37) aSERVICES[i]='shairport-sync' aPORTS[5000]='tcp';; # AirPlay 2 would be TCP port 7000 - 36) aSERVICES[i]='Squeezelite';; # Random high UDP port - 66) aSERVICES[i]='rpimonitor' aPORTS[8888]='tcp';; - 65) aSERVICES[i]='netdata' aPORTS[19999]='tcp';; - 43) aSERVICES[i]='mumble-server' aPORTS[64738]='tcp';; - 41) aSERVICES[i]='emby-server' aPORTS[8096]='tcp';; - 42) aSERVICES[i]='plexmediaserver' aPORTS[32400]='tcp';; - 52) aSERVICES[i]='cuberite' aPORTS[1339]='tcp';; - 53) aSERVICES[i]='mineos' aPORTS[8443]='tcp';; - 49) aSERVICES[i]='gogs' aPORTS[3000]='tcp';; - 165) aSERVICES[i]='gitea' aPORTS[3000]='tcp';; - 46) aSERVICES[i]='qbittorrent' aPORTS[1340]='tcp' aPORTS[6881]='tcp';; - 107) aSERVICES[i]='rtorrent' aPORTS[49164]='tcp' aPORTS[6881]='udp';; - 132) aSERVICES[i]='aria2' aPORTS[6800]='tcp';; # aPORTS[6881-6999]='tcp';; # Listens on random port - 116) aSERVICES[i]='medusa' aPORTS[8081]='tcp';; - 50) aSERVICES[i]='syncthing' aPORTS[8384]='tcp';; - 136) aSERVICES[i]='motioneye' aPORTS[8765]='tcp';; - 137) aSERVICES[i]='mjpg-streamer' aPORTS[8082]='tcp';; - 138) aSERVICES[i]='virtualhere' aPORTS[7575]='tcp';; - 139) aSERVICES[i]='sabnzbd' aPORTS[8080]='tcp';; # ToDo: Solve conflict with Airsonic - 177) aSERVICES[i]='firefox-sync' aPORTS[5002]='tcp';; - 183) aSERVICES[i]='vaultwarden' aPORTS[8001]='tcp';; + 118) aSERVICES[i]='mopidy' aTCP[i]='6680';; + 121) aSERVICES[i]='roonbridge' aUDP[i]='9003';; + 122) aSERVICES[i]='node-red' aTCP[i]='1880';; + 123) aSERVICES[i]='mosquitto' aTCP[i]='1883';; + 124) aSERVICES[i]='networkaudiod';; # aUDP[i]='????';; + 125) aSERVICES[i]='synapse' aTCP[i]='8008';; + 126) aSERVICES[i]='adguardhome' aUDP[i]='53' aTCP[i]='8083'; [[ ${aSERVICES[182]} ]] && aUDP[i]+=' 5353';; # Unbound uses port 5353 if AdGuard Home is installed + 128) aSERVICES[i]='mpd' aTCP[i]='6600';; + 131) aSERVICES[i]='blynkserver' aTCP[i]='9443';; + 132) aSERVICES[i]='aria2' aTCP[i]='6800';; # aTCP[i]+=' 6881-6999';; # Listens on random port + 133) aSERVICES[i]='yacy' aTCP[i]='8090';; + 135) aSERVICES[i]='icecast2 darkice' aTCP[i]='8000';; + 136) aSERVICES[i]='motioneye' aTCP[i]='8765';; + 137) aSERVICES[i]='mjpg-streamer' aTCP[i]='8082';; + 138) aSERVICES[i]='virtualhere' aTCP[i]='7575';; + 139) aSERVICES[i]='sabnzbd' aTCP[i]='8080';; # ToDo: Solve conflict with Airsonic + 140) aSERVICES[i]='domoticz' aTCP[i]='8124 8424';; + 141) aSERVICES[i]='spotify-connect-web' aTCP[i]='4000';; 142) aSERVICES[i]='snapd';; - 141) aSERVICES[i]='spotify-connect-web' aPORTS[4000]='tcp';; - 143) aSERVICES[i]='koel' aPORTS[8003]='tcp';; - 144) aSERVICES[i]='sonarr' aPORTS[8989]='tcp';; - 145) aSERVICES[i]='radarr' aPORTS[7878]='tcp';; - 106) aSERVICES[i]='lidarr' aPORTS[8686]='tcp';; - 180) aSERVICES[i]='bazarr' aPORTS[6767]='tcp';; - 146) aSERVICES[i]='tautulli' aPORTS[8181]='tcp';; - 147) aSERVICES[i]='jackett' aPORTS[9117]='tcp';; - 149) aSERVICES[i]='nzbget' aPORTS[6789]='tcp';; - 151) aSERVICES[i]='prowlarr' aPORTS[9696]='tcp';; - 203) aSERVICES[i]='readarr' aPORTS[8787]='tcp';; - 155) aSERVICES[i]='htpc-manager' aPORTS[8085]='tcp';; - 153) aSERVICES[i]='octoprint' aPORTS[5001]='tcp';; - 187) aSERVICES[i]='cups' aPORTS[631]='tcp';; + 143) aSERVICES[i]='koel' aTCP[i]='8003';; + 144) aSERVICES[i]='sonarr' aTCP[i]='8989';; + 145) aSERVICES[i]='radarr' aTCP[i]='7878';; + 146) aSERVICES[i]='tautulli' aTCP[i]='8181';; + 147) aSERVICES[i]='jackett' aTCP[i]='9117';; + 148) aSERVICES[i]='mympd' aTCP[i]='1333';; + 149) aSERVICES[i]='nzbget' aTCP[i]='6789';; + 151) aSERVICES[i]='prowlarr' aTCP[i]='9696';; + 152) aSERVICES[i]='avahi-daemon' aUDP[i]='5353';; + 153) aSERVICES[i]='octoprint' aTCP[i]='5001';; 154) aSERVICES[i]='roonserver';; # Listens on a variety of different port ranges - 158) aSERVICES[i]='minio' aPORTS[9000]='tcp';; # ToDo: Solve port conflict with LMS - 162) aSERVICES[i]='docker';; - 161) aSERVICES[i]='bdd' aPORTS[80]='tcp' aPORTS[443]='tcp';; - 164) aSERVICES[i]='nukkit' aPORTS[19132]='udp';; + 155) aSERVICES[i]='htpc-manager' aTCP[i]='8085';; + 157) aSERVICES[i]='home-assistant' aTCP[i]='8123';; + 158) aSERVICES[i]='minio' aTCP[i]='9000';; # ToDo: Solve port conflict with LMS + 161) aSERVICES[i]='bdd' aTCP[i]='80 443';; + 162) aCOMMANDS[i]='docker -v';; # aSERVICES[i]='docker' # Docker does not start in systemd containers (without dedicated network) 163) aSERVICES[i]='gmediarender';; # DLNA => UPnP high range of ports + 164) aSERVICES[i]='nukkit' aUDP[i]='19132';; + 165) aSERVICES[i]='gitea' aTCP[i]='3000';; 166) aSERVICES[i]='pi-spc';; 167) aSERVICES[i]='raspotify';; 169) aSERVICES[i]='voice-recognizer';; + #171) aSERVICES[i]='frps frpc' aTCP[i]='7000 7400 7500';; # Cannot be installed non-interactively, ports on chosen type + #172) aSERVICES[i]='wg-quick@wg0' aUDP[i]='51820';; # cannot be installed non-interactively 176) aSERVICES[i]='mycroft';; - 86) aSERVICES[i]='roon-extension-manager';; - 178) aSERVICES[i]='jellyfin' aPORTS[8097]='tcp';; - 206) aSERVICES[i]='openhab' aPORTS[8444]='tcp';; - 157) aSERVICES[i]='home-assistant' aPORTS[8123]='tcp';; - 181) aSERVICES[i]='papermc' aPORTS[25565]='tcp';; - 140) aSERVICES[i]='domoticz' aPORTS[8124]='tcp' aPORTS[8424]='tcp';; - 191) aSERVICES[i]='snapserver' aPORTS[1780]='tcp';; + 177) aSERVICES[i]='firefox-sync' aTCP[i]='5002';; + 178) aSERVICES[i]='jellyfin' aTCP[i]='8097';; + 179) aSERVICES[i]='komga' aTCP[i]='2037';; + 180) aSERVICES[i]='bazarr' aTCP[i]='6767';; + 181) aSERVICES[i]='papermc' aTCP[i]='25565';; + 182) aSERVICES[i]='unbound' aUDP[i]='53'; [[ ${aSERVICES[126]} ]] && aUDP[i]+=' 5353';; # Uses port 5353 if Pi-hole or AdGuard Home is installed, but those do listen on port 53 instead + 183) aSERVICES[i]='vaultwarden' aTCP[i]='8001';; + #184) aSERVICES[i]='tor' aTCP[i]='443 9051';; # Cannot be installed non-interactively, ports can be chosen and depend on chosen relay type + #185) aTCP[i]='9002';; # Docker does not start in systemd containers (without dedicated network) + 186) aSERVICES[i]='ipfs' aTCP[i]='5003 8087';; + 187) aSERVICES[i]='cups' aTCP[i]='631';; + 191) aSERVICES[i]='snapserver' aTCP[i]='1780';; #192) aSERVICES[i]='snapclient';; # cannot be installed non-interactively + 194) aSERVICES[i]='postgresql';; + 196) aCOMMANDS[i]='java -version';; + 197) aCOMMANDS[i]='box64 -v';; + 198) aSERVICES[i]='filebrowser' aTCP[i]='8084';; + 199) aSERVICES[i]='spotifyd';; # aTCP[i]='4079';; ??? + 200) aSERVICES[i]='dietpi-dashboard' aTCP[i]='5252';; + 201) aSERVICES[i]='zerotier-one' aTCP[i]='9993';; 202) aCOMMANDS[i]='rclone -h';; + 203) aSERVICES[i]='readarr' aTCP[i]='8787';; + 204) aSERVICES[i]='navidrome' aTCP[i]='4533';; + 206) aSERVICES[i]='openhab' aTCP[i]='8444';; 209) aCOMMANDS[i]='restic version';; - 198) aSERVICES[i]='filebrowser' aPORTS[8084]='tcp';; - 199) aSERVICES[i]='spotifyd';; # aPORTS[4079]='tcp';; ??? - 185) aSERVICES[i]='docker' aPORTS[9002]='tcp';; - #172) aSERVICES[i]='wg-quick@wg0' aPORTS[51820]='udp';; # cannot be installed non-interactively *) :;; esac done @@ -200,15 +217,17 @@ Process_Software() for i in $SOFTWARE do case $i in - 47|114|168) Process_Software 88 89 91 webserver;; - 38|40|48|54|55|57|59|90|160) Process_Software 88 89 webserver;; + 205) Process_Software webserver;; 27|56|63|64|107|132) Process_Software 89 webserver;; # 93 (Pi-hole) cannot be installed non-interactively - 125) Process_Software 194;; + 38|40|48|54|55|57|59|90|160) Process_Software 88 89 webserver;; + 47|114|168) Process_Software 88 89 91 webserver;; + 8|33) Process_Software 196;; 32|148|119) Process_Software 128;; 129) Process_Software 88 89 128 webserver;; - #61) Process_Software 60;; # Cannot be installed in CI 49|165) Process_Software 88;; - 205) Process_Software webserver;; + #61) Process_Software 60;; # Cannot be installed in CI + 125) Process_Software 194;; + #86|185) Process_Software 162;; # Docker does not start in systemd containers (without dedicated network) *) :;; esac Process_Software "$i" @@ -218,7 +237,7 @@ done # Dependencies ########################################## apackages=('7zip' 'parted' 'fdisk' 'systemd-container') -(( $G_HW_ARCH == $ARCH || ( $G_HW_ARCH < 10 && $G_HW_ARCH > $ARCH ) )) || apackages+=('qemu-user-static' 'binfmt-support') +(( $G_HW_ARCH == $arch || ( $G_HW_ARCH < 10 && $G_HW_ARCH > $arch ) )) || apackages+=('qemu-user-static' 'binfmt-support') G_AG_CHECK_INSTALL_PREREQ "${apackages[@]}" ########################################## @@ -245,15 +264,15 @@ G_EXEC mkdir rootfs G_EXEC mount "${FP_LOOP}p1" rootfs # Force ARMv6 arch on Raspbian -[[ $ARCH == 'armv6l' ]] && G_EXEC sed -i '/# Start DietPi-Software/iG_EXEC sed -i -e '\''/^G_HW_ARCH=/cG_HW_ARCH=1'\'' -e '\''/^G_HW_ARCH_NAME=/cG_HW_ARCH_NAME=armv6l'\'' /boot/dietpi/.hw_model' rootfs/boot/dietpi/dietpi-login +(( $arch == 1 )) && G_EXEC sed -i '/# Start DietPi-Software/iG_EXEC sed -i -e '\''/^G_HW_ARCH=/cG_HW_ARCH=1'\'' -e '\''/^G_HW_ARCH_NAME=/cG_HW_ARCH_NAME=armv6l'\'' /boot/dietpi/.hw_model' rootfs/boot/dietpi/dietpi-login # Force RPi on ARM systems if requested -if [[ $RPI == 'true' && $ARCH == 'a'* ]] +if [[ $RPI == 'true' ]] && (( $arch < 10 )) then - case $ARCH in - 'armv6l') model=1;; - 'armv7l') model=2;; - 'aarch64') model=4;; + case $arch in + 1) model=1;; + 2) model=2;; + 3) model=4;; *) G_DIETPI-NOTIFY 1 "Invalid architecture $ARCH beginning with \"a\" but not being one of the known/accepted ARM architectures. This should never happen!"; exit 1;; esac G_EXEC sed -i "/# Start DietPi-Software/iG_EXEC sed -i -e '/^G_HW_MODEL=/cG_HW_MODEL=$model' -e '/^G_HW_MODEL_NAME=/cG_HW_MODEL_NAME=\"RPi $model ($ARCH)\"' /boot/dietpi/.hw_model; > /boot/config.txt; > /boot/cmdline.txt" rootfs/boot/dietpi/dietpi-login @@ -282,6 +301,9 @@ G_EXEC rm rootfs/root/.ssh/known_hosts # Apply software IDs to install for i in $SOFTWARE; do G_CONFIG_INJECT "AUTO_SETUP_INSTALL_SOFTWARE_ID=$i" "AUTO_SETUP_INSTALL_SOFTWARE_ID=$i" rootfs/boot/dietpi.txt; done +# Workaround for "Could not execute systemctl: at /usr/bin/deb-systemd-invoke line 145." during Apache2 DEB postinst in 32-bit ARM Bookworm container: https://lists.ubuntu.com/archives/foundations-bugs/2022-January/467253.html +G_CONFIG_INJECT 'AUTO_SETUP_WEB_SERVER_INDEX=' 'AUTO_SETUP_WEB_SERVER_INDEX=-2' rootfs/boot/dietpi.txt + # Workaround for failing Redis as of PrivateUsers=true leading to "Failed to set up user namespacing" G_EXEC mkdir rootfs/etc/systemd/system/redis-server.service.d G_EXEC eval 'echo -e '\''[Service]\nPrivateUsers=0'\'' > rootfs/etc/systemd/system/redis-server.service.d/dietpi-container.conf' @@ -297,46 +319,62 @@ then fi # Workaround for failing 32-bit ARM Rust builds on ext4 in QEMU emulated container on 64-bit host: https://github.com/rust-lang/cargo/issues/9545 -(( $ARCH < 3 && $G_HW_ARCH > 9 )) && G_EXEC eval 'echo -e '\''tmpfs /mnt/dietpi_userdata tmpfs size=3G,noatime,lazytime\ntmpfs /root tmpfs size=3G,noatime,lazytime'\'' >> rootfs/etc/fstab' +(( $arch < 3 && $G_HW_ARCH > 9 )) && G_EXEC eval 'echo -e '\''tmpfs /mnt/dietpi_userdata tmpfs size=3G,noatime,lazytime\ntmpfs /root tmpfs size=3G,noatime,lazytime'\'' >> rootfs/etc/fstab' + +# Workaround for Node.js on ARMv6 +(( $arch == 1 )) && G_EXEC sed -i '/# Start DietPi-Software/a\sed -i '\''/G_EXEC chmod +x node-install.sh/a\\sed -i "/^ARCH=/c\\ARCH=armv6l" node-install.sh'\'' /boot/dietpi/dietpi-software' rootfs/boot/dietpi/dietpi-login # Check for service status, ports and commands -G_EXEC eval 'echo -e '\''#!/bin/dash\nexit_code=0; /boot/dietpi/dietpi-services start || exit_code=1'\'' > rootfs/boot/Automation_Custom_Script.sh' -if (( ${#aSERVICES[@]} || ${#aPORTS[@]} || ${#aCOMMANDS[@]} )) +# shellcheck disable=SC2016 +# - Start all services +G_EXEC sed -i '/# Start DietPi-Software/a\sed -i '\''/# Custom 1st run script/a\\for i in "${aSTART_SERVICES[@]}"; do G_EXEC_NOHALT=1 G_EXEC systemctl start "$i"; done'\'' /boot/dietpi/dietpi-software' rootfs/boot/dietpi/dietpi-login +delay=10 +for i in "${aDELAY[@]}"; do (( $i > $delay )) && delay=$i; done +G_EXEC eval "echo -e '#!/bin/dash\nexit_code=0; /boot/dietpi/dietpi-services start || exit_code=1; echo Waiting $delay seconds for service starts; sleep $delay' > rootfs/boot/Automation_Custom_Script.sh" +# - Loop through software IDs to test +printf '%s\n' "${!aSERVICES[@]}" "${!aTCP[@]}" "${!aUDP[@]}" "${!aCOMMANDS[@]}" | sort -u | while read -r i +do + # Check whether ID really got installed, to skip software unsupported on hardware or distro + cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh +if grep -q '^aSOFTWARE_INSTALL_STATE\[$i\]=2$' /boot/dietpi/.installed then - G_EXEC eval 'echo '\''sleep 30'\'' >> rootfs/boot/Automation_Custom_Script.sh' - for i in "${aSERVICES[@]}" - do - cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh -echo -n '\e[33m[ INFO ] Checking $i service status:\e[0m ' -systemctl is-active '$i' || exit_code=1 +_EOF_ + # Check service status + [[ ${aSERVICES[i]} ]] && for j in ${aSERVICES[i]}; do cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh +echo -n '\e[33m[ INFO ] Checking $j service status:\e[0m ' +systemctl is-active '$j' || { journalctl -u '$j'; exit_code=1; } _EOF_ done - for i in "${!aPORTS[@]}" - do - cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh -echo '\e[33m[ INFO ] Checking ${aPORTS[i]^^} port $i status:\e[0m' -ss -${aPORTS[i]::1}lpn | grep ':${i}[[:blank:]]' || exit_code=1 + # Check TCP ports + [[ ${aTCP[i]} ]] && for j in ${aTCP[i]}; do cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh +echo '\e[33m[ INFO ] Checking TCP port $j status:\e[0m' +ss -tlpn | grep ':${j}[[:blank:]]' || exit_code=1 _EOF_ done - for i in "${aCOMMANDS[@]}" - do - cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh -echo '\e[33m[ INFO ] Testing command $i:\e[0m' -$i || exit_code=1 + # Check UDP ports + [[ ${aUDP[i]} ]] && for j in ${aUDP[i]}; do cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh +echo '\e[33m[ INFO ] Checking UDP port $j status:\e[0m' +ss -ulpn | grep ':${j}[[:blank:]]' || exit_code=1 _EOF_ done -fi + # Check commands + [[ ${aCOMMANDS[i]} ]] && cat << _EOF_ >> rootfs/boot/Automation_Custom_Script.sh +echo '\e[33m[ INFO ] Testing command ${aCOMMANDS[i]}:\e[0m' +${aCOMMANDS[i]} || exit_code=1 +_EOF_ + G_EXEC eval 'echo fi >> rootfs/boot/Automation_Custom_Script.sh' +done # Success flag and shutdown # shellcheck disable=SC2016 -G_EXEC eval 'echo '\''[ $exit_code = 0 ] && > /success; poweroff'\'' >> rootfs/boot/Automation_Custom_Script.sh' +G_EXEC eval 'echo '\''[ $exit_code = 0 ] && > /success || { journalctl -n 25; ss -tlpn; df -h; free -h; poweroff; }; poweroff'\'' >> rootfs/boot/Automation_Custom_Script.sh' # Shutdown as well on failure -G_EXEC sed -i 's|Prompt_on_Failure$|{ journalctl -e; ss -tlpn; df -h; free -h; poweroff; }|' rootfs/boot/dietpi/dietpi-login +G_EXEC sed -i 's|Prompt_on_Failure$|{ journalctl -n 25; ss -tlpn; df -h; free -h; poweroff; }|' rootfs/boot/dietpi/dietpi-login ########################################## # Boot container ########################################## systemd-nspawn -bD rootfs -[[ -f 'rootfs/success' ]] || { journalctl -e; df -h; free -h; exit 1; } +[[ -f 'rootfs/success' ]] || { journalctl -n 25; df -h; free -h; exit 1; } } diff --git a/.github/workflows/squeezelite.yml b/.github/workflows/squeezelite.yml index b6e8cc8705..08ef07b58b 100644 --- a/.github/workflows/squeezelite.yml +++ b/.github/workflows/squeezelite.yml @@ -3,242 +3,73 @@ on: workflow_dispatch: inputs: arch: - description: 'Target architecture index: 1, 2, 3, 10 or all' + description: 'Target architecture' + type: choice + options: [armv6l, armv7l, aarch64, x86_64, riscv64, all] + default: all required: true - distro: - description: 'Target Debian version index: 5, 6, 7 or all' + dist: + description: 'Target Debian version' + type: choice + options: [buster, bullseye, bookworm, all] + default: all required: true concurrency: group: ${{ github.workflow }}-${{ github.event.inputs.arch }}-${{ github.event.inputs.distro }} cancel-in-progress: true permissions: {} +defaults: + run: + shell: sh + working-directory: /dev/shm jobs: - armv6_buster: - if: ( github.event.inputs.arch == 1 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 5 || github.event.inputs.distro == 'all' ) - # https://github.com/actions/virtual-environments - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 1 -d 5 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_armv6l.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}buster/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/buster/testing/","https://dietpi.com/downloads/binaries/buster/testing/squeezelite_armv6l.deb"]}' - armv6_bullseye: - if: ( github.event.inputs.arch == 1 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 6 || github.event.inputs.distro == 'all' ) + prep: + outputs: + arch: ${{ steps.arch.outputs.arch }} + dist: ${{ steps.dist.outputs.dist }} runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 1 -d 6 - - name: Upload package + - id: arch run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_armv6l.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bullseye/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bullseye/testing/","https://dietpi.com/downloads/binaries/bullseye/testing/squeezelite_armv6l.deb"]}' - armv6_bookworm: - if: ( github.event.inputs.arch == 1 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 7 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 1 -d 7 - - name: Upload package + if [ '${{ github.event.inputs.arch }}' = 'all' ] + then + echo 'arch=["armv6l", "armv7l", "aarch64", "x86_64", "riscv64"]' >> "$GITHUB_OUTPUT" + else + echo 'arch=["${{ github.event.inputs.arch }}"]' >> "$GITHUB_OUTPUT" + fi + - id: dist run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_armv6l.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bookworm/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bookworm/testing/","https://dietpi.com/downloads/binaries/bookworm/testing/squeezelite_armv6l.deb"]}' - - armv7_buster: - if: ( github.event.inputs.arch == 2 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 5 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 2 -d 5 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_armv7l.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}buster/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/buster/testing/","https://dietpi.com/downloads/binaries/buster/testing/squeezelite_armv7l.deb"]}' - armv7_bullseye: - if: ( github.event.inputs.arch == 2 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 6 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 2 -d 6 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_armv7l.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bullseye/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bullseye/testing/","https://dietpi.com/downloads/binaries/bullseye/testing/squeezelite_armv7l.deb"]}' - armv7_bookworm: - if: ( github.event.inputs.arch == 2 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 7 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 2 -d 7 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_armv7l.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bookworm/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bookworm/testing/","https://dietpi.com/downloads/binaries/bookworm/testing/squeezelite_armv7l.deb"]}' - - armv8_buster: - if: ( github.event.inputs.arch == 3 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 5 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 3 -d 5 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_aarch64.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}buster/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/buster/testing/","https://dietpi.com/downloads/binaries/buster/testing/squeezelite_aarch64.deb"]}' - armv8_bullseye: - if: ( github.event.inputs.arch == 3 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 6 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 3 -d 6 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_aarch64.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bullseye/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bullseye/testing/","https://dietpi.com/downloads/binaries/bullseye/testing/squeezelite_aarch64.deb"]}' - armv8_bookworm: - if: ( github.event.inputs.arch == 3 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 7 || github.event.inputs.distro == 'all' ) + if [ '${{ github.event.inputs.dist }}' = 'all' ] + then + echo 'dist=["buster", "bullseye", "bookworm"]' >> "$GITHUB_OUTPUT" + else + echo 'dist=["${{ github.event.inputs.dist }}"]' >> "$GITHUB_OUTPUT" + fi + build: + needs: prep + strategy: + matrix: + arch: ${{ fromJson(needs.prep.outputs.arch) }} + dist: ${{ fromJson(needs.prep.outputs.dist) }} + exclude: + - { arch: riscv64, dist: buster } + - { arch: riscv64, dist: bullseye } + fail-fast: false + name: "Build: ${{ matrix.arch }} - ${{ matrix.dist }}" + # https://github.com/actions/virtual-environments runs-on: ubuntu-22.04 - defaults: - run: - shell: sh steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 3 -d 7 - - name: Upload package + - name: Build + run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=$GITHUB_REF_NAME; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/$GITHUB_REF_NAME/.build/software/squeezelite/container_build.bash")" -- -a '${{ matrix.arch }}' -d '${{ matrix.dist }}' + - name: Upload run: | - [ -d ~/.ssh ] || mkdir ~/.ssh + # SSH server and client keys + mkdir ~/.ssh umask 377 echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_aarch64.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bookworm/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bookworm/testing/","https://dietpi.com/downloads/binaries/bookworm/testing/squeezelite_aarch64.deb"]}' - x86_64_buster: - if: ( github.event.inputs.arch == 10 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 5 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 10 -d 5 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_x86_64.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}buster/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/buster/testing/","https://dietpi.com/downloads/binaries/buster/testing/squeezelite_x86_64.deb"]}' - x86_64_bullseye: - if: ( github.event.inputs.arch == 10 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 6 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 10 -d 6 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_x86_64.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bullseye/' - curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bullseye/testing/","https://dietpi.com/downloads/binaries/bullseye/testing/squeezelite_x86_64.deb"]}' - x86_64_bookworm: - if: ( github.event.inputs.arch == 10 || github.event.inputs.arch == 'all' ) && ( github.event.inputs.distro == 7 || github.event.inputs.distro == 'all' ) - runs-on: ubuntu-22.04 - defaults: - run: - shell: sh - working-directory: /dev/shm - steps: - - name: Start build container - run: sudo bash -c "G_GITOWNER=$GITHUB_REPOSITORY_OWNER G_GITBRANCH=${GITHUB_REF#refs/heads/}; $(curl -sSf "https://raw.githubusercontent.com/$GITHUB_REPOSITORY_OWNER/DietPi/${GITHUB_REF#refs/heads/}/.build/software/squeezelite/container_build.bash")" 'DietPi-Build_Squeezelite' -a 10 -d 7 - - name: Upload package - run: | - [ -d ~/.ssh ] || mkdir ~/.ssh - umask 377 - echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts - echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 - curl -T rootfs/squeezelite_x86_64.deb --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}bookworm/' + # Upload + curl -T 'rootfs/squeezelite_${{ matrix.arch }}.deb' --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}${{ matrix.dist }}/' curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ - --data '{"files":["https://dietpi.com/downloads/binaries/bookworm/testing/","https://dietpi.com/downloads/binaries/bookworm/testing/squeezelite_x86_64.deb"]}' + --data '{"files":["https://dietpi.com/downloads/binaries/${{ matrix.dist }}/testing/","https://dietpi.com/downloads/binaries/${{ matrix.dist }}/testing/squeezelite_${{ matrix.arch }}.deb"]}' diff --git a/.update/version b/.update/version index bd0c332c83..3e0e3a6447 100644 --- a/.update/version +++ b/.update/version @@ -3,7 +3,7 @@ # Available DietPi version G_REMOTE_VERSION_CORE=8 G_REMOTE_VERSION_SUB=18 -G_REMOTE_VERSION_RC=0 +G_REMOTE_VERSION_RC=1 # Minimum DietPi version to allow update G_MIN_VERSION_CORE=6 G_MIN_VERSION_SUB=14 diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 25ef12c6df..d1d163b169 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -12,9 +12,13 @@ Bug fixes: - DietPi-DDNS | Resolved an issue where the IP sync failed because the API URL changed recently. Many thanks to @ma651851384 for implementing the update: https://github.com/MichaIng/DietPi/pull/6375 - DietPi-Software | Restic: Resolved an issue where Restic was installed without executable flag. Many thanks to @lima1 for reporting this issue: https://github.com/MichaIng/DietPi/pull/6350#issuecomment-1537656560 - DietPi-Software | Domoticz: Resolved an issue where the installation failed when trying to unpack the tarball. Many thanks to @mcnahum for reporting this issue: https://github.com/MichaIng/DietPi/issues/6369 +- DietPi-Software | Domoticz: Resolved an issue where the service start failed because the new version of Domoticz depends on the GnuTLS variant of libcurl instead of the OpenSSL one. Many thanks to @IgrekLg for reporting this issue: https://github.com/MichaIng/DietPi/issues/6404 - DietPi-Software | motionEye: Resolved an issue where the installation failed on ARMv6, ARMv7 and RISC-V Bookworm systems due to missing build dependencies. Many thanks to @magicfoxt-magicfox for reporting this issue: https://github.com/MichaIng/DietPi/issues/6333 +- DietPi-Software | LXQt: Resolved an issue on Bookworm systems where the install failed since configs were missing. +- DietPi-Software | TigerVNC: Resolved an issue on Bookworm systems where the VNC password was not set as expected since the tigervncpasswd command became a dedicated DEB package "tigervnc-tools". +- DietPi-Software | Deluge: Resolved an issue on Bookworm systems where the install failed when trying to alter the service user. -As always, many smaller code performance and stability improvements, visual and spelling fixes have been done, too much to list all of them here. Check out all code changes of this release on GitHub: https://github.com/MichaIng/DietPi/pull/XXXX +As always, many smaller code performance and stability improvements, visual and spelling fixes have been done, too much to list all of them here. Check out all code changes of this release on GitHub: https://github.com/MichaIng/DietPi/pull/6406 ----------------------------------------------------------------------------------------------------------- diff --git a/dietpi/dietpi-software b/dietpi/dietpi-software index 5e4446e0e4..16b55c093a 100755 --- a/dietpi/dietpi-software +++ b/dietpi/dietpi-software @@ -559,6 +559,8 @@ Available commands: aSOFTWARE_DEPS[$software_id]='162' # - ARMv6 aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,1]=0 + # - RISC-V: Missing Docker package: https://download.docker.com/linux/debian/dists/ + aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=178 aSOFTWARE_NAME[$software_id]='Jellyfin' @@ -1056,6 +1058,8 @@ Available commands: (( $G_HW_MODEL > 9 )) && aSOFTWARE_AVAIL_G_HW_MODEL[$software_id,$G_HW_MODEL]=0 # - ARMv8: https://github.com/silvanmelchior/RPi_Cam_Web_Interface/tree/master/bin aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,3]=0 + # - Bookworm since gpac/MP4Box is currently not available: https://packages.debian.org/gpac + aSOFTWARE_AVAIL_G_DISTRO[$software_id,7]=0 #------------------ software_id=136 aSOFTWARE_NAME[$software_id]='motionEye' @@ -1111,6 +1115,8 @@ Available commands: aSOFTWARE_DESC[$software_id]='Build, ship, and run distributed applications' aSOFTWARE_CATX[$software_id]=8 aSOFTWARE_DOCS[$software_id]='https://dietpi.com/docs/software/programming/#docker' + # - RISC-V: Missing package: https://download.docker.com/linux/debian/dists/ + aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=185 aSOFTWARE_NAME[$software_id]='Portainer' @@ -1120,6 +1126,8 @@ Available commands: aSOFTWARE_DEPS[$software_id]='162' # - ARMv6: https://dietpi.com/forum/t/armv6-bookworm-software-test-matrix-question/16380/11 aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,1]=0 + # - RISC-V: Missing Docker package: https://download.docker.com/linux/debian/dists/ + aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=134 aSOFTWARE_NAME[$software_id]='Docker Compose' @@ -1127,6 +1135,8 @@ Available commands: aSOFTWARE_CATX[$software_id]=8 aSOFTWARE_DOCS[$software_id]='https://dietpi.com/docs/software/programming/#docker-compose' aSOFTWARE_DEPS[$software_id]='162' + # - RISC-V: Missing Docker package: https://download.docker.com/linux/debian/dists/ + aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=193 aSOFTWARE_NAME[$software_id]='K3s' @@ -1139,6 +1149,8 @@ Available commands: aSOFTWARE_DESC[$software_id]='The simplest production-grade upstream K8s, light and focused' aSOFTWARE_CATX[$software_id]=8 aSOFTWARE_DOCS[$software_id]='https://dietpi.com/docs/software/cloud/#microk8s' + # - RISC-V: Missing package: https://packages.debian.org/sid/snapd + aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=200 aSOFTWARE_NAME[$software_id]='DietPi-Dashboard' @@ -1509,7 +1521,7 @@ Available commands: aSOFTWARE_DESC[$software_id]='Open source home automation platform' aSOFTWARE_CATX[$software_id]=17 aSOFTWARE_DOCS[$software_id]='https://dietpi.com/docs/software/home_automation/#domoticz' - # - Bookworm: No libssl3 support: https://github.com/domoticz/domoticz/issues/5233 + # - Bookworm: No libssl3 support: https://github.com/domoticz/domoticz/issues/5233, https://github.com/MichaIng/DietPi/issues/6404 aSOFTWARE_AVAIL_G_DISTRO[$software_id,7]=0 #------------------ software_id=27 @@ -1548,13 +1560,12 @@ Available commands: #-------------------------------------------------------------------------------- software_id=2 aSOFTWARE_NAME[$software_id]='Folding@Home' - aSOFTWARE_DESC[$software_id]='distributed disease research project' + aSOFTWARE_DESC[$software_id]='Help desease research with your computing power!' aSOFTWARE_CATX[$software_id]=19 aSOFTWARE_DOCS[$software_id]='https://dietpi.com/docs/software/distributed_projects/#foldinghome' - # - ARMv6 - ARMv7 + # - ARMv6/7/RISC-V: No package: https://download.foldingathome.org/releases/public/release/fahclient/ aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,1]=0 aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,2]=0 - # - RISC-V: No package: https://download.foldingathome.org/releases/public/release/fahclient/ aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=133 @@ -1816,7 +1827,7 @@ Available commands: aSOFTWARE_DEPS[$software_id]='5 6' # - ARMv6 since Bullseye: https://github.com/RPi-Distro/chromium-browser/issues/21 (( $G_DISTRO < 6 )) || aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,1]=0 - # - RISC-V: Missing package + # - RISC-V: Missing package: https://packages.debian.org/sid/chromium aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=67 @@ -1827,7 +1838,7 @@ Available commands: aSOFTWARE_DEPS[$software_id]='5 6' # - ARMv6 since Bullseye: https://github.com/RPi-Distro/chromium-browser/issues/21#issuecomment-997044303 (( $G_DISTRO < 6 )) || aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,1]=0 - # - RISC-V: Missing package + # - RISC-V: Missing package: https://packages.debian.org/sid/firefox-esr aSOFTWARE_AVAIL_G_HW_ARCH[$software_id,11]=0 #------------------ software_id=174 @@ -2096,8 +2107,8 @@ Available commands: # - Do no reinstalls, as those are loose dependencies (( ${aSOFTWARE_INSTALL_STATE[67]} < 1 && ${aSOFTWARE_INSTALL_STATE[113]} < 1 )) || return 1 - # Disable browser preference on ARMv6 Bullseye+ systems: https://github.com/RPi-Distro/chromium-browser/issues/21 - (( $G_HW_ARCH == 1 && $G_DISTRO > 5 )) && return 1 + # Disable browser preference on ARMv6 Bullseye+ and RISC-V systems: https://github.com/RPi-Distro/chromium-browser/issues/21 + (( $G_HW_ARCH == 1 && $G_DISTRO > 5 )) || (( $G_HW_ARCH == 11 )) && return 1 # Auto-select browser if manually installed if dpkg-query -s 'firefox-esr' &> /dev/null @@ -5534,6 +5545,7 @@ _EOF_ then # Packages G_AGI deluged deluge-web deluge-console + (( $G_DISTRO > 6 )) && G_EXEC systemctl stop deluge-web G_EXEC systemctl stop deluged # Remove SysV service leftovers, installed by Debian APT package @@ -5588,7 +5600,7 @@ _EOF_ G_EXEC chown -R debian-deluged:root /mnt/dietpi_userdata/deluge # Service: https://github.com/deluge-torrent/deluge/blob/develop/packaging/systemd/deluged.service - cat << _EOF_ > /etc/systemd/system/deluged.service + cat << '_EOF_' > /etc/systemd/system/deluged.service [Unit] Description=Deluge Daemon (DietPi) Documentation=man:deluged @@ -5597,8 +5609,8 @@ After=network-online.target remote-fs.target [Service] User=debian-deluged -UMask=002 -ExecStart=$(command -v deluged) -d +UMask=007 +ExecStart=/usr/bin/deluged -d [Install] WantedBy=multi-user.target @@ -5611,12 +5623,13 @@ _EOF_ [Unit] Description=Deluge Web UI (DietPi) Documentation=man:deluge-web -After=deluged.service +Wants=network-online.target +After=network-online.target deluged.service [Service] User=debian-deluged UMask=027 -ExecStart=$(command -v deluge-web)$flag +ExecStart=/usr/bin/deluge-web$flag [Install] WantedBy=multi-user.target @@ -6574,7 +6587,7 @@ _EOF_ esac # Download - local fallback_url="https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_$arch.tar.gz" + local fallback_url="https://github.com/fatedier/frp/releases/download/v0.49.0/frp_0.49.0_linux_$arch.tar.gz" Download_Install "$(curl -sSfL 'https://api.github.com/repos/fatedier/frp/releases/latest' | mawk -F\" "/\"browser_download_url\": .*\/frp_[0-9.]*_linux_$arch\.tar\.gz\"/{print \$4}")" G_EXEC cd frp_* @@ -7172,8 +7185,10 @@ _EOF_ # netbase is required until Bullseye to solve: "Use of uninitialized value $proto in socket at /usr/bin/tigervncserver" # - It is a recommendation and no dependency of perl, but expected by some packages depending on perl only: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=939055 # tigervnc-common is required as it is a recommendation only until Bullseye. + # tigervnc-tools ships tigervncpasswd as dedicated package since Bookworm. local apackages=() (( $G_DISTRO > 5 )) || apackages=('tigervnc-common' 'netbase') + (( $G_DISTRO > 6 )) && apackages=('tigervnc-tools') G_AGI tigervnc-standalone-server tigervnc-scraping-server "${apackages[@]}" fi @@ -7657,7 +7672,7 @@ _EOF_ G_EXEC chown www-data "$fp_install/ampache/config/ampache.cfg.php" fi - if To_Install 58 tailscale # Tailscale + if To_Install 58 tailscaled # Tailscale then # APT key G_EXEC curl -sSfL "https://pkgs.tailscale.com/stable/debian/$G_DISTRO_NAME.noarmor.gpg" -o /etc/apt/trusted.gpg.d/dietpi-tailscale.gpg @@ -8279,7 +8294,7 @@ location = /.well-known/caldav { return 301 /baikal/html/dav.php; }' > /etc/ngi *) local arch='amd64';; esac - local fallback_url="https://github.com/MediaBrowser/Emby.Releases/releases/download/4.7.11.0/emby-server-deb_4.7.11.0_$arch.deb" + local fallback_url="https://github.com/MediaBrowser/Emby.Releases/releases/download/4.7.13.0/emby-server-deb_4.7.13.0_$arch.deb" Download_Install "$(curl -sSfL 'https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest' | mawk -F\" "/^ *\"browser_download_url\": .*\/emby-server-deb_[^\"\/]*_$arch\.deb\"$/{print \$4}")" G_EXEC systemctl stop emby-server @@ -9700,7 +9715,7 @@ _EOF_ # ARMv7 else local url=$(curl -sSfL 'https://api.github.com/repos/Radarr/Radarr/releases/latest' | mawk -F\" '/"browser_download_url": .*linux-core-arm\.tar\.gz"/{print $4}') - local fallback_url='https://github.com/Radarr/Radarr/releases/download/v4.4.4.7068/Radarr.master.4.4.4.7068.linux-core-arm.tar.gz' + local fallback_url='https://github.com/Radarr/Radarr/releases/download/v4.5.2.7388/Radarr.master.4.5.2.7388.linux-core-arm.tar.gz' fi # ARMv8 @@ -10232,7 +10247,7 @@ _EOF_ *) local arch='x64';; esac - local fallback_url="https://github.com/Readarr/Readarr/releases/download/v0.1.5.1832/Readarr.develop.0.1.5.1832.linux-core-$arch.tar.gz" + local fallback_url="https://github.com/Readarr/Readarr/releases/download/v0.1.6.1867/Readarr.develop.0.1.6.1867.linux-core-$arch.tar.gz" Download_Install "$(curl -sSfL 'https://api.github.com/repos/Readarr/Readarr/releases' | mawk -F\" "/\"browser_download_url\": .*linux-core-$arch\.tar\.gz\"/{print \$4}" | head -1)" G_EXEC mv Readarr /opt/readarr fi @@ -11554,7 +11569,7 @@ _EOF_ if To_Install 140 domoticz # Domoticz then # APT deps - aDEPS=('libusb-0.1-4') + aDEPS=('libusb-0.1-4' 'libcurl3-gnutls') # https://github.com/MichaIng/DietPi/issues/6404 Download_Install "https://releases.domoticz.com/releases/release/domoticz_linux_${G_HW_ARCH_NAME/armv6l/armv7l}.tgz" ./domoticz # Reinstall: Clean old install dir @@ -13211,7 +13226,7 @@ If no WireGuard (auto)start is included, but you require it, please do the follo if To_Uninstall 58 # Tailscale then G_AGP tailscale - [[ -d '/etc/systemd/system/tailscale.service.d' ]] && G_EXEC rm -R /etc/systemd/system/tailscale.service.d + [[ -d '/etc/systemd/system/tailscaled.service.d' ]] && G_EXEC rm -R /etc/systemd/system/tailscaled.service.d [[ -d '/var/lib/tailscale' ]] && G_EXEC rm -R /var/lib/tailscale [[ -f '/etc/sysctl.d/dietpi-tailscale.conf' ]] && G_EXEC rm /etc/sysctl.d/dietpi-tailscale.conf [[ -f '/etc/apt/sources.list.d/dietpi-tailscale.list' ]] && G_EXEC rm /etc/apt/sources.list.d/dietpi-tailscale.list diff --git a/dietpi/func/dietpi-globals b/dietpi/func/dietpi-globals index f344fea13f..be1066b4b0 100644 --- a/dietpi/func/dietpi-globals +++ b/dietpi/func/dietpi-globals @@ -59,7 +59,7 @@ # - Assign defaults/code version as fallback [[ $G_DIETPI_VERSION_CORE ]] || G_DIETPI_VERSION_CORE=8 [[ $G_DIETPI_VERSION_SUB ]] || G_DIETPI_VERSION_SUB=18 - [[ $G_DIETPI_VERSION_RC ]] || G_DIETPI_VERSION_RC=0 + [[ $G_DIETPI_VERSION_RC ]] || G_DIETPI_VERSION_RC=1 [[ $G_GITBRANCH ]] || G_GITBRANCH='master' [[ $G_GITOWNER ]] || G_GITOWNER='MichaIng' # - Save current version and Git branch