forked from forkanization/Proxmox-arm64
Merge remote-tracking branch 'upstream/main' into main_local
This commit is contained in:
+49
-1
@@ -1,4 +1,4 @@
|
||||
### Generated on 01-18-2025
|
||||
### Generated on 01-24-2025
|
||||
##################################################
|
||||
|
||||
### 2fauth.sh
|
||||
@@ -235,6 +235,15 @@ APP=Bazarr
|
||||
/_____/\__,_/ /___/\__,_/_/ /_/
|
||||
|
||||
|
||||
### beszel.sh
|
||||
APP=Beszel
|
||||
____ __
|
||||
/ __ )___ _________ ___ / /
|
||||
/ __ / _ \/ ___/_ / / _ \/ /
|
||||
/ /_/ / __(__ ) / /_/ __/ /
|
||||
/_____/\___/____/ /___/\___/_/
|
||||
|
||||
|
||||
### blocky.sh
|
||||
APP=Blocky
|
||||
____ __ __
|
||||
@@ -1459,6 +1468,15 @@ APP=PostgreSQL
|
||||
/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/
|
||||
/____/
|
||||
|
||||
### projectsend.sh
|
||||
APP=ProjectSend
|
||||
____ _ __ _____ __
|
||||
/ __ \_________ (_)__ _____/ /_/ ___/___ ____ ____/ /
|
||||
/ /_/ / ___/ __ \ / / _ \/ ___/ __/\__ \/ _ \/ __ \/ __ /
|
||||
/ ____/ / / /_/ / / / __/ /__/ /_ ___/ / __/ / / / /_/ /
|
||||
/_/ /_/ \____/_/ /\___/\___/\__//____/\___/_/ /_/\__,_/
|
||||
/___/
|
||||
|
||||
### prometheus-alertmanager.sh
|
||||
APP=Prometheus-Alertmanager
|
||||
____ __ __ ___ __
|
||||
@@ -1693,6 +1711,21 @@ APP=Spoolman
|
||||
/____/ .___/\____/\____/_/_/ /_/ /_/\__,_/_/ /_/
|
||||
/_/
|
||||
|
||||
### sqlserver2022.sh
|
||||
APP=SQL Server 2022
|
||||
_____ ____ __ _____
|
||||
/ ___// __ \ / / / ___/___ ______ _____ _____
|
||||
\__ \/ / / / / / \__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
___/ / /_/ / / /___ ___/ / __/ / | |/ / __/ /
|
||||
/____/\___\_\/_____/ /____/\___/_/ |___/\___/_/
|
||||
|
||||
___ ____ ___ ___
|
||||
|__ \ / __ \__ \|__ \
|
||||
__/ // / / /_/ /__/ /
|
||||
/ __// /_/ / __// __/
|
||||
/____/\____/____/____/
|
||||
|
||||
|
||||
### stirling-pdf.sh
|
||||
APP=Stirling-PDF
|
||||
_____ __ _ ___ ____ ____ ______
|
||||
@@ -1900,6 +1933,21 @@ APP=Uptime Kuma
|
||||
\____/ .___/\__/_/_/ /_/ /_/\___/ /_/ |_\__,_/_/ /_/ /_/\__,_/
|
||||
/_/
|
||||
|
||||
### urbackupserver.sh
|
||||
APP=UrBackup Server
|
||||
__ __ ____ __
|
||||
/ / / /____/ __ )____ ______/ /____ ______
|
||||
/ / / / ___/ __ / __ `/ ___/ //_/ / / / __ \
|
||||
/ /_/ / / / /_/ / /_/ / /__/ ,< / /_/ / /_/ /
|
||||
\____/_/ /_____/\__,_/\___/_/|_|\__,_/ .___/
|
||||
/_/
|
||||
_____
|
||||
/ ___/___ ______ _____ _____
|
||||
\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
___/ / __/ / | |/ / __/ /
|
||||
/____/\___/_/ |___/\___/_/
|
||||
|
||||
|
||||
### vaultwarden.sh
|
||||
APP=Vaultwarden
|
||||
_ __ ____ __
|
||||
|
||||
+10
-11
@@ -145,17 +145,16 @@ motd_ssh() {
|
||||
OS_NAME="Alpine Linux"
|
||||
OS_VERSION="Unknown"
|
||||
fi
|
||||
# Set MOTD with application info and system details
|
||||
MOTD_FILE="/etc/motd"
|
||||
if [ -f "$MOTD_FILE" ]; then
|
||||
echo -e "\n${BOLD}${APPLICATION} LXC Container${CL}" > "$MOTD_FILE"
|
||||
echo -e "${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| Project: ${GN}ProxmoxVE ${YW}| GitHub: ${GN}https://github.com/asylumexp/Proxmox${CL}\n" >> "$MOTD_FILE"
|
||||
echo -e "${TAB}${OS}${YW} OS: ${GN}${OS_NAME} ${OS_VERSION}${CL}" >> "$MOTD_FILE"
|
||||
echo -e "${TAB}${HOSTNAME}${YW} Hostname: ${GN}$(hostname)${CL}" >> "$MOTD_FILE"
|
||||
echo -e "${TAB}${INFO}${YW} IP Address: ${GN}${IP}${CL}" >> "$MOTD_FILE"
|
||||
else
|
||||
echo -e "${RD}[WARNING] MOTD file does not exist!${CL}" >&2
|
||||
fi
|
||||
|
||||
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
|
||||
echo "echo -e \"\"" > "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts & pimox-scripts ${YW}| GitHub: ${GN}https://github.com/asylumexp/Proxmox${CL}\"" >> "$PROFILE_FILE"
|
||||
echo "echo \"\"" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >> "$PROFILE_FILE"
|
||||
|
||||
# Configure SSH if enabled
|
||||
if [[ "${SSH_ROOT}" == "yes" ]]; then
|
||||
# Enable sshd service
|
||||
|
||||
+390
-143
@@ -7,7 +7,9 @@ variables() {
|
||||
NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
|
||||
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
||||
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
||||
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
||||
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
||||
DIAGNOSTICS="yes" # sets the DIAGNOSTICS variable to "yes", used for the API call.
|
||||
METHOD="default" # sets the METHOD variable to "default", used for the API call.
|
||||
}
|
||||
|
||||
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
||||
@@ -142,7 +144,53 @@ pve_check() {
|
||||
echo -e "Exiting..."
|
||||
sleep 2
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# When a node is running tens of containers, it's possible to exceed the kernel's cryptographic key storage allocations.
|
||||
# These are tuneable, so verify if the currently deployment is approaching the limits, advise the user on how to tune the limits, and exit the script.
|
||||
# https://cleveruptime.com/docs/files/proc-key-users | https://docs.kernel.org/security/keys/core.html
|
||||
maxkeys_check() {
|
||||
# Read kernel parameters
|
||||
per_user_maxkeys=$(cat /proc/sys/kernel/keys/maxkeys 2>/dev/null || echo 0)
|
||||
per_user_maxbytes=$(cat /proc/sys/kernel/keys/maxbytes 2>/dev/null || echo 0)
|
||||
|
||||
# Exit if kernel parameters are unavailable
|
||||
if [[ "$per_user_maxkeys" -eq 0 || "$per_user_maxbytes" -eq 0 ]]; then
|
||||
echo -e "${CROSS}${RD} Error: Unable to read kernel parameters. Ensure proper permissions.${CL}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fetch key usage for user ID 100000 (typical for containers)
|
||||
used_lxc_keys=$(awk '/100000:/ {print $2}' /proc/key-users 2>/dev/null || echo 0)
|
||||
used_lxc_bytes=$(awk '/100000:/ {split($5, a, "/"); print a[1]}' /proc/key-users 2>/dev/null || echo 0)
|
||||
|
||||
# Calculate thresholds and suggested new limits
|
||||
threshold_keys=$((per_user_maxkeys - 100))
|
||||
threshold_bytes=$((per_user_maxbytes - 1000))
|
||||
new_limit_keys=$((per_user_maxkeys * 2))
|
||||
new_limit_bytes=$((per_user_maxbytes * 2))
|
||||
|
||||
# Check if key or byte usage is near limits
|
||||
failure=0
|
||||
if [[ "$used_lxc_keys" -gt "$threshold_keys" ]]; then
|
||||
echo -e "${CROSS}${RD} Warning: Key usage is near the limit (${used_lxc_keys}/${per_user_maxkeys}).${CL}"
|
||||
echo -e "${INFO} Suggested action: Set ${GN}kernel.keys.maxkeys=${new_limit_keys}${CL} in ${BOLD}/etc/sysctl.d/98-community-scripts.conf${CL}."
|
||||
failure=1
|
||||
fi
|
||||
if [[ "$used_lxc_bytes" -gt "$threshold_bytes" ]]; then
|
||||
echo -e "${CROSS}${RD} Warning: Key byte usage is near the limit (${used_lxc_bytes}/${per_user_maxbytes}).${CL}"
|
||||
echo -e "${INFO} Suggested action: Set ${GN}kernel.keys.maxbytes=${new_limit_bytes}${CL} in ${BOLD}/etc/sysctl.d/98-community-scripts.conf${CL}."
|
||||
failure=1
|
||||
fi
|
||||
|
||||
# Provide next steps if issues are detected
|
||||
if [[ "$failure" -eq 1 ]]; then
|
||||
echo -e "${INFO} To apply changes, run: ${BOLD}service procps force-reload${CL}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${CM}${GN} All kernel key limits are within safe thresholds.${CL}"
|
||||
}
|
||||
|
||||
# This function checks the system architecture and exits if it's not "amd64".
|
||||
@@ -175,76 +223,52 @@ get_current_ip() {
|
||||
# Function to update the IP address in the MOTD file
|
||||
update_motd_ip() {
|
||||
MOTD_FILE="/etc/motd"
|
||||
|
||||
|
||||
if [ -f "$MOTD_FILE" ]; then
|
||||
# Remove existing IP Address lines to prevent duplication
|
||||
sed -i '/IP Address:/d' "$MOTD_FILE"
|
||||
|
||||
|
||||
IP=$(get_current_ip)
|
||||
# Add the new IP address
|
||||
echo -e "${TAB}${NETWORK}${YW} IP Address: ${GN}${IP}${CL}" >> "$MOTD_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
|
||||
header_info() {
|
||||
# Helper function: Install FIGlet and download fonts
|
||||
install_figlet() {
|
||||
echo -e "${INFO}${BOLD}${DGN}Installing FIGlet...${CL}"
|
||||
# Function to download & save header files
|
||||
get_header() {
|
||||
local app_name=$(echo ${APP,,} | tr -d ' ')
|
||||
local header_url="https://github.com/community-scripts/ProxmoxVE/raw/main/ct/headers/${app_name}"
|
||||
local local_header_path="/usr/local/community-scripts/headers/${app_name}"
|
||||
|
||||
temp_dir=$(mktemp -d)
|
||||
curl -sL https://github.com/asylumexp/Proxmox/raw/refs/heads/main/misc/figlet.tar.xz -o "$temp_dir/figlet.tar.xz"
|
||||
mkdir -p /tmp/figlet
|
||||
tar -xf "$temp_dir/figlet.tar.xz" -C /tmp/figlet --strip-components=1
|
||||
cd /tmp/figlet
|
||||
make >/dev/null
|
||||
mkdir -p "/usr/local/community-scripts/headers"
|
||||
|
||||
if [ -f "figlet" ]; then
|
||||
chmod +x figlet
|
||||
mv figlet /usr/local/bin/
|
||||
mkdir -p /usr/local/share/figlet
|
||||
cp -r /tmp/figlet/fonts/*.flf /usr/local/share/figlet/
|
||||
echo -e "${CM}${BOLD}${DGN}FIGlet successfully installed.${CL}"
|
||||
else
|
||||
echo -e "${ERR}${BOLD}${RED}Failed to install FIGlet.${CL}"
|
||||
# Check if local file already present
|
||||
if [ ! -f "$local_header_path" ]; then
|
||||
wget -qO "$local_header_path" "$header_url"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${WARN}${BOLD}${YLW}Failed to download header for ${app_name}. No header will be displayed.${CL}"
|
||||
return 1
|
||||
fi
|
||||
rm -rf "$temp_dir"
|
||||
}
|
||||
|
||||
# Check if figlet and the slant font are available
|
||||
if ! figlet -f slant "Test" &>/dev/null; then
|
||||
echo -e "${INFO}${BOLD}${DGN}FIGlet or the slant font is missing. Installing...${CL}"
|
||||
|
||||
if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then
|
||||
# Debian/Ubuntu-based systems
|
||||
apt-get update -y &>/dev/null
|
||||
apt-get install -y wget build-essential &>/dev/null
|
||||
install_figlet
|
||||
|
||||
elif [ -f /etc/alpine-release ]; then
|
||||
# Alpine-based systems
|
||||
apk add --no-cache tar xz build-base wget &>/dev/null
|
||||
export TERM=xterm
|
||||
install_figlet
|
||||
|
||||
else
|
||||
echo -e "${ERR}${BOLD}${RED}Unsupported operating system.${CL}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Ensure the slant font is available
|
||||
if [ ! -f "/usr/share/figlet/slant.flf" ]; then
|
||||
echo -e "${INFO}${BOLD}${DGN}Downloading slant font...${CL}"
|
||||
wget -qO /usr/share/figlet/slant.flf "http://www.figlet.org/fonts/slant.flf"
|
||||
fi
|
||||
fi
|
||||
cat "$local_header_path"
|
||||
}
|
||||
|
||||
# Display ASCII header
|
||||
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
|
||||
header_info() {
|
||||
local app_name=$(echo ${APP,,} | tr -d ' ')
|
||||
local header_content
|
||||
|
||||
# Download & save Header-File locally
|
||||
header_content=$(get_header "$app_name")
|
||||
if [ $? -ne 0 ]; then
|
||||
# Fallback: Doesn't show Header
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Show ASCII-Header
|
||||
term_width=$(tput cols 2>/dev/null || echo 120)
|
||||
ascii_art=$(figlet -f slant -w "$term_width" "$APP")
|
||||
clear
|
||||
echo "$ascii_art"
|
||||
echo "$header_content"
|
||||
}
|
||||
|
||||
# This function checks if the script is running through SSH and prompts the user to confirm if they want to proceed or exit.
|
||||
@@ -335,74 +359,164 @@ exit_script() {
|
||||
# This function allows the user to configure advanced settings for the script.
|
||||
advanced_settings() {
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "Default is: ${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
||||
if [ "$var_os" != "alpine" ]; then
|
||||
var_default_os="${var_os}"
|
||||
var_os=""
|
||||
while [ -z "$var_os" ]; do
|
||||
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution:" 10 58 2 \
|
||||
"debian" "" OFF \
|
||||
"ubuntu" "" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_os" ]; then
|
||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||
if [ "$var_default_os" == "debian" ]; then
|
||||
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
|
||||
"debian" "" ON \
|
||||
"ubuntu" "" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_os" ]; then
|
||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
fi
|
||||
if [ "$var_default_os" == "ubuntu" ]; then
|
||||
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
|
||||
"debian" "" OFF \
|
||||
"ubuntu" "" ON \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_os" ]; then
|
||||
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$var_os" == "debian" ]; then
|
||||
var_default_version="${var_version}"
|
||||
var_version=""
|
||||
while [ -z "$var_version" ]; do
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
||||
"11" "Bullseye" OFF \
|
||||
"12" "Bookworm" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
if [ "$var_default_version" == "11" ]; then
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
||||
"11" "Bullseye" ON \
|
||||
"12" "Bookworm" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
fi
|
||||
if [ "$var_default_version" == "12" ]; then
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
||||
"11" "Bullseye" OFF \
|
||||
"12" "Bookworm" ON \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$var_os" == "ubuntu" ]; then
|
||||
var_default_version="${var_version}"
|
||||
var_version=""
|
||||
while [ -z "$var_version" ]; do
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||
"20.04" "Focal" OFF \
|
||||
"22.04" "Jammy" OFF \
|
||||
"24.04" "Noble" OFF \
|
||||
"24.10" "Oracular" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
if [ "$var_default_version" == "20.04" ]; then
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||
"20.04" "Focal" ON \
|
||||
"22.04" "Jammy" OFF \
|
||||
"24.04" "Noble" OFF \
|
||||
"24.10" "Oracular" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
elif [ "$var_default_version" == "22.04" ]; then
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||
"20.04" "Focal" OFF \
|
||||
"22.04" "Jammy" ON \
|
||||
"24.04" "Noble" OFF \
|
||||
"24.10" "Oracular" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
elif [ "$var_default_version" == "24.04" ]; then
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||
"20.04" "Focal" OFF \
|
||||
"22.04" "Jammy" OFF \
|
||||
"24.04" "Noble" ON \
|
||||
"24.10" "Oracular" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||
"20.04" "Focal" OFF \
|
||||
"22.04" "Jammy" OFF \
|
||||
"24.04" "Noble" OFF \
|
||||
"24.10" "Oracular" ON \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$var_version" ]; then
|
||||
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
# Setting Default Tag for Advanced Settings
|
||||
TAGS="community-script;${var_tags:-}"
|
||||
|
||||
CT_DEFAULT_TYPE="${CT_TYPE}"
|
||||
CT_TYPE=""
|
||||
while [ -z "$CT_TYPE" ]; do
|
||||
if CT_TYPE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
|
||||
"1" "Unprivileged" OFF \
|
||||
"0" "Privileged" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$CT_TYPE" ]; then
|
||||
CT_TYPE_DESC="Unprivileged"
|
||||
if [ "$CT_TYPE" -eq 0 ]; then
|
||||
CT_TYPE_DESC="Privileged"
|
||||
if [ "$CT_DEFAULT_TYPE" == "1" ]; then
|
||||
if CT_TYPE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
|
||||
"1" "Unprivileged" ON \
|
||||
"0" "Privileged" OFF \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$CT_TYPE" ]; then
|
||||
CT_TYPE_DESC="Unprivileged"
|
||||
if [ "$CT_TYPE" -eq 0 ]; then
|
||||
CT_TYPE_DESC="Privileged"
|
||||
fi
|
||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
||||
fi
|
||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
fi
|
||||
if [ "$CT_DEFAULT_TYPE" == "0" ]; then
|
||||
if CT_TYPE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
|
||||
"1" "Unprivileged" OFF \
|
||||
"0" "Privileged" ON \
|
||||
3>&1 1>&2 2>&3); then
|
||||
if [ -n "$CT_TYPE" ]; then
|
||||
CT_TYPE_DESC="Unprivileged"
|
||||
if [ "$CT_TYPE" -eq 0 ]; then
|
||||
CT_TYPE_DESC="Privileged"
|
||||
fi
|
||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -437,7 +551,6 @@ advanced_settings() {
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
if CT_ID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3); then
|
||||
if [ -z "$CT_ID" ]; then
|
||||
CT_ID="$NEXTID"
|
||||
@@ -550,7 +663,7 @@ advanced_settings() {
|
||||
APT_CACHER=""
|
||||
APT_CACHER_IP=""
|
||||
else
|
||||
if APT_CACHER_IP=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set APT-Cacher IP (leave blank for default)" 8 58 --title "APT-Cacher IP" 3>&1 1>&2 2>&3); then
|
||||
if APT_CACHER_IP=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set APT-Cacher IP (leave blank for none)" 8 58 --title "APT-Cacher IP" 3>&1 1>&2 2>&3); then
|
||||
APT_CACHER="${APT_CACHER_IP:+yes}"
|
||||
echo -e "${NETWORK}${BOLD}${DGN}APT-Cacher IP Address: ${BGN}${APT_CACHER_IP:-Default}${CL}"
|
||||
else
|
||||
@@ -565,7 +678,7 @@ advanced_settings() {
|
||||
fi
|
||||
echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
|
||||
|
||||
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
||||
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
||||
if [ -z $MTU1 ]; then
|
||||
MTU1="Default"
|
||||
MTU=""
|
||||
@@ -602,7 +715,7 @@ advanced_settings() {
|
||||
exit_script
|
||||
fi
|
||||
|
||||
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for default)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
|
||||
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for generated MAC)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
|
||||
if [ -z $MAC1 ]; then
|
||||
MAC1="Default"
|
||||
MAC=""
|
||||
@@ -614,7 +727,7 @@ advanced_settings() {
|
||||
exit_script
|
||||
fi
|
||||
|
||||
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
|
||||
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for no VLAN)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
|
||||
if [ -z $VLAN1 ]; then
|
||||
VLAN1="Default"
|
||||
VLAN=""
|
||||
@@ -628,18 +741,14 @@ advanced_settings() {
|
||||
|
||||
if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 ${TAGS} --title "Advanced Tags" 3>&1 1>&2 2>&3); then
|
||||
if [ -n "${ADV_TAGS}" ]; then
|
||||
ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]') # Remove whitespace from ADV_TAGS
|
||||
if [[ "$ADV_TAGS" != *"community-script"* ]]; then
|
||||
TAGS="community-script;${ADV_TAGS}"
|
||||
else
|
||||
TAGS="${ADV_TAGS}" # ADV_TAGS already contains "community-script"
|
||||
fi
|
||||
ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]')
|
||||
TAGS="${ADV_TAGS}"
|
||||
else
|
||||
TAGS="community-script;"
|
||||
TAGS=";"
|
||||
fi
|
||||
echo -e "${NETWORK}${BOLD}${DGN}Tags: ${BGN}$TAGS${CL}"
|
||||
else
|
||||
exit_script
|
||||
echo -e "${NETWORK}${BOLD}${DGN}Tags: ${BGN}$TAGS${CL}"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
|
||||
if [[ "$PW" == -password* ]]; then
|
||||
@@ -662,7 +771,7 @@ advanced_settings() {
|
||||
fi
|
||||
else
|
||||
SSH_AUTHORIZED_KEY=""
|
||||
fi
|
||||
fi
|
||||
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "VERBOSE MODE" --yesno "Enable Verbose Mode?" 10 58); then
|
||||
VERB="yes"
|
||||
else
|
||||
@@ -680,11 +789,123 @@ advanced_settings() {
|
||||
fi
|
||||
}
|
||||
|
||||
post_to_api() {
|
||||
local API_URL="http://api.community-scripts.org/upload"
|
||||
local pve_version="not found"
|
||||
pve_version=$(pveversion | awk -F'[/ ]' '{print $2}')
|
||||
|
||||
JSON_PAYLOAD=$(
|
||||
cat <<EOF
|
||||
{
|
||||
"ct_type": $CT_TYPE,
|
||||
"disk_size": $DISK_SIZE,
|
||||
"core_count": $CORE_COUNT,
|
||||
"ram_size": $RAM_SIZE,
|
||||
"verbose": "$VERBOSE",
|
||||
"os_type": "$var_os",
|
||||
"os_version": "$var_version",
|
||||
"hn": "$HN",
|
||||
"disableip6": "$DISABLEIP6",
|
||||
"ssh": "$SSH",
|
||||
"tags": "$TAGS",
|
||||
"nsapp": "$NSAPP",
|
||||
"method": "$METHOD",
|
||||
"pve_version": "$pve_version"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_PAYLOAD")
|
||||
|
||||
if [ "$RESPONSE" -ne 201 ] && [ "$RESPONSE" -ne 302 ]; then
|
||||
msg_error "API request failed with HTTP code $RESPONSE"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
diagnostics_check(){
|
||||
if ! [ -d "/usr/local/community-scripts" ]; then
|
||||
mkdir -p /usr/local/community-scripts
|
||||
fi
|
||||
|
||||
if ! [ -f "/usr/local/community-scripts/diagnostics" ]; then
|
||||
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "DIAGNOSTICS" --yesno "Send Diagnostics of LXC Installation?\n\n(This only transmits data without user data, just RAM, CPU, LXC name, ...)" 10 58); then
|
||||
cat <<EOF>/usr/local/community-scripts/diagnostics
|
||||
DIAGNOSTICS=yes
|
||||
|
||||
#This file is used to store the diagnostics settings for the Community-Scripts API.
|
||||
#https://github.com/community-scripts/ProxmoxVE/discussions/1836
|
||||
#Your diagnostics will be sent to the Community-Scripts API for troubleshooting/statistical purposes.
|
||||
#You can review the data at https://community-scripts.github.io/ProxmoxVE/data
|
||||
#If you do not wish to send diagnostics, please set the variable 'DIAGNOSTICS' to "no" in /usr/local/community-scripts/diagnostics, or use the menue.
|
||||
#This will disable the diagnostics feature.
|
||||
#To send diagnostics, set the variable 'DIAGNOSTICS' to "yes" in /usr/local/community-scripts/diagnostics, or use the menue.
|
||||
#This will enable the diagnostics feature.
|
||||
#The following information will be sent:
|
||||
#"ct_type"
|
||||
#"disk_size"
|
||||
#"core_count"
|
||||
#"ram_size"
|
||||
#"verbose"
|
||||
#"os_type"
|
||||
#"os_version"
|
||||
#"hn"
|
||||
#"disableip6"
|
||||
#"ssh"
|
||||
#"tags"
|
||||
#"nsapp"
|
||||
#"method"
|
||||
#"pve_version"
|
||||
#If you have any concerns, please review the source code at /misc/build.func
|
||||
EOF
|
||||
DIAGNOSTICS="yes"
|
||||
else
|
||||
cat <<EOF >/usr/local/community-scripts/diagnostics
|
||||
DIAGNOSTICS=no
|
||||
|
||||
#This file is used to store the diagnostics settings for the Community-Scripts API.
|
||||
#https://github.com/community-scripts/ProxmoxVE/discussions/1836
|
||||
#Your diagnostics will be sent to the Community-Scripts API for troubleshooting/statistical purposes.
|
||||
#You can review the data at https://community-scripts.github.io/ProxmoxVE/data
|
||||
#If you do not wish to send diagnostics, please set the variable 'DIAGNOSTICS' to "no" in /usr/local/community-scripts/diagnostics, or use the menue.
|
||||
#This will disable the diagnostics feature.
|
||||
#To send diagnostics, set the variable 'DIAGNOSTICS' to "yes" in /usr/local/community-scripts/diagnostics, or use the menue.
|
||||
#This will enable the diagnostics feature.
|
||||
#The following information will be sent:
|
||||
#"ct_type"
|
||||
#"disk_size"
|
||||
#"core_count"
|
||||
#"ram_size"
|
||||
#"verbose"
|
||||
#"os_type"
|
||||
#"os_version"
|
||||
#"hn"
|
||||
#"disableip6"
|
||||
#"ssh"
|
||||
#"tags"
|
||||
#"nsapp"
|
||||
#"method"
|
||||
#"pve_version"
|
||||
#If you have any concerns, please review the source code at /misc/build.func
|
||||
EOF
|
||||
DIAGNOSTICS="no"
|
||||
fi
|
||||
else
|
||||
DIAGNOSTICS=$(awk -F '=' '/^DIAGNOSTICS/ {print $2}' /usr/local/community-scripts/diagnostics)
|
||||
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
install_script() {
|
||||
pve_check
|
||||
shell_check
|
||||
root_check
|
||||
ssh_check
|
||||
maxkeys_check
|
||||
diagnostics_check
|
||||
|
||||
if systemctl is-active -q ping-instances.service; then
|
||||
systemctl -q stop ping-instances.service
|
||||
@@ -693,12 +914,14 @@ install_script() {
|
||||
timezone=$(cat /etc/timezone)
|
||||
header_info
|
||||
while true; do
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \
|
||||
12 50 4 \
|
||||
12 50 5 \
|
||||
"1" "Default Settings" \
|
||||
"2" "Default Settings (with verbose)" \
|
||||
"3" "Advanced Settings" \
|
||||
"4" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3)
|
||||
"4" "Diagnostic Settings" \
|
||||
"5" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3)
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}"
|
||||
@@ -706,35 +929,55 @@ install_script() {
|
||||
fi
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
header_info
|
||||
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}"
|
||||
VERB="no"
|
||||
base_settings "$VERB"
|
||||
echo_default
|
||||
break
|
||||
;;
|
||||
2)
|
||||
header_info
|
||||
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${SEARCH}Verbose)${CL}"
|
||||
VERB="yes"
|
||||
base_settings "$VERB"
|
||||
echo_default
|
||||
break
|
||||
;;
|
||||
3)
|
||||
header_info
|
||||
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings on node $PVEHOST_NAME${CL}"
|
||||
advanced_settings
|
||||
break
|
||||
;;
|
||||
4)
|
||||
echo -e "${CROSS}${RD}Exiting.${CL}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${CROSS}${RD}Invalid option, please try again.${CL}"
|
||||
1)
|
||||
header_info
|
||||
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}"
|
||||
VERB="no"
|
||||
METHOD="default"
|
||||
base_settings "$VERB"
|
||||
echo_default
|
||||
break
|
||||
;;
|
||||
2)
|
||||
header_info
|
||||
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${SEARCH}Verbose)${CL}"
|
||||
VERB="yes"
|
||||
METHOD="default"
|
||||
base_settings "$VERB"
|
||||
echo_default
|
||||
break
|
||||
;;
|
||||
3)
|
||||
header_info
|
||||
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings on node $PVEHOST_NAME${CL}"
|
||||
METHOD="advanced"
|
||||
advanced_settings
|
||||
break
|
||||
;;
|
||||
4)
|
||||
if [[ $DIAGNOSTICS == "yes" ]]; then
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "DIAGNOSTICS SETTINGS" --yesno "Send Diagnostics of LXC Installation?\n\nCurrent setting: ${DIAGNOSTICS}" 10 58 \
|
||||
--yes-button "No" --no-button "Back" ; then
|
||||
DIAGNOSTICS="no"
|
||||
sed -i 's/^DIAGNOSTICS=.*/DIAGNOSTICS=no/' /usr/local/community-scripts/diagnostics
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "DIAGNOSTICS SETTINGS" --msgbox "Diagnostics settings changed to ${DIAGNOSTICS}." 8 58
|
||||
fi
|
||||
else
|
||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "DIAGNOSTICS SETTINGS" --yesno "Send Diagnostics of LXC Installation?\n\nCurrent setting: ${DIAGNOSTICS}" 10 58 \
|
||||
--yes-button "Yes" --no-button "Back" ; then
|
||||
DIAGNOSTICS="yes"
|
||||
sed -i 's/^DIAGNOSTICS=.*/DIAGNOSTICS=yes/' /usr/local/community-scripts/diagnostics
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "DIAGNOSTICS SETTINGS" --msgbox "Diagnostics settings changed to ${DIAGNOSTICS}." 8 58
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
5)
|
||||
echo -e "${CROSS}${RD}Exiting.${CL}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${CROSS}${RD}Invalid option, please try again.${CL}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
@@ -805,7 +1048,7 @@ start() {
|
||||
|
||||
# This function collects user settings and integrates all the collected information.
|
||||
build_container() {
|
||||
# if [ "$VERB" == "yes" ]; then set -x; fi
|
||||
# if [ "$VERB" == "yes" ]; then set -x; fi
|
||||
|
||||
if [ "$CT_TYPE" == "1" ]; then
|
||||
FEATURES="keyctl=1,nesting=1"
|
||||
@@ -813,6 +1056,9 @@ build_container() {
|
||||
FEATURES="nesting=1"
|
||||
fi
|
||||
|
||||
if [[ $DIAGNOSTICS == "yes" ]]; then
|
||||
post_to_api
|
||||
fi
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
pushd $TEMP_DIR >/dev/null
|
||||
@@ -906,7 +1152,7 @@ EOF
|
||||
msg_ok "Started LXC Container"
|
||||
if [ "$var_os" == "alpine" ]; then
|
||||
sleep 3
|
||||
pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
|
||||
pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
|
||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
||||
EOF'
|
||||
@@ -921,7 +1167,8 @@ description() {
|
||||
IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
|
||||
# Generate LXC Description
|
||||
DESCRIPTION=$(cat <<EOF
|
||||
DESCRIPTION=$(
|
||||
cat <<EOF
|
||||
<div align='center'>
|
||||
<a href='https://pimox-scripts.com' target='_blank' rel='noopener noreferrer'>
|
||||
<img src='https://raw.githubusercontent.com/asylumexp/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/>
|
||||
@@ -949,7 +1196,7 @@ description() {
|
||||
</span>
|
||||
</div>
|
||||
EOF
|
||||
)
|
||||
)
|
||||
|
||||
# Set Description in LXC
|
||||
pct set "$CTID" -description "$DESCRIPTION"
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
#!/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
|
||||
}
|
||||
|
||||
# Function to check for orphaned LVM volumes
|
||||
function find_orphaned_lvm {
|
||||
echo -e "\n🔍 Scanning for orphaned LVM volumes...\n"
|
||||
|
||||
orphaned_volumes=()
|
||||
while read -r lv vg size; do
|
||||
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
|
||||
|
||||
# Exclude system-critical LVs
|
||||
if [[ "$lv" == "data" || "$lv" == "root" || "$lv" == "swap" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check if the ID exists as a VM or LXC container
|
||||
if [ -f "/etc/pve/lxc/${container_id}.conf" ] || [ -f "/etc/pve/qemu-server/${container_id}.conf" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
orphaned_volumes+=("$lv" "$vg" "$size")
|
||||
done < <(lvs --noheadings -o lv_name,vg_name,lv_size --separator ' ' | awk '{print $1, $2, $3}')
|
||||
|
||||
if [ ${#orphaned_volumes[@]} -eq 0 ]; then
|
||||
echo -e "✅ No orphaned LVM volumes found.\n"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Display orphaned volumes
|
||||
echo -e "❗ The following orphaned LVM volumes were found:\n"
|
||||
printf "%-25s %-10s %-10s\n" "LV Name" "VG" "Size"
|
||||
printf "%-25s %-10s %-10s\n" "-------------------------" "----------" "----------"
|
||||
|
||||
for ((i = 0; i < ${#orphaned_volumes[@]}; i+=3)); do
|
||||
printf "%-25s %-10s %-10s\n" "${orphaned_volumes[i]}" "${orphaned_volumes[i+1]}" "${orphaned_volumes[i+2]}"
|
||||
done
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Function to delete selected volumes
|
||||
function delete_orphaned_lvm {
|
||||
for ((i = 0; i < ${#orphaned_volumes[@]}; i+=3)); do
|
||||
lv="${orphaned_volumes[i]}"
|
||||
vg="${orphaned_volumes[i+1]}"
|
||||
size="${orphaned_volumes[i+2]}"
|
||||
|
||||
read -p "❓ Do you want to delete $lv (VG: $vg, Size: $size)? [y/N]: " confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
echo -e "🗑️ Deleting $lv from $vg..."
|
||||
lvremove -f "$vg/$lv"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "✅ Successfully deleted $lv.\n"
|
||||
else
|
||||
echo -e "❌ Failed to delete $lv.\n"
|
||||
fi
|
||||
else
|
||||
echo -e "⚠️ Skipping $lv.\n"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Run script
|
||||
header_info
|
||||
find_orphaned_lvm
|
||||
delete_orphaned_lvm
|
||||
|
||||
echo -e "✅ Cleanup process completed!\n"
|
||||
+74
-64
@@ -1,9 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
function header_info {
|
||||
clear
|
||||
@@ -11,79 +10,88 @@ function header_info {
|
||||
_______ __ ____
|
||||
/ ____(_) /__ / __ )_________ _ __________ _____
|
||||
/ /_ / / / _ \/ __ / ___/ __ \ | /| / / ___/ _ \/ ___/
|
||||
/ __/ / / / __/ /_/ / / / /_/ / |/ |/ (__ ) __/ /
|
||||
/_/ /_/_/\___/_____/_/ \____/|__/|__/____/\___/_/
|
||||
|
||||
/ __/ / / / __/ /_/ / / / /_/ / |/ |/ (__ ) __/ /
|
||||
/_/ /_/_/\___/_____/_/ \____/|__/|__/____/\___/_/
|
||||
EOF
|
||||
}
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
YW=$(echo "\033[33m")
|
||||
BL=$(echo "\033[36m")
|
||||
RD=$(echo "\033[01;31m")
|
||||
BGN=$(echo "\033[4;92m")
|
||||
GN=$(echo "\033[1;92m")
|
||||
DGN=$(echo "\033[32m")
|
||||
RD=$(echo "\033[01;31m")
|
||||
BL=$(echo "\033[36m")
|
||||
CL=$(echo "\033[m")
|
||||
BFR="\\r\\033[K"
|
||||
HOLD="-"
|
||||
CM="${GN}✓${CL}"
|
||||
CM="${GN}✔️${CL}"
|
||||
CROSS="${RD}✖️${CL}"
|
||||
INFO="${BL}ℹ️${CL}"
|
||||
|
||||
APP="FileBrowser"
|
||||
hostname="$(hostname)"
|
||||
header_info
|
||||
if [ -f /root/filebrowser.db ]; then
|
||||
read -r -p "Would you like to uninstall ${APP} on $hostname.? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
systemctl disable -q --now filebrowser.service
|
||||
rm -rf /usr/local/bin/filebrowser /root/filebrowser.db /etc/systemd/system/filebrowser.service
|
||||
echo "$APP Removed"
|
||||
sleep 2
|
||||
clear
|
||||
exit
|
||||
else
|
||||
clear
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
while true; do
|
||||
read -p "This will Install ${APP} on $hostname. Proceed(y/n)?" yn
|
||||
case $yn in
|
||||
[Yy]*) break ;;
|
||||
[Nn]*) exit ;;
|
||||
*) echo "Please answer yes or no." ;;
|
||||
esac
|
||||
done
|
||||
INSTALL_PATH="/usr/local/bin/filebrowser"
|
||||
SERVICE_PATH="/etc/systemd/system/filebrowser.service"
|
||||
DB_PATH="/root/filebrowser.db"
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
header_info
|
||||
|
||||
function msg_info() {
|
||||
local msg="$1"
|
||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||
echo -e "${INFO} ${YW}${msg}...${CL}"
|
||||
}
|
||||
|
||||
function msg_ok() {
|
||||
local msg="$1"
|
||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||
echo -e "${CM} ${GN}${msg}${CL}"
|
||||
}
|
||||
|
||||
read -r -p "Would you like to use No Authentication? <y/N> " prompt
|
||||
msg_info "Installing ${APP}"
|
||||
apt-get install -y curl &>/dev/null
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
|
||||
curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-arm64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
|
||||
function msg_error() {
|
||||
local msg="$1"
|
||||
echo -e "${CROSS} ${RD}${msg}${CL}"
|
||||
}
|
||||
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
filebrowser config init -a '0.0.0.0' &>/dev/null
|
||||
filebrowser config set -a '0.0.0.0' &>/dev/null
|
||||
filebrowser config init --auth.method=noauth &>/dev/null
|
||||
filebrowser config set --auth.method=noauth &>/dev/null
|
||||
filebrowser users add ID 1 --perm.admin &>/dev/null
|
||||
else
|
||||
filebrowser config init -a '0.0.0.0' &>/dev/null
|
||||
filebrowser config set -a '0.0.0.0' &>/dev/null
|
||||
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
|
||||
if [ -f "$INSTALL_PATH" ]; then
|
||||
echo -e "${YW}⚠️ ${APP} is already installed.${CL}"
|
||||
read -r -p "Would you like to uninstall ${APP}? (y/N): " uninstall_prompt
|
||||
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Uninstalling ${APP}"
|
||||
systemctl disable -q --now filebrowser.service
|
||||
rm -f "$INSTALL_PATH" "$DB_PATH" "$SERVICE_PATH"
|
||||
msg_ok "${APP} has been uninstalled."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
read -r -p "Would you like to update ${APP}? (y/N): " update_prompt
|
||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Updating ${APP}"
|
||||
curl -fsSL https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
|
||||
msg_ok "Updated ${APP}"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${YW}⚠️ Update skipped. Exiting.${CL}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
msg_ok "Installed ${APP} on $hostname"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/filebrowser.service
|
||||
echo -e "${YW}⚠️ ${APP} is not installed.${CL}"
|
||||
read -r -p "Would you like to install ${APP}? (y/n): " install_prompt
|
||||
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing ${APP}"
|
||||
apt-get install -y curl &>/dev/null
|
||||
curl -fsSL https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
|
||||
msg_ok "Installed ${APP}"
|
||||
|
||||
read -r -p "Would you like to use No Authentication? (y/N): " auth_prompt
|
||||
if [[ "${auth_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Configuring No Authentication"
|
||||
filebrowser config init -a '0.0.0.0' &>/dev/null
|
||||
filebrowser config set -a '0.0.0.0' --auth.method=noauth &>/dev/null
|
||||
msg_ok "No Authentication configured"
|
||||
else
|
||||
msg_info "Setting up default authentication"
|
||||
filebrowser config init -a '0.0.0.0' &>/dev/null
|
||||
filebrowser config set -a '0.0.0.0' &>/dev/null
|
||||
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
|
||||
msg_ok "Default authentication configured (admin:helper-scripts.com)"
|
||||
fi
|
||||
|
||||
msg_info "Creating service"
|
||||
cat <<EOF >/etc/systemd/system/filebrowser.service
|
||||
[Unit]
|
||||
Description=Filebrowser
|
||||
After=network-online.target
|
||||
@@ -96,9 +104,11 @@ ExecStart=/usr/local/bin/filebrowser -r /
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
EOF
|
||||
systemctl enable -q --now filebrowser.service
|
||||
msg_ok "Created Service"
|
||||
systemctl enable -q --now filebrowser.service
|
||||
msg_ok "Service created successfully"
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${APP} should be reachable by going to the following URL.
|
||||
${BL}http://$IP:8080${CL} \n"
|
||||
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://$IP:8080${CL}"
|
||||
else
|
||||
echo -e "${YW}⚠️ Installation skipped. Exiting.${CL}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
+8
-17
@@ -201,9 +201,6 @@ motd_ssh() {
|
||||
# Set terminal to 256-color mode
|
||||
grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >> /root/.bashrc
|
||||
|
||||
# Get the current private IP address
|
||||
IP=$(hostname -I | awk '{print $1}') # Private IP
|
||||
|
||||
# Get OS information (Debian / Ubuntu)
|
||||
if [ -f "/etc/os-release" ]; then
|
||||
OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"')
|
||||
@@ -213,20 +210,14 @@ motd_ssh() {
|
||||
OS_VERSION=$(cat /etc/debian_version)
|
||||
fi
|
||||
|
||||
# Set MOTD with application info, system details
|
||||
MOTD_FILE="/etc/motd"
|
||||
if [ -f "$MOTD_FILE" ]; then
|
||||
# Start MOTD with application info and link
|
||||
echo -e "\n${BOLD}${APPLICATION} LXC Container${CL}" > "$MOTD_FILE"
|
||||
echo -e "${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts & Pimox Scripts ${YW}| GitHub: ${GN}https://github.com/asylumexp/Proxmox${CL}\n" >> "$MOTD_FILE"
|
||||
|
||||
# Add system information with icons
|
||||
echo -e "${TAB}${OS}${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}" >> "$MOTD_FILE"
|
||||
echo -e "${TAB}${HOSTNAME}${YW} Hostname: ${GN}$(hostname)${CL}" >> "$MOTD_FILE"
|
||||
echo -e "${TAB}${INFO}${YW} IP Address: ${GN}${IP}${CL}" >> "$MOTD_FILE"
|
||||
else
|
||||
echo "MotD file does not exist!" >&2
|
||||
fi
|
||||
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
|
||||
echo "echo -e \"\"" > "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts & pimox-scripts ${YW}| GitHub: ${GN}https://github.com/asylumexp/Proxmox${CL}\"" >> "$PROFILE_FILE"
|
||||
echo "echo \"\"" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >> "$PROFILE_FILE"
|
||||
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >> "$PROFILE_FILE"
|
||||
|
||||
# Disable default MOTD scripts
|
||||
chmod -x /etc/update-motd.d/*
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
#!/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")
|
||||
CM='\xE2\x9C\x94\033'
|
||||
GN=$(echo "\033[1;92m")
|
||||
CL=$(echo "\033[m")
|
||||
|
||||
header_info
|
||||
echo "Loading..."
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This Will Delete LXC Containers. Proceed?" 10 58 || exit
|
||||
|
||||
NODE=$(hostname)
|
||||
|
||||
# Get list of containers with ID and hostname
|
||||
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
|
||||
|
||||
# Exit if no containers are found
|
||||
if [ -z "$containers" ]; then
|
||||
whiptail --title "LXC Container Delete" --msgbox "There are no LXC Container available!" 10 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
menu_items=()
|
||||
FORMAT="%-10s %-15s %-10s"
|
||||
|
||||
# Format container data for menu display
|
||||
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"
|
||||
|
||||
# Display selection menu
|
||||
CHOICES=$(whiptail --title "LXC Container Delete" \
|
||||
--checklist "Choose LXC container 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 have been selected!" 10 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Process selected containers
|
||||
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
||||
|
||||
for container_id in $selected_ids; do
|
||||
status=$(pct status $container_id)
|
||||
|
||||
# Stop container if running
|
||||
if [ "$status" == "status: running" ]; then
|
||||
echo -e "${BL}[Info]${GN} Stop container $container_id...${CL}"
|
||||
pct stop $container_id &
|
||||
sleep 5
|
||||
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
|
||||
fi
|
||||
|
||||
# Confirm deletion
|
||||
read -p "Are you sure you want to 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
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Container $container_id was successfully deleted."
|
||||
else
|
||||
whiptail --title "Error" --msgbox "Error deleting container $container_id." 10 60
|
||||
fi
|
||||
elif [[ "$CONFIRM" =~ ^[Nn]$ ]]; then
|
||||
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
|
||||
else
|
||||
echo -e "${RD}[Error]${CL} Invalid input, skipping container $container_id."
|
||||
fi
|
||||
done
|
||||
|
||||
header_info
|
||||
echo -e "${GN}The deletion process has been completed.${CL}\n"
|
||||
@@ -0,0 +1,180 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: thost96 (thost96)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
header_info() {
|
||||
clear
|
||||
cat <<"EOF"
|
||||
____ __ _________ ____ __ ____ __ ____
|
||||
/ __ \/ |/ / ____/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / /
|
||||
/ /_/ / /|_/ / / __ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
|
||||
/ ____/ / / / /_/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
|
||||
/_/ /_/ /_/\____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
RD=$(echo "\033[01;31m")
|
||||
YW=$(echo "\033[33m")
|
||||
GN=$(echo "\033[1;92m")
|
||||
CL=$(echo "\033[m")
|
||||
BFR="\\r\\033[K"
|
||||
HOLD="-"
|
||||
CM="${GN}✓${CL}"
|
||||
CROSS="${RD}✗${CL}"
|
||||
|
||||
set -euo pipefail
|
||||
shopt -s inherit_errexit nullglob
|
||||
|
||||
msg_info() {
|
||||
local msg="$1"
|
||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||
}
|
||||
|
||||
msg_ok() {
|
||||
local msg="$1"
|
||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||
}
|
||||
|
||||
msg_error() {
|
||||
local msg="$1"
|
||||
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
||||
}
|
||||
|
||||
start_routines() {
|
||||
header_info
|
||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG SOURCES" --menu "This will set the correct sources to update and install Proxmox Mail Gateway.\n \nChange to Proxmox Mail Gateway sources?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Changing to Proxmox Mail Gateway Sources"
|
||||
cat <<EOF >/etc/apt/sources.list
|
||||
deb http://deb.debian.org/debian ${VERSION} main contrib
|
||||
deb http://deb.debian.org/debian ${VERSION}-updates main contrib
|
||||
deb http://security.debian.org/debian-security ${VERSION}-security main contrib
|
||||
EOF
|
||||
msg_ok "Changed to Proxmox Mail Gateway Sources"
|
||||
;;
|
||||
no)
|
||||
msg_error "Selected no to Correcting Proxmox Mail Gateway Sources"
|
||||
;;
|
||||
esac
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" --menu "The 'pmg-enterprise' repository is only available to users who have purchased a Proxmox Mail Gateway subscription.\n \nDisable 'pmg-enterprise' repository?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Disabling 'pmg-enterprise' repository"
|
||||
cat <<EOF >/etc/apt/sources.list.d/pmg-enterprise.list
|
||||
# deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise
|
||||
EOF
|
||||
msg_ok "Disabled 'pmg-enterprise' repository"
|
||||
;;
|
||||
no)
|
||||
msg_error "Selected no to disabling 'pmg-enterprise' repository"
|
||||
;;
|
||||
esac
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" --menu "The 'pmg-no-subscription' repository provides access to all of the open-source components of Proxmox Mail Gateway.\n \nEnable 'pmg-no-subscription' repository?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Enabling 'pmg-no-subscription' repository"
|
||||
cat <<EOF >/etc/apt/sources.list.d/pmg-install-repo.list
|
||||
deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription
|
||||
EOF
|
||||
msg_ok "Enabled 'pmg-no-subscription' repository"
|
||||
;;
|
||||
no)
|
||||
msg_error "Selected no to enabling 'pmg-no-subscription' repository"
|
||||
;;
|
||||
esac
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG TEST" --menu "The 'pmgtest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pmgtest' repository?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Adding 'pmgtest' repository and set disabled"
|
||||
cat <<EOF >/etc/apt/sources.list.d/pmgtest-for-beta.list
|
||||
# deb http://download.proxmox.com/debian/pmg ${VERSION} pmgtest
|
||||
EOF
|
||||
msg_ok "Added 'pmgtest' repository"
|
||||
;;
|
||||
no)
|
||||
msg_error "Selected no to adding 'pmgtest' repository"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
||||
msg_info "Disabling subscription nag"
|
||||
# Normal GUI:
|
||||
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
|
||||
# JS-Library used when accessing via mobile device browser
|
||||
echo "DPkg::Post-Invoke { \"dpkg -V pmg-gui | grep -q '/pmgmanagerlib-mobile\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from Mobile UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
|
||||
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
|
||||
msg_ok "Disabled subscription nag (Delete browser cache)"
|
||||
;;
|
||||
no)
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
||||
msg_error "Selected no to disabling subscription nag"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Updating Proxmox Mail Gateway (Patience)"
|
||||
apt-get update &>/dev/null
|
||||
apt-get -y dist-upgrade &>/dev/null
|
||||
msg_ok "Updated Proxmox Mail Gateway"
|
||||
;;
|
||||
no)
|
||||
msg_error "Selected no to updating Proxmox Mail Gateway"
|
||||
;;
|
||||
esac
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Mail Gateway now? (recommended)" 11 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Rebooting Proxmox Mail Gateway"
|
||||
sleep 2
|
||||
msg_ok "Completed Post Install Routines"
|
||||
reboot
|
||||
;;
|
||||
no)
|
||||
msg_error "Selected no to reboot Proxmox Mail Gateway (Reboot recommended)"
|
||||
msg_ok "Completed Post Install Routines"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
header_info
|
||||
echo -e "\nThis script will Perform Post Install Routines.\n"
|
||||
while true; do
|
||||
read -p "Start the Proxmox Mail Gateway Post Install Script (y/n)?" yn
|
||||
case $yn in
|
||||
[Yy]*) break ;;
|
||||
[Nn]*) clear; exit ;;
|
||||
*) echo "Please answer yes or no." ;;
|
||||
esac
|
||||
done
|
||||
|
||||
start_routines
|
||||
Reference in New Issue
Block a user