mirror of https://github.com/tteck/Proxmox.git
Compare commits
6 Commits
287a0837d3
...
c9006a67d6
Author | SHA1 | Date |
---|---|---|
|
c9006a67d6 | |
|
92babeac23 | |
|
eda9208477 | |
|
caea206144 | |
|
3a06811e01 | |
|
9192b8b076 |
|
@ -2,6 +2,13 @@
|
||||||
# Change Log
|
# Change Log
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## 2023-05-16
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **Proxmox VE LXC Updater**
|
||||||
|
- Add information about the boot disk, which provides an easy way to determine if you need to expand the disk.
|
||||||
|
|
||||||
## 2023-05-13
|
## 2023-05-13
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
In the case of the < app > LXC, the process involves running multiple scripts for each application or service.<br>
|
In the case of the AdGuard Home LXC, the process involves running multiple scripts for each application or service.<br>
|
||||||
Initially, the `<app>.sh` script is executed to collect system parameters.<br>
|
Initially, the [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh) script is executed to collect system parameters.<br>
|
||||||
Next, the `build.func` script adds user settings and integrates all the collected information.<br>
|
Next, the [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func) script adds user settings and integrates all the collected information.<br>
|
||||||
Then, the `create_lxc.sh` script constructs the LXC container.<br>
|
Then, the [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh) script constructs the LXC container.<br>
|
||||||
Following that, the `<app>-install.sh` script is executed, which utilizes the functions exported from the `install.func` script for installing the required applications.<br>
|
Following that, the [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh) script is executed, which utilizes the functions exported from the [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func) script for installing the required applications.<br>
|
||||||
Finally, the process returns to the `<app>.sh` script to display the completion message.<br>
|
Finally, the process returns to the [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh) script to display the completion message.<br>
|
||||||
|
|
||||||
Thoroughly evaluating the `<app>-install.sh` script is crucial to gain a better understanding of the application installation process.<br>
|
Thoroughly evaluating the [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh) script is crucial to gain a better understanding of the application installation process.<br>
|
||||||
Every application installation utilizes the same set of reusable scripts: `build.func`, `create_lxc.sh`, and `install.func`. These scripts are not specific to any particular application.<br>
|
Every application installation utilizes the same set of reusable scripts: [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func), [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func). These scripts are not specific to any particular application.<br>
|
||||||
|
|
|
@ -5,7 +5,10 @@
|
||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||||
|
|
||||||
|
# This sets verbose mode if the global variable is set to "yes"
|
||||||
if [ "$VERBOSE" == "yes" ]; then set -x; fi
|
if [ "$VERBOSE" == "yes" ]; then set -x; fi
|
||||||
|
|
||||||
|
# This function sets color variables for formatting output in the terminal
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
RD=$(echo "\033[01;31m")
|
RD=$(echo "\033[01;31m")
|
||||||
|
@ -15,8 +18,12 @@ CM="${GN}✓${CL}"
|
||||||
CROSS="${RD}✗${CL}"
|
CROSS="${RD}✗${CL}"
|
||||||
BFR="\\r\\033[K"
|
BFR="\\r\\033[K"
|
||||||
HOLD="-"
|
HOLD="-"
|
||||||
|
|
||||||
|
# This sets error handling options and defines the error_handler function to handle errors
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
|
|
||||||
|
# This function handles errors
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
|
@ -24,20 +31,26 @@ function error_handler() {
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function prints an informational message
|
||||||
function msg_info() {
|
function msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function prints a success message
|
||||||
function msg_ok() {
|
function msg_ok() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function prints an error message
|
||||||
function msg_error() {
|
function msg_error() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This checks for the presence of valid Container Storage and Template Storage locations
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
|
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
|
||||||
if [ -z "$VALIDCT" ]; then
|
if [ -z "$VALIDCT" ]; then
|
||||||
|
@ -50,6 +63,7 @@ if [ -z "$VALIDTMP" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# This function is used to select the storage class and determine the corresponding storage content type and label.
|
||||||
function select_storage() {
|
function select_storage() {
|
||||||
local CLASS=$1
|
local CLASS=$1
|
||||||
local CONTENT
|
local CONTENT
|
||||||
|
@ -66,6 +80,7 @@ function select_storage() {
|
||||||
*) false || exit "Invalid storage class." ;;
|
*) false || exit "Invalid storage class." ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# This Queries all storage locations
|
||||||
local -a MENU
|
local -a MENU
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
local TAG=$(echo $line | awk '{print $1}')
|
local TAG=$(echo $line | awk '{print $1}')
|
||||||
|
@ -79,6 +94,7 @@ function select_storage() {
|
||||||
MENU+=("$TAG" "$ITEM" "OFF")
|
MENU+=("$TAG" "$ITEM" "OFF")
|
||||||
done < <(pvesm status -content $CONTENT | awk 'NR>1')
|
done < <(pvesm status -content $CONTENT | awk 'NR>1')
|
||||||
|
|
||||||
|
# Select storage location
|
||||||
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
|
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
|
||||||
printf ${MENU[0]}
|
printf ${MENU[0]}
|
||||||
else
|
else
|
||||||
|
@ -93,32 +109,40 @@ function select_storage() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Test if required variables are set
|
||||||
[[ "${CTID:-}" ]] || exit "You need to set 'CTID' variable."
|
[[ "${CTID:-}" ]] || exit "You need to set 'CTID' variable."
|
||||||
[[ "${PCT_OSTYPE:-}" ]] || exit "You need to set 'PCT_OSTYPE' variable."
|
[[ "${PCT_OSTYPE:-}" ]] || exit "You need to set 'PCT_OSTYPE' variable."
|
||||||
|
|
||||||
|
# Test if ID is valid
|
||||||
[ "$CTID" -ge "100" ] || exit "ID cannot be less than 100."
|
[ "$CTID" -ge "100" ] || exit "ID cannot be less than 100."
|
||||||
|
|
||||||
|
# Test if ID is in use
|
||||||
if pct status $CTID &>/dev/null; then
|
if pct status $CTID &>/dev/null; then
|
||||||
echo -e "ID '$CTID' is already in use."
|
echo -e "ID '$CTID' is already in use."
|
||||||
unset CTID
|
unset CTID
|
||||||
exit "Cannot use ID that is already in use."
|
exit "Cannot use ID that is already in use."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Get template storage
|
||||||
TEMPLATE_STORAGE=$(select_storage template) || exit
|
TEMPLATE_STORAGE=$(select_storage template) || exit
|
||||||
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
|
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
|
||||||
|
|
||||||
|
# Get container storage
|
||||||
CONTAINER_STORAGE=$(select_storage container) || exit
|
CONTAINER_STORAGE=$(select_storage container) || exit
|
||||||
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
|
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
|
||||||
|
|
||||||
|
# Update LXC template list
|
||||||
msg_info "Updating LXC Template List"
|
msg_info "Updating LXC Template List"
|
||||||
pveam update >/dev/null
|
pveam update >/dev/null
|
||||||
msg_ok "Updated LXC Template List"
|
msg_ok "Updated LXC Template List"
|
||||||
|
|
||||||
|
# Get LXC template string
|
||||||
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
||||||
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
|
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
|
||||||
[ ${#TEMPLATES[@]} -gt 0 ] || exit "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
|
[ ${#TEMPLATES[@]} -gt 0 ] || exit "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
|
||||||
TEMPLATE="${TEMPLATES[-1]}"
|
TEMPLATE="${TEMPLATES[-1]}"
|
||||||
|
|
||||||
|
# Download LXC template if needed
|
||||||
if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
|
if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
|
||||||
msg_info "Downloading LXC Template"
|
msg_info "Downloading LXC Template"
|
||||||
pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
|
pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
|
||||||
|
@ -126,12 +150,14 @@ if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
|
||||||
msg_ok "Downloaded LXC Template"
|
msg_ok "Downloaded LXC Template"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Combine all options
|
||||||
DEFAULT_PCT_OPTIONS=(
|
DEFAULT_PCT_OPTIONS=(
|
||||||
-arch $(dpkg --print-architecture))
|
-arch $(dpkg --print-architecture))
|
||||||
|
|
||||||
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
||||||
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs $CONTAINER_STORAGE:${PCT_DISK_SIZE:-8})
|
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs $CONTAINER_STORAGE:${PCT_DISK_SIZE:-8})
|
||||||
|
|
||||||
|
# Create container
|
||||||
msg_info "Creating LXC Container"
|
msg_info "Creating LXC Container"
|
||||||
pct create $CTID ${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE} ${PCT_OPTIONS[@]} >/dev/null ||
|
pct create $CTID ${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE} ${PCT_OPTIONS[@]} >/dev/null ||
|
||||||
exit "A problem occured while trying to create container."
|
exit "A problem occured while trying to create container."
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
variables() {
|
variables() {
|
||||||
NSAPP=$(echo ${APP,,} | tr -d ' ')
|
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"
|
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
||||||
INTEGER='^[0-9]+([.][0-9]+)?$'
|
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
||||||
color() {
|
color() {
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
|
@ -18,11 +19,13 @@ color() {
|
||||||
HOLD="-"
|
HOLD="-"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function enables error handling in the script by setting options and defining a trap for the ERR signal.
|
||||||
catch_errors() {
|
catch_errors() {
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
||||||
error_handler() {
|
error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
|
@ -31,21 +34,25 @@ error_handler() {
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function displays an informational message with a yellow color.
|
||||||
msg_info() {
|
msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function displays a success message with a green color.
|
||||||
msg_ok() {
|
msg_ok() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function displays an error message with a red color.
|
||||||
msg_error() {
|
msg_error() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
|
||||||
pve_check() {
|
pve_check() {
|
||||||
if [ $(pveversion | grep -c "pve-manager/7\.[0-9]") -eq 0 ]; then
|
if [ $(pveversion | grep -c "pve-manager/7\.[0-9]") -eq 0 ]; then
|
||||||
echo -e "${CROSS} This version of Proxmox Virtual Environment is not supported"
|
echo -e "${CROSS} This version of Proxmox Virtual Environment is not supported"
|
||||||
|
@ -56,6 +63,7 @@ pve_check() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function checks the system architecture and exits if it's not "amd64".
|
||||||
arch_check() {
|
arch_check() {
|
||||||
if [ "$(dpkg --print-architecture)" != "amd64" ]; then
|
if [ "$(dpkg --print-architecture)" != "amd64" ]; then
|
||||||
echo -e "\n ${CROSS} This script will not work with PiMox! \n"
|
echo -e "\n ${CROSS} This script will not work with PiMox! \n"
|
||||||
|
@ -65,6 +73,7 @@ arch_check() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function checks if the script is running through SSH and prompts the user to confirm if they want to proceed or exit.
|
||||||
ssh_check() {
|
ssh_check() {
|
||||||
if command -v pveversion >/dev/null 2>&1; then
|
if command -v pveversion >/dev/null 2>&1; then
|
||||||
if [ -n "${SSH_CLIENT:+x}" ]; then
|
if [ -n "${SSH_CLIENT:+x}" ]; then
|
||||||
|
@ -78,6 +87,7 @@ ssh_check() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function displays the default values for various settings.
|
||||||
echo_default() {
|
echo_default() {
|
||||||
echo -e "${DGN}Using Distribution: ${BGN}$var_os${CL}"
|
echo -e "${DGN}Using Distribution: ${BGN}$var_os${CL}"
|
||||||
echo -e "${DGN}Using $var_os Version: ${BGN}$var_version${CL}"
|
echo -e "${DGN}Using $var_os Version: ${BGN}$var_version${CL}"
|
||||||
|
@ -105,12 +115,14 @@ echo_default() {
|
||||||
echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
|
echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function is called when the user decides to exit the script. It clears the screen and displays an exit message.
|
||||||
exit-script() {
|
exit-script() {
|
||||||
clear
|
clear
|
||||||
echo -e "⚠ User exited script \n"
|
echo -e "⚠ User exited script \n"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function allows the user to configure advanced settings for the script.
|
||||||
advanced_settings() {
|
advanced_settings() {
|
||||||
whiptail --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
whiptail --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
||||||
whiptail --msgbox --title "Default distribution for $APP" "${var_os} \n${var_version} \n" 8 58
|
whiptail --msgbox --title "Default distribution for $APP" "${var_os} \n${var_version} \n" 8 58
|
||||||
|
@ -433,6 +445,7 @@ start() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function collects user settings and integrates all the collected information.
|
||||||
build_container() {
|
build_container() {
|
||||||
if [ "$VERB" == "yes" ]; then set -x; fi
|
if [ "$VERB" == "yes" ]; then set -x; fi
|
||||||
|
|
||||||
|
@ -485,6 +498,7 @@ build_container() {
|
||||||
-unprivileged $CT_TYPE
|
-unprivileged $CT_TYPE
|
||||||
$PW
|
$PW
|
||||||
"
|
"
|
||||||
|
# This executes create_lxc.sh and creates the container and .conf file
|
||||||
bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
|
bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
|
||||||
|
|
||||||
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
|
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
|
||||||
|
@ -519,6 +533,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# This starts the container and executes <app>-install.sh
|
||||||
msg_info "Starting LXC Container"
|
msg_info "Starting LXC Container"
|
||||||
pct start "$CTID"
|
pct start "$CTID"
|
||||||
msg_ok "Started LXC Container"
|
msg_ok "Started LXC Container"
|
||||||
|
@ -530,6 +545,7 @@ EOF
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function sets the description of the container.
|
||||||
description() {
|
description() {
|
||||||
IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
pct set "$CTID" -description "# ${APP} LXC
|
pct set "$CTID" -description "# ${APP} LXC
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# This function sets color variables for formatting output in the terminal
|
||||||
color() {
|
color() {
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
|
@ -14,6 +15,7 @@ color() {
|
||||||
HOLD="-"
|
HOLD="-"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function enables IPv6 if it's not disabled and sets verbose mode if the global variable is set to "yes"
|
||||||
verb_ip6() {
|
verb_ip6() {
|
||||||
if [ "$VERBOSE" = "yes" ]; then
|
if [ "$VERBOSE" = "yes" ]; then
|
||||||
set -x
|
set -x
|
||||||
|
@ -26,11 +28,13 @@ verb_ip6() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function sets error handling options and defines the error_handler function to handle errors
|
||||||
catch_errors() {
|
catch_errors() {
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function handles errors
|
||||||
error_handler() {
|
error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
|
@ -42,21 +46,25 @@ error_handler() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function prints an informational message
|
||||||
msg_info() {
|
msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function prints a success message
|
||||||
msg_ok() {
|
msg_ok() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function prints an error message
|
||||||
msg_error() {
|
msg_error() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection
|
||||||
setting_up_container() {
|
setting_up_container() {
|
||||||
msg_info "Setting up Container OS"
|
msg_info "Setting up Container OS"
|
||||||
sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
|
sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
|
||||||
|
@ -79,6 +87,7 @@ setting_up_container() {
|
||||||
msg_ok "Network Connected: ${BL}$(hostname -I)"
|
msg_ok "Network Connected: ${BL}$(hostname -I)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected
|
||||||
network_check() {
|
network_check() {
|
||||||
set +e
|
set +e
|
||||||
trap - ERR
|
trap - ERR
|
||||||
|
@ -98,6 +107,7 @@ network_check() {
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function updates the Container OS by running apt-get update and upgrade
|
||||||
update_os() {
|
update_os() {
|
||||||
msg_info "Updating Container OS"
|
msg_info "Updating Container OS"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
|
@ -105,6 +115,7 @@ update_os() {
|
||||||
msg_ok "Updated Container OS"
|
msg_ok "Updated Container OS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function modifies the message of the day (motd) and SSH settings
|
||||||
motd_ssh() {
|
motd_ssh() {
|
||||||
echo "export TERM='xterm-256color'" >>/root/.bashrc
|
echo "export TERM='xterm-256color'" >>/root/.bashrc
|
||||||
echo -e "$APPLICATION LXC provided by https://tteck.github.io/Proxmox/\n" >/etc/motd
|
echo -e "$APPLICATION LXC provided by https://tteck.github.io/Proxmox/\n" >/etc/motd
|
||||||
|
@ -115,6 +126,7 @@ motd_ssh() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function customizes the container by modifying the getty service and enabling auto-login for the root user
|
||||||
customize() {
|
customize() {
|
||||||
if [[ "$PASSWORD" == "" ]]; then
|
if [[ "$PASSWORD" == "" ]]; then
|
||||||
msg_info "Customizing Container"
|
msg_info "Customizing Container"
|
||||||
|
|
|
@ -39,7 +39,9 @@ function update_container() {
|
||||||
container=$1
|
container=$1
|
||||||
header_info
|
header_info
|
||||||
name=$(pct exec "$container" hostname)
|
name=$(pct exec "$container" hostname)
|
||||||
echo -e "${BL}[Info]${GN} Updating ${BL}$container${CL} : ${GN}$name${CL} \n"
|
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} Updating ${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"
|
||||||
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
||||||
case "$os" in
|
case "$os" in
|
||||||
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
|
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
|
||||||
|
|
Loading…
Reference in New Issue