浏览代码

V4 (#397)

* Create adguard-v4.sh

* Create homeassistant-v4.sh

* Create daemonsync-v4.sh

* Update wireguard-v4.sh

* Create dashy-v4.sh

* Create deconz-v4.sh

* Create esphome-v4.sh

* Create grafana-v4.sh

* Create grocy-v4.sh

* Create heimdalldashboard-v4.sh

* Create homebridge-v4.sh

* Create influxdb-v4.sh

* Create iobroker-v4.sh

* Create jellyfin-v4.sh

* Create keycloak-v4.sh

* Create magicmirror-v4.sh

* Create mariadb-v4.sh

* Create meshcentral-v4.sh

* Create motioneye-v4.sh

* Create mqtt-v4.sh

* Create n8n-v4.sh

* Create nginx-proxy-manager-v4.sh

* Create nocodb-v4.sh

* Create node-red-v4.sh

* Create omada-v4.sh

* Create openhab-v4.sh

* Create pihole-v4.sh

* Create podman-homeassistant-v4.sh

* Create postgresql-v4.sh

* Create prometheus-v4.sh

* Create technitiumdns-v4.sh

* Create unifi-v4.sh

* Create uptimekuma-v4.sh

* Create vaultwarden-v4.sh

* Create whoogle-v4.sh

* Create zwavejs2mqtt-v4.sh

* Update README.md

* Update node-red-v4.sh

* Create photoprism-v4.sh

* Update CHANGELOG.MD

* Update README.md
tteckster 2 年之前
父节点
当前提交
83185e903d

+ 2 - 2
CHANGELOG.MD

@@ -3,11 +3,11 @@
 # Change Log
 All notable changes to this project will be documented in this file.
 
-## 2022-08-01
+## 2022-08-02
 
 ### Changed
 
-- **Home Assistant OS VM** 
+- **All LXC/VM** 
   - v4 Script - Whiptail menus
 
 ## 2022-07-26

+ 37 - 37
README.md

@@ -122,7 +122,7 @@ ________________________________________________________________________________
 
 
 <details>
-<summary markdown="span"> 🔸Home Assistant OS VM</summary>
+<summary markdown="span"> Home Assistant OS VM</summary>
  
 <p align="center"><img src="https://github.com/tteck/Proxmox/blob/main/misc/images/haos.png?raw=true"/></p>
  
@@ -160,7 +160,7 @@ A standalone container-based installation of Home Assistant Core
 To create a new Proxmox Home Assistant Container LXC, run the following in the Proxmox Shell.
  
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/homeassistant-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/homeassistant-v4.sh)"
 ```
  
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 16GB Storage - 2vCPU ⚡</h3>
@@ -230,7 +230,7 @@ A standalone container-based installation of Home Assistant Core
 To create a new Proxmox Podman Home Assistant Container LXC, run the following in the Proxmox Shell. 
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/podman-homeassistant-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/podman-homeassistant-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 16GB Storage - 2vCPU ⚡</h3>
  
@@ -300,7 +300,7 @@ ________________________________________________________________________________
 To create a new Proxmox ioBroker LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/iobroker-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/iobroker-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -329,7 +329,7 @@ ________________________________________________________________________________
 To create a new Proxmox openHAB LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/openhab-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/openhab-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -358,7 +358,7 @@ ________________________________________________________________________________
 To create a new Proxmox Homebridge LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/homebridge-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/homebridge-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 1vCPU ⚡</h3>
@@ -415,7 +415,7 @@ Update from the Homebridge UI
 To create a new Proxmox ESPHome LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/esphome-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/esphome-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 2vCPU ⚡</h3>
@@ -448,7 +448,7 @@ ________________________________________________________________________________
 To create a new Proxmox Nginx Proxy Manager LXC Container, run the following in the Proxmox Shell.
 
 ```yaml
- bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nginx-proxy-manager-v3.sh)"
+ bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nginx-proxy-manager-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 3GB Storage - 1vCPU ⚡</h3>
 
@@ -499,7 +499,7 @@ bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/npm_update
 To create a new Proxmox MQTT LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mqtt-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mqtt-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -551,7 +551,7 @@ ________________________________________________________________________________
 To create a new Proxmox Node-RED LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/node-red-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/node-red-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 1vCPU ⚡</h3>
@@ -595,7 +595,7 @@ ________________________________________________________________________________
 To create a new Proxmox n8n LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/n8n-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/n8n-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 3GB Storage - 2vCPU ⚡</h3>
@@ -624,7 +624,7 @@ ________________________________________________________________________________
 To create a new Proxmox Mariadb LXC, run the following in the Proxmox Shell.
  
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mariadb-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mariadb-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 1vCPU ⚡</h3>
@@ -741,7 +741,7 @@ ________________________________________________________________________________
 To create a new Proxmox PostgreSQL LXC, run the following in the Proxmox Shell.
  
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/postgresql-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/postgresql-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 1vCPU ⚡</h3>
@@ -897,7 +897,7 @@ ________________________________________________________________________________
 To create a new Proxmox deCONZ LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/deconz-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/deconz-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 2vCPU ⚡</h3>
 
@@ -926,7 +926,7 @@ ________________________________________________________________________________
 To create a new Proxmox Zwavejs2MQTT LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/zwavejs2mqtt-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/zwavejs2mqtt-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 2vCPU ⚡</h3>
 
@@ -961,7 +961,7 @@ ________________________________________________________________________________
 To create a new Proxmox NocoDB LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nocodb-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nocodb-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 4GB Storage - 1vCPU ⚡</h3>
@@ -991,7 +991,7 @@ ________________________________________________________________________________
 To create a new Proxmox Prometheus LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/prometheus-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/prometheus-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 4GB Storage - 1vCPU ⚡</h3>
@@ -1022,7 +1022,7 @@ ________________________________________________________________________________
 To create a new Proxmox InfluxDB LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/influxdb-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/influxdb-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -1064,7 +1064,7 @@ ________________________________________________________________________________
 To create a new Proxmox Grafana LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/grafana-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/grafana-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1195,7 +1195,7 @@ An application designed to optimize UniFi home and business networks with ease.
 To create a new Proxmox UniFi Network Application LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/unifi-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/unifi-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -1224,7 +1224,7 @@ Omada Controller is software which is used to manage the EAP
 To create a new Proxmox Omada Controller LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/omada-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/omada-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -1258,7 +1258,7 @@ MeshCentral is a full computer management web site. With MeshCentral, you can ru
 To create a new Proxmox MeshCentral LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/meshcentral-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/meshcentral-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1317,7 +1317,7 @@ ________________________________________________________________________________
 To create a new Proxmox Jellyfin Media Server LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/jellyfin-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/jellyfin-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
 
@@ -1347,7 +1347,7 @@ ________________________________________________________________________________
 To create a new Proxmox Pi-hole LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/pihole-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/pihole-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
  
@@ -1379,7 +1379,7 @@ An open source authoritative as well as recursive DNS server
 To create a new Proxmox Technitium DNS LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/technitiumdns-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/technitiumdns-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1406,7 +1406,7 @@ ________________________________________________________________________________
 To create a new Proxmox AdGuard Home LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/adguard-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/adguard-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1436,7 +1436,7 @@ Uptime Kuma is a self-hosted, open source, fancy uptime monitoring and alerting
 To create a new Proxmox Uptime Kuma LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/uptimekuma-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/uptimekuma-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  1GB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1465,7 +1465,7 @@ Get Google search results, but without any ads, javascript, AMP links, cookies,
 To create a new Proxmox Whoogle LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/whoogle-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/whoogle-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1494,7 +1494,7 @@ ________________________________________________________________________________
 To create a new Proxmox Heimdall Dashboard LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/heimdalldashboard-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/heimdalldashboard-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
  
@@ -1524,7 +1524,7 @@ Dashy helps you organize your self-hosted services by making them accessible fro
 To create a new Proxmox Dashy LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/dashy-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/dashy-v4.sh)"
 ```
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 3GB Storage - 2vCPU ⚡</h3>
  
@@ -1555,7 +1555,7 @@ ________________________________________________________________________________
 To create a new Proxmox grocy LXC, run the following in the Proxmox Shell.
 
 ```
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/grocy-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/grocy-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 2GB Storage - 1vCPU ⚡</h3>
@@ -1595,7 +1595,7 @@ ________________________________________________________________________________
 To create a new MagicMirror Server LXC, run the following in the Proxmox Shell.
 
 ```
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/magicmirror-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/magicmirror-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings: 512MiB RAM - 3GB Storage - 1vCPU ⚡</h3>
@@ -1631,7 +1631,7 @@ PhotoPrism® is an AI-powered app for browsing, organizing & sharing your photo
 To create a new Proxmox PhotoPrism LXC, run the following in the Proxmox Shell.
 
 ```
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/photoprism-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/photoprism-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -1674,7 +1674,7 @@ Sync files from app to server, share photos & videos, back up your data and stay
 To create a new Proxmox Daemon Sync Server LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/daemonsync-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/daemonsync-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  512MiB RAM - 8GB Storage - 1vCPU ⚡</h3>
@@ -1697,7 +1697,7 @@ ________________________________________________________________________________
 To create a new Proxmox MotionEye VMS LXC, run the following in the Proxmox Shell.
 
 ```
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/motioneye-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/motioneye-v4.sh)"
 ```
 
 <h3 align="center" id="heading">⚡ Default Settings:  2GB RAM - 8GB Storage - 2vCPU ⚡</h3>
@@ -1923,7 +1923,7 @@ ________________________________________________________________________________
 To create a new Proxmox Keycloak LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/keycloak-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/keycloak-v4.sh)"
 ```
 
 [Keycloak](https://www.keycloak.org/) is an Open Source Identity and Access Management solution for modern Applications and Services.
@@ -1969,7 +1969,7 @@ Alternative implementation of the Bitwarden server API written in Rust and compa
 To create a new Proxmox Vaultwarden LXC, run the following in the Proxmox Shell.
 
 ```yaml
-bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/vaultwarden-v3.sh)"
+bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/vaultwarden-v4.sh)"
 ```
 ⚠️ Vaultwarden needs to be behind a proxy (Nginx Proxy Manager) to obtain HTTPS and to allow clients to connect.
 

+ 264 - 0
ct/adguard-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Adguard"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${GN}
+    ___       __                           __
+   /   | ____/ /___ ___  ______ __________/ /
+  / /| |/ __  / __  / / / / __  / ___/ __  / 
+ / ___ / /_/ / /_/ / /_/ / /_/ / /  / /_/ /  
+/_/v4|_\__,_/\__, /\__,_/\__,_/_/   \__,_/   
+            /____/                           
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:3000${CL} \n"

+ 264 - 0
ct/daemonsync-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Daemon Sync"
+var_disk="8"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    ____                                      _____                 
+   / __ \____ ____  ____ ___  ____  ____     / ___/__  ______  _____
+  / / / / __  / _ \/ __  __ \/ __ \/ __ \    \__ \/ / / / __ \/ ___/
+ / /_/ / /_/ /  __/ / / / / / /_/ / / / /   ___/ / /_/ / / / / /__  
+/_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/ v4/____/\__, /_/ /_/\___/  
+                                                /____/              
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8084${CL} \n"

+ 264 - 0
ct/dashy-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Dashy"
+var_disk="3"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    ____             __         
+   / __ \____ ______/ /_  __  __
+  / / / / __  / ___/ __ \/ / / /
+ / /_/ / /_/ (__  ) / / / /_/ / 
+/_____/\__,_/____/_/ /_/\__, /  
+                   v4  /____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:4000${CL} \n"

+ 277 - 0
ct/deconz-v4.sh

@@ -0,0 +1,277 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="deCONZ"
+var_disk="4"
+var_cpu="2"
+var_ram="1024"
+var_os="ubuntu"
+var_version="20.04"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${YW}
+       __     __________  _   _______
+  ____/ /v4  / ____/ __ \/ | / /__  /
+ / __  / _ \/ /   / / / /  |/ /  / / 
+/ /_/ /  __/ /___/ /_/ / /|  /  / /__
+\__,_/\___/\____/\____/_/ |_/  /____/
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		
+    echo -e "${DGN}Using Container Type: ${BGN}Privileged${CL}"
+    CT_TYPE="0"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
+"18.04" "Bionic" OFF \
+"20.04" "Focal" ON \
+"21.10" "Impish" OFF \
+"22.04" "Jammy" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Ubuntu Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" OFF \
+"0" "Privileged" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID?" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
+cat <<EOF >> $LXC_CONFIG
+lxc.cgroup2.devices.allow: a
+lxc.cap.drop:
+lxc.cgroup2.devices.allow: c 188:* rwm
+lxc.cgroup2.devices.allow: c 189:* rwm
+lxc.mount.entry: /dev/serial/by-id  dev/serial/by-id  none bind,optional,create=dir
+lxc.mount.entry: /dev/ttyUSB0       dev/ttyUSB0       none bind,optional,create=file
+lxc.mount.entry: /dev/ttyACM0       dev/ttyACM0       none bind,optional,create=file
+lxc.mount.entry: /dev/ttyACM1       dev/ttyACM1       none bind,optional,create=file
+EOF
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} should be reachable by going to the following URL.
+             ${BL}http://${IP}${CL}\n"

+ 263 - 0
ct/esphome-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="ESPHome"
+var_disk="4"
+var_cpu="2"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${CL}
+    ___________ ____  __  ______  __  _________
+   / ____/ ___// __ \/ / / / __ \/  |/  / ____/
+  / __/  \__ \/ /_/ / /_/ / / / / /|_/ / __/   
+ / /___ ___/ / ____/ __  / /_/ / /  / / /_v4   
+/_____//____/_/   /_/ /_/\____/_/  /_/_____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:6052${CL} \n"

+ 263 - 0
ct/grafana-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Grafana"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${YW}
+   ______           ____                 
+  / ____/________ _/ __/___ _____  ____ _
+ / / __/ ___/ __  / /_/ __  / __ \/ __  /
+/ /_/ / /  / /_/ / __/ /_/ / / / / /_/ / 
+\____/_/ v4\__,_/_/  \__,_/_/ /_/\__,_/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:3000${CL} \n"

+ 263 - 0
ct/grocy-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="grocy"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+   ____ __________  _______  __
+  / __  / ___/ __ \/ ___/ / / /
+ / /_/ / /  / /_/ / /__/ /_/ / 
+ \__, /_/   \____/\___/\__, /  
+/____/      v4        /____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}${CL} \n"

+ 263 - 0
ct/heimdalldashboard-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Heimdall Dashboard"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    __  __     _               __      ____   ____             __    __                         __
+   / / / /__  (_)___ ___  ____/ /_v4 _/ / /  / __ \____ ______/ /_  / /_  ____  ____ __________/ /
+  / /_/ / _ \/ / __  __ \/ __  / __  / / /  / / / / __  / ___/ __ \/ __ \/ __ \/ __  / ___/ __  / 
+ / __  /  __/ / / / / / / /_/ / /_/ / / /  / /_/ / /_/ (__  ) / / / /_/ / /_/ / /_/ / /  / /_/ /  
+/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/  /_____/\__,_/____/_/ /_/_.___/\____/\__,_/_/   \__,_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:7990${CL} \n"

+ 270 - 0
ct/homeassistant-v4.sh

@@ -0,0 +1,270 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Home Assistant"
+var_disk="16"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    __  __                        ___              _      __              __ 
+   / / / /___  ____ ___  ___ v4  /   |  __________(_)____/ /_____ _____  / /_
+  / /_/ / __ \/ __  __ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __  / __ \/ __/
+ / __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
+/_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+	  echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+    CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID?" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
+cat <<EOF >> $LXC_CONFIG
+lxc.cgroup2.devices.allow: a
+lxc.cap.drop:
+EOF
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} should be reachable by going to the following URL.
+         ${BL}http://${IP}:8123${CL}
+Portainer should be reachable by going to the following URL.
+         ${BL}http://${IP}:9000${CL}\n"

+ 263 - 0
ct/homebridge-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Homebridge"
+var_disk="4"
+var_cpu="1"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${YW}
+    __  ______  __  _____________  ____  ________  ____________
+   / / / / __ \/  |/  / ____/ __ )/ __ \/  _/ __ \/ ____/ ____/
+  / /_/ / / / / /|_/ / __/ / __  / /_/ // // / / / / __/ __/   
+ / __  / /_/ / /  / / /___/ /_/ / _, _// // /_/ / /_/ / /___   
+/_/ /_/\____/_/v4/_/_____/_____/_/ |_/___/_____/\____/_____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8581${CL} \n"

+ 261 - 0
ct/influxdb-v4.sh

@@ -0,0 +1,261 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="InfluxDB"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${YW}
+    ____      ______           ____  ____ 
+   /  _/_v4  / __/ /_  ___  __/ __ \/ __ )
+   / // __ \/ /_/ / / / / |/_/ / / / __  |
+ _/ // / / / __/ / /_/ />  </ /_/ / /_/ / 
+/___/_/ /_/_/ /_/\__,_/_/|_/_____/_____/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"

+ 263 - 0
ct/iobroker-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="ioBroker"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    _       ____             __            
+   (_)___  / __ )_________  / /_____  _____
+  / / __ \/ __  / ___/ __ \/ //_/ _ \/ ___/
+ / / /_/ / /_/ / /  / /_/ / ,< /  __/ /    
+/_/\____/_____/_/ v4\____/_/|_|\___/_/     
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8081${CL} \n"

+ 275 - 0
ct/jellyfin-v4.sh

@@ -0,0 +1,275 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Jellyfin"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="ubuntu"
+var_version="20.04"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${DGN}
+       __________    ____  _____________   __
+      / / ____/ /   / /\ \/ / ____/  _/ | / /
+ __  / / __/ / /   / /  \  / /_   / //  |/ / 
+/ /_/ / /___/ /___/ /_v4/ / __/ _/ // /|  /  
+\____/_____/_____/_____/_/_/   /___/_/ |_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		
+    echo -e "${DGN}Using Container Type: ${BGN}Privileged${CL}"
+    CT_TYPE="0"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
+"18.04" "Bionic" OFF \
+"20.04" "Focal" ON \
+"21.10" "Impish" OFF \
+"22.04" "Jammy" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Ubuntu Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" OFF \
+"0" "Privileged" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID?" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
+cat <<EOF >> $LXC_CONFIG
+lxc.cgroup2.devices.allow: c 226:0 rwm
+lxc.cgroup2.devices.allow: c 226:128 rwm
+lxc.cgroup2.devices.allow: c 29:0 rwm
+lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file
+lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
+lxc.mount.entry: /dev/dri/renderD128 dev/renderD128 none bind,optional,create=file
+EOF
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} should be reachable by going to the following URL.
+             ${BL}http://${IP}:8096${CL}\n"

+ 264 - 0
ct/keycloak-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Keycloak"
+var_disk="4"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    __ __                __            __  
+   / //_/__  __  _______/ /___  ____ _/ /__
+  / ,< / _ \/ / / / ___/ / __ \/ __  / //_/
+ / /| /  __/ /_/ / /__/ / /_/ / /_/ / ,<   
+/_/ |_\___/\__, /\___/_/\____/\__,_/_/|_|  
+     v4   /____/                           
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8080${CL} \n"

+ 264 - 0
ct/magicmirror-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="MagicMirror"
+var_disk="3"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    __  ___            _      __  ____                     
+   /  |/  /___ _____ _(_)____/  |/  (_)_____________  _____
+  / /|_/ / __  / __  / / ___/ /|_/ / / ___/ ___/ __ \/ ___/
+ / /  / / /_/ / /_/ / / /__/ /  / / / /  / /  / /_/ / /    
+/_/  /_/\__,_/\__, /_/\___/_/  /_/_/_/  /_/   \____/_/     
+             /____/   v4                                   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8080${CL} \n"

+ 263 - 0
ct/mariadb-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="MariaDB"
+var_disk="4"
+var_cpu="1"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    __  ___           _       ____  ____ 
+   /  |/  /___ ______(_)___ _/ __ \/ __ )
+  / /|_/ / __  / ___/ / __  / / / / __  |
+ / /  / / /_/ / /  / / /_/ / /_/ / /_/ / 
+/_/  /_/\__,_/_/v4/_/\__,_/_____/_____/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "Adminer should be reachable by going to the following URL.
+         ${BL}http://${IP}/adminer/${CL} \n"

+ 263 - 0
ct/meshcentral-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="MeshCentral"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    __  ___          __    ______           __             __
+   /  |/  /__  _____/ /_  / ____/__  ____  / /__________ _/ /
+  / /|_/ / _ \/ ___/ __ \/ /   / _ \/ __ \/ __/ ___/ __  / / 
+ / /  / /  __(__  ) / / / /___/  __/ / / / /_/ /  / /_/ / /  
+/_/  /_/\___/____/_/ /_/\____/\___/_/ /_/\__/_/ v4\__,_/_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}${CL} \n"

+ 263 - 0
ct/motioneye-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Motioneye"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    __  ___      __  _             ________  ________
+   /  |/  /___  / /_(_)___  ____  / ____/\ \/ / ____/
+  / /|_/ / __ \/ __/ / __ \/ __ \/ __/    \  / __/   
+ / /  / / /_/ / /_/ / /_/ / / / / /___v4  / / /___   
+/_/  /_/\____/\__/_/\____/_/ /_/_____/   /_/_____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8765${CL} \n"

+ 261 - 0
ct/mqtt-v4.sh

@@ -0,0 +1,261 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="MQTT"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${GN}
+    __  _______  ____________
+   /  |/  / __ \/_  __/_  __/
+  / /|_/ / / / / / /   / /   
+ / /  / / /_/ / / /   / /    
+/_/  /_/\___\_\/_/ v4/_/     
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"

+ 264 - 0
ct/n8n-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="n8n"
+var_disk="3"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+         ___        
+        / _ \       
+  _ __ | (_) |_v4_  
+ |  _ \ > _ <|  _ \ 
+ | | | | (_) | | | |
+ |_| |_|\___/|_| |_|
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:5678${CL} \n"

+ 264 - 0
ct/nginx-proxy-manager-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Nginx Proxy Manager"
+var_disk="3"
+var_cpu="1"
+var_ram="1048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    _   __      _               ____                           __  ___                                 
+   / | / /___ _(_)___  _  __   / __ \_________  _  ____  __   /  |/  /___ _____  ____ _____ ____  _____
+  /  |/ / __  / / __ \| |/_/  / /_/ / ___/ __ \| |/_/ / / /  / /|_/ / __  / __ \/ __  / __  / _ \/ ___/
+ / /|  / /_/ / / / / />  <   / ____/ /  / /_/ />  </ /_/ /  / /  / / /_/ / / / / /_/ / /_/ /  __/ /    
+/_/ |_/\__, /_/_/ /_/_/|_|  /_/   /_/   \____/_/|_|\__, /  /_/  /_/\__,_/_/ /_/\__,_/\__, /\___/_/     
+      /____/                         v4           /____/                            /____/             
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:81${CL} \n"

+ 263 - 0
ct/nocodb-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="NocoDB"
+var_disk="4"
+var_cpu="1"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${YW}
+    _   __                 ____  ____ 
+   / | / /___  ____v4___  / __ \/ __ )
+  /  |/ / __ \/ ___/ __ \/ / / / __  |
+ / /|  / /_/ / /__/ /_/ / /_/ / /_/ / 
+/_/ |_/\____/\___/\____/_____/_____/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8080/dashboard${CL} \n"

+ 263 - 0
ct/node-red-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Node-Red"
+var_disk="4"
+var_cpu="1"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    _   __          __        ____           __
+   / | / /___  ____/ /__ v4  / __ \___  ____/ /
+  /  |/ / __ \/ __  / _ \   / /_/ / _ \/ __  / 
+ / /|  / /_/ / /_/ /  __/  / _, _/  __/ /_/ /  
+/_/ |_/\____/\__,_/\___/  /_/ |_|\___/\__,_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:1880${CL} \n"

+ 266 - 0
ct/omada-v4.sh

@@ -0,0 +1,266 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Omada"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="ubuntu"
+var_version="20.04"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+   ____                      __     
+  / __ \____ ___v4____ _____/ /___ _
+ / / / / __  __ \/ __  / __  / __  /
+/ /_/ / / / / / / /_/ / /_/ / /_/ / 
+\____/_/ /_/ /_/\__,_/\__,_/\__,_/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		
+	        echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+	        CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+                echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+                VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
+"18.04" "Bionic" OFF \
+"20.04" "Focal" ON \
+"21.10" "Impish" OFF \
+"22.04" "Jammy" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Ubuntu Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID?" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} should be reachable by going to the following URL.
+         ${BL}https://${IP}:8043${CL} \n"

+ 264 - 0
ct/openhab-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="openHAB"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${YW}
+                          __  _____    ____ 
+  ____v4____  ___  ____  / / / /   |  / __ )
+ / __ \/ __ \/ _ \/ __ \/ /_/ / /| | / __  |
+/ /_/ / /_/ /  __/ / / / __  / ___ |/ /_/ / 
+\____/ .___/\___/_/ /_/_/ /_/_/  |_/_____/  
+    /_/                                     
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8080${CL} \n"

+ 263 - 0
ct/photoprism-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="PhotoPrism"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    ____  __  ______  __________  ____  ____  _________ __  ___
+   / __ \/ / / / __ \/_  __/ __ \/ __ \/ __ \/  _/ ___//  |/  /
+  / /_/ / /_/ / / / / / / / / / / /_/ / /_/ // / \__ \/ /|_/ / 
+ / ____/ __  / /_/ / / / / /_/ / ____/ _, _// / v4_/ / /  / /  
+/_/   /_/ /_/\____/ /_/  \____/_/   /_/ |_/___//____/_/  /_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:2342${CL} \n"

+ 263 - 0
ct/pihole-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Pihole"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    ____  ____   __  ______  __    ______
+   / __ \/  _/  / / / / __ \/ /   / ____/
+  / /_/ // /___/ /_/ / / / / /   / __/   
+ / ____// /___/ __  / /_/ / /v4_/ /___   
+/_/   /___/  /_/ /_/\____/_____/_____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Privileged${CL}"
+		CT_TYPE="0"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" OFF \
+"0" "Privileged" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}/admin${CL} \n"

+ 274 - 0
ct/podman-homeassistant-v4.sh

@@ -0,0 +1,274 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Podman-Home Assistant"
+var_disk="16"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+                     ____            __                                      
+                    / __ \____  ____/ /___ ___  ____ _____                   
+           v4      / /_/ / __ \/ __  / __  __ \/ __  / __ \                  
+                  / ____/ /_/ / /_/ / / / / / / /_/ / / / /                  
+    __  __       /_/    \____/\__,_/_/ /_/ /_/\__,_/_/ /_/__              __ 
+   / / / /___  ____ ___  ___     /   |  __________(_)____/ /_____ _____  / /_
+  / /_/ / __ \/ __  __ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __  / __ \/ __/
+ / __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
+/_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+	  echo -e "${DGN}Using Container Type: ${BGN}Privileged${CL}"
+    CT_TYPE="0"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" OFF \
+"0" "Privileged" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID?" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
+cat <<EOF >> $LXC_CONFIG
+lxc.cgroup2.devices.allow: a
+lxc.cap.drop:
+EOF
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} should be reachable by going to the following URL.
+         ${BL}http://${IP}:8123${CL}
+Yacht should be reachable by going to the following URL.
+         ${BL}http://${IP}:8000${CL}\n"

+ 264 - 0
ct/postgresql-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="PostgreSQL"
+var_disk="4"
+var_cpu="1"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+    ____             __                 _____ ____    __ 
+   / __ \____  _____/ /_____ _________ / ___// __ \  / / 
+  / /_/ / __ \/ ___/ __/ __  / ___/ _ \\__ \/ / / / / /  
+ / ____/ /_/ (__  ) /_/ /_/ / /  /  __/__/ / /_/ / / /___
+/_/    \____/____/\__/\__, /_/v4 \___/____/\___\_\/_____/
+                     /____/                              
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "Adminer should be reachable by going to the following URL.
+         ${BL}http://${IP}/adminer/${CL} \n"

+ 263 - 0
ct/prometheus-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Prometheus"
+var_disk="4"
+var_cpu="1"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+    ____                            __  __                   
+   / __ \_________  ____ ___  ___  / /_/ /_  ___  __  _______
+  / /_/ / ___/ __ \/ __  __ \/ _ \/ __/ __ \/ _ \/ / / / ___/
+ / ____/ /  / /_/ / / / / / /  __/ /_/ / / /  __/ /_/ (__  ) 
+/_/ v4/_/   \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:9090${CL} \n"

+ 263 - 0
ct/technitiumdns-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Technitium DNS"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${RD}
+  ______          __          _ __  _                    ____  _   _______
+ /_  __/__  _____/ /_  ____  (_) /_(_)_  ______ ___ v4  / __ \/ | / / ___/
+  / / / _ \/ ___/ __ \/ __ \/ / __/ / / / / __  __ \   / / / /  |/ /\__ \ 
+ / / /  __/ /__/ / / / / / / / /_/ / /_/ / / / / / /  / /_/ / /|  /___/ / 
+/_/  \___/\___/_/ /_/_/ /_/_/\__/_/\__,_/_/ /_/ /_/  /_____/_/ |_//____/  
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:5380${CL} \n"

+ 263 - 0
ct/unifi-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Unifi"
+var_disk="8"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+   __  __      _ _____ 
+  / / / /_v4  (_) __(_)
+ / / / / __ \/ / /_/ / 
+/ /_/ / / / / / __/ /  
+\____/_/ /_/_/_/ /_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP}${CL} should be reachable by going to the following URL.
+         ${BL}https://${IP}:8443${CL} \n"

+ 264 - 0
ct/uptimekuma-v4.sh

@@ -0,0 +1,264 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Uptime Kuma"
+var_disk="4"
+var_cpu="1"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${DGN}
+   __  __      __  _                   __ __                     
+  / / / /___  / /_(_)___ ___  ___ v4  / //_/_  ______ ___  ____ _
+ / / / / __ \/ __/ / __  __ \/ _ \   / ,< / / / / __  __ \/ __  /
+/ /_/ / /_/ / /_/ / / / / / /  __/  / /| / /_/ / / / / / / /_/ / 
+\____/ .___/\__/_/_/ /_/ /_/\___/  /_/ |_\__,_/_/ /_/ /_/\__,_/  
+    /_/                                                          
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:3001${CL} \n"

+ 267 - 0
ct/vaultwarden-v4.sh

@@ -0,0 +1,267 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Vaultwarden"
+var_disk="6"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${CL}
+ _    _____   __  ____  _______       _____    ____  ____  _______   __
+| |  / /   | / / / / / /_  __/ |     / /   |  / __ \/ __ \/ ____/ | / /
+| | / / /| |/ / / / /   / /  | | /| / / /| | / /_/ / / / / __/ /  |/ / 
+| |/ / ___ / /_/ / /___/ /   | |/ |/ / ___ |/ _, _/ /_/ / /___/ /|  /  
+|___/_/  |_\____/_____/_/ v4 |__/|__/_/  |_/_/ |_/_____/_____/_/ |_/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_info "Setting Container to Normal Resources"
+pct set $CTID -memory 512
+pct set $CTID -cores 1
+msg_ok "Set Container to Normal Resources"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8000${CL} \n"

+ 263 - 0
ct/whoogle-v4.sh

@@ -0,0 +1,263 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Whoogle"
+var_disk="2"
+var_cpu="1"
+var_ram="512"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${GN}
+ _       ____  ______  ____  ________    ______
+| | v4  / / / / / __ \/ __ \/ ____/ /   / ____/
+| | /| / / /_/ / / / / / / / / __/ /   / __/   
+| |/ |/ / __  / /_/ / /_/ / /_/ / /___/ /___   
+|__/|__/_/ /_/\____/\____/\____/_____/_____/   
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Unprivileged${CL} ${RD}NO DEVICE PASSTHROUGH${CL}"
+		CT_TYPE="1"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" ON \
+"0" "Privileged" OFF \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:5000${CL} \n"

+ 275 - 0
ct/zwavejs2mqtt-v4.sh

@@ -0,0 +1,275 @@
+#!/usr/bin/env bash
+echo -e "Loading..."
+APP="Zwavejs2MQTT"
+var_disk="4"
+var_cpu="2"
+var_ram="1024"
+var_os="debian"
+var_version="11"
+NSAPP=$(echo ${APP,,} | tr -d ' ')
+var_install="${NSAPP}-install"
+NEXTID=$(pvesh get /cluster/nextid)
+INTEGER='^[0-9]+$'
+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"`
+CL=`echo "\033[m"`
+BFR="\\r\\033[K"
+HOLD="-"
+CM="${GN}✓${CL}"
+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
+function error_exit() {
+  trap - ERR
+  local reason="Unknown failure occurred."
+  local msg="${1:-$reason}"
+  local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
+  echo -e "$flag $msg" 1>&2
+  exit $EXIT
+}
+if (whiptail --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then
+    echo "User selected Yes"
+else
+    clear
+    echo -e "⚠ User exited script \n"
+    exit
+fi
+function header_info {
+echo -e "${BL}
+ _____                             _     ___   __  _______  ____________
+/__  /_      ______ __   _____    (_)___|__ \ /  |/  / __ \/_  __/_  __/
+  / /| | /| / / __  / | / / _ \  / / ___/_/ // /|_/ / / / / / /   / /   
+ / /_| |/ |/ / /_/ /| |/ /  __/ / (__  ) __// /  / / /_/ / / /   / /    
+/____/__/|__/\__,_/ |___/\___/_/ /____/____/_/  /_/\___\_\/_/ v4/_/     
+                            /___/                                       
+${CL}"
+}
+function msg_info() {
+    local msg="$1"
+    echo -ne " ${HOLD} ${YW}${msg}..."
+}
+function msg_ok() {
+    local msg="$1"
+    echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+}
+function PVE_CHECK() {
+    PVE=$(pveversion | grep "pve-manager/7" | wc -l)
+if [[ $PVE != 1 ]]; then
+   echo -e "${RD}This script requires Proxmox Virtual Environment 7.0 or greater${CL}"
+   echo -e "Exiting..."
+   sleep 2
+   exit
+fi
+}
+function default_settings() {
+		echo -e "${DGN}Using ${var_os} Version: ${BGN}${var_version}${CL}"
+		echo -e "${DGN}Using Container Type: ${BGN}Privileged${CL}"
+		CT_TYPE="0"
+		echo -e "${DGN}Using Root Password: ${BGN}Automatic Login${CL}"
+		PW=""
+		echo -e "${DGN}Using Container ID: ${BGN}$NEXTID${CL}"
+		CT_ID=$NEXTID
+		echo -e "${DGN}Using Hostname: ${BGN}$NSAPP${CL}"
+		HN=$NSAPP
+		echo -e "${DGN}Using Disk Size: ${BGN}$var_disk${CL}${DGN}GB${CL}"
+		DISK_SIZE="$var_disk"
+		echo -e "${DGN}Allocated Cores ${BGN}$var_cpu${CL}"
+		CORE_COUNT="$var_cpu"
+		echo -e "${DGN}Allocated Ram ${BGN}$var_ram${CL}"
+		RAM_SIZE="$var_ram"
+		echo -e "${DGN}Using Bridge: ${BGN}vmbr0${CL}"
+		BRG="vmbr0"
+		echo -e "${DGN}Using Static IP Address: ${BGN}dhcp${CL}"
+		NET=dhcp
+		echo -e "${DGN}Using Gateway Address: ${BGN}Default${CL}"
+		GATE=""
+		echo -e "${DGN}Using MAC Address: ${BGN}Default${CL}"
+		MAC=""
+    echo -e "${DGN}Using VLAN Tag: ${BGN}Default${CL}"
+    VLAN=""
+		echo -e "${BL}Creating a ${APP} LXC using the above default settings${CL}"
+}
+function advanced_settings() {
+var_version=$(whiptail --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
+"10" "Buster" OFF \
+"11" "Bullseye" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Debian Version: ${BGN}$var_version${CL}"
+else
+    exit
+fi
+CT_TYPE=$(whiptail --title "CONTAINER TYPE" --radiolist "Choose Type" 8 58 2 \
+"1" "Unprivileged" OFF \
+"0" "Privileged" ON \
+3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container Type: ${BGN}$CT_TYPE${CL}"
+else
+    exit
+fi
+PW1=$(whiptail --inputbox "Set Root Password" 8 58  --title "PASSWORD(leave blank for automatic login)" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $PW1 ]; then PW1="Automatic Login" PW=" ";
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+else
+    PW="-password $PW1"
+    echo -e "${DGN}Using Root Password: ${BGN}$PW1${CL}"
+  fi
+fi
+CT_ID=$(whiptail --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Container ID: ${BGN}$CT_ID${CL}"
+else
+    exit
+fi
+CT_NAME=$(whiptail --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    HN=$(echo ${CT_NAME,,} | tr -d ' ')
+    echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
+else
+    exit
+fi
+DISK_SIZE=$(whiptail --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Disk Size: ${BGN}$DISK_SIZE${CL}"
+else
+    exit
+fi
+CORE_COUNT=$(whiptail --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
+else
+    exit
+fi
+RAM_SIZE=$(whiptail --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
+else
+    exit
+fi
+BRG=$(whiptail --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
+else
+    exit
+fi
+NET=$(whiptail --inputbox "Set a Static IPv4 CIDR Address(/24)" 8 58 dhcp --title "IP ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+    echo -e "${DGN}Using IP Address: ${BGN}$NET${CL}"
+else
+    exit
+fi
+GATE1=$(whiptail --inputbox "Set a Gateway IP (mandatory if Static IP was used)" 8 58  --title "GATEWAY IP" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $GATE1 ]; then GATE1="Default" GATE="";
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+else
+    GATE=",gw=$GATE1"
+    echo -e "${DGN}Using Gateway IP Address: ${BGN}$GATE1${CL}"
+  fi
+fi
+MAC1=$(whiptail --inputbox "Set a MAC Address(leave blank for default)" 8 58  --title "MAC ADDRESS" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $MAC1 ]; then MAC1="Default" MAC="";
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+else
+    MAC=",hwaddr=$MAC1"
+    echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
+  fi
+fi
+VLAN1=$(whiptail --inputbox "Set a Vlan(leave blank for default)" 8 58  --title "VLAN" 3>&1 1>&2 2>&3)
+exitstatus=$?
+if [ $exitstatus = 0 ]; then
+  if [ -z $VLAN1 ]; then VLAN1="Default" VLAN="";
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+else
+    VLAN=",tag=$VLAN1"
+    echo -e "${DGN}Using Vlan: ${BGN}$VLAN1${CL}"
+  fi  
+fi
+if (whiptail --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
+    echo -e "${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
+else
+  clear
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+function start_script() {
+if (whiptail --title "SETTINGS" --yesno "Use Default Settings?" 10 58); then
+  header_info
+  echo -e "${BL}Using Default Settings${CL}"
+  default_settings
+else
+  header_info
+  echo -e "${RD}Using Advanced Settings${CL}"
+  advanced_settings
+fi
+}
+clear
+start_script
+if [ "$CT_TYPE" == "1" ]; then 
+ FEATURES="nesting=1,keyctl=1"
+ else
+ FEATURES="nesting=1"
+ fi
+TEMP_DIR=$(mktemp -d)
+pushd $TEMP_DIR >/dev/null
+export CTID=$CT_ID
+export PCT_OSTYPE=$var_os
+export PCT_OSVERSION=$var_version
+export PCT_DISK_SIZE=$DISK_SIZE
+export PCT_OPTIONS="
+  -features $FEATURES
+  -hostname $HN
+  -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN
+  -onboot 1
+  -cores $CORE_COUNT
+  -memory $RAM_SIZE
+  -unprivileged $CT_TYPE
+  $PW
+"
+bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit
+LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
+cat <<EOF >> $LXC_CONFIG
+lxc.cgroup2.devices.allow: a
+lxc.cap.drop:
+lxc.cgroup2.devices.allow: c 188:* rwm
+lxc.cgroup2.devices.allow: c 189:* rwm
+lxc.mount.entry: /dev/serial/by-id  dev/serial/by-id  none bind,optional,create=dir
+lxc.mount.entry: /dev/ttyUSB0       dev/ttyUSB0       none bind,optional,create=file
+lxc.mount.entry: /dev/ttyACM0       dev/ttyACM0       none bind,optional,create=file
+lxc.mount.entry: /dev/ttyACM1       dev/ttyACM1       none bind,optional,create=file
+EOF
+msg_info "Starting LXC Container"
+pct start $CTID
+msg_ok "Started LXC Container"
+lxc-attach -n $CTID -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/setup/$var_install.sh)" || exit
+IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
+pct set $CTID -description "# ${APP} LXC
+### https://tteck.github.io/Proxmox/"
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} Setup should be reachable by going to the following URL.
+         ${BL}http://${IP}:8091${CL} \n"