]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[UTILS] Refactor `fsget.sh` script. 2748/head
authors3rj1k <evasive.gyron@gmail.com>
Fri, 24 Jan 2025 18:34:22 +0000 (19:34 +0100)
committers3rj1k <evasive.gyron@gmail.com>
Sat, 25 Jan 2025 12:21:29 +0000 (13:21 +0100)
scripts/packaging/fsget.sh

index bb5e005853ceb503231343140e340cffa5fc428a..9df200dbc7359e235fb4ed44a8610c718b1ee89f 100755 (executable)
@@ -1,19 +1,89 @@
 #!/bin/bash
 
+# lint: shfmt -w -s -bn -ci -sr -fn scripts/packaging/fsget.sh
+
+set -e          # Exit immediately if a command exits with a non-zero status
+set -u          # Treat unset variables as an error
+set -o pipefail # Return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status
+
+source_os_release()
+{
+       if [ ! -f /etc/os-release ]; then
+               echo "Error: /etc/os-release not found"
+               exit 1
+       fi
+       . /etc/os-release
+
+       echo -n "Operating system identification:"
+       [ -n "$ID" ] && echo -n " ID=$ID"
+       [ -n "$VERSION_CODENAME" ] && echo -n " CODENAME=$VERSION_CODENAME"
+       echo
+}
+
+setup_common()
+{
+       rm -f /etc/apt/sources.list.d/freeswitch.list
+       apt-get update && apt-get install -y \
+               apt-transport-https \
+               curl \
+               gnupg2 \
+               grep \
+               software-properties-common
+}
+
+configure_auth()
+{
+       local domain=$1
+       local username=${2:-signalwire}
+       local token=$3
+       if ! grep -q "machine ${domain}" /etc/apt/auth.conf; then
+               echo "machine ${domain} login ${username} password ${token}" >> /etc/apt/auth.conf
+               chmod 600 /etc/apt/auth.conf
+       fi
+}
+
+install_freeswitch()
+{
+       local edition="$1"
+       local action="$2"
+
+       apt-get update
+
+       if [ "${action}" = "install" ]; then
+               echo "Installing FreeSWITCH ${edition}"
+               apt-get install -y freeswitch-meta-all
+               echo "------------------------------------------------------------------"
+               echo " Done installing FreeSWITCH ${edition}"
+               echo "------------------------------------------------------------------"
+       else
+               echo "------------------------------------------------------------------"
+               echo " Done configuring FreeSWITCH Debian repository"
+               echo "------------------------------------------------------------------"
+               echo "To install FreeSWITCH ${edition} type: apt-get install -y freeswitch-meta-all"
+       fi
+}
+
+if [ "$(id -u)" != "0" ]; then
+       echo "Non-root user detected. Execution may fail."
+fi
+
+if [ "$#" -lt 1 ] || [ "$#" -gt 3 ]; then
+       echo "Usage: $0 <PAT or FSA token> [[release|prerelease] [install]]"
+       exit 1
+fi
+
 TOKEN=$1
-RELEASE=$2
-INSTALL=$3
+RELEASE="${2:-release}"
+ACTION="${3:-}"
 
-# Source the os-release file (assuming it exists)
-. /etc/os-release
-echo $ID
-echo $VERSION_CODENAME
+source_os_release
 
 if [ "${ID,,}" = "debian" ]; then
        ARCH=$(dpkg --print-architecture)
-       if [[ "${TOKEN}" == pat_* ]]; then
-               echo "FreeSWITCH Community"
 
+       if [[ ${TOKEN} == pat_* ]]; then
+               DOMAIN="freeswitch.signalwire.com"
+               GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg"
                RPI=""
 
                if [ "${RELEASE,,}" = "prerelease" ]; then
@@ -22,36 +92,28 @@ if [ "${ID,,}" = "debian" ]; then
                        RELEASE="release"
                fi
 
-               echo $RELEASE
-
                if [ "${ARCH,,}" = "armhf" ]; then
                        RPI="rpi/"
                fi
 
-               rm -f /etc/apt/sources.list.d/freeswitch.list
-               apt-get update && apt-get install -y gnupg2 wget software-properties-common apt-transport-https
+               echo "FreeSWITCH Community ($RELEASE)"
 
-               wget --http-user=signalwire --http-password=$TOKEN -O /usr/share/keyrings/signalwire-freeswitch-repo.gpg https://freeswitch.signalwire.com/repo/deb/${RPI}debian-release/signalwire-freeswitch-repo.gpg
-               echo "machine freeswitch.signalwire.com login signalwire password $TOKEN" > /etc/apt/auth.conf
-               chmod 600 /etc/apt/auth.conf
-               echo "deb [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/${RPI}debian-${RELEASE}/ ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/freeswitch.list
-               echo "deb-src [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/${RPI}debian-${RELEASE}/ ${VERSION_CODENAME} main" >> /etc/apt/sources.list.d/freeswitch.list
-
-               apt-get update
-               if [ "${INSTALL}" = "install" ]; then
-                       echo "Installing FreeSWITCH Community"
-                       apt-get install -y freeswitch-meta-all
-                       echo "------------------------------------------------------------------"
-                       echo " Done installing FreeSWITCH Community"
-                       echo "------------------------------------------------------------------"
-               else
-                       echo "------------------------------------------------------------------"
-                       echo " Done configuring FreeSWITCH Debian repository"
-                       echo "------------------------------------------------------------------"
-                       echo "To install FreeSWITCH Community type: apt-get install -y freeswitch-meta-all"
-               fi
-       elif [[ "${TOKEN}" == PT* ]]; then
-               echo "FreeSWITCH Enterprise"
+               setup_common
+               configure_auth "${DOMAIN}" "" "${TOKEN}"
+
+               curl \
+                       --fail \
+                       --netrc-file /etc/apt/auth.conf \
+                       --output ${GPG_KEY} \
+                       https://${DOMAIN}/repo/deb/${RPI}debian-release/signalwire-freeswitch-repo.gpg
+
+               echo "deb [signed-by=${GPG_KEY}] https://${DOMAIN}/repo/deb/${RPI}debian-${RELEASE}/ ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/freeswitch.list
+               echo "deb-src [signed-by=${GPG_KEY}] https://${DOMAIN}/repo/deb/${RPI}debian-${RELEASE}/ ${VERSION_CODENAME} main" >> /etc/apt/sources.list.d/freeswitch.list
+
+               install_freeswitch "Community" "${ACTION}"
+       elif [[ ${TOKEN} == PT* ]]; then
+               DOMAIN="fsa.freeswitch.com"
+               RPI=""
 
                if [ "${RELEASE,,}" = "prerelease" ]; then
                        RELEASE="unstable"
@@ -59,37 +121,27 @@ if [ "${ID,,}" = "debian" ]; then
                        RELEASE="1.8"
                fi
 
-               echo $RELEASE
-
                if [ "${ARCH,,}" = "armhf" ]; then
                        RPI="-rpi"
                fi
 
-               rm -f /etc/apt/sources.list.d/freeswitch.list
-               apt-get update && apt-get install -y gnupg2 wget software-properties-common apt-transport-https
+               echo "FreeSWITCH Enterprise ($RELEASE)"
 
-               wget --http-user=signalwire --http-password=$TOKEN -O - https://fsa.freeswitch.com/repo/deb/fsa${RPI}/pubkey.gpg | apt-key add -
-               echo "machine fsa.freeswitch.com login signalwire password $TOKEN" > /etc/apt/auth.conf
-               chmod 600 /etc/apt/auth.conf
-               echo "deb https://fsa.freeswitch.com/repo/deb/fsa${RPI}/ ${VERSION_CODENAME} ${RELEASE}" > /etc/apt/sources.list.d/freeswitch.list
-               echo "deb-src https://fsa.freeswitch.com/repo/deb/fsa${RPI}/ ${VERSION_CODENAME} ${RELEASE}" >> /etc/apt/sources.list.d/freeswitch.list
-
-               apt-get update
-               if [ "${INSTALL}" = "install" ]; then
-                       echo "Installing FreeSWITCH Enterprise"
-                       apt-get install -y freeswitch-meta-all
-                       echo "------------------------------------------------------------------"
-                       echo " Done installing FreeSWITCH Enterprise"
-                       echo "------------------------------------------------------------------"
-               else
-                       echo "------------------------------------------------------------------"
-                       echo " Done configuring FreeSWITCH Debian repository"
-                       echo "------------------------------------------------------------------"
-                       echo "To install FreeSWITCH Enterprise type: apt-get install -y freeswitch-meta-all"
-               fi
+               setup_common
+               configure_auth "${DOMAIN}" "" "${TOKEN}"
+
+               curl \
+                       --fail \
+                       --netrc-file /etc/apt/auth.conf \
+                       https://${DOMAIN}/repo/deb/fsa${RPI}/pubkey.gpg | tee /etc/apt/trusted.gpg.d/freeswitch-enterprise.asc
+
+               echo "deb https://${DOMAIN}/repo/deb/fsa${RPI}/ ${VERSION_CODENAME} ${RELEASE}" > /etc/apt/sources.list.d/freeswitch.list
+               echo "deb-src https://${DOMAIN}/repo/deb/fsa${RPI}/ ${VERSION_CODENAME} ${RELEASE}" >> /etc/apt/sources.list.d/freeswitch.list
+
+               install_freeswitch "Enterprise" "${ACTION}"
        else
                echo "Unrecognized token type"
        fi
 else
        echo "Unrecognized OS. We support Debian only."
-fi
\ No newline at end of file
+fi