From 03b0d84731c26123a3238c24bb51094e725d0756 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:04:23 +0200 Subject: [PATCH] Update --- .templates/ha_automatic_packages.sh | 83 +++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 4 deletions(-) diff --git a/.templates/ha_automatic_packages.sh b/.templates/ha_automatic_packages.sh index 815c547a8..96b377bf2 100755 --- a/.templates/ha_automatic_packages.sh +++ b/.templates/ha_automatic_packages.sh @@ -1,10 +1,16 @@ #!/usr/bin/env bash set -euo pipefail +#################### +# helper functions # +#################### log() { [[ ${VERBOSE:-false} == true ]] && echo "$*"; } die() { echo "ERROR: $*" >&2; exit 1; } is_installed() { for c; do command -v "$c" &>/dev/null || return 1; done; return 0; } +######################### +# detect package system # +######################### case $(true \ && command -v apk && echo apk \ || command -v apt && echo apt \ @@ -16,12 +22,72 @@ case $(true \ esac log "Detected package manager: $PM" +############################ +# static base dependencies # +############################ pkgs_common=(jq curl ca-certificates) -declare -A APT=( ... ) # unchanged from your code -declare -A APK=( ... ) -declare -A PACMAN=( ... ) +######################################### +# map tool → packages (per PM) in YAML | +######################################### +# shellcheck disable=SC2034 +declare -A APT=( + [nginx]="nginx" + [mount]="exfat-fuse ntfs-3g squashfs-tools util-linux" + [ping]="iputils-ping" + [nmap]="nmap" + [cifs]="cifs-utils keyutils" + [smbclient]="samba smbclient ntfs-3g" + [dos2unix]="dos2unix" + [openvpn]="openvpn coreutils" + [jq]="jq" + [yamllint]="yamllint" + [git]="git" + [sponge]="moreutils" + [sqlite3]="sqlite3" + [pip]="python3-pip" + [wget]="wget" +) +declare -A APK=( + [nginx]="nginx" + [mount]="exfatprogs ntfs-3g squashfs-tools fuse lsblk" + [ping]="iputils" + [nmap]="nmap nmap-scripts" + [cifs]="cifs-utils keyutils" + [smbclient]="samba samba-client ntfs-3g" + [dos2unix]="dos2unix" + [openvpn]="openvpn coreutils" + [jq]="jq" + [yamllint]="yamllint" + [git]="git" + [sponge]="moreutils" + [sqlite3]="sqlite" + [pip]="py3-pip" + [wget]="wget" +) + +declare -A PACMAN=( + [nginx]="nginx" + [mount]="exfat-utils ntfs-3g squashfs-tools util-linux fuse2fs" + [ping]="iputils" + [nmap]="nmap" + [cifs]="cifs-utils keyutils" + [smbclient]="samba smbclient" + [dos2unix]="dos2unix" + [openvpn]="openvpn coreutils" + [jq]="jq" + [yamllint]="yamllint" + [git]="git" + [sponge]="moreutils" + [sqlite3]="sqlite" + [pip]="python-pip" + [wget]="wget" +) + +######################## +# scan service scripts # +######################## dirs=(/etc/cont-init.d /etc/services.d) declare -a wants=() for d in "${dirs[@]}"; do @@ -33,6 +99,9 @@ for d in "${dirs[@]}"; do done done +###################### +# build package list # +###################### declare -a pkgs=("${pkgs_common[@]}") for cmd in $(printf '%s\n' "${wants[@]}" | sort -u); do is_installed "$cmd" && continue @@ -44,10 +113,14 @@ for cmd in $(printf '%s\n' "${wants[@]}" | sort -u); do esac [[ -n $pkgstr ]] && pkgs+=($pkgstr) || log "No package mapping for $cmd on $PM" done +# de-dup final list mapfile -t pkgs < <(printf '%s\n' "${pkgs[@]}" | sort -u) if [[ -d /etc/nginx ]]; then mv /etc/nginx /etc/nginx2; fi +################ +# installation # +################ log "Updating package index…" $UPDATE @@ -70,7 +143,9 @@ fi [[ $PM == apt ]] && apt-get clean -qq -# --- Manual apps section --- +############ +# extras # +############ if ! command -v micro &>/dev/null; then log "Installing micro text editor" curl https://getmic.ro | bash || true