Add autoremove-lxcs.sh
This commit is contained in:
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 tteck
|
||||||
|
# Author: tteck (tteckster)
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
function header_info() {
|
||||||
|
clear
|
||||||
|
cat <<"EOF"
|
||||||
|
__ __ __ __ __ _ ________
|
||||||
|
/ / / /___ ____/ /___ _/ /____ / / | |/ / ____/
|
||||||
|
/ / / / __ \/ __ / __ `/ __/ _ \ / / | / /
|
||||||
|
/ /_/ / /_/ / /_/ / /_/ / /_/ __/ / /___/ / /___
|
||||||
|
\____/ .___/\__,_/\__,_/\__/\___/ /_____/_/|_\____/
|
||||||
|
/_/
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
set -eEuo pipefail
|
||||||
|
YW=$(echo "\033[33m")
|
||||||
|
BL=$(echo "\033[36m")
|
||||||
|
RD=$(echo "\033[01;31m")
|
||||||
|
CM='\xE2\x9C\x94\033'
|
||||||
|
GN=$(echo "\033[1;92m")
|
||||||
|
CL=$(echo "\033[m")
|
||||||
|
|
||||||
|
# Telemetry
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
|
||||||
|
declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "update-lxcs" "pve"
|
||||||
|
|
||||||
|
header_info
|
||||||
|
echo "Loading..."
|
||||||
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Autoremove" --yesno "This Will Run 'apt autoremove' on LXC Containers. Proceed?" 10 58
|
||||||
|
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Skip Not-Running Containers" --yesno "Do you want to skip containers that are not currently running?" 10 58; then
|
||||||
|
SKIP_STOPPED="yes"
|
||||||
|
else
|
||||||
|
SKIP_STOPPED="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODE=$(hostname)
|
||||||
|
EXCLUDE_MENU=()
|
||||||
|
MSG_MAX_LENGTH=0
|
||||||
|
while read -r TAG ITEM; do
|
||||||
|
OFFSET=2
|
||||||
|
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
||||||
|
EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF")
|
||||||
|
done < <(pct list | awk 'NR>1')
|
||||||
|
excluded_containers=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist "\nSelect containers to skip from autoremove:\n" 16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"')
|
||||||
|
|
||||||
|
function autoremove_container() {
|
||||||
|
container=$1
|
||||||
|
header_info
|
||||||
|
name=$(pct exec "$container" hostname)
|
||||||
|
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
||||||
|
if [[ "$os" == "ubuntu" || "$os" == "debian" || "$os" == "devuan" ]]; then
|
||||||
|
disk_info=$(pct exec "$container" df /boot | awk 'NR==2{gsub("%","",$5); printf "%s %.1fG %.1fG %.1fG", $5, $3/1024/1024, $2/1024/1024, $4/1024/1024 }')
|
||||||
|
read -ra disk_info_array <<<"$disk_info"
|
||||||
|
echo -e "${BL}[Info]${GN} Running autoremove on ${BL}$container${CL} : ${GN}$name${CL} - ${YW}Boot Disk: ${disk_info_array[0]}% full [${disk_info_array[1]}/${disk_info_array[2]} used, ${disk_info_array[3]} free]${CL}\n"
|
||||||
|
pct exec "$container" -- bash -c "apt-get autoremove -y"
|
||||||
|
else
|
||||||
|
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL} : ${GN}$name${CL} - ${YW}Not a Debian/Ubuntu/Devuan container (os: ${os})${CL}\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
header_info
|
||||||
|
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||||
|
if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then
|
||||||
|
header_info
|
||||||
|
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}"
|
||||||
|
sleep 1
|
||||||
|
else
|
||||||
|
status=$(pct status $container)
|
||||||
|
if [ "$SKIP_STOPPED" == "yes" ] && [ "$status" == "status: stopped" ]; then
|
||||||
|
header_info
|
||||||
|
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}${GN} (not running)${CL}"
|
||||||
|
sleep 1
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
|
||||||
|
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
||||||
|
echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n"
|
||||||
|
pct start $container
|
||||||
|
echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL} \n"
|
||||||
|
sleep 5
|
||||||
|
autoremove_container $container
|
||||||
|
echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n"
|
||||||
|
pct shutdown $container &
|
||||||
|
elif [ "$status" == "status: running" ]; then
|
||||||
|
autoremove_container $container
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
wait
|
||||||
|
header_info
|
||||||
|
echo -e "${GN}The process is complete. apt autoremove has been run on all applicable containers.${CL}\n"
|
||||||
|
echo ""
|
||||||
Reference in New Issue
Block a user