mirror of
https://github.com/tteck/Proxmox.git
synced 2025-02-15 06:09:15 +01:00
When running certain scripts, sometimes an 'm' character is wrongly output to the terminal. This PR fixes all instances of this happening. I've also made 'RD' (red) consistent with 'GN' (green) by removing the leading 0, and my editor has kindly removed all trailing spaces from files.
258 lines
6.1 KiB
Bash
258 lines
6.1 KiB
Bash
#!/usr/bin/env bash
|
|
YW=`echo "\033[33m"`
|
|
BL=`echo "\033[36m"`
|
|
RD=`echo "\033[1;31m"`
|
|
CM='\xE2\x9C\x94\033'
|
|
GN=`echo "\033[1;92m"`
|
|
CL=`echo "\033[0m"`
|
|
APP="Motioneye"
|
|
HN=$(echo ${APP,,} | tr -d ' ')
|
|
while true; do
|
|
read -p "This will create a New ${APP} LXC. Proceed(y/n)?" yn
|
|
case $yn in
|
|
[Yy]* ) break;;
|
|
[Nn]* ) exit;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
clear
|
|
function header_info {
|
|
echo -e "${BL}
|
|
__ __ ____ _______ _____ ____ _ _ ________ ________
|
|
| \/ |/ __ \__ __|_ _/ __ \| \ | | ____\ \ / / ____|
|
|
| \ / | | | | | | | || | | | \| | |__ \ \_/ /| |__
|
|
| |\/| | | | | | | | || | | | | __| \ / | __|
|
|
| | | | |__| | | | _| || |__| | |\ | |____ | | | |____
|
|
|_| |_|\____/ |_| |_____\____/|_| \_|______| |_| |______|
|
|
${CL}"
|
|
}
|
|
|
|
header_info
|
|
show_menu(){
|
|
printf " ${YW} 1)${YW} Privileged ${CL}\n"
|
|
printf " ${YW} 2)${GN} Unprivileged ${CL}\n"
|
|
|
|
printf "Please choose a Install Method and hit enter or ${RD}x${CL} to exit."
|
|
read opt
|
|
}
|
|
|
|
option_picked(){
|
|
message1=${@:-"${CL}Error: No message passed"}
|
|
printf " ${YW}${message1}${CL}\n"
|
|
}
|
|
show_menu
|
|
while [ "$opt" != " " ]
|
|
do
|
|
case $opt in
|
|
1) clear;
|
|
header_info;
|
|
option_picked "Using Privileged Install";
|
|
IM=0
|
|
break;
|
|
;;
|
|
2) clear;
|
|
header_info;
|
|
option_picked "Using Unprivileged Install";
|
|
IM=1
|
|
break;
|
|
;;
|
|
|
|
x)exit;
|
|
;;
|
|
\n)exit;
|
|
;;
|
|
*)clear;
|
|
option_picked "Please choose a Install Method from the menu";
|
|
show_menu;
|
|
;;
|
|
esac
|
|
done
|
|
show_menu2(){
|
|
printf " ${YW} 1)${GN} Use Automatic Login ${CL}\n"
|
|
printf " ${YW} 2)${GN} Use Password (changeme) ${CL}\n"
|
|
|
|
printf "Please choose a Password Type and hit enter or ${RD}x${CL} to exit."
|
|
read opt
|
|
}
|
|
|
|
option_picked(){
|
|
message2=${@:-"${CL}Error: No message passed"}
|
|
printf " ${YW}${message1}${CL}\n"
|
|
printf " ${YW}${message2}${CL}\n"
|
|
}
|
|
show_menu2
|
|
while [ "$opt" != " " ]
|
|
do
|
|
case $opt in
|
|
1) clear;
|
|
header_info;
|
|
option_picked "Using Automatic Login";
|
|
PW=" "
|
|
break;
|
|
;;
|
|
2) clear;
|
|
header_info;
|
|
option_picked "Using Password (changeme)";
|
|
PW="-password changeme"
|
|
break;
|
|
;;
|
|
|
|
x)exit;
|
|
;;
|
|
\n)exit;
|
|
;;
|
|
*)clear;
|
|
option_picked "Please choose a Password Type from the menu";
|
|
show_menu2;
|
|
;;
|
|
esac
|
|
done
|
|
show_menu3(){
|
|
printf " ${YW} 1)${GN} Automatic DHCP ${CL}\n"
|
|
printf " ${YW} 2)${GN} Manual DHCP ${CL}\n"
|
|
|
|
printf "Please choose a DHCP Type and hit enter or ${RD}x${CL} to exit."
|
|
read opt
|
|
}
|
|
|
|
option_picked(){
|
|
message3=${@:-"${CL}Error: No message passed"}
|
|
printf " ${YW}${message1}${CL}\n"
|
|
printf " ${YW}${message2}${CL}\n"
|
|
printf " ${YW}${message3}${CL}\n"
|
|
}
|
|
show_menu3
|
|
while [ "$opt" != " " ]
|
|
do
|
|
case $opt in
|
|
1) clear;
|
|
header_info;
|
|
option_picked "Using Automatic DHCP";
|
|
DHCP=" "
|
|
break;
|
|
;;
|
|
2) clear;
|
|
header_info;
|
|
option_picked "Using Manual DHCP";
|
|
DHCP="1"
|
|
break;
|
|
;;
|
|
|
|
x)exit;
|
|
;;
|
|
\n)exit;
|
|
;;
|
|
*)clear;
|
|
option_picked "Please choose a DHCP Type from the menu";
|
|
show_menu3;
|
|
;;
|
|
esac
|
|
done
|
|
|
|
set -o errexit
|
|
set -o errtrace
|
|
set -o nounset
|
|
set -o pipefail
|
|
shopt -s expand_aliases
|
|
alias die='EXIT=$? LINE=$LINENO error_exit'
|
|
trap die ERR
|
|
trap cleanup EXIT
|
|
|
|
function error_exit() {
|
|
trap - ERR
|
|
local DEFAULT='Unknown failure occured.'
|
|
local REASON="\e[97m${1:-$DEFAULT}\e[39m"
|
|
local FLAG="\e[91m[ERROR] \e[93m$EXIT@$LINE"
|
|
msg "$FLAG $REASON"
|
|
[ ! -z ${CTID-} ] && cleanup_ctid
|
|
exit $EXIT
|
|
}
|
|
function warn() {
|
|
local REASON="\e[97m$1\e[39m"
|
|
local FLAG="\e[93m[WARNING]\e[39m"
|
|
msg "$FLAG $REASON"
|
|
}
|
|
function info() {
|
|
local REASON="$1"
|
|
local FLAG="\e[36m[INFO]\e[39m"
|
|
msg "$FLAG $REASON"
|
|
}
|
|
function msg() {
|
|
local TEXT="$1"
|
|
echo -e "$TEXT"
|
|
}
|
|
function cleanup_ctid() {
|
|
if $(pct status $CTID &>/dev/null); then
|
|
if [ "$(pct status $CTID | awk '{print $2}')" == "running" ]; then
|
|
pct stop $CTID
|
|
fi
|
|
pct destroy $CTID
|
|
elif [ "$(pvesm list $STORAGE --vmid $CTID)" != "" ]; then
|
|
pvesm free $ROOTFS
|
|
fi
|
|
}
|
|
function cleanup() {
|
|
popd >/dev/null
|
|
rm -rf $TEMP_DIR
|
|
}
|
|
if [ "$IM" == "1" ]; then
|
|
FEATURES="nesting=1,keyctl=1"
|
|
else
|
|
FEATURES="nesting=1"
|
|
fi
|
|
|
|
TEMP_DIR=$(mktemp -d)
|
|
pushd $TEMP_DIR >/dev/null
|
|
|
|
export CTID=$(pvesh get /cluster/nextid)
|
|
export PCT_OSTYPE=debian
|
|
export PCT_OSVERSION=11
|
|
export PCT_DISK_SIZE=8
|
|
export PCT_OPTIONS="
|
|
-features $FEATURES
|
|
-hostname $HN
|
|
-net0 name=eth0,bridge=vmbr0,ip=dhcp
|
|
-onboot 1
|
|
-cores 2
|
|
-memory 2048
|
|
-unprivileged ${IM}
|
|
${PW}
|
|
"
|
|
bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
|
|
|
|
STORAGE_TYPE=$(pvesm status -storage $(pct config $CTID | grep rootfs | awk -F ":" '{print $2}') | awk 'NR>1 {print $2}')
|
|
if [ "$STORAGE_TYPE" == "zfspool" ]; then
|
|
warn "Some addons may not work due to ZFS not supporting 'fallocate'."
|
|
fi
|
|
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
|
|
cat <<EOF >> $LXC_CONFIG
|
|
lxc.cgroup2.devices.allow: a
|
|
lxc.cap.drop:
|
|
EOF
|
|
if [ "$DHCP" == "1" ]; then
|
|
MAC=$(pct config $CTID \
|
|
| grep -i hwaddr \
|
|
| awk '{print substr($2, 31, length($3) 17 ) }') \
|
|
|
|
echo -e "MAC Address ${BL}$MAC${CL}"
|
|
|
|
dhcp_reservation(){
|
|
printf "Please set DHCP reservation and press Enter."
|
|
read
|
|
}
|
|
dhcp_reservation
|
|
fi
|
|
|
|
echo -en "${GN} Starting LXC Container... "
|
|
pct start $CTID
|
|
echo -e "${CM}${CL} \r"
|
|
|
|
alias lxc-cmd="lxc-attach -n $CTID --"
|
|
|
|
lxc-cmd bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$HN-install.sh)" || exit
|
|
|
|
IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
|
|
|
|
echo -e "${GN}Successfully created ${APP} LXC to${CL} ${BL}$CTID${CL}.
|
|
${BL}${APP}${CL} should be reachable by going to the following URL.
|
|
${BL}http://${IP}:8765${CL} \n"
|