Compare commits

...

34 Commits

Author SHA1 Message Date
Slaviša Arežina
9cddbbd986 Update docs (#4298) 2025-05-07 15:21:03 +02:00
community-scripts-pr-app[bot]
31c7c9301c Update versions.json (#4297)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 14:32:30 +02:00
CanbiZ
c9aad3a54d Feature: get correct next VMID (#4292)
fix(vm-creation): ensure whiptail VMID inputbox is pre-filled with a valid and available ID

- Replaced hardcoded NEXTID usage with a new get_valid_nextid() function
- Ensures no collision with existing VMs, LXCs or orphaned LVM volumes
- Improves user experience by properly pre-filling whiptail inputbox
- Automatically skips invalid IDs instead of failing on alloc
2025-05-07 12:37:46 +02:00
community-scripts-pr-app[bot]
ebc17e120e Update CHANGELOG.md (#4290)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 10:45:52 +02:00
Slaviša Arežina
1ebb1782fa Give more disk space to LXC (#4288) 2025-05-07 10:40:49 +02:00
community-scripts-pr-app[bot]
cce3ca1996 Update CHANGELOG.md (#4287)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 10:04:46 +02:00
Slaviša Arežina
eb6018ac01 SuwayomiServer: Bump Java to v21, code formating (#3987)
* Bump java to v21, code formating

* Refactoring

* Update

* Update

* Update suwayomiserver.sh

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-05-07 09:52:39 +02:00
community-scripts-pr-app[bot]
3b54371d5c Update versions.json (#4285) 2025-05-07 08:20:00 +02:00
community-scripts-pr-app[bot]
67cd29e9f2 Update CHANGELOG.md (#4281)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 16:27:08 +02:00
community-scripts-pr-app[bot]
0f4c14ff41 Update .app files (#4282)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 15:51:53 +02:00
push-app-to-main[bot]
5d9795139e 'Add new script' (#4277)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-05-06 15:28:02 +02:00
community-scripts-pr-app[bot]
0bbbd5de10 Update CHANGELOG.md (#4278)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:40:46 +02:00
community-scripts-pr-app[bot]
8963d8dec9 Update .app files (#4280)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:39:07 +02:00
community-scripts-pr-app[bot]
eeb7766f36 Update date in json (#4279)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:38:52 +02:00
push-app-to-main[bot]
e7d4630fa5 streamlink-webui (#4262)
* 'Add new script'

* Update streamlink-webui.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-05-06 14:35:03 +02:00
community-scripts-pr-app[bot]
0f19440864 Update versions.json (#4275)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:09:33 +02:00
community-scripts-pr-app[bot]
d0a3510b96 Update CHANGELOG.md (#4273)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:28:09 +02:00
community-scripts-pr-app[bot]
0946b5220f Update CHANGELOG.md (#4271)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:16:26 +02:00
community-scripts-pr-app[bot]
d5a64ee41c Update .app files (#4272)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:15:47 +02:00
community-scripts-pr-app[bot]
067d60978c Update CHANGELOG.md (#4267)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:13:14 +02:00
community-scripts-pr-app[bot]
4b89174542 Update .app files (#4270)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:12:53 +02:00
community-scripts-pr-app[bot]
0a2a1b4692 Update date in json (#4269)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:12:31 +02:00
push-app-to-main[bot]
4d99838209 Fumadocs (#4263)
* 'Add new script'

* change source

* remove node options

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-05-06 11:11:45 +02:00
push-app-to-main[bot]
27ac2633c7 alpine-rclone (#4265)
* 'Add new script'

* path

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-05-06 11:10:37 +02:00
community-scripts-pr-app[bot]
1bff7fe861 Update .app files (#4268)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:09:12 +02:00
community-scripts-pr-app[bot]
a9c36a9417 Update date in json (#4266)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:09:00 +02:00
push-app-to-main[bot]
8e26cd4d9d 'Add new script' (#4264)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-05-06 11:07:45 +02:00
community-scripts-pr-app[bot]
237c920893 Update CHANGELOG.md (#4256)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 09:52:26 +02:00
CanbiZ
354d95eb2d Update build.func 2025-05-06 09:50:11 +02:00
CanbiZ
e7f0f09dee Bugfix: Menu - Cancel (#4259) 2025-05-06 09:34:39 +02:00
community-scripts-pr-app[bot]
093a1aacf6 Update .app files (#4258)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 09:23:58 +02:00
CanbiZ
afbac8e2f0 Re-Add: ActualBudget (#4228)
* Re-Add ActualBudget

* path fix

* Update install/actualbudget-install.sh

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>

* Update install/actualbudget-install.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update frontend/public/json/actualbudget.json

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>

* Update actualbudget.sh

* add config path

* Update actualbudget.sh

---------

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-06 09:16:34 +02:00
CanbiZ
17c3163a2a Update build.func 2025-05-06 09:03:18 +02:00
community-scripts-pr-app[bot]
f0a96b9a7b Update versions.json (#4255)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 06:53:14 +02:00
47 changed files with 1800 additions and 504 deletions

View File

@@ -14,6 +14,33 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-05-07
### 🚀 Updated Scripts
- Alpine scripts: Set minimum disk space to 0.5GB [@tremor021](https://github.com/tremor021) ([#4288](https://github.com/community-scripts/ProxmoxVE/pull/4288))
- #### 🐞 Bug Fixes
- SuwayomiServer: Bump Java to v21, code formating [@tremor021](https://github.com/tremor021) ([#3987](https://github.com/community-scripts/ProxmoxVE/pull/3987))
## 2025-05-06
### 🆕 New Scripts
- alpine-transmission ([#4277](https://github.com/community-scripts/ProxmoxVE/pull/4277))
- streamlink-webui ([#4262](https://github.com/community-scripts/ProxmoxVE/pull/4262))
- Fumadocs ([#4263](https://github.com/community-scripts/ProxmoxVE/pull/4263))
- alpine-rclone ([#4265](https://github.com/community-scripts/ProxmoxVE/pull/4265))
- alpine-tinyauth ([#4264](https://github.com/community-scripts/ProxmoxVE/pull/4264))
- Re-Add: ActualBudget [@MickLesk](https://github.com/MickLesk) ([#4228](https://github.com/community-scripts/ProxmoxVE/pull/4228))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- whiptail menu - cancel button now exists the advanced menu [@MickLesk](https://github.com/MickLesk) ([#4259](https://github.com/community-scripts/ProxmoxVE/pull/4259))
## 2025-05-05 ## 2025-05-05
### 🆕 New Scripts ### 🆕 New Scripts

67
ct/actualbudget.sh Normal file
View File

@@ -0,0 +1,67 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://actualbudget.org/
APP="Actual Budget"
var_tags="finance"
var_cpu="2"
var_ram="2048"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/actualbudget ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="22"
install_node_and_modules
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f /opt/actualbudget-data/config.json ]]; then
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
msg_info "Stopping ${APP}"
systemctl stop actualbudget
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
$STD npm update -g @actual-app/sync-server
echo "${RELEASE}" >/opt/actualbudget_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting ${APP}"
systemctl start actualbudget
msg_ok "Restarted ${APP}"
else
msg_info "${APP} is already up to date"
fi
else
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container"
msg_info "Please follow the instructions on the ${APP} website to migrate your data"
msg_info "https://actualbudget.org/docs/backup-restore/backup"
exit 1
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}https://${IP}:5006${CL}"

View File

@@ -9,7 +9,7 @@ APP="Alpine-IT-Tools"
var_tags="${var_tags:-alpine;development}" var_tags="${var_tags:-alpine;development}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}" var_ram="${var_ram:-256}"
var_disk="${var_disk:-0.2}" var_disk="${var_disk:-0.5}"
var_os="${var_os:-alpine}" var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}" var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -20,32 +20,32 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [ ! -d /usr/share/nginx/html ]; then if [ ! -d /usr/share/nginx/html ]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit 1
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL" curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
mkdir -p /usr/share/nginx/html mkdir -p /usr/share/nginx/html
rm -rf /usr/share/nginx/html/* rm -rf /usr/share/nginx/html/*
unzip -q it-tools.zip -d /tmp/it-tools unzip -q it-tools.zip -d /tmp/it-tools
cp -r /tmp/it-tools/dist/* /usr/share/nginx/html cp -r /tmp/it-tools/dist/* /usr/share/nginx/html
rm -rf /tmp/it-tools rm -rf /tmp/it-tools
rm -f it-tools.zip rm -f it-tools.zip
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit 0
} }
start start
@@ -55,4 +55,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 IP:${CL}" echo -e "${INFO}${YW} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

55
ct/alpine-rclone.sh Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rclone/rclone
APP="Alpine-rclone"
var_tags="${var_tags:-alpine;backup}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [ ! -d /opt/rclone ]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then
msg_info "Updating ${APP} LXC"
temp_file=$(mktemp)
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
$STD unzip -o "$temp_file" '*/**' -d /opt/rclone
rm -f "$temp_file"
echo "${RELEASE}" >/opt/rclone_version.txt
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}
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}:3000${CL}"

70
ct/alpine-tinyauth.sh Normal file
View File

@@ -0,0 +1,70 @@
#!/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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/tinyauth
APP="Alpine-tinyauth"
var_tags="${var_tags:-alpine;auth}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-3}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
if [[ ! -d /opt/tinyauth ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating tinyauth"
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/tinyauth_version.txt)" ] || [ ! -f /opt/tinyauth_version.txt ]; then
$STD service tinyauth stop
temp_file=$(mktemp)
cp /opt/tinyauth/.env /opt
rm -rf /opt/tinyauth
mkdir -p /opt/tinyauth
curl -fsSL "https://github.com/steveiliop56/tinyauth/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar -xzf "$temp_file" -C /opt/tinyauth --strip-components=1
cd /opt/tinyauth/frontend
$STD bun install
$STD bun run build
mv dist /opt/tinyauth/internal/assets/
cd /opt/tinyauth
$STD go mod download
CGO_ENABLED=0 go build -ldflags "-s -w"
cp /opt/.env /opt/tinyauth
echo "${RELEASE}" >/opt/tinyauth_version.txt
rm -f "$temp_file"
msg_info "Restarting tinyauth"
$STD service tinyauth start
msg_ok "Restarted tinyauth"
msg_ok "Updated tinyauth"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}
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}:3000${CL}"

45
ct/alpine-transmission.sh Normal file
View File

@@ -0,0 +1,45 @@
#!/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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://transmissionbt.com/
APP="Alpine-Transmission"
var_tags="${var_tags:-alpine;torrent}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating Transmission"
$STD apk upgrade transmission-daemon
msg_ok "Updated Transmission"
msg_info "Restarting Transmission"
$STD rc-service transmission-daemon restart
msg_ok "Restarted Transmission"
exit 1
}
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}:9091${CL}"

View File

@@ -9,7 +9,7 @@ APP="Alpine"
var_tags="${var_tags:-os;alpine}" var_tags="${var_tags:-os;alpine}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-0.1}" var_disk="${var_disk:-0.5}"
var_os="${var_os:-alpine}" var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}" var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -20,9 +20,11 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \ UPD=$(
"1" "Check for Alpine Updates" ON \ whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
3>&1 1>&2 2>&3) "1" "Check for Alpine Updates" ON \
3>&1 1>&2 2>&3
)
header_info header_info
if [ "$UPD" == "1" ]; then if [ "$UPD" == "1" ]; then
@@ -35,4 +37,4 @@ start
build_container build_container
description description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"

72
ct/fumadocs.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/fuma-nama/fumadoc
APP="Fumadocs"
var_tags="${var_tags:-documentation}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/fumadocs ]]; then
msg_error "No installation found in /opt/fumadocs!"
exit 1
fi
if [[ ! -f /opt/fumadocs/.projectname ]]; then
msg_error "Project name file not found: /opt/fumadocs/.projectname!"
exit 1
fi
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
PROJECT_NAME=$(</opt/fumadocs/.projectname)
PROJECT_DIR="/opt/fumadocs/${PROJECT_NAME}"
SERVICE_NAME="fumadocs_${PROJECT_NAME}.service"
if [[ ! -d "$PROJECT_DIR" ]]; then
msg_error "Project directory does not exist: $PROJECT_DIR"
exit 1
fi
msg_info "Stopping service $SERVICE_NAME"
systemctl stop "$SERVICE_NAME"
msg_ok "Stopped service $SERVICE_NAME"
msg_info "Updating dependencies using pnpm"
cd "$PROJECT_DIR"
$STD pnpm up --latest
$STD pnpm build
msg_ok "Updated dependencies using pnpm"
msg_info "Starting service $SERVICE_NAME"
systemctl start "$SERVICE_NAME"
msg_ok "Started service $SERVICE_NAME"
msg_ok "Fumadocs successfully updated"
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}:3000${CL}"

6
ct/headers/actualbudget Normal file
View File

@@ -0,0 +1,6 @@
___ __ __ ____ __ __
/ | _____/ /___ ______ _/ / / __ )__ ______/ /___ ____ / /_
/ /| |/ ___/ __/ / / / __ `/ / / __ / / / / __ / __ `/ _ \/ __/
/ ___ / /__/ /_/ /_/ / /_/ / / / /_/ / /_/ / /_/ / /_/ / __/ /_
/_/ |_\___/\__/\__,_/\__,_/_/ /_____/\__,_/\__,_/\__, /\___/\__/
/____/

6
ct/headers/alpine-rclone Normal file
View File

@@ -0,0 +1,6 @@
___ __ _ __
/ | / /___ (_)___ ___ __________/ /___ ____ ___
/ /| | / / __ \/ / __ \/ _ \______/ ___/ ___/ / __ \/ __ \/ _ \
/ ___ |/ / /_/ / / / / / __/_____/ / / /__/ / /_/ / / / / __/
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/_/\____/_/ /_/\___/
/_/

View File

@@ -0,0 +1,6 @@
___ __ _ __ _ __ __
/ | / /___ (_)___ ___ / /_(_)___ __ ______ ___ __/ /_/ /_
/ /| | / / __ \/ / __ \/ _ \______/ __/ / __ \/ / / / __ `/ / / / __/ __ \
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / / / / /_/ / /_/ / /_/ / /_/ / / /
/_/ |_/_/ .___/_/_/ /_/\___/ \__/_/_/ /_/\__, /\__,_/\__,_/\__/_/ /_/
/_/ /____/

View File

@@ -0,0 +1,6 @@
___ __ _ ______ _ _
/ | / /___ (_)___ ___ /_ __/________ _____ _________ ___ (_)_________(_)___ ____
/ /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ __ \/ ___/ __ `__ \/ / ___/ ___/ / __ \/ __ \
/ ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / / / (__ ) / / / / / (__ |__ ) / /_/ / / / /
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/_/____/____/_/\____/_/ /_/
/_/

6
ct/headers/fumadocs Normal file
View File

@@ -0,0 +1,6 @@
______ __
/ ____/_ ______ ___ ____ _____/ /___ __________
/ /_ / / / / __ `__ \/ __ `/ __ / __ \/ ___/ ___/
/ __/ / /_/ / / / / / / /_/ / /_/ / /_/ / /__(__ )
/_/ \__,_/_/ /_/ /_/\__,_/\__,_/\____/\___/____/

View File

@@ -0,0 +1,6 @@
__ ___ __ __ _
_____/ /_________ ____ _____ ___ / (_)___ / /__ _ _____ / /_ __ __(_)
/ ___/ __/ ___/ _ \/ __ `/ __ `__ \/ / / __ \/ //_/____| | /| / / _ \/ __ \/ / / / /
(__ ) /_/ / / __/ /_/ / / / / / / / / / / / ,< /_____/ |/ |/ / __/ /_/ / /_/ / /
/____/\__/_/ \___/\__,_/_/ /_/ /_/_/_/_/ /_/_/|_| |__/|__/\___/_.___/\__,_/_/

73
ct/streamlink-webui.sh Normal file
View File

@@ -0,0 +1,73 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CrazyWolf13/streamlink-webui
APP="streamlink-webui"
var_tags="${var_tags:-download,streaming}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/streamlink-webui ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/CrazyWolf13/streamlink-webui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop ${APP}
msg_ok "Stopped $APP"
rm -rf /opt/${APP}
NODE_VERSION="22"
NODE_MODULE="npm@latest,yarn@latest"
install_node_and_modules
setup_uv
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
msg_info "Updating $APP to v${RELEASE}"
$STD uv venv /opt/"${APPLICATION}"/backend/src/.venv
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
cd /opt/"${APPLICATION}"/frontend/src
$STD yarn install
$STD yarn build
chmod +x /opt/"${APPLICATION}"/start.sh
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start ${APP}
msg_ok "Started $APP"
msg_ok "Update Successful"
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}:8000${CL}"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 # Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Suwayomi/Suwayomi-Server # Source: https://github.com/Suwayomi/Suwayomi-Server
@@ -20,38 +20,47 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /usr/bin/suwayomi-server ]]; then if [[ ! -f /usr/bin/suwayomi-server ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
msg_info "Updating $APP"
msg_info "Stopping $APP"
systemctl stop suwayomi-server
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
cd /tmp
URL=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1)
curl -fsSL "$URL" -o $(basename "$URL")
$STD dpkg -i /tmp/*.deb
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start suwayomi-server
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f *.deb
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit exit
fi
if dpkg -l | grep -q "openjdk-17-jre"; then
$STD apt-get remove -y openjdk-17-jre
fi
JAVA_VERSION=21 install_java
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
msg_info "Updating $APP"
msg_info "Stopping $APP"
systemctl stop suwayomi-server
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
$STD dpkg -i "$temp_file"
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start suwayomi-server
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f "$temp_file"
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
} }
start start

View File

@@ -0,0 +1,35 @@
{
"name": "Actual Budget",
"slug": "actualbudget",
"categories": [
23
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5006,
"documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
"website": "https://actualbudget.org/",
"config_path": "/opt/actualbudget-data/config.json",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/actual-budget.svg",
"description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
"install_methods": [
{
"type": "default",
"script": "ct/actualbudget.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -2,7 +2,7 @@
"name": "Alpine-IT-Tools", "name": "Alpine-IT-Tools",
"slug": "alpine-it-tools", "slug": "alpine-it-tools",
"categories": [ "categories": [
20 20
], ],
"date_created": "2025-01-30", "date_created": "2025-01-30",
"type": "ct", "type": "ct",
@@ -15,33 +15,32 @@
"config_path": "", "config_path": "",
"description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.", "description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/alpine-it-tools.sh", "script": "ct/alpine-it-tools.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 256, "ram": 256,
"hdd": 0.2, "hdd": 0.5,
"os": "alpine", "os": "alpine",
"version": "3.21" "version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-it-tools.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.2,
"os": "alpine",
"version": "3.21"
}
} }
},
{
"type": "alpine",
"script": "ct/alpine-it-tools.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.5,
"os": "alpine",
"version": "3.21"
}
}
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -0,0 +1,55 @@
{
"name": "Alpine-rclone",
"slug": "alpine-rclone",
"categories": [
11
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://rclone.org/docs/",
"website": "https://rclone.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg",
"config_path": "~/.config/rclone/rclone.conf",
"description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-rclone.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-rclone.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "`cat ~/rclone.creds` to view login credentials"
},
{
"type": "info",
"text": "`htpasswd -b -B /opt/rclone/login.pwd newuser newuserpassword` to add more users."
}
]
}

View File

@@ -0,0 +1,51 @@
{
"name": "Alpine-tinyauth",
"slug": "alpine-tinyauth",
"categories": [
6
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://tinyauth.app/docs/getting-started.html",
"website": "https://tinyauth.app/",
"logo": "https://raw.githubusercontent.com/steveiliop56/tinyauth/refs/heads/main/frontend/public/android-chrome-192x192.png",
"config_path": "/opt/tinyauth/.env",
"description": "Tinyauth is a simple authentication middleware that adds simple username/password login or OAuth with Google, Github and any generic provider to all of your docker apps. It is designed for traefik but it can be extended to work with all reverse proxies like caddy and nginx.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-tinyauth.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-tinyauth.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "`cat ~/tinyauth.creds` to view login credentials"
}
]
}

View File

@@ -1,52 +1,51 @@
{ {
"name": "Alpine", "name": "Alpine",
"slug": "alpine", "slug": "alpine",
"categories": [ "categories": [
2 2
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": false,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": null, "documentation": null,
"website": "https://www.alpinelinux.org/", "website": "https://www.alpinelinux.org/",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/alpinelinux.svg", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/alpinelinux.svg",
"config_path": "", "config_path": "",
"description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.", "description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/alpine.sh", "script": "ct/alpine.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 0.1, "hdd": 0.5,
"os": "alpine", "os": "alpine",
"version": "3.21" "version": "3.21"
} }
},
{
"type": "alpine",
"script": "ct/alpine.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 0.1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": "alpine"
}, },
"notes": [ {
{ "type": "alpine",
"text": "To Update Alpine: `apk update && apk upgrade`", "script": "ct/alpine.sh",
"type": "info" "resources": {
} "cpu": 1,
] "ram": 512,
"hdd": 0.5,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": "alpine"
},
"notes": [
{
"text": "To Update Alpine: `apk update && apk upgrade`",
"type": "info"
}
]
} }

View File

@@ -0,0 +1,35 @@
{
"name": "Fumadocs",
"slug": "fumadocs",
"categories": [
10
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://fumadocs.vercel.app/docs/ui",
"website": "https://fumadocs.vercel.app/",
"logo": "https://raw.githubusercontent.com/fuma-nama/fumadocs/refs/heads/dev/documents/logo.png",
"config_path": "",
"description": "Fumadocs is a flexible and high-performance framework for creating well-structured documentation websites using Next.js. It allows developers to write content and transform it into structured data. Fumadocs supports various content sources, including MDX and Content Collections, and integrates search solutions like Orama and Algolia. It also provides interactive components to enhance the user experience.",
"install_methods": [
{
"type": "default",
"script": "ct/fumadocs.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,35 +1,35 @@
{ {
"name": "Open WebUI", "name": "Open WebUI",
"slug": "openwebui", "slug": "openwebui",
"categories": [ "categories": [
20 20
], ],
"date_created": "2024-10-24", "date_created": "2024-10-24",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": null, "documentation": "https://docs.openwebui.com/",
"website": "https://openwebui.com/", "website": "https://openwebui.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/open-webui.svg", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/open-webui.svg",
"config_path": "/opt/open-webui/.env", "config_path": "/opt/open-webui/.env",
"description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI", "description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/openwebui.sh", "script": "ct/openwebui.sh",
"resources": { "resources": {
"cpu": 4, "cpu": 4,
"ram": 4096, "ram": 4096,
"hdd": 16, "hdd": 16,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": []
} }

View File

@@ -0,0 +1,40 @@
{
"name": "Streamlink WebUI",
"slug": "streamlink-webui",
"categories": [
11
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8000,
"documentation": "https://github.com/CrazyWolf13/streamlink-webui",
"config_path": "/opt/streamlink-webui.env",
"website": "https://github.com/CrazyWolf13/streamlink-webui",
"logo": null,
"description": "a simple web-ui to the well-known streamlink cli application, which allows you to save twitch streams to your local disk.",
"install_methods": [
{
"type": "default",
"script": "ct/streamlink-webui.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "null",
"password": "null"
},
"notes": [
{
"text": "This app requires a Twitch cliend_ID and client_secret, set it in the config file. Look in the application documentation on how to obtain it.",
"type": "info"
}
]
}

View File

@@ -1,35 +1,55 @@
{ {
"name": "Transmission", "name": "Transmission",
"slug": "transmission", "slug": "transmission",
"categories": [ "categories": [
11 11
], ],
"date_created": "2024-05-02", "date_created": "2025-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 9091, "interface_port": 9091,
"documentation": null, "documentation": "https://github.com/transmission/transmission/blob/main/docs/README.md",
"website": "https://transmissionbt.com/", "website": "https://transmissionbt.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/transmission.svg", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/transmission.svg",
"config_path": "/etc/transmission-daemon/settings.json", "config_path": "Debian `/etc/transmission-daemon/settings.json` | Alpine `/var/lib/transmission/config/settings.json`",
"description": "Transmission is a free, open-source BitTorrent client known for its fast download speeds and ease of use. It supports various platforms such as Windows, Linux, and macOS and has features like web interface, peer exchange, and encrypted transfers.", "description": "Transmission is a free, open-source BitTorrent client known for its fast download speeds and ease of use. It supports various platforms such as Windows, Linux, and macOS and has features like web interface, peer exchange, and encrypted transfers.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/transmission.sh", "script": "ct/transmission.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 2048, "ram": 2048,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
}
],
"default_credentials": {
"username": "transmission",
"password": "transmission"
}, },
"notes": [] {
"type": "alpine",
"script": "ct/alpine-transmission.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "Script disables whitelisting by default. Change config to suit your needs."
},
{
"type": "info",
"text": "Alpine script sets initial disk size to 1GB. Please adjust for your needs after installation ends."
}
]
} }

View File

@@ -1,44 +1,249 @@
[ [
{
"name": "docker/compose",
"version": "v2.36.0",
"date": "2025-05-07T11:54:14Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.2.2",
"date": "2025-05-07T11:36:20Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.14.7",
"date": "2025-05-07T11:32:23Z"
},
{
"name": "home-assistant/core",
"version": "2025.4.4",
"date": "2025-04-25T07:47:57Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.1.3",
"date": "2025-05-07T11:09:21Z"
},
{
"name": "cockpit-project/cockpit",
"version": "338",
"date": "2025-05-07T10:43:29Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.0beta2",
"date": "2025-05-07T10:39:21Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.4.1",
"date": "2025-05-07T09:22:38Z"
},
{
"name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.0",
"date": "2025-05-07T09:12:08Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.1874",
"date": "2025-05-07T05:56:30Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.12.2",
"date": "2025-04-28T17:44:49Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.7",
"date": "2025-05-06T23:08:38Z"
},
{
"name": "influxdata/influxdb",
"version": "v1.12.1rc0",
"date": "2025-05-06T20:56:30Z"
},
{ {
"name": "keycloak/keycloak", "name": "keycloak/keycloak",
"version": "26.2.3", "version": "26.2.3",
"date": "2025-05-05T11:12:36Z" "date": "2025-05-05T11:12:36Z"
}, },
{ {
"name": "grokability/snipe-it", "name": "pocket-id/pocket-id",
"version": "v8.1.2", "version": "v0.52.0",
"date": "2025-05-05T10:28:17Z" "date": "2025-05-06T20:14:44Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.0.2",
"date": "2025-05-01T16:10:58Z"
},
{
"name": "redis/redis",
"version": "8.0.1-int",
"date": "2025-05-06T18:40:34Z"
},
{
"name": "Athou/commafeed",
"version": "5.8.0",
"date": "2025-05-06T18:33:07Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.19.0",
"date": "2025-05-06T18:05:42Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.36.2",
"date": "2025-05-06T17:32:30Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w19-4.13.0",
"date": "2025-05-06T15:59:45Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.509",
"date": "2025-05-06T15:37:10Z"
},
{
"name": "MariaDB/server",
"version": "mariadb-11.4.6",
"date": "2025-05-06T15:30:49Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.12.2",
"date": "2025-05-06T15:30:10Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.61",
"date": "2025-04-22T12:42:26Z"
},
{
"name": "zitadel/zitadel",
"version": "v2.65.8",
"date": "2025-05-06T13:57:49Z"
},
{
"name": "element-hq/synapse",
"version": "v1.129.0",
"date": "2025-05-06T12:28:54Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v24.8",
"date": "2025-03-18T07:33:51Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.91.2",
"date": "2025-05-05T12:59:51Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.0.1",
"date": "2025-05-06T10:24:43Z"
},
{
"name": "syncthing/syncthing",
"version": "v1.29.6",
"date": "2025-05-06T07:57:02Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.14",
"date": "2025-05-05T17:50:53Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0",
"date": "2025-05-06T06:47:16Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.1",
"date": "2025-01-01T16:15:52Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.10.2",
"date": "2025-05-06T03:12:53Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-tvdb",
"date": "2025-05-06T01:32:52Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.62.0",
"date": "2025-05-05T20:35:18Z"
},
{
"name": "postgres/postgres",
"version": "REL_13_21",
"date": "2025-05-05T20:34:49Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.20.9",
"date": "2025-05-05T19:24:09Z"
},
{
"name": "grafana/grafana",
"version": "v12.0.0",
"date": "2025-05-05T18:28:19Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.02.3",
"date": "2025-05-05T17:39:11Z"
},
{
"name": "apache/couchdb",
"version": "3.5.0",
"date": "2025-05-05T16:28:24Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.18.0",
"date": "2025-05-05T15:34:40Z"
},
{
"name": "apache/tika",
"version": "2.9.4",
"date": "2025-05-05T15:17:27Z"
},
{
"name": "neo4j/neo4j",
"version": "5.26.6",
"date": "2025-05-05T13:59:36Z"
},
{
"name": "traefik/traefik",
"version": "v3.4.0",
"date": "2025-05-05T13:59:23Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.14.9",
"date": "2025-05-05T12:20:38Z"
}, },
{ {
"name": "theonedev/onedev", "name": "theonedev/onedev",
"version": "v11.9.3", "version": "v11.9.3",
"date": "2025-05-05T10:22:11Z" "date": "2025-05-05T10:22:11Z"
}, },
{
"name": "traefik/traefik",
"version": "v3.3.7",
"date": "2025-05-05T08:53:40Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.17.0",
"date": "2025-05-05T08:27:55Z"
},
{ {
"name": "evcc-io/evcc", "name": "evcc-io/evcc",
"version": "0.203.5", "version": "0.203.5",
"date": "2025-05-05T06:41:02Z" "date": "2025-05-05T06:41:02Z"
}, },
{
"name": "mattermost/mattermost",
"version": "v10.6.3",
"date": "2025-04-29T07:03:19Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.1865",
"date": "2025-05-05T05:54:54Z"
},
{ {
"name": "MediaBrowser/Emby.Releases", "name": "MediaBrowser/Emby.Releases",
"version": "4.8.11.0", "version": "4.8.11.0",
@@ -64,21 +269,6 @@
"version": "v0.25.1", "version": "v0.25.1",
"date": "2025-02-25T17:30:48Z" "date": "2025-02-25T17:30:48Z"
}, },
{
"name": "semaphoreui/semaphore",
"version": "v2.14.8",
"date": "2025-05-04T19:28:20Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-05-04T18:23:57Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.12.1",
"date": "2025-05-04T18:23:38Z"
},
{ {
"name": "Lidarr/Lidarr", "name": "Lidarr/Lidarr",
"version": "v2.11.2.4629", "version": "v2.11.2.4629",
@@ -99,30 +289,15 @@
"version": "v5.22.4.9896", "version": "v5.22.4.9896",
"date": "2025-04-23T18:51:12Z" "date": "2025-04-23T18:51:12Z"
}, },
{
"name": "home-assistant/core",
"version": "2025.4.4",
"date": "2025-04-25T07:47:57Z"
},
{ {
"name": "bastienwirtz/homer", "name": "bastienwirtz/homer",
"version": "v25.05.1", "version": "v25.05.1",
"date": "2025-05-04T12:17:00Z" "date": "2025-05-04T12:17:00Z"
}, },
{
"name": "morpheus65535/bazarr",
"version": "v1.5.1",
"date": "2025-01-01T16:15:52Z"
},
{ {
"name": "ollama/ollama", "name": "ollama/ollama",
"version": "v0.6.7-rc2", "version": "v0.6.8",
"date": "2025-04-30T20:57:45Z" "date": "2025-05-03T22:56:44Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v0.51.1",
"date": "2025-05-03T21:42:51Z"
}, },
{ {
"name": "FreshRSS/FreshRSS", "name": "FreshRSS/FreshRSS",
@@ -144,11 +319,6 @@
"version": "v2.0.111", "version": "v2.0.111",
"date": "2025-05-03T16:25:30Z" "date": "2025-05-03T16:25:30Z"
}, },
{
"name": "linkwarden/linkwarden",
"version": "v2.10.1",
"date": "2025-05-03T16:03:26Z"
},
{ {
"name": "dgtlmoon/changedetection.io", "name": "dgtlmoon/changedetection.io",
"version": "0.49.16", "version": "0.49.16",
@@ -194,11 +364,6 @@
"version": "v0.304.0-rc.0", "version": "v0.304.0-rc.0",
"date": "2025-05-02T17:29:18Z" "date": "2025-05-02T17:29:18Z"
}, },
{
"name": "influxdata/influxdb",
"version": "v3.0.2",
"date": "2025-05-02T18:11:39Z"
},
{ {
"name": "forgejo/forgejo", "name": "forgejo/forgejo",
"version": "v11.0.1", "version": "v11.0.1",
@@ -214,50 +379,20 @@
"version": "v3.5.4", "version": "v3.5.4",
"date": "2025-05-02T13:42:06Z" "date": "2025-05-02T13:42:06Z"
}, },
{
"name": "zitadel/zitadel",
"version": "v2.71.9",
"date": "2025-05-02T12:48:14Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v24.8",
"date": "2025-03-18T07:33:51Z"
},
{ {
"name": "motioneye-project/motioneye", "name": "motioneye-project/motioneye",
"version": "0.42.1", "version": "0.42.1",
"date": "2020-06-07T07:27:04Z" "date": "2020-06-07T07:27:04Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.20.8",
"date": "2025-05-02T11:37:05Z"
},
{
"name": "redis/redis",
"version": "8.0.0",
"date": "2025-05-02T11:20:31Z"
},
{ {
"name": "emqx/emqx", "name": "emqx/emqx",
"version": "e5.9.0", "version": "e5.9.0",
"date": "2025-05-02T11:07:10Z" "date": "2025-05-02T11:07:10Z"
}, },
{
"name": "apache/couchdb",
"version": "3.5.0-RC1",
"date": "2025-05-02T04:34:23Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.0-rc.14",
"date": "2025-05-01T23:50:42Z"
},
{ {
"name": "stackblitz-labs/bolt.diy", "name": "stackblitz-labs/bolt.diy",
"version": "v0.0.7-hf1", "version": "v1.0.0-draft",
"date": "2025-03-10T20:49:39Z" "date": "2025-05-01T18:33:44Z"
}, },
{ {
"name": "Koenkk/zigbee2mqtt", "name": "Koenkk/zigbee2mqtt",
@@ -269,26 +404,11 @@
"version": "v4.3.0", "version": "v4.3.0",
"date": "2025-05-01T16:46:17Z" "date": "2025-05-01T16:46:17Z"
}, },
{
"name": "fallenbagel/jellyseerr",
"version": "preview-plex-home-profile",
"date": "2025-05-01T14:59:46Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.91.0",
"date": "2025-04-28T15:38:56Z"
},
{ {
"name": "NodeBB/NodeBB", "name": "NodeBB/NodeBB",
"version": "v4.3.0", "version": "v4.3.0",
"date": "2025-05-01T04:13:41Z" "date": "2025-05-01T04:13:41Z"
}, },
{
"name": "HabitRPG/habitica",
"version": "v5.36.1",
"date": "2025-04-30T19:44:44Z"
},
{ {
"name": "readeck/readeck", "name": "readeck/readeck",
"version": "0.18.1", "version": "0.18.1",
@@ -304,21 +424,6 @@
"version": "1.6.13", "version": "1.6.13",
"date": "2025-04-30T16:38:35Z" "date": "2025-04-30T16:38:35Z"
}, },
{
"name": "element-hq/synapse",
"version": "v1.129.0rc1",
"date": "2025-04-16T15:18:13Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.3.0-alpha.2",
"date": "2025-04-30T14:55:15Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.504.1",
"date": "2025-04-30T14:33:59Z"
},
{ {
"name": "cloudflare/cloudflared", "name": "cloudflare/cloudflared",
"version": "2025.4.2", "version": "2025.4.2",
@@ -334,26 +439,11 @@
"version": "version/2025.4.0", "version": "version/2025.4.0",
"date": "2025-04-30T12:34:14Z" "date": "2025-04-30T12:34:14Z"
}, },
{
"name": "Checkmk/checkmk",
"version": "v2.4.0-rc1",
"date": "2025-04-30T11:01:56Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w18-4.12.0",
"date": "2025-04-30T09:30:26Z"
},
{ {
"name": "Stirling-Tools/Stirling-PDF", "name": "Stirling-Tools/Stirling-PDF",
"version": "v0.46.0", "version": "v0.46.0",
"date": "2025-04-30T07:05:42Z" "date": "2025-04-30T07:05:42Z"
}, },
{
"name": "Luligu/matterbridge",
"version": "3.0.0",
"date": "2025-04-30T06:24:07Z"
},
{ {
"name": "go-gitea/gitea", "name": "go-gitea/gitea",
"version": "v1.25.0-dev", "version": "v1.25.0-dev",
@@ -374,11 +464,6 @@
"version": "v1.4.7", "version": "v1.4.7",
"date": "2025-04-29T15:00:18Z" "date": "2025-04-29T15:00:18Z"
}, },
{
"name": "apache/tika",
"version": "2.9.4-rc1",
"date": "2025-04-29T13:06:08Z"
},
{ {
"name": "esphome/esphome", "name": "esphome/esphome",
"version": "2025.4.1", "version": "2025.4.1",
@@ -399,11 +484,6 @@
"version": "v1.2.0", "version": "v1.2.0",
"date": "2025-04-28T17:55:01Z" "date": "2025-04-28T17:55:01Z"
}, },
{
"name": "cross-seed/cross-seed",
"version": "v6.12.2",
"date": "2025-04-28T17:44:49Z"
},
{ {
"name": "immich-app/immich", "name": "immich-app/immich",
"version": "v1.132.3", "version": "v1.132.3",
@@ -449,11 +529,6 @@
"version": "v3.1.9", "version": "v3.1.9",
"date": "2025-03-01T02:24:33Z" "date": "2025-03-01T02:24:33Z"
}, },
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.3.3",
"date": "2025-04-26T21:44:00Z"
},
{ {
"name": "TandoorRecipes/recipes", "name": "TandoorRecipes/recipes",
"version": "1.5.34", "version": "1.5.34",
@@ -499,11 +574,6 @@
"version": "v1.4.0", "version": "v1.4.0",
"date": "2025-04-24T16:20:17Z" "date": "2025-04-24T16:20:17Z"
}, },
{
"name": "openobserve/openobserve",
"version": "v0.14.6-rc8",
"date": "2025-04-24T15:39:41Z"
},
{ {
"name": "glpi-project/glpi", "name": "glpi-project/glpi",
"version": "10.0.18", "version": "10.0.18",
@@ -524,26 +594,6 @@
"version": "v3.5.2", "version": "v3.5.2",
"date": "2025-04-23T18:41:46Z" "date": "2025-04-23T18:41:46Z"
}, },
{
"name": "grafana/grafana",
"version": "v11.6.1",
"date": "2025-04-23T17:04:02Z"
},
{
"name": "cockpit-project/cockpit",
"version": "337",
"date": "2025-04-23T08:26:31Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.6",
"date": "2025-04-23T08:06:23Z"
},
{
"name": "jupyter/notebook",
"version": "v7.4.1",
"date": "2025-04-23T06:40:34Z"
},
{ {
"name": "minio/minio", "name": "minio/minio",
"version": "RELEASE.2025-04-22T22-12-26Z", "version": "RELEASE.2025-04-22T22-12-26Z",
@@ -559,11 +609,6 @@
"version": "2025.4.22", "version": "2025.4.22",
"date": "2025-04-22T14:18:11Z" "date": "2025-04-22T14:18:11Z"
}, },
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.61",
"date": "2025-04-22T12:42:26Z"
},
{ {
"name": "OctoPrint/OctoPrint", "name": "OctoPrint/OctoPrint",
"version": "1.11.0", "version": "1.11.0",
@@ -619,16 +664,6 @@
"version": "v12.6.1", "version": "v12.6.1",
"date": "2025-04-17T17:35:02Z" "date": "2025-04-17T17:35:02Z"
}, },
{
"name": "docker/compose",
"version": "v2.35.1",
"date": "2025-04-17T14:29:11Z"
},
{
"name": "neo4j/neo4j",
"version": "2025.04.0",
"date": "2025-04-17T11:13:20Z"
},
{ {
"name": "IceWhaleTech/CasaOS", "name": "IceWhaleTech/CasaOS",
"version": "v0.4.15", "version": "v0.4.15",
@@ -649,16 +684,6 @@
"version": "15.2", "version": "15.2",
"date": "2025-04-14T15:37:12Z" "date": "2025-04-14T15:37:12Z"
}, },
{
"name": "open-webui/open-webui",
"version": "v0.6.5",
"date": "2025-04-14T09:13:36Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.61.0",
"date": "2025-04-13T21:14:40Z"
},
{ {
"name": "Ombi-app/Ombi", "name": "Ombi-app/Ombi",
"version": "v4.47.1", "version": "v4.47.1",
@@ -749,21 +774,11 @@
"version": "v0.55.2", "version": "v0.55.2",
"date": "2025-04-05T12:07:32Z" "date": "2025-04-05T12:07:32Z"
}, },
{
"name": "Athou/commafeed",
"version": "5.7.0",
"date": "2025-04-04T18:10:16Z"
},
{ {
"name": "apache/tomcat", "name": "apache/tomcat",
"version": "9.0.104", "version": "9.0.104",
"date": "2025-04-04T12:58:11Z" "date": "2025-04-04T12:58:11Z"
}, },
{
"name": "BookStackApp/BookStack",
"version": "v25.02.2",
"date": "2025-04-02T16:39:50Z"
},
{ {
"name": "MagicMirrorOrg/MagicMirror", "name": "MagicMirrorOrg/MagicMirror",
"version": "v2.31.0", "version": "v2.31.0",
@@ -964,11 +979,6 @@
"version": "tc_v0.6.4", "version": "tc_v0.6.4",
"date": "2025-03-05T15:43:40Z" "date": "2025-03-05T15:43:40Z"
}, },
{
"name": "sysadminsmedia/homebox",
"version": "v0.18.0",
"date": "2025-03-04T15:35:27Z"
},
{ {
"name": "heiher/hev-socks5-server", "name": "heiher/hev-socks5-server",
"version": "2.8.0", "version": "2.8.0",
@@ -1009,11 +1019,6 @@
"version": "v28.0", "version": "v28.0",
"date": "2025-02-18T15:49:57Z" "date": "2025-02-18T15:49:57Z"
}, },
{
"name": "postgres/postgres",
"version": "REL_13_20",
"date": "2025-02-17T21:17:13Z"
},
{ {
"name": "sbondCo/Watcharr", "name": "sbondCo/Watcharr",
"version": "v2.0.2", "version": "v2.0.2",
@@ -1039,11 +1044,6 @@
"version": "v1.27.0", "version": "v1.27.0",
"date": "2025-02-13T15:55:36Z" "date": "2025-02-13T15:55:36Z"
}, },
{
"name": "MariaDB/server",
"version": "mariadb-11.7.2",
"date": "2025-02-13T04:13:46Z"
},
{ {
"name": "homebridge/homebridge", "name": "homebridge/homebridge",
"version": "v1.9.0", "version": "v1.9.0",

View File

@@ -0,0 +1,91 @@
#!/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
# Source: https://actualbudget.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Actual Budget"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
NODE_VERSION="22"
install_node_and_modules
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
chown -R root:root /opt/actualbudget-data
chmod -R 755 /opt/actualbudget-data
cat <<EOF >/opt/actualbudget-data/config.json
{
"port": 5006,
"hostname": "::",
"serverFiles": "/opt/actualbudget-data/server-files",
"userFiles": "/opt/actualbudget-data/user-files",
"trustedProxies": [
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16",
"127.0.0.0/8",
"::1/128",
"fc00::/7"
],
"https": {
"key": "/opt/actualbudget/selfhost.key",
"cert": "/opt/actualbudget/selfhost.crt"
}
}
EOF
mkdir -p /opt/actualbudget
cd /opt/actualbudget
$STD npm install --location=global @actual-app/sync-server
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
US
California
San Francisco
My Organization
My Unit
localhost
myemail@example.com
EOF
echo "${RELEASE}" >"/opt/actualbudget_version.txt"
msg_ok "Installed Actual Budget"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/actualbudget.service
[Unit]
Description=Actual Budget Service
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/actualbudget
Environment=ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB=20
Environment=ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB=50
Environment=ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB=20
ExecStart=/usr/bin/actual-server --config /opt/actualbudget-data/config.json
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now actualbudget
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rclone/rclone
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apk add --no-cache \
unzip \
apache2-utils
msg_ok "Installed dependencies"
msg_info "Installing rclone"
temp_file=$(mktemp)
mkdir -p /opt/rclone
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
cd /opt/rclone
RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16)
$STD htpasswd -cb -B login.pwd admin "$RCLONE_PASSWORD"
{
echo "rclone-Credentials"
echo "rclone User Name: admin"
echo "rclone Password: $RCLONE_PASSWORD"
} >>~/rclone.creds
echo "${RELEASE}" >/opt/rclone_version.txt
rm -f "$temp_file"
msg_ok "Installed rclone"
msg_info "Enabling rclone Service"
cat <<EOF >/etc/init.d/rclone
#!/sbin/openrc-run
description="rclone Service"
command="/opt/rclone/rclone"
command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/rclone/login.pwd"
command_background="true"
command_user="root"
pidfile="/var/run/rclone.pid"
depend() {
use net
}
EOF
chmod +x /etc/init.d/rclone
$STD rc-update add rclone default
msg_ok "Enabled rclone Service"
msg_info "Starting rclone"
$STD service rclone start
msg_ok "Started rclone"
motd_ssh
customize
msg_info "Cleaning up"
rm -rf "$temp_file"
$STD apk cache clean
msg_ok "Cleaned"

View File

@@ -0,0 +1,83 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/tinyauth
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apk add --no-cache \
npm \
curl \
go
msg_ok "Installed Dependencies"
msg_info "Installing tinyauth"
temp_file=$(mktemp)
$STD npm install -g bun
mkdir -p /opt/tinyauth
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/steveiliop56/tinyauth/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar -xzf "$temp_file" -C /opt/tinyauth --strip-components=1
cd /opt/tinyauth/frontend
$STD bun install
$STD bun run build
mv dist /opt/tinyauth/internal/assets/
cd /opt/tinyauth
$STD go mod download
CGO_ENABLED=0 go build -ldflags "-s -w"
{
echo "tinyauth Credentials"
echo "Username: admin@example.com"
echo "Password: admin"
} >>~/tinyauth.creds
echo "${RELEASE}" >/opt/tinyauth_version.txt
msg_ok "Installed tinyauth"
msg_info "Enabling tinyauth Service"
SECRET=$(head -c 16 /dev/urandom | xxd -p -c 16 | tr -d '\n')
{
echo "SECRET=${SECRET}"
echo "USERS=admin@example.com:\$2a\$10\$CrTK.W7WXSClo3ZY1yJUFupg5UdV8WNcynEhZhJFNjhGQB.Ga0ZDm"
echo "APP_URL=http://localhost:3000"
} >>/opt/tinyauth/.env
cat <<EOF >/etc/init.d/tinyauth
#!/sbin/openrc-run
description="tinyauth Service"
command="/opt/tinyauth/tinyauth"
directory="/opt/tinyauth"
command_user="root"
command_background="true"
pidfile="/var/run/tinyauth.pid"
start_pre() {
if [ -f "/opt/tinyauth/.env" ]; then
export \$(grep -v '^#' /opt/tinyauth/.env | xargs)
fi
}
depend() {
use net
}
EOF
chmod +x /etc/init.d/tinyauth
$STD rc-update add tinyauth default
msg_ok "Enabled tinyauth Service"
msg_info "Starting tinyauth"
$STD service tinyauth start
msg_ok "Started tinyauth"
motd_ssh
customize

View File

@@ -0,0 +1,32 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://transmissionbt.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Transmission"
$STD apk add --no-cache transmission-cli transmission-daemon
$STD rc-service transmission-daemon start
$STD rc-service transmission-daemon stop
sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json
msg_ok "Installed Transmission"
msg_info "Enabling Transmission Service"
$STD rc-update add transmission-daemon default
msg_ok "Enabled Transmission Service"
msg_info "Starting Transmission"
$STD rc-service transmission-daemon start
msg_ok "Started Transmission"
motd_ssh
customize

View File

@@ -0,0 +1,53 @@
#!/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
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 \
ca-certificates
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
msg_info "Installing Fumadocs"
mkdir -p /opt/fumadocs
cd /opt/fumadocs
pnpm create fumadocs-app
PROJECT_NAME=$(find . -maxdepth 1 -type d ! -name '.' ! -name '..' | sed 's|^\./||')
echo "$PROJECT_NAME" >/opt/fumadocs/.projectname
msg_ok "Installed Fumadocs"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/fumadocs_$PROJECT_NAME.service
[Unit]
Description=Fumadocs Documentation Server
After=network.target
[Service]
WorkingDirectory=/opt/fumadocs/$PROJECT_NAME
ExecStart=/usr/bin/pnpm run dev
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now fumadocs_$PROJECT_NAME
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -0,0 +1,66 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CrazyWolf13/streamlink-webui
# Import Functions und Setup
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="22"
NODE_MODULE="npm@latest,yarn@latest"
install_node_and_modules
setup_uv
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
msg_info "Setup ${APPLICATION}"
mkdir -p "/opt/${APPLICATION}-download"
$STD uv venv /opt/"${APPLICATION}"/backend/src/.venv
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
cd /opt/"${APPLICATION}"/frontend/src
$STD yarn install
$STD yarn build
chmod +x /opt/"${APPLICATION}"/start.sh
msg_ok "Setup ${APPLICATION}"
msg_info "Creating Service"
cat <<'EOF' >/opt/"${APPLICATION}".env
CLIENT_ID='your_client_id'
CLIENT_SECRET='your_client_secret'
DOWNLOAD_PATH='/opt/streamlink-webui-download'
# BASE_URL='https://sub.domain.com' \
# REVERSE_PROXY=True \
EOF
cat <<EOF >/etc/systemd/system/"${APPLICATION}".service
[Unit]
Description=${APPLICATION} Service
After=network.target
[Service]
EnvironmentFile=/opt/${APPLICATION}.env
WorkingDirectory=/opt/${APPLICATION}/backend/src
ExecStart=/bin/bash -c 'source /opt/${APPLICATION}/backend/src/.venv/bin/activate && exec /opt/${APPLICATION}/start.sh'
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now "${APPLICATION}"
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 # Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Suwayomi/Suwayomi-Server # Source: https://github.com/Suwayomi/Suwayomi-Server
@@ -14,18 +14,19 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y libc++-dev
openjdk-17-jre \
libc++-dev
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
JAVA_VERSION=21 install_java
msg_info "Settting up Suwayomi-Server" msg_info "Settting up Suwayomi-Server"
URL=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1) temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "$URL" -o $(basename "$URL") curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
$STD dpkg -i *.deb $STD dpkg -i "$temp_file"
echo ${RELEASE} >/opt/suwayomi-server_version.txt echo "${RELEASE}" >/opt/suwayomi-server_version.txt
msg_ok "Done setting up Suwayomi-Server" msg_ok "Done setting up Suwayomi-Server"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/suwayomi-server.service cat <<EOF >/etc/systemd/system/suwayomi-server.service
[Unit] [Unit]
@@ -41,10 +42,12 @@ WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now suwayomi-server systemctl enable -q --now suwayomi-server
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f *.deb rm -f "$temp_file"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -477,7 +477,7 @@ advanced_settings() {
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}" echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
fi fi
else else
exit exit_script
fi fi
if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 "$NSAPP" --title "HOSTNAME" 3>&1 1>&2 2>&3); then if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 "$NSAPP" --title "HOSTNAME" 3>&1 1>&2 2>&3); then
@@ -1441,7 +1441,7 @@ silent() {
fi fi
} }
exit_script() { api_exit_script() {
exit_code=$? # Capture the exit status of the last executed command exit_code=$? # Capture the exit status of the last executed command
#200 exit codes indicate error in create_lxc.sh #200 exit codes indicate error in create_lxc.sh
#100 exit codes indicate error in install.func #100 exit codes indicate error in install.func
@@ -1465,7 +1465,7 @@ exit_script() {
fi fi
} }
trap 'exit_script' EXIT trap 'api_exit_script' EXIT
trap 'post_update_to_api "failed" "$BASH_COMMAND"' ERR trap 'post_update_to_api "failed" "$BASH_COMMAND"' ERR
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM

View File

@@ -26,7 +26,6 @@ NSAPP="arch-linux-vm"
var_os="arch-linux" var_os="arch-linux"
var_version=" " var_version=" "
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') 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") YW=$(echo "\033[33m")
BL=$(echo "\033[36m") BL=$(echo "\033[36m")
@@ -76,6 +75,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -161,7 +177,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_SIZE="4G" DISK_SIZE="4G"
@@ -194,10 +210,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -20,7 +20,6 @@ EOF
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="debian12vm" NSAPP="debian12vm"
@@ -75,6 +74,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -161,7 +177,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_SIZE="8G" DISK_SIZE="8G"
@@ -194,10 +210,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -20,7 +20,6 @@ EOF
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="debian12vm" NSAPP="debian12vm"
@@ -76,6 +75,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -162,7 +178,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_CACHE="" DISK_CACHE=""
@@ -195,10 +211,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"
@@ -244,7 +261,6 @@ function advanced_settings() {
exit-script exit-script
fi fi
if DISK_CACHE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISK CACHE" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \ 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 \ "0" "None (Default)" ON \
"1" "Write Through" OFF \ "1" "Write Through" OFF \

View File

@@ -21,15 +21,13 @@ EOF
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
VERSIONS=(stable beta dev) VERSIONS=(stable beta dev)
#API VARIABLES
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="homeassistant-os" NSAPP="homeassistant-os"
var_os="homeassistant" var_os="homeassistant"
DISK_SIZE="32G" DISK_SIZE="32G"
#
for version in "${VERSIONS[@]}"; do for version in "${VERSIONS[@]}"; do
eval "$version=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep '"ova"' | cut -d '"' -f 4)" eval "$version=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep '"ova"' | cut -d '"' -f 4)"
done done
@@ -65,6 +63,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -166,7 +181,7 @@ function exit-script() {
function default_settings() { function default_settings() {
BRANCH="$stable" BRANCH="$stable"
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_CACHE="cache=writethrough," DISK_CACHE="cache=writethrough,"
@@ -210,10 +225,11 @@ function advanced_settings() {
exit-script exit-script
fi fi
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID="$VMID"
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -21,15 +21,12 @@ clear
header_info header_info
echo -e "Loading..." echo -e "Loading..."
GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]') GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]')
NEXTID=$(pvesh get /cluster/nextid)
#API VARIABLES
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="mikrotik-router-os" NSAPP="mikrotik-router-os"
var_os="mikrotik" var_os="mikrotik"
var_version=" " var_version=" "
DISK_SIZE="1G" DISK_SIZE="1G"
#
YW=$(echo "\033[33m") YW=$(echo "\033[33m")
BL=$(echo "\033[36m") BL=$(echo "\033[36m")
HA=$(echo "\033[1;34m") HA=$(echo "\033[1;34m")
@@ -60,6 +57,24 @@ function error_exit() {
[ ! -z ${VMID-} ] && cleanup_vmid [ ! -z ${VMID-} ] && cleanup_vmid
exit $EXIT exit $EXIT
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if $(qm status $VMID &>/dev/null); then if $(qm status $VMID &>/dev/null); then
if [ "$(qm status $VMID | awk '{print $2}')" == "running" ]; then if [ "$(qm status $VMID | awk '{print $2}')" == "running" ]; then

View File

@@ -19,16 +19,13 @@ EOF
} }
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
#API VARIABLES
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="turnkey-nextcloud" NSAPP="turnkey-nextcloud"
var_os="turnkey-nextcloud" var_os="turnkey-nextcloud"
var_version=" " var_version=" "
DISK_SIZE="12G" DISK_SIZE="12G"
#
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
NAME="TurnKey Nexcloud VM" NAME="TurnKey Nexcloud VM"
YW=$(echo "\033[33m") YW=$(echo "\033[33m")
BL=$(echo "\033[36m") BL=$(echo "\033[36m")
@@ -58,6 +55,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -142,7 +156,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_CACHE="" DISK_CACHE=""
@@ -173,10 +187,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -23,17 +23,15 @@ EOF
} }
header_info header_info
echo -e "Loading..." echo -e "Loading..."
#API VARIABLES
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="openwrt-vm" NSAPP="openwrt-vm"
var_os="openwrt" var_os="openwrt"
var_version=" " var_version=" "
DISK_SIZE="0.5G" DISK_SIZE="0.5G"
#
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
YW=$(echo "\033[33m") YW=$(echo "\033[33m")
BL=$(echo "\033[36m") BL=$(echo "\033[36m")
HA=$(echo "\033[1;34m") HA=$(echo "\033[1;34m")
@@ -61,6 +59,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -242,10 +257,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -28,7 +28,7 @@ var_version="25.1"
# #
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
YW=$(echo "\033[33m") YW=$(echo "\033[33m")
BL=$(echo "\033[36m") BL=$(echo "\033[36m")
HA=$(echo "\033[1;34m") HA=$(echo "\033[1;34m")
@@ -54,6 +54,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -202,7 +219,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_CACHE="" DISK_CACHE=""
@@ -252,10 +269,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
local ip_regex='^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$' local ip_regex='^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$'
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -19,17 +19,15 @@ EOF
} }
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
#API VARIABLES
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="turnkey-owncloud-vm" NSAPP="turnkey-owncloud-vm"
var_os="owncloud" var_os="owncloud"
var_version="12" var_version="12"
DISK_SIZE="12G" DISK_SIZE="12G"
#
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
NAME="TurnKey ownCloud VM" NAME="TurnKey ownCloud VM"
YW=$(echo "\033[33m") YW=$(echo "\033[33m")
BL=$(echo "\033[36m") BL=$(echo "\033[36m")
HA=$(echo "\033[1;34m") HA=$(echo "\033[1;34m")
@@ -58,6 +56,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -142,7 +157,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_CACHE="" DISK_CACHE=""
@@ -173,10 +188,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -24,17 +24,14 @@ EOF
clear clear
header_info header_info
echo -e "Loading..." echo -e "Loading..."
#API VARIABLES
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="pimox-haos-vm" NSAPP="pimox-haos-vm"
var_os="pimox-haos" var_os="pimox-haos"
var_version=" " var_version=" "
DISK_SIZE="32G" DISK_SIZE="32G"
#
GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]') GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]')
USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }') USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }')
NEXTID=$(pvesh get /cluster/nextid)
STABLE=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') STABLE=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/stable.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }')
BETA=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/beta.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') BETA=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/beta.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }')
DEV=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/dev.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }') DEV=$(curl -fsSL https://raw.githubusercontent.com/home-assistant/version/master/dev.json | grep "ova" | awk '{print substr($2, 2, length($2)-3) }')
@@ -70,6 +67,24 @@ function error_exit() {
[ ! -z ${VMID-} ] && cleanup_vmid [ ! -z ${VMID-} ] && cleanup_vmid
exit $EXIT exit $EXIT
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if $(qm status $VMID &>/dev/null); then if $(qm status $VMID &>/dev/null); then
if [ "$(qm status $VMID | awk '{print $2}')" == "running" ]; then if [ "$(qm status $VMID | awk '{print $2}')" == "running" ]; then

View File

@@ -20,7 +20,6 @@ EOF
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="ubuntu-2204-vm" NSAPP="ubuntu-2204-vm"
@@ -33,8 +32,6 @@ RD=$(echo "\033[01;31m")
BGN=$(echo "\033[4;92m") BGN=$(echo "\033[4;92m")
GN=$(echo "\033[1;92m") GN=$(echo "\033[1;92m")
DGN=$(echo "\033[32m") DGN=$(echo "\033[32m")
CL=$(echo "\033[m")
CL=$(echo "\033[m") CL=$(echo "\033[m")
BOLD=$(echo "\033[1m") BOLD=$(echo "\033[1m")
BFR="\\r\\033[K" BFR="\\r\\033[K"
@@ -75,6 +72,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -160,7 +174,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_SIZE="5G" DISK_SIZE="5G"
@@ -193,10 +207,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -21,7 +21,6 @@ EOF
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="ubuntu-2404-vm" NSAPP="ubuntu-2404-vm"
@@ -76,6 +75,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -161,7 +177,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_SIZE="7G" DISK_SIZE="7G"
@@ -194,10 +210,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"

View File

@@ -20,7 +20,6 @@ EOF
header_info header_info
echo -e "\n Loading..." echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
METHOD="" METHOD=""
NSAPP="ubuntu-2410-vm" NSAPP="ubuntu-2410-vm"
@@ -75,6 +74,23 @@ function error_handler() {
cleanup_vmid cleanup_vmid
} }
function get_valid_nextid() {
local try_id
try_id=$(pvesh get /cluster/nextid)
while true; do
if [ -f "/etc/pve/qemu-server/${try_id}.conf" ] || [ -f "/etc/pve/lxc/${try_id}.conf" ]; then
try_id=$((try_id + 1))
continue
fi
if lvs --noheadings -o lv_name | grep -qE "(^|[-_])${try_id}($|[-_])"; then
try_id=$((try_id + 1))
continue
fi
break
done
echo "$try_id"
}
function cleanup_vmid() { function cleanup_vmid() {
if qm status $VMID &>/dev/null; then if qm status $VMID &>/dev/null; then
qm stop $VMID &>/dev/null qm stop $VMID &>/dev/null
@@ -160,7 +176,7 @@ function exit-script() {
} }
function default_settings() { function default_settings() {
VMID="$NEXTID" VMID=$(get_valid_nextid)
FORMAT=",efitype=4m" FORMAT=",efitype=4m"
MACHINE="" MACHINE=""
DISK_SIZE="8G" DISK_SIZE="8G"
@@ -193,10 +209,11 @@ function default_settings() {
function advanced_settings() { function advanced_settings() {
METHOD="advanced" METHOD="advanced"
[ -z "${VMID:-}" ] && VMID=$(get_valid_nextid)
while true; do 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 VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $VMID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z "$VMID" ]; then if [ -z "$VMID" ]; then
VMID="$NEXTID" VMID=$(get_valid_nextid)
fi fi
if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then if pct status "$VMID" &>/dev/null || qm status "$VMID" &>/dev/null; then
echo -e "${CROSS}${RD} ID $VMID is already in use${CL}" echo -e "${CROSS}${RD} ID $VMID is already in use${CL}"