From a544f07fec6f9960959cc23c75f011f826ff5c74 Mon Sep 17 00:00:00 2001 From: Cody <22225233+lusky3@users.noreply.github.com> Date: Sun, 9 Jun 2024 00:23:39 -0400 Subject: [PATCH] Update add-netbird-lxc.sh Adds the ability to select multiple containers. --- misc/add-netbird-lxc.sh | 64 +++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/misc/add-netbird-lxc.sh b/misc/add-netbird-lxc.sh index 05427106..11bbde35 100644 --- a/misc/add-netbird-lxc.sh +++ b/misc/add-netbird-lxc.sh @@ -19,9 +19,9 @@ EOF header_info set -e while true; do - read -p "This will add NetBird to an existing LXC Container ONLY. Proceed(y/n)?" yn + read -p "This will add NetBird to an existing LXC Container ONLY. Proceed (Y/n)? " yn case $yn in - [Yy]*) break ;; + [Yy]*|"") break ;; [Nn]*) exit ;; *) echo "Please answer yes or no." ;; esac @@ -35,6 +35,12 @@ function msg() { NODE=$(hostname) MSG_MAX_LENGTH=0 +declare -a CTID_MENU +declare -a SELECTED_CTIDS +declare -a ERROR_LOG +INSTALL_LOG="" + +# Read the list of containers and prepare the menu while read -r line; do TAG=$(echo "$line" | awk '{print $1}') ITEM=$(echo "$line" | awk '{print substr($0,36)}') @@ -46,26 +52,48 @@ while read -r line; do done < <(pct list | awk 'NR>1') while [ -z "${CTID:+x}" ]; do - CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \ - "\nSelect a container to add NetBird to:\n" \ + # Allow the user to select multiple containers + SELECTED_CTIDS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist \ + "\nSelect containers to add NetBird to:\n" \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \ "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit done -CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf -cat <>$CTID_CONFIG_PATH +# Strip quotations +SELECTED_CTIDS=$(echo "$SELECTED_CTIDS" | tr -d '"') + +# Install NetBird on each selected container +for CTID in $SELECTED_CTIDS; do + CTID_CONFIG_PATH="/etc/pve/lxc/${CTID}.conf" + cat <>$CTID_CONFIG_PATH lxc.cgroup2.devices.allow: c 10:200 rwm lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file EOF -header_info -msg "Installing NetBird..." -pct exec "$CTID" -- bash -c ' -apt install -y ca-certificates gpg &>/dev/null -wget -qO- https://pkgs.netbird.io/debian/public.key | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg -echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list -apt-get update &>/dev/null -apt-get install -y netbird-ui &>/dev/null -' || exit -msg "\e[1;32m ✔ Installed NetBird.\e[0m" -sleep 2 -msg "\e[1;31m Reboot ${CTID} LXC to apply the changes, then run netbird up in the LXC console\e[0m" + header_info + msg "Installing NetBird on container $CTID..." + if ! pct exec "$CTID" -- bash -c ' + apt install -y ca-certificates gpg &>/dev/null + wget -qO- https://pkgs.netbird.io/debian/public.key | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg + echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list + apt-get update &>/dev/null + apt-get install -y netbird-ui &>/dev/null + '; then + ERROR_LOG+=("Error installing NetBird on container $CTID") + else + # Append the success message to the INSTALL_LOG variable + INSTALL_LOG+="\e[1;32m ✔ Installed NetBird on container $CTID.\e[0m\n" + fi +done + +# Display the installation log +echo -e "$INSTALL_LOG" + +# Display errors, if any +if [ ${#ERROR_LOG[@]} -ne 0 ]; then + msg "Some containers encountered errors during installation:" + for error in "${ERROR_LOG[@]}"; do + msg "$error" + done +fi +msg "\e[1;31m Reboot the LXC containers to apply the changes, then run \e[0mnetbird up\e[1;31m in the LXC console\e[0m" +