Compare commits

..

No commits in common. "main" and "2025-08-02" have entirely different histories.

1506 changed files with 33732 additions and 68322 deletions

View File

@ -1,6 +1,7 @@
# Community Scripts Contribution Guide # Community Scripts Contribution Guide
## **Welcome to the communty-scripts Repository!** ## **Welcome to the communty-scripts Repository!**
📜 These documents outline the essential coding standards for all our scripts and JSON files. Adhering to these standards ensures that our codebase remains consistent, readable, and maintainable. By following these guidelines, we can improve collaboration, reduce errors, and enhance the overall quality of our project. 📜 These documents outline the essential coding standards for all our scripts and JSON files. Adhering to these standards ensures that our codebase remains consistent, readable, and maintainable. By following these guidelines, we can improve collaboration, reduce errors, and enhance the overall quality of our project.
@ -19,7 +20,7 @@ These documents cover the coding standards for the following types of files in o
- **`install/$AppName-install.sh` Scripts**: These scripts are responsible for the installation of applications. - **`install/$AppName-install.sh` Scripts**: These scripts are responsible for the installation of applications.
- **`ct/$AppName.sh` Scripts**: These scripts handle the creation and updating of containers. - **`ct/$AppName.sh` Scripts**: These scripts handle the creation and updating of containers.
- **`json/$AppName.json`**: These files store structured data and are used for the website. - **`frontend/public/json/$AppName.json`**: These files store structured data and are used for the website.
Each section provides detailed guidelines on various aspects of coding, including shebang usage, comments, variable naming, function naming, indentation, error handling, command substitution, quoting, script structure, and logging. Additionally, examples are provided to illustrate the application of these standards. Each section provides detailed guidelines on various aspects of coding, including shebang usage, comments, variable naming, function naming, indentation, error handling, command substitution, quoting, script structure, and logging. Additionally, examples are provided to illustrate the application of these standards.
@ -27,6 +28,7 @@ By following the coding standards outlined in this document, we ensure that our
Let's work together to keep our codebase clean, efficient, and maintainable! 💪🚀 Let's work together to keep our codebase clean, efficient, and maintainable! 💪🚀
## Getting Started ## Getting Started
Before contributing, please ensure that you have the following setup: Before contributing, please ensure that you have the following setup:
@ -38,73 +40,90 @@ Before contributing, please ensure that you have the following setup:
- [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format) - [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format)
### Important Notes ### Important Notes
- Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh) as templates when creating new scripts. Final version of the script (the one you will push for review), must have all comments removed, except the ones in the file header.
- Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_install/AppName-install.sh) as templates when creating new scripts.
--- ---
# 🚀 The Application Script (ct/AppName.sh) # 🚀 The Application Script (ct/AppName.sh)
- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_ct/AppName.md). - You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md).
- These scripts are responsible for container creation, setting the necessary variables and handling the update of the application once installed. - These scripts are responsible for container creation, setting the necessary variables and handling the update of the application once installed.
--- ---
# 🛠 The Installation Script (install/AppName-install.sh) # 🛠 The Installation Script (install/AppName-install.sh)
- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_install/AppName-install.md). - You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md).
- These scripts are responsible for the installation of the application. - These scripts are responsible for the installation of the application.
--- ---
## 🚀 Building Your Own Scripts ## 🚀 Building Your Own Scripts
Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_install/AppName-install.sh) Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
--- ---
## 🤝 Contribution Process ## 🤝 Contribution Process
### 1. Fork the repository All PR's related to new scripts should be made against our Dev repository first, where we can test the scripts before they are pushed and merged in the official repository.
**Our Dev repo is `http://www.github.com/community-scripts/ProxmoxVED`**
You will need to adjust paths mentioned further down this document to match the repo you're pushing the scripts to.
### 1. Fork the repository
Fork to your GitHub account Fork to your GitHub account
### 2. Clone your fork on your local environment ### 2. Clone your fork on your local environment
```bash ```bash
git clone https://github.com/yourUserName/ForkName git clone https://github.com/yourUserName/ForkName
``` ```
### 3. Create a new branch ### 3. Create a new branch
```bash ```bash
git switch -c your-feature-branch git switch -c your-feature-branch
``` ```
### 4. Change paths in build.func install.func and AppName.sh ### 4. Change paths in build.func install.func and AppName.sh
To be able to develop from your own branch you need to change:\
`https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`\
to\
`https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`\
in following files:
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`. `misc/build.func`\
`misc/install.func`\
`ct/AppName.sh`
Example: `https://raw.githubusercontent.com/tremor021/PromoxVE/refs/heads/testbranch`
Also you need to change:\
`https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main`\
to\
`https://raw.githubusercontent.com/[USER]/[REPOSITORY]/raw/[BRANCH]`\
in `misc/install.func` in order for `update` shell command to work.\
These changes are only while writing and testing your scripts. Before opening a Pull Request, you should change all above mentioned paths in `misc/build.func`, `misc/install.func` and `ct/AppName.sh` to point to the original paths.
### 4. Commit changes (without build.func and install.func!) ### 4. Commit changes (without build.func and install.func!)
```bash ```bash
git commit -m "Your commit message" git commit -m "Your commit message"
``` ```
### 5. Push to your fork ### 5. Push to your fork
```bash ```bash
git push origin your-feature-branch git push origin your-feature-branch
``` ```
### 6. Create a Pull Request ### 6. Create a Pull Request
Open a Pull Request from your feature branch to the main branch on the Dev repository. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request.
Open a Pull Request from your feature branch to the main repository branch. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request.
--- ---
## 📚 Pages ## 📚 Pages
- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_ct/AppName.sh) - [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh)
- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_install/AppName-install.sh) - [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_json/AppName.json) - [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/json/AppName.json)

View File

@ -40,7 +40,7 @@
- Import the build.func file. - Import the build.func file.
- When developing your own script, change the URL to your own repository. - When developing your own script, change the URL to your own repository.
> [!IMPORTANT] > [!IMPORTANT]
> You also need to change all apperances of this URL in `misc/build.func` and `misc/install.func` > You also need to change all apperances of this URL in `misc/build.func` and `misc/install.func`
Example for development: Example for development:
@ -52,7 +52,7 @@ source <(curl -s https://raw.githubusercontent.com/[USER]/[REPO]/refs/heads/[BRA
Final script: Final script:
```bash ```bash
source <(curl -s 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)
``` ```
> [!CAUTION] > [!CAUTION]
@ -75,6 +75,7 @@ Example:
> >
> - Add your username and source URL > - Add your username and source URL
> - For existing scripts, add "| Co-Author [YourUserName]" after the current author > - For existing scripts, add "| Co-Author [YourUserName]" after the current author
> - Source is a URL of github repo containting source files of the application you're installing (not URL of your homepage or a blog)
--- ---
@ -95,7 +96,7 @@ Example:
>| Variable | Description | Notes | >| Variable | Description | Notes |
>|----------|-------------|-------| >|----------|-------------|-------|
>| `APP` | Application name | Must match ct\AppName.sh | >| `APP` | Application name | Must match ct\AppName.sh |
>| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number | >| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number to 2 |
>| `var_cpu` | CPU cores | Number of cores | >| `var_cpu` | CPU cores | Number of cores |
>| `var_ram` | RAM | In MB | >| `var_ram` | RAM | In MB |
>| `var_disk` | Disk capacity | In GB | >| `var_disk` | Disk capacity | In GB |
@ -107,13 +108,13 @@ Example:
```bash ```bash
APP="SnipeIT" APP="SnipeIT"
var_tags="asset-management;foss" var_tags="${var_tags:-asset-management;foss}"
var_cpu="2" var_cpu="${var_cpu:-2}"
var_ram="2048" var_ram="${var_ram:-2048}"
var_disk="4" var_disk="${var_disk:-4}"
var_os="debian" var_os="${var_os:-debian}"
var_version="12" var_version="${var_version:-12}"
var_unprivileged="1" var_unprivileged="${var_unprivileged:-1}"
``` ```
## 2.2 **📋 App output & base settings** ## 2.2 **📋 App output & base settings**
@ -189,7 +190,7 @@ Example with a Github Release:
Example: Example:
```bash ```bash
curl -fsSL wget -q
unzip -q unzip -q
``` ```
@ -198,8 +199,8 @@ unzip -q
Example: Example:
```bash ```bash
$STD php artisan migrate --force $STD php artisan migrate --force
$STD php artisan config:clear $STD php artisan config:clear
``` ```
### 3.5 **Backups** ### 3.5 **Backups**

86
.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh generated vendored Normal file
View File

@ -0,0 +1,86 @@
#!/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: [YourUserName]
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: [SOURCE_URL]
# App Default Values
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
APP="[APP_NAME]"
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
var_tags="${var_tags:-[TAGS]}"
# Number of cores (1-X) (e.g. 4) - default are 2
var_cpu="${var_cpu:-[CPU]}"
# Amount of used RAM in MB (e.g. 2048 or 4096)
var_ram="${var_ram:-[RAM]}"
# Amount of used disk space in GB (e.g. 4 or 10)
var_disk="${var_disk:-[DISK]}"
# Default OS (e.g. debian, ubuntu, alpine)
var_os="${var_os:-[OS]}"
# Default OS version (e.g. 12 for debian, 24.04 for ubuntu, 3.20 for alpine)
var_version="${var_version:-[VERSION]}"
# 1 = unprivileged container, 0 = privileged container
var_unprivileged="${var_unprivileged:-[UNPRIVILEGED]}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
# Check if installation is present | -f for file, -d for folder
if [[ ! -f [INSTALLATION_CHECK_PATH] ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
# Crawling the new version and checking whether an update is required
RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
# Stopping Services
msg_info "Stopping $APP"
systemctl stop [SERVICE_NAME]
msg_ok "Stopped $APP"
# Creating Backup
msg_info "Creating Backup"
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" [IMPORTANT_PATHS]
msg_ok "Backup Created"
# Execute Update
msg_info "Updating $APP to v${RELEASE}"
[UPDATE_COMMANDS]
msg_ok "Updated $APP to v${RELEASE}"
# Starting Services
msg_info "Starting $APP"
systemctl start [SERVICE_NAME]
msg_ok "Started $APP"
# Cleaning up
msg_info "Cleaning Up"
rm -rf [TEMP_FILES]
msg_ok "Cleanup Completed"
# Last Action
echo "${RELEASE}" >/opt/${APP}_version.txt
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}:[PORT]${CL}"

View File

@ -67,6 +67,7 @@ Example:
> >
> - Add your username > - Add your username
> - When updating/reworking scripts, add "| Co-Author [YourUserName]" > - When updating/reworking scripts, add "| Co-Author [YourUserName]"
> - Source is a URL of github repo containting source files of the application you're installing (not URL of your homepage or a blog)
### 1.3 **Variables and function import** ### 1.3 **Variables and function import**
@ -110,12 +111,9 @@ Example:
```bash ```bash
$STD apt-get install -y \ $STD apt-get install -y \
curl \
composer \ composer \
git \ git \
sudo \ nginx
mc \
nginx
``` ```
### 3.2 **Collapse dependencies** ### 3.2 **Collapse dependencies**
@ -154,7 +152,7 @@ Example for a git release:
```bash ```bash
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
``` ```
### 5.2 **Save the version for update checks** ### 5.2 **Save the version for update checks**
@ -165,7 +163,7 @@ curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip"
Example: Example:
```bash ```bash
echo "${RELEASE}" >"/opt/AppName_version.txt" echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
``` ```
--- ---
@ -177,6 +175,7 @@ echo "${RELEASE}" >"/opt/AppName_version.txt"
- Use standard functions like `msg_info`, `msg_ok` or `msg_error` to print status messages. - Use standard functions like `msg_info`, `msg_ok` or `msg_error` to print status messages.
- Each `msg_info` must be followed with a `msg_ok` before any other output is made. - Each `msg_info` must be followed with a `msg_ok` before any other output is made.
- Display meaningful progress messages at key stages. - Display meaningful progress messages at key stages.
- Taking user input with `read -p` must be outside of `msg_info`...`msg_ok` code block
Example: Example:
@ -184,6 +183,8 @@ Example:
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y ... $STD apt-get install -y ...
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
read -p "${TAB3}Do you wish to enable HTTPS mode? (y/N): " httpschoice
``` ```
### 6.2 **Verbosity** ### 6.2 **Verbosity**
@ -192,7 +193,7 @@ msg_ok "Installed Dependencies"
Example: Example:
```bash ```bash
curl -fsSL wget -q
unzip -q unzip -q
``` ```

View File

@ -14,12 +14,9 @@ setting_up_container
network_check network_check
update_os update_os
# Installing Dependencies with the 3 core dependencies (curl;sudo;mc) # Installing Dependencies
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y \
curl \
sudo \
mc \
[PACKAGE_1] \ [PACKAGE_1] \
[PACKAGE_2] \ [PACKAGE_2] \
[PACKAGE_3] [PACKAGE_3]
@ -38,26 +35,24 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
echo "Database User: $DB_USER" echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS" echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME" echo "Database Name: $DB_NAME"
} >>~/$APP_NAME.creds } >>~/"$APP_NAME".creds
msg_ok "Set up Database" msg_ok "Set up Database"
# Temp
# Setup App # Setup App
msg_info "Setup ${APPLICATION}" msg_info "Setup ${APPLICATION}"
RELEASE=$(curl -s https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/[REPO]/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip" curl -fsSL -o "${RELEASE}.zip" "https://github.com/[REPO]/archive/refs/tags/${RELEASE}.zip"
unzip -q ${RELEASE}.zip unzip -q "${RELEASE}.zip"
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} mv "${APPLICATION}-${RELEASE}/" "/opt/${APPLICATION}"
# #
# #
# #
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
msg_ok "Setup ${APPLICATION}" msg_ok "Setup ${APPLICATION}"
# Creating Service (if needed) # Creating Service (if needed)
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/${APPLICATION}.service cat <<EOF >/etc/systemd/system/"${APPLICATION}".service
[Unit] [Unit]
Description=${APPLICATION} Service Description=${APPLICATION} Service
After=network.target After=network.target
@ -69,7 +64,7 @@ Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now ${APPLICATION}.service systemctl enable -q --now "${APPLICATION}"
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh
@ -77,7 +72,7 @@ customize
# Cleanup # Cleanup
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f ${RELEASE}.zip rm -f "${RELEASE}".zip
$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

@ -22,18 +22,6 @@ body:
validations: validations:
required: true required: true
- type: dropdown
id: verbose_run
attributes:
label: 🔎 Did you run the script with verbose mode enabled?
description: "Required for debugging any script issue. A verbose log is mandatory."
options:
- ""
- "Yes, verbose mode was enabled and the output is included below"
- "No (this issue will likely be closed automatically)"
validations:
required: true
- type: input - type: input
id: script_name id: script_name
attributes: attributes:
@ -72,21 +60,13 @@ body:
- Alpine - Alpine
- Debian 11 - Debian 11
- Debian 12 - Debian 12
- Debian 13 - Ubuntu 20.04
- Ubuntu 22.04 - Ubuntu 22.04
- Ubuntu 24.04 - Ubuntu 24.04
- Ubuntu 24.10 - Ubuntu 24.10
validations: validations:
required: true required: true
- type: input
id: pve_version
attributes:
label: 📈 Which Proxmox version are you on?
placeholder: "run pveversion in your PVE node console"
validations:
required: true
- type: textarea - type: textarea
id: issue_description id: issue_description
attributes: attributes:

114
.github/autolabeler-config.json generated vendored
View File

@ -4,7 +4,9 @@
"fileStatus": "added", "fileStatus": "added",
"includeGlobs": [ "includeGlobs": [
"ct/**", "ct/**",
"tools/**",
"install/**", "install/**",
"misc/**",
"turnkey/**", "turnkey/**",
"vm/**" "vm/**"
], ],
@ -16,7 +18,9 @@
"fileStatus": "modified", "fileStatus": "modified",
"includeGlobs": [ "includeGlobs": [
"ct/**", "ct/**",
"tools/**",
"install/**", "install/**",
"misc/**",
"turnkey/**", "turnkey/**",
"vm/**" "vm/**"
], ],
@ -28,27 +32,71 @@
"fileStatus": "removed", "fileStatus": "removed",
"includeGlobs": [ "includeGlobs": [
"ct/**", "ct/**",
"tools/**",
"install/**", "install/**",
"misc/**",
"turnkey/**", "turnkey/**",
"vm/**" "vm/**"
], ],
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"vm": [ "maintenance": [
{ {
"fileStatus": null, "fileStatus": null,
"includeGlobs": [ "includeGlobs": [
"vm/**" "*.md"
], ],
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"tools": [ "core": [
{ {
"fileStatus": null, "fileStatus": null,
"includeGlobs": [ "includeGlobs": [
"tools/**" "misc/*.func",
"misc/create_lxc.sh"
],
"excludeGlobs": [
"misc/api.func"
]
}
],
"website": [
{
"fileStatus": null,
"includeGlobs": [
"frontend/**"
],
"excludeGlobs": [
"frontend/public/json/**"
]
}
],
"api": [
{
"fileStatus": null,
"includeGlobs": [
"api/**",
"misc/api.func"
],
"excludeGlobs": []
}
],
"github": [
{
"fileStatus": null,
"includeGlobs": [
".github/**"
],
"excludeGlobs": []
}
],
"json": [
{
"fileStatus": "modified",
"includeGlobs": [
"frontend/public/json/**"
], ],
"excludeGlobs": [] "excludeGlobs": []
} }
@ -71,65 +119,11 @@
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"core": [ "vm": [
{ {
"fileStatus": null, "fileStatus": null,
"includeGlobs": [ "includeGlobs": [
"misc/*.func" "vm/**"
],
"excludeGlobs": [
"misc/api.func"
]
}
],
"documentation": [
{
"fileStatus": null,
"includeGlobs": [
"docs/**"
],
"excludeGlobs": []
}
],
"github": [
{
"fileStatus": null,
"includeGlobs": [
".github/**",
"README.md",
"SECURITY.md",
"LICENSE",
"CHANGELOG.md"
],
"excludeGlobs": []
}
],
"api": [
{
"fileStatus": null,
"includeGlobs": [
"api/**",
"misc/api.func"
],
"excludeGlobs": []
}
],
"website": [
{
"fileStatus": null,
"includeGlobs": [
"frontend/**"
],
"excludeGlobs": [
"frontend/public/json/**"
]
}
],
"json": [
{
"fileStatus": "modified",
"includeGlobs": [
"frontend/public/json/**"
], ],
"excludeGlobs": [] "excludeGlobs": []
} }

88
.github/changelog-pr-config.json generated vendored
View File

@ -42,15 +42,9 @@
] ]
}, },
{ {
"title": "🗑️ Deleted Scripts", "title": "🧰 Maintenance",
"labels": [ "labels": [
"delete script" "maintenance"
]
},
{
"title": "💾 Core",
"labels": [
"core"
], ],
"subCategories": [ "subCategories": [
{ {
@ -75,86 +69,30 @@
"notes": [] "notes": []
}, },
{ {
"title": "🔧 Refactor", "title": "📡 API",
"labels": [ "labels": [
"refactor" "api"
],
"notes": []
}
]
},
{
"title": "🧰 Tools",
"labels": [
"tools"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": [
"bugfix"
], ],
"notes": [] "notes": []
}, },
{ {
"title": "✨ New Features", "title": "💾 Core",
"labels": [ "labels": [
"feature" "core"
], ],
"notes": [] "notes": []
}, },
{ {
"title": "💥 Breaking Changes", "title": "📂 Github",
"labels": [ "labels": [
"breaking change" "github"
], ],
"notes": [] "notes": []
}, },
{ {
"title": "🔧 Refactor", "title": "📝 Documentation",
"labels": [ "labels": [
"refactor" "maintenance"
],
"notes": []
}
]
},
{
"title": "📚 Documentation",
"labels": [
"documentation"
]
},
{
"title": "📂 Github",
"labels": [
"github"
]
},
{
"title": "📡 API",
"labels": [
"api"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": [
"breaking change"
], ],
"notes": [] "notes": []
}, },
@ -204,9 +142,7 @@
] ]
}, },
{ {
"title": "❔ Uncategorized", "title": "❔ Unlabelled",
"labels": [ "labels": []
"needs triage"
]
} }
] ]

33
.github/pull_request_template.md generated vendored
View File

@ -1,26 +1,27 @@
<!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing. <!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing.
PRs without prior testing will be closed. --> PRs without prior testing will be closed. -->
## ✍️ Description
## ✍️ Description
## 🔗 Related Issue
Fixes # ## 🔗 Related PR / Issue
Link: #
## ✅ Prerequisites (**X** in brackets)
- [ ] **Self-review completed** Code follows project standards. ## ✅ Prerequisites (**X** in brackets)
- [ ] **Tested thoroughly** Changes work as expected.
- [ ] **No security risks** No hardcoded secrets, unnecessary privilege escalations, or permission issues. - [ ] **Self-review completed** Code follows project standards.
- [ ] **Tested thoroughly** Changes work as expected.
- [ ] **No security risks** No hardcoded secrets, unnecessary privilege escalations, or permission issues.
--- ---
## 🛠️ Type of Change (**X** in brackets) ## 🛠️ Type of Change (**X** in brackets)
- [ ] 🐞 **Bug fix** Resolves an issue without breaking functionality. - [ ] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [ ] ✨ **New feature** Adds new, non-breaking functionality. - [ ] ✨ **New feature** Adds new, non-breaking functionality.
- [ ] 💥 **Breaking change** Alters existing functionality in a way that may require updates. - [ ] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
- [ ] 🆕 **New script** A fully functional and tested script or script set. - [ ] 🆕 **New script** A fully functional and tested script or script set.
- [ ] 🌍 **Website update** Changes to website-related JSON files or metadata. - [ ] 🌍 **Website update** Changes to website-related JSON files or metadata.
- [ ] 🔧 **Refactoring / Code Cleanup** Improves readability or maintainability without changing functionality. - [ ] 🔧 **Refactoring / Code Cleanup** Improves readability or maintainability without changing functionality.
- [ ] 📝 **Documentation update** Changes to `README`, `AppName.md`, `CONTRIBUTING.md`, or other docs. - [ ] 📝 **Documentation update** Changes to `README`, `AppName.md`, `CONTRIBUTING.md`, or other docs.

64
.github/workflows/autolabeler.yml generated vendored
View File

@ -57,10 +57,10 @@ jobs:
if (shouldAddLabel) { if (shouldAddLabel) {
labelsToAdd.add(label); labelsToAdd.add(label);
// Add specific sub-labels for tools if (label === "update script") {
if (label === "tools") {
for (const prFile of prFiles) { for (const prFile of prFiles) {
const filename = prFile.filename; const filename = prFile.filename;
if (filename.startsWith("vm/")) labelsToAdd.add("vm");
if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon"); if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool"); if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
} }
@ -68,42 +68,38 @@ jobs:
} }
} }
// Always parse template checkboxes to add content-type labels (bugfix, feature, etc.) if (labelsToAdd.size < 2) {
const templateLabelMappings = { const templateLabelMappings = {
"🐞 **Bug fix**": "bugfix", "🐞 **Bug fix**": "bugfix",
"✨ **New feature**": "feature", "✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change", "💥 **Breaking change**": "breaking change",
"🆕 **New script**": "new script", "🆕 **New script**": "new script",
"🔧 **Refactoring / Code Cleanup**": "refactor", "🌍 **Website update**": "website", // handled special
"📝 **Documentation update**": "documentation" "🔧 **Refactoring / Code Cleanup**": "refactor",
}; "📝 **Documentation update**": "documentation" // mapped to maintenance
};
for (const [checkbox, label] of Object.entries(templateLabelMappings)) { for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i"); const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
if (regex.test(prBody)) { if (regex.test(prBody)) {
labelsToAdd.add(label); if (label === "website") {
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
const hasUpdateScript = labelsToAdd.has("update script");
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
if (!(hasUpdateScript && hasContentLabel)) {
labelsToAdd.add(hasJson ? "json" : "website");
}
} else if (label === "documentation") {
labelsToAdd.add("maintenance");
} else {
labelsToAdd.add(label);
}
}
} }
} }
// Handle website checkbox specially - only add if not already an update script with content label
const websiteCheckbox = "🌍 **Website update**";
const escapedWebsite = websiteCheckbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const websiteRegex = new RegExp(`- \\[(x|X)\\]\\s*${escapedWebsite}`, "i");
if (websiteRegex.test(prBody)) {
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
const hasUpdateScript = labelsToAdd.has("update script");
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
// If it's an update script PR with json changes and a content label, skip adding website/json
// The PR should be categorized as update script with the content label
if (!(hasUpdateScript && hasJson && hasContentLabel)) {
labelsToAdd.add(hasJson ? "json" : "website");
}
}
if (labelsToAdd.size === 0) { if (labelsToAdd.size === 0) {
labelsToAdd.add("needs triage"); labelsToAdd.add("needs triage");
} }

33
.github/workflows/changelog-pr.yml generated vendored
View File

@ -157,31 +157,13 @@ jobs:
let categorized = false; let categorized = false;
const priorityCategories = categorizedPRs.slice(); const priorityCategories = categorizedPRs.slice();
// Priority order for content-type labels (highest priority first)
const subCategoryPriority = ["breaking change", "bugfix", "feature", "refactor"];
for (const category of priorityCategories) { for (const category of priorityCategories) {
if (categorized) break; if (categorized) break;
if (category.labels.some(label => prLabels.includes(label))) { if (category.labels.some(label => prLabels.includes(label))) {
if (category.subCategories && category.subCategories.length > 0) { if (category.subCategories && category.subCategories.length > 0) {
// Find subcategory by priority order instead of first match const subCategory = category.subCategories.find(sub =>
let subCategory = null; sub.labels.some(label => prLabels.includes(label))
for (const priorityLabel of subCategoryPriority) { );
if (prLabels.includes(priorityLabel)) {
subCategory = category.subCategories.find(sub =>
sub.labels.includes(priorityLabel)
);
if (subCategory) break;
}
}
// Fallback: check for any other subcategory match (api, github, json, etc.)
if (!subCategory) {
subCategory = category.subCategories.find(sub =>
sub.labels.some(label => prLabels.includes(label))
);
}
if (subCategory) { if (subCategory) {
subCategory.notes.push(prNote); subCategory.notes.push(prNote);
@ -194,15 +176,6 @@ jobs:
categorized = true; categorized = true;
} }
} }
// Fallback: Add to Uncategorized if no category matched
if (!categorized) {
const uncategorized = categorizedPRs.find(category =>
category.title.includes("Uncategorized") || category.labels.includes("needs triage"));
if (uncategorized) {
uncategorized.notes.push(prNote);
}
}
} }
} }

View File

@ -1,59 +0,0 @@
name: Auto-Close Wrong Template Issues
on:
issues:
types: [opened]
jobs:
close_tteck_issues:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest
steps:
- name: Auto-close if wrong Template issue detected
uses: actions/github-script@v7
with:
script: |
const issue = context.payload.issue;
const content = `${issue.title}\n${issue.body}`;
const issueNumber = issue.number;
// Regex patterns (case-insensitive, flexible versioning)
const patterns = [
/Template\s+debian-13-standard_[\d.]+-[\d]+_amd64\.tar\.zst\s*\[(online|local)\]/i,
/Template\s+debian-13-standard_[\d.]+-[\d]+_amd64\.tar\.zst\s+is\s+missing\s+or\s+corrupted/i,
/Container\s+creation\s+failed\.?\s+Checking\s+if\s+template\s+is\s+corrupted\s+or\s+incomplete/i,
/Template\s+is\s+valid,\s+but\s+container\s+creation\s+still\s+failed/i,
/exit\s+code\s+0:\s+while\s+executing\s+command\s+bash\s+-c\s+"\$?\(curl\s+-fsSL\s+https:\/\/raw\.githubusercontent\.com\/[\w/-]+\/create_lxc\.sh\)"/i
];
const matched = patterns.some((regex) => regex.test(content));
if (matched) {
const message = `👋 Hello!
It looks like you are referencing a **container creation issue with a Debian 13 template** (e.g. \`debian-13-standard_13.x-x_amd64.tar.zst\`).
We receive many similar reports about this, and its not related to the scripts themselves but to **a Proxmox base template bug**.
Please refer to [discussion #8126](https://github.com/community-scripts/ProxmoxVE/discussions/8126) for details.
If your issue persists after following the guidance there, feel free to reopen this issue.
_This issue was automatically closed by a bot._`;
await github.rest.issues.createComment({
...context.repo,
issue_number: issueNumber,
body: message
});
await github.rest.issues.addLabels({
...context.repo,
issue_number: issueNumber,
labels: ["not planned"]
});
await github.rest.issues.update({
...context.repo,
issue_number: issueNumber,
state: "closed"
});
}

14
.github/workflows/frontend-cicd.yml generated vendored
View File

@ -97,7 +97,7 @@ jobs:
success = test_json_files() success = test_json_files()
sys.exit(0 if success else 1) sys.exit(0 if success else 1)
EOF EOF
build: build:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
needs: test-json-files needs: test-json-files
@ -109,13 +109,15 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup Bun - name: Setup Node
uses: oven-sh/setup-bun@v2 uses: actions/setup-node@v4
with: with:
bun-version: latest node-version: "20"
cache: npm
cache-dependency-path: frontend/package-lock.json
- name: Install dependencies - name: Install dependencies
run: bun install --frozen-lockfile run: npm ci --prefer-offline --legacy-peer-deps
- name: Configure Next.js for pages - name: Configure Next.js for pages
uses: actions/configure-pages@v5 uses: actions/configure-pages@v5
@ -123,7 +125,7 @@ jobs:
static_site_generator: next static_site_generator: next
- name: Build with Next.js - name: Build with Next.js
run: bun run build run: npm run build
- name: Upload artifact - name: Upload artifact
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'

View File

@ -51,6 +51,10 @@ jobs:
NON_COMPLIANT_FILES="" NON_COMPLIANT_FILES=""
for FILE in $CHANGED_FILES; do for FILE in $CHANGED_FILES; do
# Skip File "misc/create_lxc.sh"
if [[ "$FILE" == "misc/create_lxc.sh" ]]; then
continue
fi
BASENAME=$(echo "$(basename "${FILE%.*}")") BASENAME=$(echo "$(basename "${FILE%.*}")")
if [[ ! "$BASENAME" =~ ^[a-z0-9-]+$ ]]; then if [[ ! "$BASENAME" =~ ^[a-z0-9-]+$ ]]; then
NON_COMPLIANT_FILES="$NON_COMPLIANT_FILES $FILE" NON_COMPLIANT_FILES="$NON_COMPLIANT_FILES $FILE"

File diff suppressed because it is too large Load Diff

284
README.md
View File

@ -1,266 +1,114 @@
<div align="center"> <div align="center">
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="120px" alt="Proxmox VE Helper-Scripts Logo" /> <p align="center">
<a href="#">
<h1>Proxmox VE Helper-Scripts</h1> <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
<p><em>A Community Legacy in Memory of @tteck</em></p> </a>
</p>
</div>
<p> <div style="border: 2px solid #d1d5db; padding: 20px; border-radius: 8px; background-color: #f9fafb;">
<h2 align="center">Proxmox VE Helper-Scripts</h2>
<p align="center">A Community Legacy in Memory of @tteck</p>
<p align="center">
<a href="https://helper-scripts.com"> <a href="https://helper-scripts.com">
<img src="https://img.shields.io/badge/🌐_Website-Visit-4c9b3f?style=for-the-badge&labelColor=2d3748" alt="Website" /> <img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" />
</a> </a>
<a href="https://discord.gg/3AnUqsXnmK"> <a href="https://discord.gg/3AnUqsXnmK">
<img src="https://img.shields.io/badge/💬_Discord-Join-7289da?style=for-the-badge&labelColor=2d3748" alt="Discord" /> <img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
</a> </a>
<a href="https://ko-fi.com/community_scripts"> <a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/❤_Support-Donate-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Donate" /> <img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" />
</a>
</p>
<p>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/README.md">
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
</a> </a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" />
</a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md"> <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
<img src="https://img.shields.io/badge/📋_Changelog-View-6c5ce7?style=for-the-badge&labelColor=2d3748" alt="Changelog" /> <img src="https://img.shields.io/badge/Changelog-6c5ce7?style=for-the-badge&logo=git&logoColor=white" alt="Changelog" />
</a> </a>
</p> </p>
<br />
> **Simplify your Proxmox VE setup with community-driven automation scripts**
> Originally created by tteck, now maintained and expanded by the community
</div>
<br />
<div align="center">
<sub>🙌 <strong>Shoutout to</strong></sub>
<br />
<br />
<a href="https://selfh.st/">
<img src="https://img.shields.io/badge/selfh.st-Icons_for_Self--Hosted-2563eb?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==&labelColor=1e3a8a" alt="selfh.st Icons" />
</a>
<br />
<sub><a href="https://github.com/selfhst/icons">View on GitHub</a> • Consistent, beautiful icons for 5000+ self-hosted apps</sub>
</div> </div>
--- ---
## 🎯 Key Features ## 🚀 Project Overview
<div align="center"> **Proxmox VE Helper-Scripts** is a collection of tools to simplify the setup and management of Proxmox Virtual Environment (VE). Originally created by [tteck](https://github.com/tteck), these scripts are now continued by the community. Our goal is to preserve and expand upon tteck's work, providing an ongoing resource for Proxmox users worldwide.
<table>
<tr>
<td align="center" width="25%">
<h3>⚡ Quick Setup</h3>
<p>One-command installations for popular services and containers</p>
</td>
<td align="center" width="25%">
<h3>⚙️ Flexible Config</h3>
<p>Simple mode for beginners, advanced options for power users</p>
</td>
<td align="center" width="25%">
<h3>🔄 Auto Updates</h3>
<p>Keep your installations current with built-in update mechanisms</p>
</td>
<td align="center" width="25%">
<h3>🛠️ Easy Management</h3>
<p>Post-install scripts for configuration and troubleshooting</p>
</td>
</tr>
<tr>
<td align="center" width="25%">
<h3>👥 Community Driven</h3>
<p>Actively maintained with contributions from users worldwide</p>
</td>
<td align="center" width="25%">
<h3>📖 Well Documented</h3>
<p>Comprehensive guides and community support</p>
</td>
<td align="center" width="25%">
<h3>🔒 Secure</h3>
<p>Regular security updates and best practices</p>
</td>
<td align="center" width="25%">
<h3>⚡ Performance</h3>
<p>Optimized configurations for best performance</p>
</td>
</tr>
</table>
</div>
--- ---
## 📋 Requirements ## 📦 Features
<div align="center"> - **Interactive Setup**: Choose between simple and advanced options for configuring VMs and LXC containers.
- **Customizable Configurations**: Advanced setup for fine-tuning your environment.
- **Seamless Integration**: Works seamlessly with Proxmox VE for a smooth experience.
- **Community-driven**: Actively maintained and improved by the Proxmox community.
<table> ---
<tr> ## ✅ Requirements
<td align="center" width="33%">
<h3>🖥️ Proxmox VE</h3>
<p>Version: 8.4.x | 9.0.x | 9.1.x</p>
</td>
<td align="center" width="33%">
<h3>🐧 Operating System</h3>
<p>Debian-based with Proxmox Tools</p>
</td>
<td align="center" width="33%">
<h3>🌐 Network</h3>
<p>Internet connection required</p>
</td>
</tr>
</table>
</div> Ensure your system meets the following prerequisites:
- **Proxmox VE version**: 8.x or higher
- **Linux**: Compatible with most distributions
- **Dependencies**: bash and curl should be installed.
--- ---
## 📥 Getting Started ## 🚀 Installation
Choose your preferred installation method: To install the Proxmox Helper Scripts, follow these steps:
### Method 1: One-Click Web Installer 1. Visit the [Website](https://helper-scripts.com/).
2. Search for the desired script, e.g., **"Home Assistant OS VM"**.
The fastest way to get started: 3. Copy the provided **Bash command** from the **"How To Install"** section.
4. Open the Proxmox shell on your **main node** and paste the command.
1. Visit **[helper-scripts.com](https://helper-scripts.com/)** 🌐 5. Press enter to start the installation! 🚀
2. Search for your desired script (e.g., "Home Assistant", "Docker")
3. Copy the bash command displayed on the script page
4. Open your **Proxmox Shell** and paste the command
5. Press Enter and follow the interactive prompts
### Method 2: PVEScripts-Local
Install a convenient script manager directly in your Proxmox UI:
```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/pve-scripts-local.sh)"
```
This adds a menu to your Proxmox interface for easy script access without visiting the website.
📖 **Learn more:** [ProxmoxVE-Local Repository](https://github.com/community-scripts/ProxmoxVE-Local)
--- ---
## 💬 Join the Community ## ❤️ Community and Contributions
<div align="center"> We appreciate any contributions to the project—whether it's bug reports, feature requests, documentation improvements, or spreading the word. Your involvement helps keep the project alive and sustainable.
<table> ## 💖 Donate to Support the Project
<tr> - **Ko-Fi for Community Edition**: [Donate to support this project](https://ko-fi.com/community_scripts) Donations go towards maintaining the project, testing infrastructure, and charity (cancer research, hospice care). 30% of the funds will be donated to charity.
<td align="center" width="33%">
<h3>💬 Discord</h3>
<p>Real-time chat, support, and discussions</p>
<a href="https://discord.gg/3AnUqsXnmK">
<img src="https://img.shields.io/badge/Join-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
</a>
</td>
<td align="center" width="33%">
<h3>💭 Discussions</h3>
<p>Feature requests, Q&A, and ideas</p>
<a href="https://github.com/community-scripts/ProxmoxVE/discussions">
<img src="https://img.shields.io/badge/Discuss-238636?style=for-the-badge&logo=github&logoColor=white" alt="Discussions" />
</a>
</td>
<td align="center" width="33%">
<h3>🐛 Issues</h3>
<p>Bug reports and issue tracking</p>
<a href="https://github.com/community-scripts/ProxmoxVE/issues">
<img src="https://img.shields.io/badge/Report-d73a4a?style=for-the-badge&logo=github&logoColor=white" alt="Issues" />
</a>
</td>
</tr>
</table>
</div>
--- ---
## 🛠️ Contribute ## 💬 Get Help
<div align="center"> Join our community for support:
<table> - **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/3AnUqsXnmK) for real-time support.
<tr> - **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions).
<td align="center" width="25%">
<h3>💻 Code</h3>
<p>Add new scripts or improve existing ones</p>
</td>
<td align="center" width="25%">
<h3>📝 Documentation</h3>
<p>Write guides, improve READMEs, translate content</p>
</td>
<td align="center" width="25%">
<h3>🧪 Testing</h3>
<p>Test scripts and report compatibility issues</p>
</td>
<td align="center" width="25%">
<h3>💡 Ideas</h3>
<p>Suggest features or workflow improvements</p>
</td>
</tr>
</table>
</div> ## 🤝 Report a Bug or Feature Request
<div align="center"> If you encounter any issues or have suggestions for improvement, file a new issue on our [GitHub issues page](https://github.com/community-scripts/ProxmoxVE/issues). You can also submit pull requests with solutions or enhancements!
<br />
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/README.md)** to get started
</div>
--- ---
## ❤️ Support the Project ## ⭐ Star History
This project is maintained by volunteers in memory of tteck. Your support helps us maintain infrastructure, improve documentation, and give back to important causes. <a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
<picture>
**🎗️ 30% of all donations go directly to cancer research and hospice care** <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
<div align="center"> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
</picture>
<a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/☕_Buy_us_a_coffee-Support_on_Ko--fi-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Support on Ko-fi" />
</a> </a>
<br />
<sub>Every contribution helps keep this project alive and supports meaningful causes</sub>
</div>
---
## 📈 Project Growth
<div align="center">
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
</picture>
</a>
</div>
---
## 📜 License ## 📜 License
This project is licensed under the **[MIT License](LICENSE)** - feel free to use, modify, and distribute. This project is licensed under the [MIT License](LICENSE).
</br>
</br>
<p align="center">
<i style="font-size: smaller;"><b>Proxmox</b>® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a>.</i>
</p>
---
<div align="center">
<sub>Made with ❤️ by the Proxmox community in memory of tteck</sub>
<br />
<sub><i>Proxmox® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a></i></sub>
</div>

View File

@ -1,67 +1,24 @@
# Security Policy
## Supported Versions ## Supported Versions
This project currently supports the following versions of Proxmox VE:
This project currently supports the following versions of Proxmox VE (PVE):
| Version | Supported | | Version | Supported |
| ------- | ------------------ | | ------- | ------------------ |
| 9.1.x | :white_check_mark: |
| 9.0.x | :white_check_mark: |
| 8.4.x | :white_check_mark: | | 8.4.x | :white_check_mark: |
| 8.3.x | Limited support* ❕ | | 8.3.x | :white_check_mark: |
| 8.2.x | Limited support* ❕ | | 8.2.x | :white_check_mark: |
| 8.1.x | Limited support* ❕ | | 8.1.x | :white_check_mark: |
| 8.0.x | Limited support* ❕ | | 8.0.x | Limited support* ❕|
| < 8.0 | :x: | | < 8.0 | :x: |
*Version 8.0.x - 8.3.x has limited support. Security updates may not be provided for all issues affecting this version. *Version 8.0.x has limited support. Security updates may not be provided for all issues in this version.
*Debian 13 Containers may fail to install. You can write var_version=12 before the bash call.
---
## Reporting a Vulnerability ## Reporting a Vulnerability
Security vulnerabilities must not be reported publicly to avoid potential exploitation. Security vulnerabilities shouldnt be reported publicly to prevent potential exploitation. Instead, please report any vulnerabilities privately by reaching out directly to us. You can either join our [Discord server](https://discord.gg/jsYVk5JBxq) and send a direct message to a maintainer or contact us via email at contact@community-scripts.org. Be sure to include a detailed description of the vulnerability and the steps to reproduce it. Thank you for helping us keep our project secure!
Instead, please report them privately via one of the following channels:
- **Discord**: Join our [Discord server](https://discord.gg/jsYVk5JBxq) and send a direct message to a maintainer. Once a vulnerability has been reported, the project maintainers will review it and acknowledge the report within 7 business days. We will then work to address the vulnerability and provide a fix as soon as possible. Depending on the severity of the issue, a patch may be released immediately or included in the next scheduled update.
- **Email**: Write to us at **contact@community-scripts.org** with the subject line:
`Vulnerability Report - <Project/Script Name>`.
When reporting a vulnerability, please provide: Please note that not all reported vulnerabilities may be accepted. The project maintainers reserve the right to decline a vulnerability report if it is deemed to be a low-risk issue or if it conflicts with the project's design or architecture. In such cases, we will provide an explanation for the decision.
- A clear description of the issue If you have any questions or concerns about this security policy, please don't hesitate to contact the project maintainers.
- Steps to reproduce the vulnerability
- Affected versions or environments
- (Optional) Suggested fixes or workarounds
---
## Response Process
1. **Acknowledgment**
- We will review and acknowledge your report within **7 business days**.
2. **Assessment**
- The maintainers will verify the issue and classify its severity.
- Depending on impact, a patch may be released immediately or scheduled for the next update.
3. **Resolution**
- Critical security fixes will be prioritized.
- Non-critical issues may be deferred or declined with an explanation.
---
## Disclaimer
Not all reported issues will be treated as vulnerabilities.
Reports may be declined if they are deemed:
- Low-risk
- Out of project scope
- Conflicting with intended design or architecture
---
If you have any questions or concerns about this security policy, please reach out to the maintainers through the contact options above.

View File

@ -1,6 +1,6 @@
module proxmox-api module proxmox-api
go 1.24.0 go 1.23.2
require ( require (
github.com/gorilla/mux v1.8.1 github.com/gorilla/mux v1.8.1
@ -17,7 +17,7 @@ require (
github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
golang.org/x/crypto v0.45.0 // indirect golang.org/x/crypto v0.35.0 // indirect
golang.org/x/sync v0.18.0 // indirect golang.org/x/sync v0.11.0 // indirect
golang.org/x/text v0.31.0 // indirect golang.org/x/text v0.22.0 // indirect
) )

View File

@ -27,16 +27,16 @@ go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793Sqyh
go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@ -48,8 +48,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -28,9 +28,14 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "2fauth" "Bubka/2FAuth"; then if ! command -v jq &>/dev/null; then
$STD apt update $STD apt-get install -y jq
$STD apt -y upgrade fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
msg_info "Updating $APP to ${RELEASE}"
$STD apt-get update
$STD apt-get -y upgrade
msg_info "Creating Backup" msg_info "Creating Backup"
mv "/opt/2fauth" "/opt/2fauth-backup" mv "/opt/2fauth" "/opt/2fauth-backup"
@ -40,7 +45,10 @@ function update_script() {
msg_ok "Backup Created" msg_ok "Backup Created"
if ! dpkg -l | grep -q 'php8.3'; then if ! dpkg -l | grep -q 'php8.3'; then
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli,tokenizer,dom,redis,session,openssl" PHP_FPM="YES" setup_php $STD apt-get install -y \
lsb-release \
gnupg2
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
fi fi
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
@ -51,10 +59,23 @@ function update_script() {
chown -R www-data: "/opt/2fauth" chown -R www-data: "/opt/2fauth"
chmod -R 755 "/opt/2fauth" chmod -R 755 "/opt/2fauth"
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev --prefer-dist $STD composer install --no-dev --prefer-source
php artisan 2fauth:install php artisan 2fauth:install
$STD systemctl restart nginx $STD systemctl restart nginx
msg_ok "Updated successfully!"
msg_info "Cleaning Up"
rm -rf "v${RELEASE}.zip"
if dpkg -l | grep -q 'php8.2'; then
$STD apt-get remove --purge -y php8.2*
fi
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/2fauth_version.txt
msg_ok "Updated $APP to ${RELEASE}"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit
} }

View File

@ -6,13 +6,13 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://actualbudget.org/ # Source: https://actualbudget.org/
APP="Actual Budget" APP="Actual Budget"
var_tags="${var_tags:-finance}" var_tags="finance"
var_cpu="${var_cpu:-2}" var_cpu="2"
var_ram="${var_ram:-2048}" var_ram="2048"
var_disk="${var_disk:-4}" var_disk="4"
var_os="${var_os:-debian}" var_os="debian"
var_version="${var_version:-13}" var_version="12"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="1"
header_info "$APP" header_info "$APP"
variables variables
@ -24,34 +24,35 @@ function update_script() {
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f ~/.actualbudget && ! -f /opt/actualbudget_version.txt ]]; then if [[ ! -f /opt/actualbudget_version.txt ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="22"
NODE_VERSION="22" setup_nodejs setup_nodejs
RELEASE=$(get_latest_github_release "actualbudget/actual") 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-data/config.json ]]; then
if check_for_gh_release "actualbudget" "actualbudget/actual"; then if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
msg_info "Stopping Service" msg_info "Stopping ${APP}"
systemctl stop actualbudget systemctl stop actualbudget
msg_ok "Stopped Service" msg_ok "${APP} Stopped"
msg_info "Updating Actual Budget to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
$STD npm update -g @actual-app/sync-server $STD npm update -g @actual-app/sync-server
echo "${RELEASE}" >~/.actualbudget echo "${RELEASE}" >/opt/actualbudget_version.txt
msg_ok "Updated Actual Budget to ${RELEASE}" msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting Service" msg_info "Starting ${APP}"
systemctl start actualbudget systemctl start actualbudget
msg_ok "Started Service" msg_ok "Restarted ${APP}"
msg_ok "Updated successfully!" else
msg_info "${APP} is already up to date"
fi fi
else else
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container" 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 Actual Budget website to migrate your data" msg_info "Please follow the instructions on the ${APP} website to migrate your data"
msg_info "https://actualbudget.org/docs/backup-restore/backup" msg_info "https://actualbudget.org/docs/backup-restore/backup"
exit exit 1
fi fi
exit exit
} }

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -20,15 +20,15 @@ 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 /opt/AdGuardHome ]]; then if [[ ! -d /opt/AdGuardHome ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Adguard Home should be updated via the user interface."
exit exit
fi
msg_error "Adguard Home can only be updated via the user interface."
exit
} }
start start
@ -38,4 +38,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@ -11,7 +11,7 @@ var_disk="${var_disk:-7}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -27,29 +27,25 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if ! command -v memcached >/dev/null 2>&1; then
$STD apt update RELEASE=$(curl -fsSL https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
$STD apt install -y memcached libmemcached-tools if [[ "${RELEASE}" != "$(cat ~/.adventurelog 2>/dev/null)" ]] || [[ ! -f ~/.adventurelog ]]; then
fi
if check_for_gh_release "adventurelog" "seanmorley15/adventurelog"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop adventurelog-backend systemctl stop adventurelog-backend
systemctl stop adventurelog-frontend systemctl stop adventurelog-frontend
msg_ok "Services Stopped" msg_ok "Services Stopped"
msg_info "Backup Old Installation" msg_info "Backup Old Installation"
cp -r /opt/adventurelog /opt/adventurelog-backup mkdir -p /opt/adventurelog-backup
rm -rf /opt/adventurelog cp /opt/adventurelog/backend/server/.env /opt/adventurelog-backup/backend/server/.env
cp -r /opt/adventurelog/backend/server/media /opt/adventurelog-backup/backend/server/media
cp /opt/adventurelog/frontend/.env /opt/adventurelog-backup/frontend/.env
msg_ok "Backup done" msg_ok "Backup done"
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog" fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.12" setup_uv
msg_info "Ensuring PostgreSQL Extensions" msg_info "Updating ${APP} to v${RELEASE}"
$STD sudo -u postgres psql -d adventurelog_db -c "CREATE EXTENSION IF NOT EXISTS postgis;"
msg_ok "PostgreSQL Extensions Ready"
msg_info "Updating ${APP}"
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server cd /opt/adventurelog/backend/server
@ -61,12 +57,11 @@ function update_script() {
$STD .venv/bin/python -m pip install -r requirements.txt $STD .venv/bin/python -m pip install -r requirements.txt
$STD .venv/bin/python -m manage collectstatic --noinput $STD .venv/bin/python -m manage collectstatic --noinput
$STD .venv/bin/python -m manage migrate $STD .venv/bin/python -m manage migrate
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
cd /opt/adventurelog/frontend cd /opt/adventurelog/frontend
$STD pnpm i $STD pnpm i
$STD pnpm build $STD pnpm build
rm -rf /opt/adventurelog-backup
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
msg_info "Starting Services" msg_info "Starting Services"
@ -74,7 +69,14 @@ function update_script() {
systemctl start adventurelog-backend systemctl start adventurelog-backend
systemctl start adventurelog-frontend systemctl start adventurelog-frontend
msg_ok "Services Started" msg_ok "Services Started"
msg_ok "Updated successfully!"
msg_info "Cleaning Up"
rm -rf /opt/adventurelog-backup
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit
} }

View File

@ -27,29 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "Currently we don't provide an update function for this ${APP}."
RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=Linux64&fromVersion=0" | grep -o 'https://.*\.zip')
if [[ "${RELEASE}" != "$(cat ~/.agentdvr 2>/dev/null)" ]] || [[ ! -f ~/.agentdvr ]]; then
msg_info "Stopping service"
systemctl stop AgentDVR
msg_ok "Service stopped"
msg_info "Updating $APP"
cd /opt/agentdvr/agent
curl -fsSL "$RELEASE" -o $(basename "$RELEASE")
$STD unzip -o Agent_Linux64*.zip
chmod +x ./Agent
echo $RELEASE >~/.agentdvr
rm -rf Agent_Linux64*.zip
msg_ok "Updated $APP"
msg_info "Starting service"
systemctl start AgentDVR
msg_ok "Service started"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit exit
} }

View File

@ -32,7 +32,7 @@ function update_script() {
msg_info "Restarting AdGuard Home" msg_info "Restarting AdGuard Home"
$STD rc-service adguardhome restart $STD rc-service adguardhome restart
msg_ok "Restarted AdGuard Home" msg_ok "Restarted AdGuard Home"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/bitmagnet ]]; then if [[ ! -d /opt/bitmagnet ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
@ -71,10 +71,11 @@ function update_script() {
rm -f "$temp_file" rm -f "$temp_file"
echo "${RELEASE}" >/opt/bitmagnet_version.txt echo "${RELEASE}" >/opt/bitmagnet_version.txt
$STD service bitmagnet start $STD service bitmagnet start
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
} }

View File

@ -1,46 +0,0 @@
#!/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: cobalt (cobaltgit)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://caddyserver.com/
APP="Alpine-Caddy"
var_tags="${var_tags:-webserver}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-3}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -d /etc/caddy ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apk -U upgrade
msg_ok "Updated $APP LXC"
msg_info "Restarting Caddy"
rc-service caddy restart
msg_ok "Restarted Caddy"
msg_ok "Updated successfully!"
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}:80${CL}"

View File

@ -37,12 +37,10 @@ function update_script() {
case $CHOICE in case $CHOICE in
1) 1)
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated successfully!"
exit exit
;; ;;
esac esac
done done
exit 0
} }
start start

View File

@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting Forgejo" msg_info "Restarting Forgejo"
$STD rc-service forgejo restart $STD rc-service forgejo restart
msg_ok "Restarted Forgejo" msg_ok "Restarted Forgejo"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@ -1,63 +0,0 @@
#!/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://garagehq.deuxfleurs.fr/
APP="Alpine-Garage"
var_tags="${var_tags:-alpine;object-storage}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-5}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -f /usr/local/bin/garage ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
msg_info "Stopping Service"
rc-service garage stop || true
msg_ok "Stopped Service"
msg_info "Backing Up Data"
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
msg_ok "Backed Up Data"
msg_info "Updating Garage"
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
chmod +x /usr/local/bin/garage
echo "${GITEA_RELEASE}" >~/.garage
msg_ok "Updated Garage"
msg_info "Starting Service"
rc-service garage start || rc-service garage restart
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. Garage is already at ${GITEA_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}${CL}"

View File

@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/gatus ]]; then if [[ ! -d /opt/gatus ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then
@ -44,10 +44,11 @@ function update_script() {
rm -f "$temp_file" rm -f "$temp_file"
echo "${RELEASE}" >/opt/gatus_version.txt echo "${RELEASE}" >/opt/gatus_version.txt
$STD service gatus start $STD service gatus start
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
} }

View File

@ -32,8 +32,6 @@ function update_script() {
msg_info "Restarting Gitea" msg_info "Restarting Gitea"
rc-service gitea restart rc-service gitea restart
msg_ok "Restarted Gitea" msg_ok "Restarted Gitea"
msg_ok "Updated successfully!"
exit 0
} }
start start

View File

@ -40,24 +40,20 @@ function update_script() {
case $CHOICE in case $CHOICE in
1) 1)
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated successfully!"
exit exit
;; ;;
2) 2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
service grafana restart service grafana restart
msg_ok "Allowed listening on all interfaces!"
exit exit
;; ;;
3) 3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
service grafana restart service grafana restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit exit
;; ;;
esac esac
done done
exit 0
} }
start start

View File

@ -24,23 +24,25 @@ function update_script() {
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 exit 1
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/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"
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
curl -fsSL "https://github.com/sharevb/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" -o it-tools.zip 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/*
$STD unzip it-tools.zip -d /tmp $STD unzip it-tools.zip -d /tmp/it-tools
cp -r /tmp/dist/* /usr/share/nginx/html cp -r /tmp/it-tools/dist/* /usr/share/nginx/html
rm -rf /tmp/dist 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
} }

View File

@ -22,14 +22,14 @@ catch_errors
function update_script() { function update_script() {
[[ -d /opt/komodo ]] || { [[ -d /opt/komodo ]] || {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
} }
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1) COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
if [[ -z "$COMPOSE_FILE" ]]; then if [[ -z "$COMPOSE_FILE" ]]; then
msg_error "No valid compose file found in /opt/komodo!" msg_error "No valid compose file found in /opt/komodo!"
exit exit 1
fi fi
COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
@ -38,25 +38,23 @@ function update_script() {
echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
echo -e "${YW}Please follow the migration guide:${CL}" echo -e "${YW}Please follow the migration guide:${CL}"
echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
exit exit 1
fi fi
BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
cp "$COMPOSE_FILE" "$BACKUP_FILE" || { cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
exit exit 1
} }
GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}" GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}"
if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then
msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!" msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!"
mv "$BACKUP_FILE" "$COMPOSE_FILE" mv "$BACKUP_FILE" "$COMPOSE_FILE"
exit exit 1
fi fi
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
msg_ok "Updated Alpine-Komodo" msg_ok "Updated ${APP}"
msg_ok "Updated successfully!" exit
exit 0
} }
start start

View File

@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting MariaDB" msg_info "Restarting MariaDB"
$STD rc-service mariadb restart $STD rc-service mariadb restart
msg_ok "Restarted MariaDB" msg_ok "Restarted MariaDB"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@ -50,7 +50,6 @@ function update_script() {
;; ;;
esac esac
done done
exit 0
} }
start start

View File

@ -31,7 +31,7 @@ function update_script() {
msg_info "Updating Node-RED" msg_info "Updating Node-RED"
$STD npm install -g --unsafe-perm node-red $STD npm install -g --unsafe-perm node-red
msg_ok "Updated Node-RED" msg_ok "Updated Node-RED"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting PostgreSQL" msg_info "Restarting PostgreSQL"
$STD rc-service postgresql restart $STD rc-service postgresql restart
msg_ok "Restarted PostgreSQL" msg_ok "Restarted PostgreSQL"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting Prometheus" msg_info "Restarting Prometheus"
$STD rc-service prometheus restart $STD rc-service prometheus restart
msg_ok "Restarted Prometheus" msg_ok "Restarted Prometheus"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@ -24,7 +24,7 @@ function update_script() {
header_info header_info
if [ ! -d /opt/rclone ]; then if [ ! -d /opt/rclone ]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') 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 if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then
@ -34,10 +34,11 @@ function update_script() {
$STD unzip -o "$temp_file" '*/**' -d /opt/rclone $STD unzip -o "$temp_file" '*/**' -d /opt/rclone
rm -f "$temp_file" rm -f "$temp_file"
echo "${RELEASE}" >/opt/rclone_version.txt echo "${RELEASE}" >/opt/rclone_version.txt
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
} }

View File

@ -42,7 +42,7 @@ function update_script() {
msg_info "Updating Redis" msg_info "Updating Redis"
apk update && apk upgrade redis apk update && apk upgrade redis
rc-service redis restart rc-service redis restart
msg_ok "Updated successfully!" msg_ok "Redis updated successfully!"
exit exit
;; ;;
2) 2)

View File

@ -1,55 +0,0 @@
#!/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: andrej-kocijan (Andrej Kocijan)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/redlib-org/redlib
APP="Alpine-Redlib"
var_tags="${var_tags:-alpine;frontend}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_resources
if [[ ! -d /opt/redlib ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Alpine Packages"
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Stopping Service"
$STD rc-service redlib stop
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
msg_info "Starting Service"
$STD rc-service redlib start
msg_ok "Started Service"
msg_ok "Updated successfully!"
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}:5252${CL}"

View File

@ -1,74 +0,0 @@
#!/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/rustdesk/rustdesk-server
APP="Alpine-RustDeskServer"
var_tags="${var_tags:-alpine;monitoring}"
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.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -d /opt/rustdesk-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
msg_info "Updating RustDesk Server to v${RELEASE}"
$STD apk -U upgrade
$STD service rustdesk-server-hbbs stop
$STD service rustdesk-server-hbbr stop
temp_file1=$(mktemp)
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
$STD unzip "$temp_file1"
cp -r amd64/* /opt/rustdesk-server/
echo "${RELEASE}" >~/.rustdesk-server
$STD service rustdesk-server-hbbs start
$STD service rustdesk-server-hbbr start
rm -rf amd64
rm -f $temp_file1
msg_ok "Updated RustDesk Server successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then
msg_info "Updating RustDesk API to v${APIRELEASE}"
$STD service rustdesk-api stop
temp_file2=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-amd64.tar.gz" -o "$temp_file2"
$STD tar zxvf "$temp_file2"
cp -r release/* /opt/rustdesk-api
echo "${APIRELEASE}" >~/.rustdesk-api
$STD service rustdesk-api start
rm -rf release
rm -f $temp_file2
msg_ok "Updated RustDesk API"
else
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
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}:21114${CL}"

View File

@ -31,8 +31,8 @@ function update_script() {
msg_info "Restarting Syncthing" msg_info "Restarting Syncthing"
$STD rc-service syncthing restart $STD rc-service syncthing restart
msg_ok "Restarted Syncthing" msg_ok "Restarted Syncthing"
msg_ok "Updated successfully!"
exit 0 exit 1
} }
start start

View File

@ -24,10 +24,10 @@ function update_script() {
if [[ ! -d /opt/teamspeak-server ]]; then if [[ ! -d /opt/teamspeak-server ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | head -1) && set -o pipefail set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.teamspeak3-server_linux_amd64-([0-9]+.[0-9]+.[0-9]+)./\1/p' | head -1) && set -o pipefail
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
@ -40,10 +40,11 @@ function update_script() {
rm -rf teamspeak3-server_linux_amd64 rm -rf teamspeak3-server_linux_amd64
echo "${RELEASE}" >~/.teamspeak-server echo "${RELEASE}" >~/.teamspeak-server
$STD service teamspeak start $STD service teamspeak start
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
} }

View File

@ -22,30 +22,26 @@ catch_errors
function update_script() { function update_script() {
if [[ ! -d /opt/tinyauth ]]; then if [[ ! -d /opt/tinyauth ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
msg_info "Updating packages" msg_info "Updating packages"
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated packages" msg_ok "Updated 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) }') 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 ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then
msg_info "Stopping Service"
$STD service tinyauth stop
msg_ok "Service Stopped"
msg_info "Updating Tinyauth" if [ "${RELEASE}" != "$(cat /opt/tinyauth_version.txt)" ] || [ ! -f /opt/tinyauth_version.txt ]; then
$STD service tinyauth stop
rm -f /opt/tinyauth/tinyauth rm -f /opt/tinyauth/tinyauth
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
chmod +x /opt/tinyauth/tinyauth chmod +x /opt/tinyauth/tinyauth
echo "${RELEASE}" >~/.tinyauth echo "${RELEASE}" >/opt/tinyauth_version.txt
msg_ok "Updated Tinyauth"
msg_info "Restarting Tinyauth" msg_info "Restarting Tinyauth"
$STD service tinyauth start $STD service tinyauth start
msg_ok "Restarted Tinyauth" msg_ok "Restarted Tinyauth"
msg_ok "Updated successfully!" msg_ok "Updated Tinyauth"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

View File

@ -25,11 +25,10 @@ function update_script() {
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated Alpine Packages" msg_ok "Updated Alpine Packages"
msg_info "Updating traefik from edge" msg_info "Upgrading traefik from edge"
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
msg_ok "Updated traefik" msg_ok "Upgraded traefik"
msg_ok "Updated successfully!" exit
exit 0
} }
start start

View File

@ -31,8 +31,8 @@ function update_script() {
msg_info "Restarting Transmission" msg_info "Restarting Transmission"
$STD rc-service transmission-daemon restart $STD rc-service transmission-daemon restart
msg_ok "Restarted Transmission" msg_ok "Restarted Transmission"
msg_ok "Updated successfully!"
exit 0 exit 1
} }
start start

View File

@ -13,7 +13,6 @@ var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}" var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}" var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_tun="${var_tun:-1}"
header_info "$APP" header_info "$APP"
variables variables
@ -32,10 +31,11 @@ function update_script() {
if [[ -d /etc/wgdashboard/src ]]; then if [[ -d /etc/wgdashboard/src ]]; then
msg_info "update WGDashboard" msg_info "update WGDashboard"
cd /etc/wgdashboard/src cd /etc/wgdashboard/src
echo "y" | ./wgd.sh update >/dev/null 2>&1 $STD echo "y" | ./wgd.sh update
$STD ./wgd.sh start $STD ./wgd.sh start
msg_ok "WGDashboard updated" msg_ok "WGDashboard updated"
fi fi
exit 0 exit 0
} }

View File

@ -29,8 +29,7 @@ function update_script() {
header_info header_info
if [ "$UPD" == "1" ]; then if [ "$UPD" == "1" ]; then
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated successfully!" exit
exit 0
fi fi
} }

View File

@ -11,7 +11,7 @@ var_disk="${var_disk:-4}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -38,4 +38,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/guacamole${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/guacamole${CL}"

View File

@ -29,23 +29,25 @@ function update_script() {
fi fi
RELEASE="$(curl -fsSL https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)" RELEASE="$(curl -fsSL https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service" msg_info "Stopping ${APP}"
systemctl stop apache-tika systemctl stop apache-tika
msg_ok "Stopped Service" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
cd /opt/apache-tika cd /opt/apache-tika
curl -fsSL -o tika-server-standard-${RELEASE}.jar "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar" curl -fsSL -o tika-server-standard-${RELEASE}.jar "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar"
mv --force tika-server-standard.jar tika-server-standard-prev-version.jar mv --force tika-server-standard.jar tika-server-standard-prev-version.jar
mv tika-server-standard-${RELEASE}.jar tika-server-standard.jar mv tika-server-standard-${RELEASE}.jar tika-server-standard.jar
rm -rf /opt/apache-tika/tika-server-standard-prev-version.jar
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Service" msg_info "Starting ${APP}"
systemctl start apache-tika systemctl start apache-tika
msg_ok "Started Service" msg_ok "Started ${APP}"
msg_ok "Updated successfully!" msg_info "Cleaning Up"
rm -rf /opt/apache-tika/tika-server-standard-prev-version.jar
msg_ok "Cleanup Completed"
msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
@ -59,4 +61,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9998${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9998${CL}"

View File

@ -9,7 +9,7 @@ APP="Apt-Cacher-NG"
var_tags="${var_tags:-caching}" var_tags="${var_tags:-caching}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-10}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@ -20,19 +20,18 @@ 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 /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@ -42,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3142/acng-report.html${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3142/acng-report.html${CL}"

View File

@ -20,43 +20,29 @@ 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 /opt/archivebox ]]; then if [[ ! -d /opt/archivebox ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping ${APP}"
systemctl stop archivebox
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}"
cd /opt/archivebox/data
pip install --upgrade --ignore-installed archivebox
sudo -u archivebox archivebox init
msg_ok "Updated ${APP}"
msg_info "Starting ${APP}"
systemctl start archivebox
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
exit exit
fi
NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
PYTHON_VERSION="3.13" setup_uv
if ! dpkg -l | grep -q "^ii chromium "; then
msg_info "Installing System Dependencies"
$STD apt-get install -y chromium
msg_ok "Installed System Dependencies"
fi
msg_info "Stopping Service"
systemctl stop archivebox
msg_ok "Stopped Service"
msg_info "Upgrading Playwright"
$STD uv pip install playwright --system
$STD playwright install-deps chromium
msg_ok "Upgraded Playwright"
msg_info "Updating ArchiveBox"
cd /opt/archivebox/data
$STD uv pip install --system --upgrade --no-reinstall archivebox
sudo -u archivebox archivebox init
msg_ok "Updated ArchiveBox"
msg_info "Starting Service"
systemctl start archivebox
msg_ok "Started Service"
msg_ok "Updated successfully!"
exit
} }
start start
@ -66,4 +52,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000/admin/login${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000/admin/login${CL}"

View File

@ -27,7 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "argus" "release-argus/Argus"; then
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.Argus 2>/dev/null)" ]] || [[ ! -f ~/.Argus ]]; then
msg_info "Stopping service" msg_info "Stopping service"
systemctl stop argus systemctl stop argus
msg_ok "Service stopped" msg_ok "Service stopped"
@ -37,9 +39,11 @@ function update_script() {
msg_info "Starting service" msg_info "Starting service"
systemctl start argus systemctl start argus
msg_ok "Service started" msg_ok "Service started"
msg_ok "Updated successfully!"
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_ok "${APP} is already up to date (${RELEASE})"
fi fi
exit
} }
start start

View File

@ -20,19 +20,18 @@ 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 /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@ -42,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6880${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6880${CL}"

View File

@ -9,7 +9,7 @@ APP="audiobookshelf"
var_tags="${var_tags:-podcast;audiobook}" var_tags="${var_tags:-podcast;audiobook}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-5}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@ -20,20 +20,15 @@ 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 /etc/default/audiobookshelf ]]; then if [[ ! -f /etc/apt/trusted.gpg.d/audiobookshelf-ppa.asc ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
echo "This application receives updates through the APT package manager."
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@ -43,4 +38,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:13378${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:13378${CL}"

View File

@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://www.authelia.com/ # Source: https://www.authelia.com/
APP="Authelia" APP="Authelia"
var_tags="${var_tags:-authenticator}" TAGS=""
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
@ -25,21 +25,29 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /etc/authelia/ ]]; then if [[ ! -d "/etc/authelia/" ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if check_for_gh_release "authelia" "authelia/authelia"; then if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then
$STD apt update $STD apt-get update
$STD apt -y upgrade $STD apt-get -y upgrade
fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary" fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary"
msg_ok "Updated successfully!" msg_info "Cleaning Up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"
msg_ok "Updated $APP to ${RELEASE}"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit
} }
start start
build_container build_container
description description

View File

@ -20,26 +20,30 @@ 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 /root/.config/autobrr/config.toml ]]; then if [[ ! -f /root/.config/autobrr/config.toml ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "autobrr" "autobrr/autobrr"; then RELEASE=$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Stopping Service" if [[ "${RELEASE}" != "$(cat ~/.autobrr 2>/dev/null)" ]] || [[ ! -f ~/.autobrr ]]; then
systemctl stop autobrr msg_info "Stopping ${APP} LXC"
msg_ok "Stopped Service" systemctl stop autobrr
msg_ok "Stopped ${APP} LXC"
fetch_and_deploy_gh_release "autobrr" "autobrr/autobrr" "prebuild" "latest" "/usr/local/bin" "autobrr_*_linux_x86_64.tar.gz" fetch_and_deploy_gh_release "autobrr" "autobrr/autobrr" "prebuild" "latest" "/usr/local/bin" "autobrr_*_linux_x86_64.tar.gz"
msg_info "Starting Service" msg_info "Starting ${APP} LXC"
systemctl start autobrr systemctl start autobrr
msg_ok "Started Service" msg_ok "Started ${APP} LXC"
msg_ok "Updated successfully!"
fi msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit exit
} }

View File

@ -1,83 +0,0 @@
#!/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: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/gelbphoenix/autocaliweb
APP="Autocaliweb"
var_tags="${var_tags:-ebooks}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
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/autocaliweb ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
setup_uv
RELEASE=$(curl -fsSL https://api.github.com/repos/gelbphoenix/autocaliweb/releases/latest | jq '.tag_name' | sed 's/^"v//;s/"$//')
if check_for_gh_release "autocaliweb" "gelbphoenix/autocaliweb"; then
msg_info "Stopping Services"
systemctl stop autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper
msg_ok "Stopped Services"
INSTALL_DIR="/opt/autocaliweb"
export VIRTUAL_ENV="${INSTALL_DIR}/venv"
$STD tar -cf ~/autocaliweb_bkp.tar "$INSTALL_DIR"/{metadata_change_logs,dirs.json,.env,scripts/ingest_watcher.sh,scripts/auto_zipper_wrapper.sh,scripts/metadata_change_detector_wrapper.sh}
fetch_and_deploy_gh_release "autocaliweb" "gelbphoenix/autocaliweb" "tarball" "latest" "/opt/autocaliweb"
msg_info "Updating ${APP}"
cd "$INSTALL_DIR"
if [[ ! -d "$VIRTUAL_ENV" ]]; then
$STD uv venv "$VIRTUAL_ENV"
fi
$STD uv sync --all-extras --active
cd "$INSTALL_DIR"/koreader/plugins
PLUGIN_DIGEST="$(find acwsync.koplugin -type f -name "*.lua" -o -name "*.json" | sort | xargs sha256sum | sha256sum | cut -d' ' -f1)"
echo "Plugin files digest: $PLUGIN_DIGEST" >acwsync.koplugin/${PLUGIN_DIGEST}.digest
echo "Build date: $(date)" >>acwsync.koplugin/${PLUGIN_DIGEST}.digest
echo "Files included:" >>acwsync.koplugin/${PLUGIN_DIGEST}.digest
$STD zip -r koplugin.zip acwsync.koplugin/
cp -r koplugin.zip "$INSTALL_DIR"/cps/static
mkdir -p "$INSTALL_DIR"/metadata_temp
$STD tar -xf ~/autocaliweb_bkp.tar --directory /
KEPUB_VERSION="$(/usr/bin/kepubify --version)"
CALIBRE_RELEASE="$(curl -s https://api.github.com/repos/kovidgoyal/calibre/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4)"
echo "${KEPUB_VERSION#v}" >"$INSTALL_DIR"/KEPUBIFY_RELEASE
echo "${CALIBRE_RELEASE#v}" >/"$INSTALL_DIR"/CALIBRE_RELEASE
sed 's/^/v/' ~/.autocaliweb >"$INSTALL_DIR"/ACW_RELEASE
chown -R acw:acw "$INSTALL_DIR"
rm ~/autocaliweb_bkp.tar
msg_ok "Updated $APP"
msg_info "Starting Services"
systemctl start autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper
msg_ok "Started Services"
msg_ok "Updated successfully!"
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}:8083${CL}"

View File

@ -28,7 +28,8 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "babybuddy" "babybuddy/babybuddy"; then RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.babybuddy 2>/dev/null)" ]] || [[ ! -f ~/.babybuddy ]]; then
setup_uv setup_uv
msg_info "Stopping Services" msg_info "Stopping Services"
@ -43,13 +44,13 @@ function update_script() {
fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy"
msg_info "Updating ${APP}" msg_info "Updating ${APP} to v${RELEASE}"
cd /opt/babybuddy cd /opt/babybuddy
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
source .venv/bin/activate source .venv/bin/activate
$STD uv pip install -r requirements.txt $STD uv pip install -r requirements.txt
$STD python manage.py migrate $STD python manage.py migrate
msg_ok "Updated ${APP}" msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Fixing permissions" msg_info "Fixing permissions"
chown -R www-data:www-data /opt/data chown -R www-data:www-data /opt/data
@ -61,10 +62,14 @@ function update_script() {
systemctl start uwsgi systemctl start uwsgi
systemctl start nginx systemctl start nginx
msg_ok "Services Started" msg_ok "Services Started"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }
start start
build_container build_container
description description

View File

@ -29,9 +29,9 @@ function update_script() {
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service" msg_info "Stopping ${APP}"
systemctl stop backrest systemctl stop backrest
msg_ok "Stopped Service" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
temp_file=$(mktemp) temp_file=$(mktemp)
@ -39,14 +39,17 @@ function update_script() {
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "$temp_file" curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "$temp_file"
tar xzf $temp_file -C /opt/backrest/bin tar xzf $temp_file -C /opt/backrest/bin
chmod +x /opt/backrest/bin/backrest chmod +x /opt/backrest/bin/backrest
rm -f "$temp_file"
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}" msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting Service" msg_info "Starting ${APP}"
systemctl start backrest systemctl start backrest
msg_ok "Started Service" msg_ok "Started ${APP}"
msg_ok "Updated successfully!"
msg_info "Cleaning up"
rm -f "$temp_file"
msg_ok "Cleaned up"
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

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -28,7 +28,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "baikal" "sabre-io/Baikal"; then RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.baikal 2>/dev/null)" ]] || [[ ! -f ~/.baikal ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop apache2 systemctl stop apache2
msg_ok "Stopped Service" msg_ok "Stopped Service"
@ -37,9 +38,8 @@ function update_script() {
mv /opt/baikal /opt/baikal-backup mv /opt/baikal /opt/baikal-backup
msg_ok "Backed up data" msg_ok "Backed up data"
PHP_APACHE="YES" PHP_MODULE="pgsql,curl" PHP_VERSION="8.3" setup_php
setup_composer
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
setup_composer
msg_info "Configuring Baikal" msg_info "Configuring Baikal"
cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/ cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
@ -48,13 +48,18 @@ function update_script() {
chmod -R 755 /opt/baikal/ chmod -R 755 /opt/baikal/
cd /opt/baikal cd /opt/baikal
$STD composer install $STD composer install
rm -rf /opt/baikal-backup
msg_ok "Configured Baikal" msg_ok "Configured Baikal"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start apache2 systemctl start apache2
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_info "Cleaning up"
rm -rf /opt/baikal-backup
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }

View File

@ -29,7 +29,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "bar-assistant" "karlomikus/bar-assistant"; then RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
msg_info "Stopping nginx" msg_info "Stopping nginx"
systemctl stop nginx systemctl stop nginx
msg_ok "Stopped nginx" msg_ok "Stopped nginx"
@ -41,7 +45,7 @@ function update_script() {
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant" fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
setup_composer setup_composer
msg_info "Updating Bar-Assistant" msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
cd /opt/bar-assistant cd /opt/bar-assistant
@ -54,15 +58,20 @@ function update_script() {
$STD php artisan route:cache $STD php artisan route:cache
$STD php artisan event:cache $STD php artisan event:cache
chown -R www-data:www-data /opt/bar-assistant chown -R www-data:www-data /opt/bar-assistant
rm -rf /opt/bar-assistant-backup msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
msg_ok "Updated Bar-Assistant"
msg_info "Starting nginx" msg_info "Starting nginx"
systemctl start nginx systemctl start nginx
msg_ok "Started nginx" msg_ok "Started nginx"
msg_info "Cleaning up"
rm -rf /opt/bar-assistant-backup
msg_ok "Cleaned"
else
msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
fi fi
if check_for_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim"; then if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
msg_info "Backing up Vue Salt Rim" msg_info "Backing up Vue Salt Rim"
mv /opt/vue-salt-rim /opt/vue-salt-rim-backup mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
msg_ok "Backed up Vue Salt Rim" msg_ok "Backed up Vue Salt Rim"
@ -73,20 +82,26 @@ function update_script() {
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim" fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
msg_info "Updating Vue Salt Rim" msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
cd /opt/vue-salt-rim cd /opt/vue-salt-rim
$STD npm install $STD npm install
$STD npm run build $STD npm run build
rm -rf /opt/vue-salt-rim-backup msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
msg_ok "Updated Vue Salt Rim"
msg_info "Starting nginx" msg_info "Starting nginx"
systemctl start nginx systemctl start nginx
msg_ok "Started nginx" msg_ok "Started nginx"
msg_info "Cleaning up"
rm -rf /opt/vue-salt-rim-backup
msg_ok "Cleaned"
msg_ok "Updated"
else
msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
fi fi
if check_for_gh_release "meilisearch" "meilisearch/meilisearch"; then if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
msg_info "Stopping Meilisearch" msg_info "Stopping Meilisearch"
systemctl stop meilisearch systemctl stop meilisearch
msg_ok "Stopped Meilisearch" msg_ok "Stopped Meilisearch"
@ -96,7 +111,10 @@ function update_script() {
msg_info "Starting Meilisearch" msg_info "Starting Meilisearch"
systemctl start meilisearch systemctl start meilisearch
msg_ok "Started Meilisearch" msg_ok "Started Meilisearch"
msg_ok "Updated successfully!"
msg_ok "Updated Meilisearch"
else
msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
fi fi
exit exit
} }

71
ct/barcode-buddy.sh Normal file
View File

@ -0,0 +1,71 @@
#!/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: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Forceu/barcodebuddy
APP="Barcode-Buddy"
var_tags="${var_tags:-grocery;household}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-3}"
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/barcodebuddy ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.barcodebuddy 2>/dev/null)" ]] || [[ ! -f ~/.barcodebuddy ]]; then
msg_info "Stopping Service"
systemctl stop apache2
systemctl stop barcodebuddy
msg_ok "Stopped Service"
msg_info "Backing up data"
mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
msg_ok "Backed up data"
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
msg_info "Configuring ${APP}"
cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
chown -R www-data:www-data /opt/barcodebuddy/data
msg_ok "Configured ${APP}"
msg_info "Starting Service"
systemctl start apache2
systemctl start barcodebuddy
msg_ok "Started Service"
msg_info "Cleaning up"
rm -r /opt/barcodebuddy-backup
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -20,40 +20,20 @@ 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 /var/lib/bazarr/ ]]; then if [[ ! -d /var/lib/bazarr/ ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
msg_info "Stopping Service"
systemctl stop bazarr
msg_ok "Stopped Service"
PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
msg_info "Setup Bazarr"
mkdir -p /var/lib/bazarr/
chmod 775 /opt/bazarr /var/lib/bazarr/
if [[ ! -d /opt/bazarr/venv/ ]]; then
$STD uv venv /opt/bazarr/venv --python 3.12
sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
systemctl daemon-reload
fi fi
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt msg_info "Updating $APP LXC"
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3 $STD apt-get update
msg_ok "Setup Bazarr" $STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_info "Starting Service" exit
systemctl start bazarr
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
} }
start start
build_container build_container
description description
@ -61,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}"

View File

@ -1,62 +0,0 @@
#!/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: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alam00000/bentopdf
APP="BentoPDF"
var_tags="${var_tags:-pdf-editor}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
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/bentopdf ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "bentopdf" "alam00000/bentopdf"; then
msg_info "Stopping Service"
systemctl stop bentopdf
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
msg_info "Updating BentoPDF"
cd /opt/bentopdf
$STD npm ci --no-audit --no-fund
export SIMPLE_MODE=true
$STD npm run build -- --mode production
msg_ok "Updated BentoPDF"
msg_info "Starting Service"
systemctl start bentopdf
msg_ok "Started Service"
msg_ok "Updated successfully!"
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}:8080${CL}"

View File

@ -20,27 +20,26 @@ 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 /opt/beszel ]]; then if [[ ! -d /opt/beszel ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping $APP"
systemctl stop beszel-hub
msg_ok "Stopped $APP"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
msg_ok "Updated $APP"
msg_info "Starting $APP"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Update Successful"
exit exit
fi
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Updated successfully!"
exit
} }
start start
@ -50,4 +49,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}:8090${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"

View File

@ -27,7 +27,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"; then RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.bitmagnet 2>/dev/null)" ]] || [[ ! -f ~/.bitmagnet ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop bitmagnet-web systemctl stop bitmagnet-web
msg_ok "Stopped Service" msg_ok "Stopped Service"
@ -62,19 +63,22 @@ function update_script() {
rm -rf /opt/bitmagnet rm -rf /opt/bitmagnet
fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"
msg_info "Updating ${APP}" msg_info "Updating ${APP} to v${RELEASE}"
cd /opt/bitmagnet cd /opt/bitmagnet
VREL=v$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
chmod +x bitmagnet chmod +x bitmagnet
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
msg_ok "Updated $APP" msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start bitmagnet-web systemctl start bitmagnet-web
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }

View File

@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://0xerr0r.github.io/blocky # Source: https://0xerr0r.github.io/blocky/latest/
APP="Blocky" APP="Blocky"
var_tags="${var_tags:-adblock}" var_tags="${var_tags:-adblock}"
@ -20,38 +20,18 @@ 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 /opt/blocky ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
if check_for_gh_release "blocky" "0xERR0R/blocky"; then
msg_info "Stopping Service"
systemctl stop blocky
msg_ok "Stopped Service"
msg_info "Backup Config"
mv /opt/blocky/config.yml /opt/config.yml
msg_ok "Backed Up Config"
msg_info "Removing Old Version"
rm -rf /opt/blocky
msg_ok "Removed Old Version"
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
msg_info "Restore Config"
mv /opt/config.yml /opt/blocky/config.yml
msg_ok "Restored Config"
msg_info "Starting Service"
systemctl start blocky
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
} }
start start
@ -61,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"

View File

@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="BookLore" APP="BookLore"
var_tags="${var_tags:-books;library}" var_tags="${var_tags:-books;library}"
var_cpu="${var_cpu:-3}" var_cpu="${var_cpu:-3}"
var_ram="${var_ram:-3072}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-7}" var_disk="${var_disk:-7}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
@ -28,14 +28,12 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "booklore" "booklore-app/BookLore"; then
msg_info "Stopping Service"
systemctl stop booklore
msg_info "Stopped Service"
msg_info "backup old install" RELEASE=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
mv /opt/booklore /opt/booklore_bak if [[ "${RELEASE}" != "$(cat ~/.booklore 2>/dev/null)" ]] || [[ ! -f ~/.booklore ]]; then
msg_ok "backup done" msg_info "Stopping $APP"
systemctl stop booklore
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore" fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
@ -45,8 +43,6 @@ function update_script() {
$STD npm run build --configuration=production $STD npm run build --configuration=production
msg_ok "Built Frontend" msg_ok "Built Frontend"
JAVA_VERSION="21" setup_java
msg_info "Building Backend" msg_info "Building Backend"
cd /opt/booklore/booklore-api cd /opt/booklore/booklore-api
APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//') APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
@ -56,17 +52,19 @@ function update_script() {
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1) JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
if [[ -z "$JAR_PATH" ]]; then if [[ -z "$JAR_PATH" ]]; then
msg_error "Backend JAR not found" msg_error "Backend JAR not found"
exit exit 1
fi fi
cp "$JAR_PATH" /opt/booklore/dist/app.jar cp "$JAR_PATH" /opt/booklore/dist/app.jar
msg_ok "Built Backend" msg_ok "Built Backend"
msg_info "Starting Service" msg_info "Starting $APP"
systemctl start booklore systemctl start booklore
systemctl reload nginx systemctl reload nginx
rm -rf /opt/booklore_bak msg_ok "Started $APP"
msg_ok "Started Service"
msg_ok "Updated successfully!" msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -28,7 +28,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.bookstack 2>/dev/null)" ]] || [[ ! -f ~/.bookstack ]]; then
msg_info "Stopping Apache2" msg_info "Stopping Apache2"
systemctl stop apache2 systemctl stop apache2
msg_ok "Services Stopped" msg_ok "Services Stopped"
@ -51,22 +52,29 @@ function update_script() {
msg_info "Configuring BookStack" msg_info "Configuring BookStack"
cd /opt/bookstack cd /opt/bookstack
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
$STD /usr/local/bin/composer install --no-dev $STD composer install --no-dev
$STD php artisan migrate --force $STD php artisan migrate --force
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
chmod -R 640 /opt/bookstack/.env chmod -R 640 /opt/bookstack/.env
rm -rf /opt/bookstack-backup echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Configured BookStack" msg_ok "Configured BookStack"
msg_info "Starting Apache2" msg_info "Starting Apache2"
systemctl start apache2 systemctl start apache2
msg_ok "Started Apache2" msg_ok "Started Apache2"
msg_ok "Updated successfully!"
msg_info "Cleaning Up"
rm -rf /opt/bookstack-backup
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }
start start
build_container build_container
description description

View File

@ -41,7 +41,7 @@ EOF
apt-get install -y --allow-downgrades bunkerweb=${RELEASE} apt-get install -y --allow-downgrades bunkerweb=${RELEASE}
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}" msg_ok "Updated ${APP} to ${RELEASE}"
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

View File

@ -28,7 +28,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "bytestash" "jordan-dalby/ByteStash"; then RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.bytestash 2>/dev/null)" ]] || [[ ! -f ~/.bytestash ]]; then
read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped
if [[ "$backuped" =~ ^[Yy]$ ]]; then if [[ "$backuped" =~ ^[Yy]$ ]]; then
msg_info "Stopping Services" msg_info "Stopping Services"
@ -54,7 +56,9 @@ function update_script() {
msg_error "PLEASE MAKE A BACKUP FIRST!" msg_error "PLEASE MAKE A BACKUP FIRST!"
exit exit
fi fi
msg_ok "Updated successfully!" msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit
} }

View File

@ -9,7 +9,7 @@ APP="Caddy"
var_tags="${var_tags:-webserver}" var_tags="${var_tags:-webserver}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-6}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@ -20,33 +20,18 @@ 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 /etc/caddy ]]; then if [[ ! -d /etc/caddy ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated successfully!" msg_ok "Updated $APP LXC"
msg_ok "Updated $APP LXC" exit
if command -v xcaddy >/dev/null 2>&1; then
setup_go
msg_info "Updating xCaddy"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
VERSION="${RELEASE#v}"
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${VERSION}_linux_amd64.deb" -o "xcaddy_${VERSION}_linux_amd64.deb"
$STD dpkg -i "xcaddy_${VERSION}_linux_amd64.deb"
rm -f "xcaddy_${VERSION}_linux_amd64.deb"
$STD xcaddy build
msg_ok "Updated xCaddy"
msg_ok "Updated successfully!"
fi
exit
} }
start start
@ -56,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}"

View File

@ -27,9 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping Service" msg_info "Stopping ${APP}"
systemctl stop cps systemctl stop cps
msg_ok "Stopped Service" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
cd /opt/kepubify cd /opt/kepubify
@ -104,7 +104,7 @@ function update_script() {
;; ;;
*) *)
echo "Unsupported item $CHOICE!" >&2 echo "Unsupported item $CHOICE!" >&2
exit exit 1
;; ;;
esac esac
done done
@ -121,10 +121,10 @@ function update_script() {
$STD pip install --upgrade calibreweb $STD pip install --upgrade calibreweb
fi fi
msg_info "Starting Service" msg_info "Starting ${APP}"
systemctl start cps systemctl start cps
msg_ok "Started Service" msg_ok "Started ${APP}"
msg_ok "Updated successfully!" msg_ok "Updated Successfully"
exit exit
} }
@ -135,4 +135,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"

View File

@ -20,19 +20,18 @@ 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 /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!" exit
exit
} }
start start
@ -42,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -7,8 +7,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Change Detection" APP="Change Detection"
var_tags="${var_tags:-monitoring;crawler}" var_tags="${var_tags:-monitoring;crawler}"
var_cpu="${var_cpu:-4}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}" var_disk="${var_disk:-10}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
@ -36,8 +36,6 @@ function update_script() {
msg_ok "Updated Dependencies" msg_ok "Updated Dependencies"
fi fi
NODE_VERSION="24" setup_nodejs
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
$STD pip3 install changedetection.io --upgrade $STD pip3 install changedetection.io --upgrade
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
@ -51,13 +49,11 @@ function update_script() {
$STD git -C /opt/browserless/ fetch --all $STD git -C /opt/browserless/ fetch --all
$STD git -C /opt/browserless/ reset --hard origin/main $STD git -C /opt/browserless/ reset --hard origin/main
$STD npm update --prefix /opt/browserless $STD npm update --prefix /opt/browserless
$STD npm ci --include=optional --include=dev --prefix /opt/browserless
$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps $STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps
# Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed. # Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome $STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge $STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit $STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
$STD npm install --prefix /opt/browserless esbuild typescript ts-node @types/node --save-dev
$STD npm run build --prefix /opt/browserless $STD npm run build --prefix /opt/browserless
$STD npm run build:function --prefix /opt/browserless $STD npm run build:function --prefix /opt/browserless
$STD npm prune production --prefix /opt/browserless $STD npm prune production --prefix /opt/browserless
@ -68,7 +64,7 @@ function update_script() {
fi fi
systemctl restart changedetection systemctl restart changedetection
msg_ok "Updated successfully!" msg_ok "Updated Successfully"
exit exit
} }

View File

@ -13,7 +13,6 @@ var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-0}" var_unprivileged="${var_unprivileged:-0}"
var_gpu="${var_gpu:-yes}"
header_info "$APP" header_info "$APP"
variables variables
@ -39,4 +38,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}"

View File

@ -27,20 +27,22 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1) RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
msg_info "Updating ${APP} to v${RELEASE}" if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
$STD omd stop monitoring msg_info "Updating ${APP} to v${RELEASE}"
$STD omd cp monitoring monitoringbackup $STD omd stop monitoring
curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb" -o "/opt/checkmk.deb" $STD omd cp monitoring monitoringbackup
$STD apt-get install -y /opt/checkmk.deb curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb" -o "/opt/checkmk.deb"
$STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring $STD apt-get install -y /opt/checkmk.deb
$STD omd start monitoring $STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
$STD omd -f rm monitoringbackup $STD omd start monitoring
$STD omd cleanup $STD omd -f rm monitoringbackup
rm -rf /opt/checkmk.deb $STD omd cleanup
msg_ok "Updated ${APP}" rm -rf /opt/checkmk.deb
msg_ok "Updated successfully!" msg_ok "Updated ${APP} to v${RELEASE}"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}."
fi
exit exit
} }

View File

@ -20,27 +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 [[ ! -f /opt/cleanuparr/Cleanuparr ]]; then if [[ ! -f /opt/cleanuparr/Cleanuparr ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Cleanuparr/Cleanuparr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.Cleanuparr 2>/dev/null)" ]] || [[ ! -f ~/.Cleanuparr ]]; then
msg_info "Stopping ${APP}"
systemctl stop cleanuparr
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "$RELEASE" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Starting ${APP}"
systemctl start cleanuparr
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit exit
fi
if check_for_gh_release "cleanuparr" "Cleanuparr/Cleanuparr"; then
msg_info "Stopping Service"
systemctl stop cleanuparr
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Starting Service"
systemctl start cleanuparr
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
} }
start start
build_container build_container
description description

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -20,19 +20,18 @@ 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 /etc/systemd/system/cloudflared.service ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
$STD apt update $STD apt-get update
$STD apt -y upgrade $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!" exit
exit
} }
start start
@ -40,4 +39,4 @@ build_container
description 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}"

View File

@ -28,17 +28,22 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "cloudreve" "cloudreve/cloudreve"; then
msg_info "Stopping Service" RELEASE=$(curl -fsSL https://api.github.com/repos/cloudreve/cloudreve/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.cloudreve 2>/dev/null)" ]] || [[ ! -f ~/.cloudreve ]]; then
msg_info "Stopping $APP"
systemctl stop cloudreve systemctl stop cloudreve
msg_info "Stopped Service" msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz" fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
msg_info "Starting Service" msg_info "Starting $APP"
systemctl start cloudreve systemctl start cloudreve
msg_ok "Started Service" msg_ok "Started $APP"
msg_ok "Updated successfully!"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -27,13 +27,73 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
"1" "Update LXC" ON \
"2" "Install cockpit-file-sharing" OFF \
"3" "Install cockpit-identities" OFF \
"4" "Install cockpit-navigator" OFF \
3>&1 1>&2 2>&3)
msg_info "Updating ${APP} LXC" if [ "$UPD" == "1" ]; then
$STD apt update msg_info "Updating ${APP} LXC"
$STD apt -y upgrade $STD apt-get update
msg_ok "Updated ${APP} LXC" $STD apt-get -y upgrade
msg_ok "Updated successfully!" msg_ok "Updated ${APP} LXC"
exit exit
fi
if [ "$UPD" == "2" ]; then
msg_info "Installing dependencies (patience)"
$STD apt-get install -y \
attr \
nfs-kernel-server \
samba \
samba-common-bin \
winbind \
gawk
msg_ok "Installed dependencies"
msg_info "Installing Cockpit file sharing"
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt-get install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit file sharing"
exit
fi
if [ "$UPD" == "3" ]; then
msg_info "Installing dependencies (patience)"
$STD apt-get install -y \
psmisc \
samba \
samba-common-bin
msg_ok "Installed dependencies"
msg_info "Installing Cockpit identities"
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt-get install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit identities"
exit
fi
if [ "$UPD" == "4" ]; then
msg_info "Installing dependencies"
$STD apt-get install -y \
rsync \
zip
msg_ok "Installed dependencies"
msg_info "Installing Cockpit navigator"
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt-get install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit navigator"
exit
fi
} }
start start

View File

@ -1,42 +0,0 @@
#!/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: jdacode
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/comfyanonymous/ComfyUI
APP="ComfyUI"
var_tags="${var_tags:-ai}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-25}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
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/ComfyUI ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "To update use the ComfyUI Manager."
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}:8188${CL}"

View File

@ -28,13 +28,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
JAVA_VERSION="25" setup_java if [[ "${RELEASE}" != "$(cat ~/.commafeed 2>/dev/null)" ]] || [[ ! -f ~/.commafeed ]]; then
msg_info "Stopping ${APP}"
if check_for_gh_release "commafeed" "Athou/commafeed"; then
msg_info "Stopping Service"
systemctl stop commafeed systemctl stop commafeed
msg_ok "Stopped Service" msg_ok "Stopped ${APP}"
if ! [[ $(dpkg -s rsync 2>/dev/null) ]]; then if ! [[ $(dpkg -s rsync 2>/dev/null) ]]; then
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
@ -42,25 +40,23 @@ function update_script() {
$STD apt-get install -y rsync $STD apt-get install -y rsync
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
fi fi
if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
msg_info "Backing up existing data"
mv /opt/commafeed/data /opt/data.bak mv /opt/commafeed/data /opt/data.bak
msg_ok "Backed up existing data"
fi fi
fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip" fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
if [ -d /opt/data.bak ] && [ "$(ls -A /opt/data.bak)" ]; then msg_info "Updating ${APP} to ${RELEASE}"
msg_info "Restoring data" if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then
mv /opt/data.bak /opt/commafeed/data mv /opt/commafeed/data.bak /opt/commafeed/data
msg_ok "Restored data"
fi fi
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting Service" msg_info "Starting ${APP}"
systemctl start commafeed systemctl start commafeed
msg_ok "Started Service" msg_ok "Started ${APP}"
msg_ok "Updated successfully!" msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit
} }

View File

@ -10,7 +10,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@ -27,21 +27,31 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "configarr" "raydak-labs/configarr"; then RELEASE=$(curl -fsSL https://api.github.com/repos/raydak-labs/configarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Stopping Service" if [[ "${RELEASE}" != "$(cat ~/.configarr 2>/dev/null || cat /opt/configarr_version.txt 2>/dev/null)" ]]; then
msg_info "Stopping $APP"
systemctl stop configarr-task.timer systemctl stop configarr-task.timer
msg_ok "Stopped Service" msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
mkdir -p /opt/backup/ mkdir -p /opt/backup/
mv /opt/configarr/{config.yml,secrets.yml,.env} /opt/backup/ mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-x64.tar.xz" rm -rf /opt/configarr
mv /opt/backup/{config.yml,secrets.yml,.env} /opt/configarr/ fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr"
rm -rf /opt/backup mv /opt/backup/* /opt/configarr/
cd /opt/configarr
$STD pnpm install
$STD pnpm run build
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service" msg_info "Starting $APP"
systemctl start configarr-task.timer systemctl start configarr-task.timer
msg_ok "Started Service" msg_ok "Started configarr"
msg_ok "Updated successfully!"
rm -rf /opt/backup
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }

View File

@ -27,10 +27,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "ConvertX" "C4illin/ConvertX"; then RELEASE=$(curl -fsSL https://api.github.com/repos/C4illin/ConvertX/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
msg_info "Stopping Service" if [[ "${RELEASE}" != "$(cat ~/.convertx 2>/dev/null)" ]] || [[ ! -f ~/.convertx ]]; then
msg_info "Stopping $APP"
systemctl stop convertx systemctl stop convertx
msg_info "Stopped Service" msg_ok "Stopped $APP"
msg_info "Move data-Folder" msg_info "Move data-Folder"
if [[ -d /opt/convertx/data ]]; then if [[ -d /opt/convertx/data ]]; then
@ -40,21 +41,25 @@ function update_script() {
fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx" fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx"
msg_info "Updating $APP" msg_info "Updating $APP to v${RELEASE}"
if [[ -d /opt/data ]]; then if [[ -d /opt/data ]]; then
mv /opt/data /opt/convertx/data mv /opt/data /opt/convertx/data
fi fi
cd /opt/convertx cd /opt/convertx
$STD bun install $STD bun install
msg_ok "Updated $APP" msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service" msg_info "Starting $APP"
systemctl start convertx systemctl start convertx
msg_ok "Started Service" msg_ok "Started $APP"
msg_ok "Updated successfully!"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }
start start
build_container build_container
description description

View File

@ -1,46 +0,0 @@
#!/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://coolify.io/
APP="Coolify"
var_tags="${var_tags:-docker;paas}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-30}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
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 /data/coolify ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Coolify"
$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh)
msg_ok "Updated Coolify"
msg_ok "Updated successfully!"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"

View File

@ -28,7 +28,6 @@ function update_script() {
exit exit
fi fi
msg_ok "${APP} updates itself automatically!" msg_ok "${APP} updates itself automatically!"
exit
} }
start start
@ -38,4 +37,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -67,11 +67,11 @@ function update_script() {
systemctl start crafty-controller systemctl start crafty-controller
msg_ok "Started Crafty-Controller" msg_ok "Started Crafty-Controller"
msg_ok "Updated successfully!" msg_ok "Updated Successfully"
exit
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. Crafty-Controller is already at v${RELEASE}."
fi fi
exit
} }
start start

View File

@ -33,38 +33,52 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="22" setup_nodejs if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
$STD apt-get install -y npm
echo "Installed NPM..."
fi
fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
$STD /opt/cronicle/bin/control.sh upgrade $STD /opt/cronicle/bin/control.sh upgrade
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
exit exit
fi fi
if [ "$UPD" == "2" ]; then if [ "$UPD" == "2" ]; then
NODE_VERSION="22" setup_nodejs if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if check_for_gh_release "cronicle" "jhuckaby/Cronicle"; then if ! command -v npm >/dev/null 2>&1; then
IP=$(hostname -I | awk '{print $1}') echo "Installing NPM..."
msg_info "Installing Dependencies" $STD apt-get install -y npm
$STD apt-get install -y \ echo "Installed NPM..."
git \ fi
build-essential \
ca-certificates \
gnupg2
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
msg_info "Configuring Cronicle Worker"
cd /opt/cronicle
$STD npm install
$STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
$STD /opt/cronicle/bin/control.sh start
msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit
fi fi
LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies"
$STD apt-get install -y \
git \
build-essential \
ca-certificates \
gnupg2
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
msg_info "Configuring Cronicle Worker"
cd /opt/cronicle
$STD npm install
$STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
$STD /opt/cronicle/bin/control.sh start
$STD cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
chmod 775 /etc/init.d/cronicled
$STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit
fi fi
} }

View File

@ -31,7 +31,7 @@ function update_script() {
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
$STD npm install -g cross-seed@latest $STD npm install -g cross-seed@latest
systemctl restart cross-seed systemctl restart cross-seed
msg_ok "Updated successfully!" msg_ok "Updated Successfully"
else else
msg_ok "${APP} is already at v${current_version}" msg_ok "${APP} is already at v${current_version}"
fi fi
@ -49,4 +49,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 cross-seed API using the following URL:${CL}" echo -e "${INFO}${YW} Access cross-seed API using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}"

View File

@ -28,10 +28,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if check_for_gh_release "cryptpad" "cryptpad/cryptpad"; then RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
msg_info "Stopping Service" if [[ "${RELEASE}" != "$(cat ~/.cryptpad 2>/dev/null)" ]] || [[ ! -f ~/.cryptpad ]]; then
msg_info "Stopping $APP"
systemctl stop cryptpad systemctl stop cryptpad
msg_info "Stopped Service" msg_ok "Stopped $APP"
msg_info "Backing up configuration" msg_info "Backing up configuration"
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/ [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
@ -39,21 +40,24 @@ function update_script() {
fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad"
msg_info "Updating $APP" msg_info "Updating $APP to ${RELEASE}"
cd /opt/cryptpad cd /opt/cryptpad
$STD npm ci $STD npm ci
$STD npm run install:components $STD npm run install:components
$STD npm run build $STD npm run build
msg_ok "Updated $APP" msg_ok "Updated $APP to ${RELEASE}"
msg_info "Restoring configuration" msg_info "Restoring configuration"
mv /opt/config.js /opt/cryptpad/config/ mv /opt/config.js /opt/cryptpad/config/
msg_ok "Configuration restored" msg_ok "Configuration restored"
msg_info "Starting Service" msg_info "Starting $APP"
systemctl start cryptpad systemctl start cryptpad
msg_ok "Started Service" msg_ok "Started $APP"
msg_ok "Updated successfully!"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit exit
} }

View File

@ -20,19 +20,18 @@ 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 /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@ -42,4 +41,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}"

Some files were not shown because too many files have changed in this diff Show More