From 6bdb1e28dfb1af8e81acb15e080cb50716715559 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 7 May 2025 09:40:35 +0200 Subject: [PATCH] fixes --- misc/alpine-install.func | 2 +- tools/pve/lxc-delete.sh | 110 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tools/pve/lxc-delete.sh diff --git a/misc/alpine-install.func b/misc/alpine-install.func index c887160..d1743b4 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -213,7 +213,7 @@ customize() { passwd -d root >/dev/null 2>&1 # Ensure agetty is available - apk add --no-cache util-linux-getty >/dev/null 2>&1 + apk add --no-cache --force-broken-world util-linux-getty >/dev/null 2>&1 # Enable autologin on tty1 sed -i 's|^tty1::respawn:.*|tty1::respawn:/sbin/agetty --autologin root --noclear tty1 38400 linux|' /etc/inittab diff --git a/tools/pve/lxc-delete.sh b/tools/pve/lxc-delete.sh new file mode 100644 index 0000000..1dde186 --- /dev/null +++ b/tools/pve/lxc-delete.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + +function header_info { + clear + cat <<"EOF" + ____ __ _ ________ ____ __ __ + / __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____ + / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/ / / | / / / / / / _ \/ / _ \/ __/ _ \ + / ____/ / / /_/ /> < / /___/ / /___ / /_/ / __/ / __/ /_/ __/ +/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/\___/_/\___/\__/\___/ + +EOF +} + +spinner() { + local pid=$1 + local delay=0.1 + local spinstr='|/-\' + while ps -p $pid >/dev/null; do + printf " [%c] " "$spinstr" + spinstr=${spinstr#?}${spinstr%"${spinstr#?}"} + sleep $delay + printf "\r" + done + printf " \r" +} + +set -eEuo pipefail +YW=$(echo "\033[33m") +BL=$(echo "\033[36m") +RD=$(echo "\033[01;31m") +GN=$(echo "\033[1;92m") +CL=$(echo "\033[m") +TAB=" " +CM="${TAB}✔️${TAB}${CL}" + +header_info +echo "Loading..." +whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This will delete LXC containers. Proceed?" 10 58 + +NODE=$(hostname) +containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}') + +if [ -z "$containers" ]; then + whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60 + exit 1 +fi + +menu_items=() +FORMAT="%-10s %-15s %-10s" + +while read -r container; do + container_id=$(echo $container | awk '{print $1}') + container_name=$(echo $container | awk '{print $2}') + container_status=$(echo $container | awk '{print $3}') + formatted_line=$(printf "$FORMAT" "$container_name" "$container_status") + menu_items+=("$container_id" "$formatted_line" "OFF") +done <<<"$containers" + +CHOICES=$(whiptail --title "LXC Container Delete" \ + --checklist "Select LXC containers to delete:" 25 60 13 \ + "${menu_items[@]}" 3>&2 2>&1 1>&3) + +if [ -z "$CHOICES" ]; then + whiptail --title "LXC Container Delete" \ + --msgbox "No containers selected!" 10 60 + exit 1 +fi + +read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE +DELETE_MODE=${DELETE_MODE:-m} + +selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n') + +for container_id in $selected_ids; do + status=$(pct status $container_id) + + if [ "$status" == "status: running" ]; then + echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}" + pct stop $container_id & + sleep 5 + echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}" + fi + + if [[ "$DELETE_MODE" == "a" ]]; then + echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}" + pct destroy "$container_id" -f & + pid=$! + spinner $pid + [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60 + else + read -p "Delete container $container_id? (y/N): " CONFIRM + if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then + echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}" + pct destroy "$container_id" -f & + pid=$! + spinner $pid + [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60 + else + echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}" + fi + fi +done + +header_info +echo -e "${GN}Deletion process completed.${CL}\n"