mirror of
https://github.com/community-scripts/ProxmoxVE
synced 2025-01-30 20:40:15 +00:00
Compare commits
33 Commits
9302e4bad6
...
c2fdb8c4c7
Author | SHA1 | Date | |
---|---|---|---|
|
c2fdb8c4c7 | ||
|
2f2d1eeec3 | ||
|
e76e5ec4a0 | ||
|
7df2297be0 | ||
|
35a66c5f1f | ||
|
e7af6f31ad | ||
|
8337ca06fa | ||
|
dd0cdf5d25 | ||
|
3b37f6a5b7 | ||
|
5a93af33ba | ||
|
d73f8f224a | ||
|
0e04db089e | ||
|
b1b3d5b80a | ||
|
3bbeaa8a9d | ||
|
c5ba9493f8 | ||
|
6e0527dc19 | ||
|
f1e6e0ae56 | ||
|
804ea32190 | ||
|
038947416d | ||
|
4cf043675e | ||
|
9fd9ab00ff | ||
|
50b5a7d1cf | ||
|
58ba921fec | ||
|
1c8a0a53d2 | ||
|
46c7c0e9ca | ||
|
33d6f8b860 | ||
|
64e14fe982 | ||
|
a8f8ca65a0 | ||
|
c6c026e221 | ||
|
4dcf0dc0b8 | ||
|
81c327c317 | ||
|
c9eb13a20c | ||
|
00e73e369d |
27
CHANGELOG.md
27
CHANGELOG.md
@ -17,6 +17,30 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-01-21
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- Add new Script: LXC Delete (Proxmox) [@MickLesk](https://github.com/MickLesk) ([#1636](https://github.com/community-scripts/ProxmoxVE/pull/1636))
|
||||||
|
- New script: ProjectSend [@bvdberg01](https://github.com/bvdberg01) ([#1616](https://github.com/community-scripts/ProxmoxVE/pull/1616))
|
||||||
|
- New Script: Beszel [@Sinofage](https://github.com/Sinofage) ([#1619](https://github.com/community-scripts/ProxmoxVE/pull/1619))
|
||||||
|
- New Script: Docker VM [@thost96](https://github.com/thost96) ([#1608](https://github.com/community-scripts/ProxmoxVE/pull/1608))
|
||||||
|
- New script: SQL Server 2022 [@kris701](https://github.com/kris701) ([#1482](https://github.com/community-scripts/ProxmoxVE/pull/1482))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- ActualBudget: Fix Update-Function, Fix Wget Crawling, Add Versionscheck [@MickLesk](https://github.com/MickLesk) ([#1643](https://github.com/community-scripts/ProxmoxVE/pull/1643))
|
||||||
|
- Fix Photoprism missing folder & environments [@MickLesk](https://github.com/MickLesk) ([#1639](https://github.com/community-scripts/ProxmoxVE/pull/1639))
|
||||||
|
- Update MOTD: Add Dynamic IP with profile.d by @JcMinarro [@MickLesk](https://github.com/MickLesk) ([#1633](https://github.com/community-scripts/ProxmoxVE/pull/1633))
|
||||||
|
- PBS.sh: Fix wrong URL after Setup [@thost96](https://github.com/thost96) ([#1629](https://github.com/community-scripts/ProxmoxVE/pull/1629))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Update glpi.json [@opastorello](https://github.com/opastorello) ([#1641](https://github.com/community-scripts/ProxmoxVE/pull/1641))
|
||||||
|
- Fix Docker-VM name on website [@Sinofage](https://github.com/Sinofage) ([#1630](https://github.com/community-scripts/ProxmoxVE/pull/1630))
|
||||||
|
|
||||||
## 2025-01-20
|
## 2025-01-20
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@ -28,8 +52,8 @@ Do not break established syntax in this file, as it is automatically updated by
|
|||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update Kimai Dependency: Use PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#1609](https://github.com/community-scripts/ProxmoxVE/pull/1609))
|
||||||
- Feature: Add xCaddy for external Modules on Caddy-LXC [@MickLesk](https://github.com/MickLesk) ([#1613](https://github.com/community-scripts/ProxmoxVE/pull/1613))
|
- Feature: Add xCaddy for external Modules on Caddy-LXC [@MickLesk](https://github.com/MickLesk) ([#1613](https://github.com/community-scripts/ProxmoxVE/pull/1613))
|
||||||
- Update Kimai Dependency: Use PHP 8.4 [@MickLesk](https://github.com/MickLesk) ([#1609](https://github.com/community-scripts/ProxmoxVE/pull/1609))
|
|
||||||
- Fix Pocketbase URL after install [@MickLesk](https://github.com/MickLesk) ([#1597](https://github.com/community-scripts/ProxmoxVE/pull/1597))
|
- Fix Pocketbase URL after install [@MickLesk](https://github.com/MickLesk) ([#1597](https://github.com/community-scripts/ProxmoxVE/pull/1597))
|
||||||
- Unifi.sh fix wrong URL after Install [@thost96](https://github.com/thost96) ([#1601](https://github.com/community-scripts/ProxmoxVE/pull/1601))
|
- Unifi.sh fix wrong URL after Install [@thost96](https://github.com/thost96) ([#1601](https://github.com/community-scripts/ProxmoxVE/pull/1601))
|
||||||
|
|
||||||
@ -40,6 +64,7 @@ Do not break established syntax in this file, as it is automatically updated by
|
|||||||
|
|
||||||
### 🧰 Maintenance
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [core] Update build.func: Add defaults to Advanced mode [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1548](https://github.com/community-scripts/ProxmoxVE/pull/1548))
|
||||||
- Update build.func: Fix Advanced Tags (Remove all if empty / overwrite if default cleared) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1612](https://github.com/community-scripts/ProxmoxVE/pull/1612))
|
- Update build.func: Fix Advanced Tags (Remove all if empty / overwrite if default cleared) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1612](https://github.com/community-scripts/ProxmoxVE/pull/1612))
|
||||||
- Add new Check for LXC MaxKeys by @cricalix [@MickLesk](https://github.com/MickLesk) ([#1602](https://github.com/community-scripts/ProxmoxVE/pull/1602))
|
- Add new Check for LXC MaxKeys by @cricalix [@MickLesk](https://github.com/MickLesk) ([#1602](https://github.com/community-scripts/ProxmoxVE/pull/1602))
|
||||||
|
|
||||||
|
@ -28,33 +28,48 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/actualbudget ]]; then
|
if [[ ! -d /opt/actualbudget ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v jq >/dev/null 2>&1; then
|
if ! command -v jq >/dev/null 2>&1; then
|
||||||
echo "Installing jq..."
|
echo "Installing jq..."
|
||||||
apt-get install -y jq >/dev/null 2>&1
|
apt-get install -y jq >/dev/null 2>&1
|
||||||
echo "Installed jq..."
|
echo "Installed jq..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
systemctl stop actualbudget
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
|
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
|
||||||
TEMPD="$(mktemp -d)"
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
cd "${TEMPD}"
|
msg_info "Stopping ${APP}"
|
||||||
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
|
systemctl stop actualbudget
|
||||||
|
msg_ok "${APP} Stopped"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
|
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O actual-server.tar.gz
|
||||||
|
tar -xzvf actual-server.tar.gz >/dev/null 2>&1
|
||||||
mv /opt/actualbudget /opt/actualbudget_bak
|
mv /opt/actualbudget /opt/actualbudget_bak
|
||||||
mkdir -p /opt/actualbudget/
|
mkdir -p /opt/actualbudget/
|
||||||
mv actualbudget-actual-server-*/* /opt/actualbudget/
|
mv actual-server-* /opt/actualbudget
|
||||||
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
||||||
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
||||||
cd /opt/actualbudget
|
cd /opt/actualbudget
|
||||||
yarn install &>/dev/null
|
yarn install &>/dev/null
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
systemctl start actualbudget
|
systemctl start actualbudget
|
||||||
msg_ok "Successfully Updated ${APP} to ${RELEASE}"
|
msg_ok "Started ${APP}"
|
||||||
rm -rf "${TEMPD}"
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
rm -rf /opt/actualbudget_bak
|
rm -rf /opt/actualbudget_bak
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
47
ct/beszel.sh
Normal file
47
ct/beszel.sh
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) community-scripts ORG
|
||||||
|
# Author: Michelle Zitzerman (Sinofage)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://beszel.dev/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Beszel"
|
||||||
|
var_tags="monitoring"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="512"
|
||||||
|
var_disk="5"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/beszel ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
/opt/beszel/beszel update
|
||||||
|
msg_error "Ther is currently no automatic update function for ${APP}."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
|
@ -52,4 +52,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8007${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8007${CL}"
|
||||||
|
71
ct/projectsend.sh
Normal file
71
ct/projectsend.sh
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.projectsend.org/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="ProjectSend"
|
||||||
|
var_tags="media"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="8"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/projectsend ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/projectsend/projectsend/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop apache2
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
wget -q "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip"
|
||||||
|
unzip -o -q "projectsend-r${RELEASE}.zip" -d projectsend
|
||||||
|
chown -R www-data:www-data /opt/projectsend
|
||||||
|
chmod -R 775 /opt/projectsend
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start apache2
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf "/opt/projectsend-r${RELEASE}.zip"
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
49
ct/sqlserver2022.sh
Normal file
49
ct/sqlserver2022.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/kris701/ProxmoxVE/refs/heads/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Kristian Skov
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.microsoft.com/en-us/sql-server/sql-server-2022
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="SQL Server 2022"
|
||||||
|
var_tags="sql"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="10"
|
||||||
|
var_os="ubuntu"
|
||||||
|
var_version="22.04"
|
||||||
|
var_unprivileged="0"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/mssql ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}${IP}:1433${CL}"
|
@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
msg_ok "Set up Node.js Repository"
|
msg_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
@ -36,10 +36,11 @@ $STD apt-get install -y nodejs
|
|||||||
$STD npm install --global yarn
|
$STD npm install --global yarn
|
||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
|
msg_info "Installing Actual Budget"
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
|
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
|
||||||
msg_info "Installing Actual Budget $RELEASE"
|
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O actual-server.tar.gz
|
||||||
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
|
$STD tar -xzvf actual-server.tar.gz
|
||||||
mv actualbudget-actual-server-* /opt/actualbudget
|
mv *ctual-server-* /opt/actualbudget
|
||||||
mkdir -p /opt/actualbudget/server-files
|
mkdir -p /opt/actualbudget/server-files
|
||||||
mkdir -p /opt/actualbudget-data
|
mkdir -p /opt/actualbudget-data
|
||||||
chown -R root:root /opt/actualbudget/server-files
|
chown -R root:root /opt/actualbudget/server-files
|
||||||
@ -52,6 +53,7 @@ PORT=5006
|
|||||||
EOF
|
EOF
|
||||||
cd /opt/actualbudget
|
cd /opt/actualbudget
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
|
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||||
msg_ok "Installed Actual Budget"
|
msg_ok "Installed Actual Budget"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
54
install/beszel-install.sh
Normal file
54
install/beszel-install.sh
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Michelle Zitzerman (Sinofage)
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
tar \
|
||||||
|
sudo \
|
||||||
|
mc
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Beszel"
|
||||||
|
mkdir -p /opt/beszel
|
||||||
|
curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee /opt/beszel/beszel >/dev/null
|
||||||
|
chmod +x /opt/beszel/beszel
|
||||||
|
msg_ok "Installed Beszel"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/beszel-hub.service
|
||||||
|
[Unit]
|
||||||
|
Description=Beszel Hub Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/opt/beszel/beszel serve --http "0.0.0.0:8090"
|
||||||
|
WorkingDirectory=/opt/beszel
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now beszel-hub.service
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
@ -14,33 +14,35 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
msg_info "Installing Dependencies (Patience)"
|
||||||
$STD apt-get install -y curl
|
$STD apt-get install -y \
|
||||||
$STD apt-get install -y sudo
|
curl \
|
||||||
$STD apt-get install -y mc
|
sudo \
|
||||||
$STD apt-get install -y exiftool
|
mc \
|
||||||
$STD apt-get install -y ffmpeg
|
exiftool \
|
||||||
$STD apt-get install -y libheif1
|
ffmpeg \
|
||||||
$STD apt-get install -y libpng-dev
|
libheif1 \
|
||||||
$STD apt-get install -y libjpeg-dev
|
libpng-dev \
|
||||||
$STD apt-get install -y libtiff-dev
|
libjpeg-dev \
|
||||||
$STD apt-get install -y imagemagick
|
libtiff-dev \
|
||||||
$STD apt-get install -y darktable
|
imagemagick \
|
||||||
$STD apt-get install -y rawtherapee
|
darktable \
|
||||||
$STD apt-get install -y libvips42
|
rawtherapee \
|
||||||
|
libvips42 \
|
||||||
|
lsb-release
|
||||||
|
|
||||||
echo 'export PATH=/usr/local:$PATH' >>~/.bashrc
|
echo 'export PATH=/usr/local:$PATH' >>~/.bashrc
|
||||||
export PATH=/usr/local:$PATH
|
export PATH=/usr/local:$PATH
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing PhotoPrism (Patience)"
|
msg_info "Installing PhotoPrism (Patience)"
|
||||||
mkdir -p /opt/photoprism/{cache,config,photos/originals,photos/import,storage,temp}
|
mkdir -p /opt/photoprism/{cache,config,photos,storage,temp}
|
||||||
|
mkdir -p /opt/photoprism/photos/{originals,import}
|
||||||
|
mkdir -p /opt/photoprism_backups
|
||||||
wget -q -cO - https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xz -C /opt/photoprism --strip-components=1
|
wget -q -cO - https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xz -C /opt/photoprism --strip-components=1
|
||||||
if [[ ${PCT_OSTYPE} == "ubuntu" ]]; then
|
LIBHEIF_URL=$(wget -q -O - "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||||
wget -q -cO - https://dl.photoprism.app/dist/libheif/libheif-jammy-amd64-v1.17.1.tar.gz | tar -xzf - -C /usr/local --strip-components=1
|
wget -q -cO - "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" | tar -xzf - -C /usr/local --strip-components=1
|
||||||
else
|
|
||||||
wget -q -cO - https://dl.photoprism.app/dist/libheif/libheif-bookworm-amd64-v1.17.1.tar.gz | tar -xzf - -C /usr/local --strip-components=1
|
|
||||||
fi
|
|
||||||
ldconfig
|
ldconfig
|
||||||
|
chmod -R 755 /opt/photoprism/photos/originals
|
||||||
cat <<EOF >/opt/photoprism/config/.env
|
cat <<EOF >/opt/photoprism/config/.env
|
||||||
PHOTOPRISM_AUTH_MODE='password'
|
PHOTOPRISM_AUTH_MODE='password'
|
||||||
PHOTOPRISM_ADMIN_PASSWORD='changeme'
|
PHOTOPRISM_ADMIN_PASSWORD='changeme'
|
||||||
@ -50,6 +52,14 @@ PHOTOPRISM_SITE_CAPTION='https://Helper-Scripts.com'
|
|||||||
PHOTOPRISM_STORAGE_PATH='/opt/photoprism/storage'
|
PHOTOPRISM_STORAGE_PATH='/opt/photoprism/storage'
|
||||||
PHOTOPRISM_ORIGINALS_PATH='/opt/photoprism/photos/originals'
|
PHOTOPRISM_ORIGINALS_PATH='/opt/photoprism/photos/originals'
|
||||||
PHOTOPRISM_IMPORT_PATH='/opt/photoprism/photos/import'
|
PHOTOPRISM_IMPORT_PATH='/opt/photoprism/photos/import'
|
||||||
|
PHOTOPRISM_BACKUP_PATH='/opt/photoprism_backups'
|
||||||
|
PHOTOPRISM_DATABASE_DRIVER='sqlite'
|
||||||
|
PHOTOPRISM_DISABLE_WEBDAV='false'
|
||||||
|
PHOTOPRISM_DISABLE_FACES='false'
|
||||||
|
PHOTOPRISM_AUTO_INDEX='300'
|
||||||
|
PHOTOPRISM_AUTO_IMPORT='-1'
|
||||||
|
PHOTOPRISM_PUBLIC='false'
|
||||||
|
PHOTOPRISM_DEBUG='false'
|
||||||
EOF
|
EOF
|
||||||
ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism
|
ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism
|
||||||
msg_ok "Installed PhotoPrism"
|
msg_ok "Installed PhotoPrism"
|
||||||
|
91
install/projectsend-install.sh
Normal file
91
install/projectsend-install.sh
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
mariadb-server \
|
||||||
|
apache2 \
|
||||||
|
libapache2-mod-php \
|
||||||
|
php8.2-{pdo,mysql,mbstring,gettext,fileinfo,gd,xml,zip}
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up MariaDB"
|
||||||
|
DB_NAME=projectsend
|
||||||
|
DB_USER=projectsend
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
|
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||||
|
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
|
{
|
||||||
|
echo "projectsend-Credentials"
|
||||||
|
echo "projectsend Database User: $DB_USER"
|
||||||
|
echo "projectsend Database Password: $DB_PASS"
|
||||||
|
echo "projectsend Database Name: $DB_NAME"
|
||||||
|
} >> ~/projectsend.creds
|
||||||
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
|
msg_info "Installing projectsend"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/projectsend/projectsend/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
cd /opt
|
||||||
|
wget -q "https://github.com/projectsend/projectsend/releases/download/r${RELEASE}/projectsend-r${RELEASE}.zip"
|
||||||
|
mkdir projectsend
|
||||||
|
unzip -q "projectsend-r${RELEASE}.zip" -d projectsend
|
||||||
|
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
|
||||||
|
chown -R www-data:www-data /opt/projectsend
|
||||||
|
chmod -R 775 /opt/projectsend
|
||||||
|
chmod 644 /opt/projectsend/includes/sys.config.php
|
||||||
|
sed -i -e "s/\(define('DB_NAME', \).*/\1'$DB_NAME');/" \
|
||||||
|
-e "s/\(define('DB_USER', \).*/\1'$DB_USER');/" \
|
||||||
|
-e "s/\(define('DB_PASSWORD', \).*/\1'$DB_PASS');/" \
|
||||||
|
/opt/projectsend/includes/sys.config.php
|
||||||
|
sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \
|
||||||
|
-e "s/^\(post_max_size = \).*/\1 256M/" \
|
||||||
|
-e "s/^\(upload_max_filesize = \).*/\1 256M/" \
|
||||||
|
-e "s/^\(max_execution_time = \).*/\1 300/" \
|
||||||
|
/etc/php/8.2/apache2/php.ini
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed projectsend"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/apache2/sites-available/projectsend.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName projectsend
|
||||||
|
DocumentRoot /opt/projectsend
|
||||||
|
<Directory /opt/projectsend>
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog /var/log/apache2/projectsend_error.log
|
||||||
|
CustomLog /var/log/apache2/projectsend_access.log combined
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
$STD a2ensite projectsend
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
$STD a2dissite 000-default.conf
|
||||||
|
$STD systemctl reload apache2
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf "/opt/projectsend-r${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
57
install/sqlserver2022-install.sh
Normal file
57
install/sqlserver2022-install.sh
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Kristian Skov
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
curl \
|
||||||
|
mc \
|
||||||
|
sudo \
|
||||||
|
gpg \
|
||||||
|
coreutils
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing SQL Server 2022"
|
||||||
|
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
|
||||||
|
curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
|
||||||
|
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
|
||||||
|
$STD apt-get clean *
|
||||||
|
$STD apt-get update -y
|
||||||
|
$STD apt-get install -y mssql-server
|
||||||
|
/opt/mssql/bin/mssql-conf setup
|
||||||
|
msg_ok "Installed SQL Server 2022"
|
||||||
|
|
||||||
|
msg_info "Installing SQL Server Tools"
|
||||||
|
curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
|
||||||
|
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/mssql-release.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y \
|
||||||
|
mssql-tools18 \
|
||||||
|
unixodbc-dev
|
||||||
|
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
|
||||||
|
source ~/.bash_profile
|
||||||
|
msg_ok "Installed SQL Server Tools"
|
||||||
|
|
||||||
|
msg_info "Start Service"
|
||||||
|
systemctl enable -q mssql-server
|
||||||
|
systemctl start -q mssql-server
|
||||||
|
msg_ok "Service started"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
34
json/beszel.json
Normal file
34
json/beszel.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Beszel",
|
||||||
|
"slug": "beszel",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-20",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8090,
|
||||||
|
"documentation": "https://beszel.dev/guide/what-is-beszel",
|
||||||
|
"website": "https://beszel.dev/",
|
||||||
|
"logo": "https://beszel.dev/icon.svg",
|
||||||
|
"description": "A lightweight server monitoring platform that provides Docker statistics, historical data, and alert functions\n ",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/beszel.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
43
json/docker-vm.json
Normal file
43
json/docker-vm.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Docker",
|
||||||
|
"slug": "docker-vm",
|
||||||
|
"categories": [
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-20",
|
||||||
|
"type": "vm",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://www.docker.com/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/docker.svg",
|
||||||
|
"description": "Docker is an open-source project for automating the deployment of applications as portable, self-sufficient containers. This Template includes Docker Engine and Docker Compose Plugin.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "vm/docker-vm.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "root",
|
||||||
|
"password": "docker"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "After the script completes, click on the VM, then on the Summary or Console tab to find the VM IP.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "This Script works on amd64 and arm64 Architecture.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
"name": "GLPI",
|
"name": "GLPI",
|
||||||
"slug": "glpi",
|
"slug": "glpi",
|
||||||
"categories": [
|
"categories": [
|
||||||
0
|
25
|
||||||
],
|
],
|
||||||
"date_created": "2025-01-06",
|
"date_created": "2025-01-06",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
39
json/lxc-delete.json
Normal file
39
json/lxc-delete.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "Container LXC Deletion",
|
||||||
|
"slug": "lxc-delete",
|
||||||
|
"categories": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-21",
|
||||||
|
"type": "misc",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": null,
|
||||||
|
"website": null,
|
||||||
|
"logo": "https://raw.githubusercontent.com/home-assistant/brands/master/core_integrations/proxmoxve/icon.png",
|
||||||
|
"description": "This script helps manage and delete LXC containers on a Proxmox VE server. It lists all available containers, allowing the user to select one or more for deletion through an interactive menu. Running containers are automatically stopped before deletion, and the user is asked to confirm each action. The script ensures a controlled and efficient container management process.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "misc/lxc-delete.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Execute within the Proxmox shell",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
39
json/projectsend.json
Normal file
39
json/projectsend.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "ProjectSend",
|
||||||
|
"slug": "projectsend",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-20",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://docs.projectsend.org/",
|
||||||
|
"website": "https://projectsend.org/",
|
||||||
|
"logo": "https://camo.githubusercontent.com/378a455e1cf6f36c5427b2bdfd78b0defd829be9b8c6b073f83931693e1665d5/68747470733a2f2f7777772e70726f6a65637473656e642e6f72672f70726f6a65637473656e642d6c6f676f2d6e65772e706e67",
|
||||||
|
"description": "ProjectSend is a free, open source software that lets you share files with your clients, focused on ease of use and privacy. It supports clients groups, system users roles, statistics, multiple languages, detailed logs... and much more!",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/projectsend.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "After running the update script, logging in as a system user in ProjectSend is necessary to upgrade the database.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
43
json/sqlserver2022.json
Normal file
43
json/sqlserver2022.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name":"SQL Server 2022",
|
||||||
|
"slug":"sqlserver2022",
|
||||||
|
"categories":[
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"date_created":"2025-01-14",
|
||||||
|
"type":"ct",
|
||||||
|
"updateable":true,
|
||||||
|
"privileged":true,
|
||||||
|
"interface_port":1433,
|
||||||
|
"documentation":"https://learn.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver16",
|
||||||
|
"website":"https://www.microsoft.com/en-us/sql-server/sql-server-2022",
|
||||||
|
"logo":"https://www.svgrepo.com/show/303229/microsoft-sql-server-logo.svg",
|
||||||
|
"description":"Script to automatically set up a SQL Server 2022 installation.",
|
||||||
|
"install_methods":[
|
||||||
|
{
|
||||||
|
"type":"default",
|
||||||
|
"script":"ct/sqlserver2022.sh",
|
||||||
|
"resources":{
|
||||||
|
"cpu":1,
|
||||||
|
"ram":2048,
|
||||||
|
"hdd":10,
|
||||||
|
"os":"Ubuntu",
|
||||||
|
"version":"22.04"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials":{
|
||||||
|
"username":null,
|
||||||
|
"password":null
|
||||||
|
},
|
||||||
|
"notes":[
|
||||||
|
{
|
||||||
|
"text":"You can setup the admin account 'SA' during installation",
|
||||||
|
"type":"info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text":"Do disable the SA account if you intent to use this in production!",
|
||||||
|
"type":"warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
### Generated on 01-20-2025
|
### Generated on 01-21-2025
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
### 2fauth.sh
|
### 2fauth.sh
|
||||||
@ -235,6 +235,15 @@ APP=Bazarr
|
|||||||
/_____/\__,_/ /___/\__,_/_/ /_/
|
/_____/\__,_/ /___/\__,_/_/ /_/
|
||||||
|
|
||||||
|
|
||||||
|
### beszel.sh
|
||||||
|
APP=Beszel
|
||||||
|
____ __
|
||||||
|
/ __ )___ _________ ___ / /
|
||||||
|
/ __ / _ \/ ___/_ / / _ \/ /
|
||||||
|
/ /_/ / __(__ ) / /_/ __/ /
|
||||||
|
/_____/\___/____/ /___/\___/_/
|
||||||
|
|
||||||
|
|
||||||
### blocky.sh
|
### blocky.sh
|
||||||
APP=Blocky
|
APP=Blocky
|
||||||
____ __ __
|
____ __ __
|
||||||
@ -1459,6 +1468,15 @@ APP=PostgreSQL
|
|||||||
/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/
|
/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/
|
||||||
/____/
|
/____/
|
||||||
|
|
||||||
|
### projectsend.sh
|
||||||
|
APP=ProjectSend
|
||||||
|
____ _ __ _____ __
|
||||||
|
/ __ \_________ (_)__ _____/ /_/ ___/___ ____ ____/ /
|
||||||
|
/ /_/ / ___/ __ \ / / _ \/ ___/ __/\__ \/ _ \/ __ \/ __ /
|
||||||
|
/ ____/ / / /_/ / / / __/ /__/ /_ ___/ / __/ / / / /_/ /
|
||||||
|
/_/ /_/ \____/_/ /\___/\___/\__//____/\___/_/ /_/\__,_/
|
||||||
|
/___/
|
||||||
|
|
||||||
### prometheus-alertmanager.sh
|
### prometheus-alertmanager.sh
|
||||||
APP=Prometheus-Alertmanager
|
APP=Prometheus-Alertmanager
|
||||||
____ __ __ ___ __
|
____ __ __ ___ __
|
||||||
@ -1693,6 +1711,21 @@ APP=Spoolman
|
|||||||
/____/ .___/\____/\____/_/_/ /_/ /_/\__,_/_/ /_/
|
/____/ .___/\____/\____/_/_/ /_/ /_/\__,_/_/ /_/
|
||||||
/_/
|
/_/
|
||||||
|
|
||||||
|
### sqlserver2022.sh
|
||||||
|
APP=SQL Server 2022
|
||||||
|
_____ ____ __ _____
|
||||||
|
/ ___// __ \ / / / ___/___ ______ _____ _____
|
||||||
|
\__ \/ / / / / / \__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
___/ / /_/ / / /___ ___/ / __/ / | |/ / __/ /
|
||||||
|
/____/\___\_\/_____/ /____/\___/_/ |___/\___/_/
|
||||||
|
|
||||||
|
___ ____ ___ ___
|
||||||
|
|__ \ / __ \__ \|__ \
|
||||||
|
__/ // / / /_/ /__/ /
|
||||||
|
/ __// /_/ / __// __/
|
||||||
|
/____/\____/____/____/
|
||||||
|
|
||||||
|
|
||||||
### stirling-pdf.sh
|
### stirling-pdf.sh
|
||||||
APP=Stirling-PDF
|
APP=Stirling-PDF
|
||||||
_____ __ _ ___ ____ ____ ______
|
_____ __ _ ___ ____ ____ ______
|
||||||
|
@ -146,17 +146,16 @@ motd_ssh() {
|
|||||||
OS_NAME="Alpine Linux"
|
OS_NAME="Alpine Linux"
|
||||||
OS_VERSION="Unknown"
|
OS_VERSION="Unknown"
|
||||||
fi
|
fi
|
||||||
# Set MOTD with application info and system details
|
|
||||||
MOTD_FILE="/etc/motd"
|
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
|
||||||
if [ -f "$MOTD_FILE" ]; then
|
echo "echo -e \"\"" > "$PROFILE_FILE"
|
||||||
echo -e "\n${BOLD}${APPLICATION} LXC Container${CL}" > "$MOTD_FILE"
|
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >> "$PROFILE_FILE"
|
||||||
echo -e "${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| Project: ${GN}ProxmoxVE ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\n" >> "$MOTD_FILE"
|
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >> "$PROFILE_FILE"
|
||||||
echo -e "${TAB}${OS}${YW} OS: ${GN}${OS_NAME} ${OS_VERSION}${CL}" >> "$MOTD_FILE"
|
echo "echo \"\"" >> "$PROFILE_FILE"
|
||||||
echo -e "${TAB}${HOSTNAME}${YW} Hostname: ${GN}$(hostname)${CL}" >> "$MOTD_FILE"
|
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >> "$PROFILE_FILE"
|
||||||
echo -e "${TAB}${INFO}${YW} IP Address: ${GN}${IP}${CL}" >> "$MOTD_FILE"
|
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >> "$PROFILE_FILE"
|
||||||
else
|
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >> "$PROFILE_FILE"
|
||||||
echo -e "${RD}[WARNING] MOTD file does not exist!${CL}" >&2
|
|
||||||
fi
|
|
||||||
# Configure SSH if enabled
|
# Configure SSH if enabled
|
||||||
if [[ "${SSH_ROOT}" == "yes" ]]; then
|
if [[ "${SSH_ROOT}" == "yes" ]]; then
|
||||||
# Enable sshd service
|
# Enable sshd service
|
||||||
|
145
misc/build.func
145
misc/build.func
@ -9,6 +9,8 @@ variables() {
|
|||||||
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
||||||
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
||||||
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
||||||
|
APP_PATH="/opt/$NSAPP" # sets the APP_PATH variable to the path where the application will be installed.
|
||||||
|
UPDATE="no" # sets the UPDATE variable to "no" to indicate that the script is not in the process of updating.
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
||||||
@ -56,6 +58,31 @@ color() {
|
|||||||
ADVANCED="${TAB}🧩${TAB}${CL}"
|
ADVANCED="${TAB}🧩${TAB}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
backup_data() {
|
||||||
|
UPDATE="yes"
|
||||||
|
backup_count=$(find /opt/ -maxdepth 1 -type f -name '[0-9]*-*[0-9]*-*[0-9]*.tar.gz' | wc -l)
|
||||||
|
if [ "$backup_count" -gt 3 ]; then
|
||||||
|
oldest_file=$(find /opt/ -maxdepth 1 -type f -name '[0-9]*-*[0-9]*-*[0-9]*.tar.gz' | sort | head -n 1)
|
||||||
|
rm -f "$oldest_file"
|
||||||
|
fi
|
||||||
|
APP_PATH=${var_apppath:-$APP_PATH}
|
||||||
|
msg_ok "Creating Backup [/opt/$(date '+%Y-%m-%d').tar.gz]"
|
||||||
|
tar -zcf "/opt/$(date '+%Y-%m-%d').tar.gz" "$APP_PATH" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
restore_backup() {
|
||||||
|
|
||||||
|
latest_file=$(find /opt/ -maxdepth 1 -type f -name '[0-9]*-*[0-9]*-*[0-9]*.tar.gz' | sort -r | head -n 1)
|
||||||
|
if [[ -n "$latest_file" ]]; then
|
||||||
|
msg_error "Restoring Backup due to script failure: $latest_file"
|
||||||
|
rm -rf "${APP_PATH:?}/*"
|
||||||
|
tar -xzf "$latest_file" -C "$APP_PATH" &>/dev/null
|
||||||
|
else
|
||||||
|
msg_error "No tarball found matching the format Y-m-d.tar.gz in /opt/"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# This function enables error handling in the script by setting options and defining a trap for the ERR signal.
|
# This function enables error handling in the script by setting options and defining a trap for the ERR signal.
|
||||||
catch_errors() {
|
catch_errors() {
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
@ -66,6 +93,9 @@ catch_errors() {
|
|||||||
error_handler() {
|
error_handler() {
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
|
if [ "$UPDATE" == "yes" ]; then
|
||||||
|
restore_backup
|
||||||
|
fi
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
@ -382,12 +412,14 @@ exit_script() {
|
|||||||
# This function allows the user to configure advanced settings for the script.
|
# This function allows the user to configure advanced settings for the script.
|
||||||
advanced_settings() {
|
advanced_settings() {
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "Default is: ${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
|
||||||
if [ "$var_os" != "alpine" ]; then
|
if [ "$var_os" != "alpine" ]; then
|
||||||
|
var_default_os="${var_os}"
|
||||||
var_os=""
|
var_os=""
|
||||||
while [ -z "$var_os" ]; do
|
while [ -z "$var_os" ]; do
|
||||||
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution:" 10 58 2 \
|
if [ "$var_default_os" == "debian" ]; then
|
||||||
"debian" "" OFF \
|
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
|
||||||
|
"debian" "" ON \
|
||||||
"ubuntu" "" OFF \
|
"ubuntu" "" OFF \
|
||||||
3>&1 1>&2 2>&3); then
|
3>&1 1>&2 2>&3); then
|
||||||
if [ -n "$var_os" ]; then
|
if [ -n "$var_os" ]; then
|
||||||
@ -396,14 +428,29 @@ advanced_settings() {
|
|||||||
else
|
else
|
||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$var_default_os" == "ubuntu" ]; then
|
||||||
|
if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
|
||||||
|
"debian" "" OFF \
|
||||||
|
"ubuntu" "" ON \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ -n "$var_os" ]; then
|
||||||
|
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit_script
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$var_os" == "debian" ]; then
|
if [ "$var_os" == "debian" ]; then
|
||||||
|
var_default_version="${var_version}"
|
||||||
var_version=""
|
var_version=""
|
||||||
while [ -z "$var_version" ]; do
|
while [ -z "$var_version" ]; do
|
||||||
|
if [ "$var_default_version" == "11" ]; then
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
||||||
"11" "Bullseye" OFF \
|
"11" "Bullseye" ON \
|
||||||
"12" "Bookworm" OFF \
|
"12" "Bookworm" OFF \
|
||||||
3>&1 1>&2 2>&3); then
|
3>&1 1>&2 2>&3); then
|
||||||
if [ -n "$var_version" ]; then
|
if [ -n "$var_version" ]; then
|
||||||
@ -412,14 +459,29 @@ advanced_settings() {
|
|||||||
else
|
else
|
||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$var_default_version" == "12" ]; then
|
||||||
|
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
|
||||||
|
"11" "Bullseye" OFF \
|
||||||
|
"12" "Bookworm" ON \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ -n "$var_version" ]; then
|
||||||
|
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit_script
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$var_os" == "ubuntu" ]; then
|
if [ "$var_os" == "ubuntu" ]; then
|
||||||
|
var_default_version="${var_version}"
|
||||||
var_version=""
|
var_version=""
|
||||||
while [ -z "$var_version" ]; do
|
while [ -z "$var_version" ]; do
|
||||||
|
if [ "$var_default_version" == "20.04" ]; then
|
||||||
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||||
"20.04" "Focal" OFF \
|
"20.04" "Focal" ON \
|
||||||
"22.04" "Jammy" OFF \
|
"22.04" "Jammy" OFF \
|
||||||
"24.04" "Noble" OFF \
|
"24.04" "Noble" OFF \
|
||||||
"24.10" "Oracular" OFF \
|
"24.10" "Oracular" OFF \
|
||||||
@ -430,15 +492,59 @@ advanced_settings() {
|
|||||||
else
|
else
|
||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$var_default_version" == "22.04" ]; then
|
||||||
|
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||||
|
"20.04" "Focal" OFF \
|
||||||
|
"22.04" "Jammy" ON \
|
||||||
|
"24.04" "Noble" OFF \
|
||||||
|
"24.10" "Oracular" OFF \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ -n "$var_version" ]; then
|
||||||
|
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit_script
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$var_default_version" == "24.04" ]; then
|
||||||
|
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||||
|
"20.04" "Focal" OFF \
|
||||||
|
"22.04" "Jammy" OFF \
|
||||||
|
"24.04" "Noble" ON \
|
||||||
|
"24.10" "Oracular" OFF \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ -n "$var_version" ]; then
|
||||||
|
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit_script
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$var_default_version" == "24.10" ]; then
|
||||||
|
if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
|
||||||
|
"20.04" "Focal" OFF \
|
||||||
|
"22.04" "Jammy" OFF \
|
||||||
|
"24.04" "Noble" OFF \
|
||||||
|
"24.10" "Oracular" ON \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ -n "$var_version" ]; then
|
||||||
|
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit_script
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
# Setting Default Tag for Advanced Settings
|
# Setting Default Tag for Advanced Settings
|
||||||
TAGS="community-script;${var_tags:-}"
|
TAGS="community-script;${var_tags:-}"
|
||||||
|
CT_DEFAULT_TYPE="${CT_TYPE}"
|
||||||
CT_TYPE=""
|
CT_TYPE=""
|
||||||
while [ -z "$CT_TYPE" ]; do
|
while [ -z "$CT_TYPE" ]; do
|
||||||
|
if [ "$CT_DEFAULT_TYPE" == "1" ]; then
|
||||||
if CT_TYPE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
|
if CT_TYPE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
|
||||||
"1" "Unprivileged" OFF \
|
"1" "Unprivileged" ON \
|
||||||
"0" "Privileged" OFF \
|
"0" "Privileged" OFF \
|
||||||
3>&1 1>&2 2>&3); then
|
3>&1 1>&2 2>&3); then
|
||||||
if [ -n "$CT_TYPE" ]; then
|
if [ -n "$CT_TYPE" ]; then
|
||||||
@ -451,6 +557,23 @@ advanced_settings() {
|
|||||||
else
|
else
|
||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$CT_DEFAULT_TYPE" == "0" ]; then
|
||||||
|
if CT_TYPE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
|
||||||
|
"1" "Unprivileged" OFF \
|
||||||
|
"0" "Privileged" ON \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ -n "$CT_TYPE" ]; then
|
||||||
|
CT_TYPE_DESC="Unprivileged"
|
||||||
|
if [ "$CT_TYPE" -eq 0 ]; then
|
||||||
|
CT_TYPE_DESC="Privileged"
|
||||||
|
fi
|
||||||
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit_script
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
@ -597,7 +720,7 @@ advanced_settings() {
|
|||||||
APT_CACHER=""
|
APT_CACHER=""
|
||||||
APT_CACHER_IP=""
|
APT_CACHER_IP=""
|
||||||
else
|
else
|
||||||
if APT_CACHER_IP=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set APT-Cacher IP (leave blank for default)" 8 58 --title "APT-Cacher IP" 3>&1 1>&2 2>&3); then
|
if APT_CACHER_IP=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set APT-Cacher IP (leave blank for none)" 8 58 --title "APT-Cacher IP" 3>&1 1>&2 2>&3); then
|
||||||
APT_CACHER="${APT_CACHER_IP:+yes}"
|
APT_CACHER="${APT_CACHER_IP:+yes}"
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}APT-Cacher IP Address: ${BGN}${APT_CACHER_IP:-Default}${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}APT-Cacher IP Address: ${BGN}${APT_CACHER_IP:-Default}${CL}"
|
||||||
else
|
else
|
||||||
@ -612,7 +735,7 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
|
echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
|
||||||
|
|
||||||
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $MTU1 ]; then
|
if [ -z $MTU1 ]; then
|
||||||
MTU1="Default"
|
MTU1="Default"
|
||||||
MTU=""
|
MTU=""
|
||||||
@ -649,7 +772,7 @@ advanced_settings() {
|
|||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for default)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
|
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for generated MAC)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $MAC1 ]; then
|
if [ -z $MAC1 ]; then
|
||||||
MAC1="Default"
|
MAC1="Default"
|
||||||
MAC=""
|
MAC=""
|
||||||
@ -661,7 +784,7 @@ advanced_settings() {
|
|||||||
exit_script
|
exit_script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
|
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for no VLAN)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $VLAN1 ]; then
|
if [ -z $VLAN1 ]; then
|
||||||
VLAN1="Default"
|
VLAN1="Default"
|
||||||
VLAN=""
|
VLAN=""
|
||||||
|
@ -202,9 +202,6 @@ motd_ssh() {
|
|||||||
# Set terminal to 256-color mode
|
# Set terminal to 256-color mode
|
||||||
grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >> /root/.bashrc
|
grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >> /root/.bashrc
|
||||||
|
|
||||||
# Get the current private IP address
|
|
||||||
IP=$(hostname -I | awk '{print $1}') # Private IP
|
|
||||||
|
|
||||||
# Get OS information (Debian / Ubuntu)
|
# Get OS information (Debian / Ubuntu)
|
||||||
if [ -f "/etc/os-release" ]; then
|
if [ -f "/etc/os-release" ]; then
|
||||||
OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"')
|
OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"')
|
||||||
@ -214,20 +211,14 @@ motd_ssh() {
|
|||||||
OS_VERSION=$(cat /etc/debian_version)
|
OS_VERSION=$(cat /etc/debian_version)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set MOTD with application info, system details
|
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
|
||||||
MOTD_FILE="/etc/motd"
|
echo "echo -e \"\"" > "$PROFILE_FILE"
|
||||||
if [ -f "$MOTD_FILE" ]; then
|
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >> "$PROFILE_FILE"
|
||||||
# Start MOTD with application info and link
|
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >> "$PROFILE_FILE"
|
||||||
echo -e "\n${BOLD}${APPLICATION} LXC Container${CL}" > "$MOTD_FILE"
|
echo "echo \"\"" >> "$PROFILE_FILE"
|
||||||
echo -e "${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\n" >> "$MOTD_FILE"
|
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >> "$PROFILE_FILE"
|
||||||
|
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >> "$PROFILE_FILE"
|
||||||
# Add system information with icons
|
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >> "$PROFILE_FILE"
|
||||||
echo -e "${TAB}${OS}${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}" >> "$MOTD_FILE"
|
|
||||||
echo -e "${TAB}${HOSTNAME}${YW} Hostname: ${GN}$(hostname)${CL}" >> "$MOTD_FILE"
|
|
||||||
echo -e "${TAB}${INFO}${YW} IP Address: ${GN}${IP}${CL}" >> "$MOTD_FILE"
|
|
||||||
else
|
|
||||||
echo "MotD file does not exist!" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Disable default MOTD scripts
|
# Disable default MOTD scripts
|
||||||
chmod -x /etc/update-motd.d/*
|
chmod -x /etc/update-motd.d/*
|
||||||
|
112
misc/lxc-delete.sh
Normal file
112
misc/lxc-delete.sh
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
function header_info {
|
||||||
|
clear
|
||||||
|
cat <<"EOF"
|
||||||
|
____ ____ ____ _ __ __ _______ _ __ __ _ ________ ____ ________ __________________
|
||||||
|
/ __ \/ __ \/ __ \ |/ // |/ / __ \ |/ / / / | |/ / ____/ / __ \/ ____/ / / ____/_ __/ ____/
|
||||||
|
/ /_/ / /_/ / / / / // /|_/ / / / / / / / | / / / / / / __/ / / / __/ / / / __/
|
||||||
|
/ ____/ _, _/ /_/ / |/ / / / /_/ / | / /___/ / /___ / /_/ / /___/ /___/ /___ / / / /___
|
||||||
|
/_/ /_/ |_|\____/_/|_/_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/_____/_____/_____/ /_/ /_____/
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
spinner() {
|
||||||
|
local pid=$1
|
||||||
|
local delay=0.1
|
||||||
|
local spinstr='|/-\'
|
||||||
|
while ps -p $pid > /dev/null; do
|
||||||
|
printf " [%c] " "$spinstr"
|
||||||
|
spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
|
||||||
|
sleep $delay
|
||||||
|
printf "\r"
|
||||||
|
done
|
||||||
|
printf " \r"
|
||||||
|
}
|
||||||
|
|
||||||
|
set -eEuo pipefail
|
||||||
|
YW=$(echo "\033[33m")
|
||||||
|
BL=$(echo "\033[36m")
|
||||||
|
RD=$(echo "\033[01;31m")
|
||||||
|
CM='\xE2\x9C\x94\033'
|
||||||
|
GN=$(echo "\033[1;92m")
|
||||||
|
CL=$(echo "\033[m")
|
||||||
|
|
||||||
|
header_info
|
||||||
|
echo "Loading..."
|
||||||
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This Will Delete LXC Containers. Proceed?" 10 58 || exit
|
||||||
|
|
||||||
|
NODE=$(hostname)
|
||||||
|
|
||||||
|
# Get list of containers with ID and hostname
|
||||||
|
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
|
||||||
|
|
||||||
|
# Exit if no containers are found
|
||||||
|
if [ -z "$containers" ]; then
|
||||||
|
whiptail --title "LXC Container Delete" --msgbox "There are no LXC Container available!" 10 60
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
menu_items=()
|
||||||
|
FORMAT="%-10s %-15s %-10s"
|
||||||
|
|
||||||
|
# Format container data for menu display
|
||||||
|
while read -r container; do
|
||||||
|
container_id=$(echo $container | awk '{print $1}')
|
||||||
|
container_name=$(echo $container | awk '{print $2}')
|
||||||
|
container_status=$(echo $container | awk '{print $3}')
|
||||||
|
formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
|
||||||
|
menu_items+=("$container_id" "$formatted_line" "OFF")
|
||||||
|
done <<< "$containers"
|
||||||
|
|
||||||
|
# Display selection menu
|
||||||
|
CHOICES=$(whiptail --title "LXC Container Delete" \
|
||||||
|
--checklist "Choose LXC container to delete:" 25 60 13 \
|
||||||
|
"${menu_items[@]}" 3>&2 2>&1 1>&3)
|
||||||
|
|
||||||
|
if [ -z "$CHOICES" ]; then
|
||||||
|
whiptail --title "LXC Container Delete" \
|
||||||
|
--msgbox "No containers have been selected!" 10 60
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Process selected containers
|
||||||
|
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
||||||
|
|
||||||
|
for container_id in $selected_ids; do
|
||||||
|
status=$(pct status $container_id)
|
||||||
|
|
||||||
|
# Stop container if running
|
||||||
|
if [ "$status" == "status: running" ]; then
|
||||||
|
echo -e "${BL}[Info]${GN} Stop container $container_id...${CL}"
|
||||||
|
pct stop $container_id &
|
||||||
|
sleep 5
|
||||||
|
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Confirm deletion
|
||||||
|
read -p "Are you sure you want to delete Container $container_id? (y/N): " CONFIRM
|
||||||
|
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||||
|
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
|
||||||
|
pct destroy "$container_id" -f &
|
||||||
|
pid=$!
|
||||||
|
spinner $pid
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Container $container_id was successfully deleted."
|
||||||
|
else
|
||||||
|
whiptail --title "Error" --msgbox "Error deleting container $container_id." 10 60
|
||||||
|
fi
|
||||||
|
elif [[ "$CONFIRM" =~ ^[Nn]$ ]]; then
|
||||||
|
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
|
||||||
|
else
|
||||||
|
echo -e "${RD}[Error]${CL} Invalid input, skipping container $container_id."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
header_info
|
||||||
|
echo -e "${GN}The deletion process has been completed.${CL}\n"
|
468
vm/docker-vm.sh
Normal file
468
vm/docker-vm.sh
Normal file
@ -0,0 +1,468 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: thost96 (thost96)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
function header_info {
|
||||||
|
clear
|
||||||
|
cat <<"EOF"
|
||||||
|
____ __ _ ____ ___
|
||||||
|
/ __ \____ _____/ /_____ _____ | | / / |/ /
|
||||||
|
/ / / / __ \/ ___/ //_/ _ \/ ___/ | | / / /|_/ /
|
||||||
|
/ /_/ / /_/ / /__/ ,< / __/ / | |/ / / / /
|
||||||
|
/_____/\____/\___/_/|_|\___/_/ |___/_/ /_/
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
header_info
|
||||||
|
echo -e "\n Loading..."
|
||||||
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
|
||||||
|
YW=$(echo "\033[33m")
|
||||||
|
BL=$(echo "\033[36m")
|
||||||
|
HA=$(echo "\033[1;34m")
|
||||||
|
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}"
|
||||||
|
CROSS="${RD}✗${CL}"
|
||||||
|
THIN="discard=on,ssd=1,"
|
||||||
|
set -e
|
||||||
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
|
trap cleanup EXIT
|
||||||
|
function error_handler() {
|
||||||
|
local exit_code="$?"
|
||||||
|
local line_number="$1"
|
||||||
|
local command="$2"
|
||||||
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
|
echo -e "\n$error_message\n"
|
||||||
|
cleanup_vmid
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup_vmid() {
|
||||||
|
if qm status $VMID &>/dev/null; then
|
||||||
|
qm stop $VMID &>/dev/null
|
||||||
|
qm destroy $VMID &>/dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup() {
|
||||||
|
popd >/dev/null
|
||||||
|
rm -rf $TEMP_DIR
|
||||||
|
}
|
||||||
|
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
pushd $TEMP_DIR >/dev/null
|
||||||
|
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Docker VM" --yesno "This will create a New Docker VM. Proceed?" 10 58; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
header_info && echo -e "⚠ User exited script \n" && exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
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 msg_error() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_root() {
|
||||||
|
if [[ "$(id -u)" -ne 0 || $(ps -o comm= -p $PPID) == "sudo" ]]; then
|
||||||
|
clear
|
||||||
|
msg_error "Please run this script as root."
|
||||||
|
echo -e "\nExiting..."
|
||||||
|
sleep 2
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function pve_check() {
|
||||||
|
if ! pveversion | grep -Eq "pve-manager/8.[1-3]"; then
|
||||||
|
msg_error "This version of Proxmox Virtual Environment is not supported"
|
||||||
|
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
|
||||||
|
echo -e "Exiting..."
|
||||||
|
sleep 2
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function arch_check() {
|
||||||
|
if [ "$(dpkg --print-architecture)" != "amd64" ]; then
|
||||||
|
if [ "$(dpkg --print-architecture)" != "arm64" ]; then
|
||||||
|
msg_error "This script will not work with your CPU Architekture \n"
|
||||||
|
echo -e "Exiting..."
|
||||||
|
sleep 2
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function ssh_check() {
|
||||||
|
if command -v pveversion >/dev/null 2>&1; then
|
||||||
|
if [ -n "${SSH_CLIENT:+x}" ]; then
|
||||||
|
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH DETECTED" --yesno "It's suggested to use the Proxmox shell instead of SSH, since SSH can create issues while gathering variables. Would you like to proceed with using SSH?" 10 62; then
|
||||||
|
echo "you've been warned"
|
||||||
|
else
|
||||||
|
clear
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function exit-script() {
|
||||||
|
clear
|
||||||
|
echo -e "⚠ User exited script \n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function default_settings() {
|
||||||
|
VMID="$NEXTID"
|
||||||
|
FORMAT=",efitype=4m"
|
||||||
|
MACHINE=""
|
||||||
|
DISK_CACHE=""
|
||||||
|
HN="docker"
|
||||||
|
CPU_TYPE=""
|
||||||
|
CORE_COUNT="2"
|
||||||
|
RAM_SIZE="4096"
|
||||||
|
BRG="vmbr0"
|
||||||
|
MAC="$GEN_MAC"
|
||||||
|
VLAN=""
|
||||||
|
MTU=""
|
||||||
|
START_VM="yes"
|
||||||
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
|
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
||||||
|
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
||||||
|
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
||||||
|
echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
|
||||||
|
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||||
|
echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
|
||||||
|
echo -e "${DGN}Using Bridge: ${BGN}${BRG}${CL}"
|
||||||
|
echo -e "${DGN}Using MAC Address: ${BGN}${MAC}${CL}"
|
||||||
|
echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
|
||||||
|
echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
|
||||||
|
echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
|
||||||
|
echo -e "${BL}Creating a Docker VM using the above default settings${CL}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function advanced_settings() {
|
||||||
|
while true; do
|
||||||
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z "$VMID" ]; then
|
||||||
|
VMID="$NEXTID"
|
||||||
|
fi
|
||||||
|
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
|
||||||
|
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
|
||||||
|
sleep 2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo -e "${DGN}Virtual Machine ID: ${BGN}$VMID${CL}"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
|
||||||
|
"i440fx" "Machine i440fx" ON \
|
||||||
|
"q35" "Machine q35" OFF \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ $MACH = q35 ]; then
|
||||||
|
echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
|
||||||
|
FORMAT=""
|
||||||
|
MACHINE=" -machine q35"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Using Machine Type: ${BGN}$MACH${CL}"
|
||||||
|
FORMAT=",efitype=4m"
|
||||||
|
MACHINE=""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
|
||||||
|
"0" "None (Default)" ON \
|
||||||
|
"1" "Write Through" OFF \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ $DISK_CACHE = "1" ]; then
|
||||||
|
echo -e "${DGN}Using Disk Cache: ${BGN}Write Through${CL}"
|
||||||
|
DISK_CACHE="cache=writethrough,"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
||||||
|
DISK_CACHE=""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 docker --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z $VM_NAME ]; then
|
||||||
|
HN="docker"
|
||||||
|
echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
|
||||||
|
else
|
||||||
|
HN=$(echo ${VM_NAME,,} | tr -d ' ')
|
||||||
|
echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
|
||||||
|
"0" "KVM64 (Default)" ON \
|
||||||
|
"1" "Host" OFF \
|
||||||
|
3>&1 1>&2 2>&3); then
|
||||||
|
if [ $CPU_TYPE1 = "1" ]; then
|
||||||
|
echo -e "${DGN}Using CPU Model: ${BGN}Host${CL}"
|
||||||
|
CPU_TYPE=" -cpu host"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Using CPU Model: ${BGN}KVM64${CL}"
|
||||||
|
CPU_TYPE=""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z $CORE_COUNT ]; then
|
||||||
|
CORE_COUNT="2"
|
||||||
|
echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Allocated Cores: ${BGN}$CORE_COUNT${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 4096 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z $RAM_SIZE ]; then
|
||||||
|
RAM_SIZE="4096"
|
||||||
|
echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Allocated RAM: ${BGN}$RAM_SIZE${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z $BRG ]; then
|
||||||
|
BRG="vmbr0"
|
||||||
|
echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Using Bridge: ${BGN}$BRG${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address" 8 58 $GEN_MAC --title "MAC ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z $MAC1 ]; then
|
||||||
|
MAC="$GEN_MAC"
|
||||||
|
echo -e "${DGN}Using MAC Address: ${BGN}$MAC${CL}"
|
||||||
|
else
|
||||||
|
MAC="$MAC1"
|
||||||
|
echo -e "${DGN}Using MAC Address: ${BGN}$MAC1${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for default)" 8 58 --title "VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); 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
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default)" 8 58 --title "MTU SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [ -z $MTU1 ]; then
|
||||||
|
MTU1="Default"
|
||||||
|
MTU=""
|
||||||
|
echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
|
||||||
|
else
|
||||||
|
MTU=",mtu=$MTU1"
|
||||||
|
echo -e "${DGN}Using Interface MTU Size: ${BGN}$MTU1${CL}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
|
||||||
|
echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
|
||||||
|
START_VM="yes"
|
||||||
|
else
|
||||||
|
echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
|
||||||
|
START_VM="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a Docker VM?" --no-button Do-Over 10 58); then
|
||||||
|
echo -e "${RD}Creating a Docker VM using the above advanced settings${CL}"
|
||||||
|
else
|
||||||
|
header_info
|
||||||
|
echo -e "${RD}Using Advanced Settings${CL}"
|
||||||
|
advanced_settings
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_script() {
|
||||||
|
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 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
|
||||||
|
}
|
||||||
|
|
||||||
|
check_root
|
||||||
|
arch_check
|
||||||
|
pve_check
|
||||||
|
ssh_check
|
||||||
|
start_script
|
||||||
|
|
||||||
|
msg_info "Validating Storage"
|
||||||
|
while read -r line; do
|
||||||
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
|
TYPE=$(echo $line | awk '{printf "%-10s", $2}')
|
||||||
|
FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
|
||||||
|
ITEM=" Type: $TYPE Free: $FREE "
|
||||||
|
OFFSET=2
|
||||||
|
if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
|
||||||
|
MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
|
||||||
|
fi
|
||||||
|
STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
|
||||||
|
done < <(pvesm status -content images | awk 'NR>1')
|
||||||
|
VALID=$(pvesm status -content images | awk 'NR>1')
|
||||||
|
if [ -z "$VALID" ]; then
|
||||||
|
msg_error "Unable to detect a valid storage location."
|
||||||
|
exit
|
||||||
|
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
|
||||||
|
STORAGE=${STORAGE_MENU[0]}
|
||||||
|
else
|
||||||
|
while [ -z "${STORAGE:+x}" ]; do
|
||||||
|
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
||||||
|
"Which storage pool you would like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
|
||||||
|
16 $(($MSG_MAX_LENGTH + 23)) 6 \
|
||||||
|
"${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
|
||||||
|
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
|
||||||
|
msg_info "Retrieving the URL for the Debian 12 Qcow2 Disk Image"
|
||||||
|
URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-$(dpkg --print-architecture).qcow2"
|
||||||
|
sleep 2
|
||||||
|
msg_ok "${CL}${BL}${URL}${CL}"
|
||||||
|
wget -q --show-progress $URL
|
||||||
|
echo -en "\e[1A\e[0K"
|
||||||
|
FILE=$(basename $URL)
|
||||||
|
msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
|
||||||
|
|
||||||
|
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
|
||||||
|
case $STORAGE_TYPE in
|
||||||
|
nfs | dir)
|
||||||
|
DISK_EXT=".qcow2"
|
||||||
|
DISK_REF="$VMID/"
|
||||||
|
DISK_IMPORT="-format qcow2"
|
||||||
|
THIN=""
|
||||||
|
;;
|
||||||
|
btrfs)
|
||||||
|
DISK_EXT=".raw"
|
||||||
|
DISK_REF="$VMID/"
|
||||||
|
DISK_IMPORT="-format raw"
|
||||||
|
FORMAT=",efitype=4m"
|
||||||
|
THIN=""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
for i in {0,1}; do
|
||||||
|
disk="DISK$i"
|
||||||
|
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
|
||||||
|
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
|
||||||
|
done
|
||||||
|
|
||||||
|
msg_info "Installing Pre-Requisite libguestfs-tools onto Host"
|
||||||
|
apt-get -qq update && apt-get -qq install libguestfs-tools -y >/dev/null
|
||||||
|
msg_ok "Installed libguestfs-tools successful"
|
||||||
|
|
||||||
|
msg_info "Adding Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image Image"
|
||||||
|
virt-customize -q -a "${FILE}" --install qemu-guest-agent,apt-transport-https,ca-certificates,curl,gnupg-agent,software-properties-common,lsb-release >/dev/null &&
|
||||||
|
virt-customize -q -a "${FILE}" --root-password password:docker >/dev/null &&
|
||||||
|
virt-customize -q -a "${FILE}" --run-command "curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -" >/dev/null &&
|
||||||
|
virt-customize -q -a "${FILE}" --run-command "add-apt-repository \"deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/debian $(lsb_release -cs) stable\"" >/dev/null &&
|
||||||
|
virt-customize -q -a "${FILE}" --run-command "apt-get update -y && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" >/dev/null &&
|
||||||
|
virt-customize -q -a "${FILE}" --run-command "systemctl start docker && systemctl enable docker" >/dev/null &&
|
||||||
|
virt-customize -q -a "${FILE}" --run-command "echo -n > /etc/machine-id" >/dev/null
|
||||||
|
msg_ok "Added Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image successful"
|
||||||
|
|
||||||
|
msg_info "Creating a Docker VM"
|
||||||
|
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||||
|
-name $HN -tags proxmox-helper-scripts,debian12,docker -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||||
|
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||||
|
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||||
|
qm set $VMID \
|
||||||
|
-efidisk0 ${DISK0_REF}${FORMAT} \
|
||||||
|
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=2G \
|
||||||
|
-boot order=scsi0 \
|
||||||
|
-serial0 socket >/dev/null
|
||||||
|
qm resize $VMID scsi0 8G >/dev/null
|
||||||
|
qm set $VMID --agent enabled=1 >/dev/null
|
||||||
|
|
||||||
|
DESCRIPTION=$(cat <<EOF
|
||||||
|
<div align='center'>
|
||||||
|
<a href='https://Helper-Scripts.com' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<h2 style='font-size: 24px; margin: 20px 0;'>Docker VM</h2>
|
||||||
|
|
||||||
|
<p style='margin: 16px 0;'>
|
||||||
|
<a href='https://ko-fi.com/community_scripts' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<img src='https://img.shields.io/badge/☕-Buy us a coffee-blue' alt='spend Coffee' />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<span style='margin: 0 10px;'>
|
||||||
|
<i class="fa fa-github fa-fw" style="color: #f5f5f5;"></i>
|
||||||
|
<a href='https://github.com/community-scripts/ProxmoxVE' target='_blank' rel='noopener noreferrer' style='text-decoration: none; color: #00617f;'>GitHub</a>
|
||||||
|
</span>
|
||||||
|
<span style='margin: 0 10px;'>
|
||||||
|
<i class="fa fa-comments fa-fw" style="color: #f5f5f5;"></i>
|
||||||
|
<a href='https://github.com/community-scripts/ProxmoxVE/discussions' target='_blank' rel='noopener noreferrer' style='text-decoration: none; color: #00617f;'>Discussions</a>
|
||||||
|
</span>
|
||||||
|
<span style='margin: 0 10px;'>
|
||||||
|
<i class="fa fa-exclamation-circle fa-fw" style="color: #f5f5f5;"></i>
|
||||||
|
<a href='https://github.com/community-scripts/ProxmoxVE/issues' target='_blank' rel='noopener noreferrer' style='text-decoration: none; color: #00617f;'>Issues</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
|
||||||
|
|
||||||
|
msg_ok "Created a Docker VM ${CL}${BL}(${HN})"
|
||||||
|
if [ "$START_VM" == "yes" ]; then
|
||||||
|
msg_info "Starting Docker VM"
|
||||||
|
qm start $VMID
|
||||||
|
msg_ok "Started Docker VM"
|
||||||
|
fi
|
||||||
|
msg_ok "Completed Successfully!\n"
|
Loading…
Reference in New Issue
Block a user