Compare commits

..

1 Commits

Author SHA1 Message Date
CanbiZ
9c59abf838 Update scripts to use Debian 13 and improve update logic
Bump default container OS version from Debian 12 to 13 across multiple LXC setup scripts. Refactor update_script functions for consistency, improve messaging, and standardize apt usage. Update Kimai install and update scripts to use setup_php, setup_composer, and fetch_and_deploy_gh_release helpers, and switch from MySQL to MariaDB. Update Kometa to use Python 3.13. Minor improvements to backup, cleanup, and service management steps in several scripts.
2025-10-23 16:28:01 +02:00
31 changed files with 405 additions and 438 deletions

View File

@@ -10,25 +10,12 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-10-25
## 2025-10-24
### 🌐 Website
- #### 📝 Script Information
- Fix config path for BunkerWeb [@Nonolanlan1007](https://github.com/Nonolanlan1007) ([#8618](https://github.com/community-scripts/ProxmoxVE/pull/8618))
- Update logo URL in guardian.json [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8615](https://github.com/community-scripts/ProxmoxVE/pull/8615))
## 2025-10-23 ## 2025-10-23
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- Radicale: Update dependencies [@ilofX](https://github.com/ilofX) ([#8603](https://github.com/community-scripts/ProxmoxVE/pull/8603))
- Various Downgrades to Debian 12 (MySQL / OMW / Technitium) [@MickLesk](https://github.com/MickLesk) ([#8595](https://github.com/community-scripts/ProxmoxVE/pull/8595))
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589)) - MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
- #### 🔧 Refactor - #### 🔧 Refactor

View File

@@ -42,4 +42,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

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -20,18 +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/iobroker ]]; then if [[ ! -d /opt/iobroker ]]; 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 Successfully"
exit exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit
} }
start start
@@ -41,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}:8081${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" 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:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -29,11 +29,10 @@ function update_script() {
exit 1 exit 1
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating 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 Successfully!"
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_disk="${var_disk:-2}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-0}" var_unprivileged="${var_unprivileged:-0}"
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}:26000${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:26000${CL}"

View File

@@ -28,24 +28,24 @@ function update_script() {
exit exit
fi fi
if [ ! -f /opt/.env ]; then if check_for_gh_release "Jackett" "Jackett/Jackett"; then
sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service if [ ! -f /opt/.env ]; then
cat <<EOF >/opt/.env sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
cat <<EOF >/opt/.env
DisableRootWarning=true DisableRootWarning=true
EOF EOF
fi fi
if check_for_gh_release "Jackett" "Jackett/Jackett"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop jackett systemctl stop jackett
msg_ok "Stopped Service" msg_ok "Stopped Service"
rm -rf /opt/Jackett CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start jackett systemctl start jackett
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated Successfully!"
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:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -20,18 +20,22 @@ 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/jenkins ]]; then if [[ ! -d /var/lib/jenkins ]]; 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
JAVA_VERSION="21" setup_java
msg_info "Updating Jenkings"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Jenkins"
msg_ok "Update Successfully!"
exit
} }
start start
@@ -41,4 +45,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${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}" var_disk="${var_disk:-20}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -35,19 +35,18 @@ function update_script() {
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest" fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
msg_info "Updating ${APP}" msg_info "Updating Joplin-Server"
cd /opt/joplin-server cd /opt/joplin-server
sed -i "/onenote-converter/d" packages/lib/package.json sed -i "/onenote-converter/d" packages/lib/package.json
$STD yarn config set --home enableTelemetry 0 $STD yarn config set --home enableTelemetry 0
export BUILD_SEQUENCIAL=1 export BUILD_SEQUENCIAL=1
$STD yarn install --inline-builds $STD yarn install --inline-builds
msg_ok "Updated ${APP}" msg_ok "Updated Joplin-Server"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start joplin-server systemctl start joplin-server
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated Successfully!"
msg_ok "Updated Successfully"
fi fi
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}" var_ram="${var_ram:-256}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -32,9 +32,9 @@ function update_script() {
setup_uv setup_uv
if check_for_gh_release "kapowarr" "Casvt/Kapowarr"; then if check_for_gh_release "kapowarr" "Casvt/Kapowarr"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop kapowarr systemctl stop kapowarr
msg_ok "Stopped $APP" msg_ok "Stopped Service"
msg_info "Creating Backup" msg_info "Creating Backup"
mv /opt/kapowarr/db /opt/ mv /opt/kapowarr/db /opt/
@@ -42,14 +42,14 @@ function update_script() {
fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr" fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr"
msg_info "Updating $APP" msg_info "Updating Kapowarr"
mv /opt/db /opt/kapowarr mv /opt/db /opt/kapowarr
msg_ok "Updated $APP" msg_ok "Updated Kapowarr"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start kapowarr systemctl start kapowarr
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Update Successful" msg_ok "Update Successfully!"
fi fi
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
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:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -38,14 +38,11 @@ function update_script() {
msg_ok "Updated yt-dlp" msg_ok "Updated yt-dlp"
msg_info "Prepare update" msg_info "Prepare update"
if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then $STD apt install -y graphicsmagick ghostscript
$STD apt-get install -y graphicsmagick ghostscript
fi
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
mkdir -p /etc/karakeep mkdir -p /etc/karakeep
mv /opt/karakeep/.env /etc/karakeep/karakeep.env mv /opt/karakeep/.env /etc/karakeep/karakeep.env
fi fi
rm -rf /opt/karakeep
msg_ok "Update prepared" msg_ok "Update prepared"
if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then
@@ -65,7 +62,7 @@ function update_script() {
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)" MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
msg_info "Updating ${APP}" msg_info "Updating Karakeep"
corepack enable corepack enable
export PUPPETEER_SKIP_DOWNLOAD="true" export PUPPETEER_SKIP_DOWNLOAD="true"
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true" export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
@@ -86,17 +83,18 @@ function update_script() {
$STD pnpm migrate $STD pnpm migrate
$STD pnpm store prune $STD pnpm store prune
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE}/" /etc/karakeep/karakeep.env sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE}/" /etc/karakeep/karakeep.env
msg_ok "Updated ${APP}" msg_ok "Updated Karakeep"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start karakeep-browser karakeep-workers karakeep-web systemctl start karakeep-browser karakeep-workers karakeep-web
msg_ok "Started Services" msg_ok "Started Services"
msg_info "Cleaning up" msg_info "Cleaning up"
$STD apt-get autoremove -y $STD apt autoremove -y
$STD apt-get autoclean -y $STD apt autoclean -y
$STD apt clean -y
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully!"
fi fi
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-8192}" var_ram="${var_ram:-8192}"
var_disk="${var_disk:-30}" var_disk="${var_disk:-30}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-0}" var_unprivileged="${var_unprivileged:-0}"
var_fuse="${var_fuse:-yes}" var_fuse="${var_fuse:-yes}"
var_tun="${var_tun:-yes}" var_tun="${var_tun:-yes}"
@@ -29,10 +29,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating LXC"
$STD apt-get update $STD apt update
$STD apt-get -y upgrade $STD apt -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated LXC"
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -28,9 +28,9 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then
msg_info "Stopping Keycloak" msg_info "Stopping Service"
systemctl stop keycloak systemctl stop keycloak
msg_ok "Stopped Keycloak" msg_ok "Stopped Service"
msg_info "Updating packages" msg_info "Updating packages"
$STD apt-get update $STD apt-get update
@@ -44,16 +44,16 @@ function update_script() {
fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz" fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
msg_info "Updating ${APP}" msg_info "Updating Keycloak"
cd /opt cd /opt
cp -a keycloak.old/conf/. keycloak/conf/ cp -a keycloak.old/conf/. keycloak/conf/
cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true
cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true
msg_ok "Updated ${APP} LXC" msg_ok "Updated Keycloak"
msg_info "Restarting Keycloak" msg_info "Restarting Service"
systemctl restart keycloak systemctl restart keycloak
msg_ok "Restarted Keycloak" msg_ok "Restarted Service"
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf keycloak.old rm -rf keycloak.old

View File

@@ -30,25 +30,13 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
if [[ "$CURRENT_PHP" != "8.4" ]]; then
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$STD apt-get update
$STD apt-get remove -y php"${CURRENT_PHP//./}"*
$STD apt-get install -y \
php8.4 composer \
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
libapache2-mod-php8.4
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
BACKUP_DIR="/opt/kimai_backup" setup_composer
if check_for_gh_release "koillection" "benjaminjonard/koillection"; then
BACKUP_DIR="/opt/kimai_backup"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Apache2" msg_info "Stopping Apache2"
systemctl stop apache2 systemctl stop apache2
msg_ok "Stopped Apache2" msg_ok "Stopped Apache2"
@@ -60,15 +48,9 @@ function update_script() {
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/" [ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
msg_ok "Backup completed" msg_ok "Backup completed"
msg_info "Updating ${APP} to ${RELEASE}" fetch_and_deploy_gh_release "kimai" "kimai/kimai"
trap "echo Unable to download release file for version ${RELEASE}; try again later" ERR
set -e msg_info "Updating Kimai"
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
$STD unzip "${RELEASE}".zip
set +e
trap - ERR
rm -rf /opt/kimai
mv kimai-"${RELEASE}" /opt/kimai
[ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/ [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
[ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/ [ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/ [ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
@@ -76,8 +58,7 @@ function update_script() {
cd /opt/kimai cd /opt/kimai
$STD composer install --no-dev --optimize-autoloader $STD composer install --no-dev --optimize-autoloader
$STD bin/console kimai:update $STD bin/console kimai:update
echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated Kimai"
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting Apache2" msg_info "Starting Apache2"
systemctl start apache2 systemctl start apache2
@@ -92,12 +73,9 @@ function update_script() {
msg_ok "Setup Permissions" msg_ok "Setup Permissions"
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf "${RELEASE}".zip
rm -rf "$BACKUP_DIR" rm -rf "$BACKUP_DIR"
msg_ok "Cleaned" msg_ok "Cleaned"
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

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -38,7 +38,7 @@ function update_script() {
fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection" fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
msg_info "Updating ${APP}" msg_info "Updating Koillection"
cd /opt/koillection cd /opt/koillection
cp -r /opt/koillection-backup/.env.local /opt/koillection cp -r /opt/koillection-backup/.env.local /opt/koillection
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/ cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
@@ -50,7 +50,7 @@ function update_script() {
$STD yarn install $STD yarn install
$STD yarn build $STD yarn build
chown -R www-data:www-data /opt/koillection/public/uploads chown -R www-data:www-data /opt/koillection/public/uploads
msg_ok "Updated $APP" msg_ok "Updated Koillection"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start apache2 systemctl start apache2
@@ -59,7 +59,7 @@ function update_script() {
msg_info "Cleaning up" msg_info "Cleaning up"
rm -r /opt/koillection-backup rm -r /opt/koillection-backup
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully!"
fi fi
exit exit
} }

View File

@@ -37,7 +37,7 @@ function update_script() {
cp /opt/kometa/config/config.yml /opt cp /opt/kometa/config/config.yml /opt
msg_ok "Backup completed" msg_ok "Backup completed"
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa" fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
msg_info "Updating Kometa" msg_info "Updating Kometa"
@@ -49,7 +49,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start kometa systemctl start kometa
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Update Successful" msg_ok "Update Successfully!"
fi fi
exit exit
} }

View File

@@ -39,7 +39,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start komga systemctl start komga
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated Successfully!"
fi fi
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" 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:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -29,7 +29,7 @@ function update_script() {
exit 1 exit 1
} }
msg_info "Updating ${APP}" msg_info "Updating Komodo"
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!"
@@ -61,7 +61,7 @@ function update_script() {
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 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 ${APP}" msg_ok "Updated Komodo"
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -37,7 +37,7 @@ function update_script() {
msg_info "Starting service" msg_info "Starting service"
systemctl start ipfs systemctl start ipfs
msg_ok "Service started" msg_ok "Service started"
msg_ok "Updated successfully" msg_ok "Updated successfully!"
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:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -20,18 +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 /usr/share/keyrings/mysql.gpg ]]; then if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit
} }
start start
@@ -41,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 IP:${CL}" echo -e "${INFO}${YW} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}" echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${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:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -20,18 +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/apt/sources.list.d/openmediavault.list ]]; then if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit exit
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Successfully"
exit
} }
start start
@@ -41,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

@@ -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:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.bunkerweb.io/latest/", "documentation": "https://docs.bunkerweb.io/latest/",
"website": "https://www.bunkerweb.io/", "website": "https://www.bunkerweb.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
"config_path": "/etc/bunkerweb/variables.env", "config_path": "/opt/bunkerweb/variables.env",
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.", "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -12,7 +12,7 @@
"documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md", "documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
"config_path": "/opt/guardian/.env", "config_path": "/opt/guardian/.env",
"website": "https://github.com/HydroshieldMKII/Guardian", "website": "https://github.com/HydroshieldMKII/Guardian",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/guardian-plex.webp", "logo": null,
"description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.", "description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -1,48 +1,48 @@
{ {
"name": "MySQL", "name": "MySQL",
"slug": "mysql", "slug": "mysql",
"categories": [ "categories": [
8 8
], ],
"date_created": "2024-10-10", "date_created": "2024-10-10",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": null, "interface_port": null,
"documentation": "https://dev.mysql.com/doc/", "documentation": "https://dev.mysql.com/doc/",
"website": "https://www.mysql.com/", "website": "https://www.mysql.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
"config_path": "", "config_path": "",
"description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.", "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/mysql.sh", "script": "ct/mysql.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
},
"notes": [
{
"text": "Database credentials: `cat mysql.creds`",
"type": "info"
}, },
{ "notes": [
"text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0", {
"type": "info" "text": "Database credentials: `cat mysql.creds`",
}, "type": "info"
{ },
"text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.", {
"type": "info" "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
} "type": "info"
] },
{
"text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
"type": "info"
}
]
} }

View File

@@ -23,7 +23,7 @@
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@@ -23,7 +23,7 @@
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@@ -1,178 +1,8 @@
[ [
{ {
"name": "mongodb/mongo", "name": "duplicati/duplicati",
"version": "r7.0.26-rc0", "version": "v2.2.0.0-2.2.0.0_stable_2025-10-23",
"date": "2025-10-24T22:33:52Z" "date": "2025-10-23T11:25:25Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.5.2",
"date": "2025-10-24T21:42:54Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.3",
"date": "2025-10-24T21:21:10Z"
},
{
"name": "home-assistant/core",
"version": "2025.10.4",
"date": "2025-10-24T20:03:03Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.43.0",
"date": "2025-10-24T19:16:05Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.30",
"date": "2025-10-24T18:41:49Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.90.2",
"date": "2025-10-24T18:02:03Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.0.2",
"date": "2025-10-24T17:55:28Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.9.0",
"date": "2025-10-24T17:44:24Z"
},
{
"name": "verdaccio/verdaccio",
"version": "v6.2.1",
"date": "2025-10-24T15:40:49Z"
},
{
"name": "usememos/memos",
"version": "v0.25.2",
"date": "2025-10-24T12:30:04Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.14.0",
"date": "2025-10-24T11:59:09Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.116.2",
"date": "2025-10-21T11:39:58Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.5",
"date": "2025-10-24T11:12:22Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.6.3",
"date": "2025-10-24T11:08:15Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.3",
"date": "2025-10-24T10:51:12Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.s3-snapshots-3",
"date": "2025-10-24T09:47:47Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.4",
"date": "2025-10-24T06:43:49Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.179",
"date": "2025-10-24T05:54:44Z"
},
{
"name": "inventree/InvenTree",
"version": "1.0.8",
"date": "2025-10-24T05:32:09Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.31.0",
"date": "2025-10-24T04:07:27Z"
},
{
"name": "esphome/esphome",
"version": "2025.10.3",
"date": "2025-10-24T01:08:22Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-24T00:27:06Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "documenso/documenso",
"version": "v1.13.1",
"date": "2025-10-23T23:52:45Z"
},
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.4.0",
"date": "2025-10-23T21:12:48Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.10.6",
"date": "2025-10-23T20:20:21Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.14.0",
"date": "2025-10-23T17:45:30Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.2",
"date": "2025-10-23T17:23:27Z"
},
{
"name": "drakkan/sftpgo",
"version": "v2.7.0",
"date": "2025-10-23T17:15:07Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.4.0",
"date": "2025-10-16T07:20:34Z"
},
{
"name": "TwiN/gatus",
"version": "v5.28.0",
"date": "2025-10-23T16:16:04Z"
},
{
"name": "juanfont/headscale",
"version": "v0.26.1",
"date": "2025-06-06T11:22:02Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.41.5",
"date": "2025-10-23T15:12:42Z"
}, },
{ {
"name": "keycloak/keycloak", "name": "keycloak/keycloak",
@@ -180,24 +10,24 @@
"date": "2025-10-23T06:59:32Z" "date": "2025-10-23T06:59:32Z"
}, },
{ {
"name": "AdguardTeam/AdGuardHome", "name": "Jackett/Jackett",
"version": "v0.107.68", "version": "v0.24.175",
"date": "2025-10-23T14:26:29Z" "date": "2025-10-23T05:50:23Z"
},
{
"name": "Kareadita/Kavita",
"version": "v0.8.8.3",
"date": "2025-10-23T12:31:49Z"
}, },
{ {
"name": "YunoHost/yunohost", "name": "YunoHost/yunohost",
"version": "debian/12.1.32", "version": "debian/12.1.31",
"date": "2025-10-23T12:30:33Z" "date": "2025-10-23T00:45:04Z"
}, },
{ {
"name": "duplicati/duplicati", "name": "jeedom/core",
"version": "v2.2.0.0_stable_2025-10-23", "version": "4.4.20",
"date": "2025-10-23T11:48:25Z" "date": "2025-10-23T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
}, },
{ {
"name": "BerriAI/litellm", "name": "BerriAI/litellm",
@@ -209,11 +39,21 @@
"version": "v0.9.99", "version": "v0.9.99",
"date": "2025-10-22T22:20:33Z" "date": "2025-10-22T22:20:33Z"
}, },
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.4",
"date": "2025-10-22T21:23:17Z"
},
{ {
"name": "moghtech/komodo", "name": "moghtech/komodo",
"version": "v1.19.5", "version": "v1.19.5",
"date": "2025-09-27T20:59:46Z" "date": "2025-09-27T20:59:46Z"
}, },
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.1",
"date": "2025-10-22T20:40:07Z"
},
{ {
"name": "rcourtman/Pulse", "name": "rcourtman/Pulse",
"version": "issue-596", "version": "issue-596",
@@ -274,26 +114,56 @@
"version": "v1.5.3", "version": "v1.5.3",
"date": "2025-09-20T12:12:33Z" "date": "2025-09-20T12:12:33Z"
}, },
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@16.0.1",
"date": "2025-10-22T05:44:06Z"
},
{ {
"name": "chrisbenincasa/tunarr", "name": "chrisbenincasa/tunarr",
"version": "v0.23.0-alpha.17", "version": "v0.23.0-alpha.17",
"date": "2025-10-22T00:33:47Z" "date": "2025-10-22T00:33:47Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.30.0",
"date": "2025-10-21T21:37:52Z"
},
{ {
"name": "bluenviron/mediamtx", "name": "bluenviron/mediamtx",
"version": "v1.15.3", "version": "v1.15.3",
"date": "2025-10-21T19:56:55Z" "date": "2025-10-21T19:56:55Z"
}, },
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.28",
"date": "2025-10-21T19:51:28Z"
},
{
"name": "mongodb/mongo",
"version": "r8.0.15",
"date": "2025-10-21T19:03:20Z"
},
{ {
"name": "jenkinsci/jenkins", "name": "jenkinsci/jenkins",
"version": "jenkins-2.533", "version": "jenkins-2.533",
"date": "2025-10-21T18:26:10Z" "date": "2025-10-21T18:26:10Z"
}, },
{
"name": "TwiN/gatus",
"version": "v5.27.2",
"date": "2025-10-21T18:03:22Z"
},
{ {
"name": "kyantech/Palmr", "name": "kyantech/Palmr",
"version": "v3.2.5-beta", "version": "v3.2.5-beta",
"date": "2025-10-21T16:49:14Z" "date": "2025-10-21T16:49:14Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.116.2",
"date": "2025-10-21T11:39:58Z"
},
{ {
"name": "element-hq/synapse", "name": "element-hq/synapse",
"version": "v1.140.0", "version": "v1.140.0",
@@ -304,11 +174,21 @@
"version": "v12.2.1", "version": "v12.2.1",
"date": "2025-10-21T14:40:19Z" "date": "2025-10-21T14:40:19Z"
}, },
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.2",
"date": "2025-10-21T14:36:48Z"
},
{ {
"name": "laurent22/joplin", "name": "laurent22/joplin",
"version": "server-v3.4.4", "version": "server-v3.4.4",
"date": "2025-09-25T13:19:26Z" "date": "2025-09-25T13:19:26Z"
}, },
{
"name": "wazuh/wazuh",
"version": "v4.14.0",
"date": "2025-10-21T13:39:55Z"
},
{ {
"name": "goauthentik/authentik", "name": "goauthentik/authentik",
"version": "version/2025.10.0-rc2", "version": "version/2025.10.0-rc2",
@@ -339,16 +219,31 @@
"version": "pmm-6401-v1.128.0", "version": "pmm-6401-v1.128.0",
"date": "2025-10-21T08:30:52Z" "date": "2025-10-21T08:30:52Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.ignore-embedding-failures-2",
"date": "2025-10-21T07:36:22Z"
},
{ {
"name": "openobserve/openobserve", "name": "openobserve/openobserve",
"version": "v0.16.0-rc1", "version": "v0.16.0-rc1",
"date": "2025-10-21T00:37:47Z" "date": "2025-10-21T00:37:47Z"
}, },
{
"name": "documenso/documenso",
"version": "v1.13.0",
"date": "2025-10-21T00:21:04Z"
},
{ {
"name": "henrygd/beszel", "name": "henrygd/beszel",
"version": "v0.14.1", "version": "v0.14.1",
"date": "2025-10-20T22:10:56Z" "date": "2025-10-20T22:10:56Z"
}, },
{
"name": "booklore-app/booklore",
"version": "v1.8.1",
"date": "2025-10-20T20:53:56Z"
},
{ {
"name": "coder/code-server", "name": "coder/code-server",
"version": "v4.105.1", "version": "v4.105.1",
@@ -364,6 +259,11 @@
"version": "4.9.1.80", "version": "4.9.1.80",
"date": "2025-09-30T20:25:16Z" "date": "2025-09-30T20:25:16Z"
}, },
{
"name": "tailscale/tailscale",
"version": "v1.91.0-pre",
"date": "2025-10-20T16:18:51Z"
},
{ {
"name": "rclone/rclone", "name": "rclone/rclone",
"version": "v1.71.2", "version": "v1.71.2",
@@ -374,11 +274,26 @@
"version": "7.0.0-rc.1", "version": "7.0.0-rc.1",
"date": "2025-10-20T11:53:31Z" "date": "2025-10-20T11:53:31Z"
}, },
{
"name": "Kareadita/Kavita",
"version": "v0.8.8",
"date": "2025-10-20T11:26:24Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.10.4",
"date": "2025-10-20T10:45:54Z"
},
{ {
"name": "jupyter/notebook", "name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-beta.1", "version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
"date": "2025-10-20T07:01:38Z" "date": "2025-10-20T07:01:38Z"
}, },
{
"name": "inventree/InvenTree",
"version": "1.0.7",
"date": "2025-10-20T05:23:10Z"
},
{ {
"name": "firefly-iii/firefly-iii", "name": "firefly-iii/firefly-iii",
"version": "v6.4.2", "version": "v6.4.2",
@@ -389,6 +304,11 @@
"version": "v10.11.0", "version": "v10.11.0",
"date": "2025-10-20T00:45:19Z" "date": "2025-10-20T00:45:19Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.10.2",
"date": "2025-10-20T00:42:57Z"
},
{ {
"name": "pelican-dev/panel", "name": "pelican-dev/panel",
"version": "v1.0.0-beta27", "version": "v1.0.0-beta27",
@@ -399,6 +319,11 @@
"version": "5.2.3", "version": "5.2.3",
"date": "2025-10-19T20:50:15Z" "date": "2025-10-19T20:50:15Z"
}, },
{
"name": "verdaccio/verdaccio",
"version": "generator-verdaccio-plugin@6.0.0-next-8.24",
"date": "2025-10-19T19:43:46Z"
},
{ {
"name": "Part-DB/Part-DB-server", "name": "Part-DB/Part-DB-server",
"version": "v2.2.1", "version": "v2.2.1",
@@ -419,6 +344,11 @@
"version": "v2.14.5.4836", "version": "v2.14.5.4836",
"date": "2025-10-08T15:30:50Z" "date": "2025-10-08T15:30:50Z"
}, },
{
"name": "Luligu/matterbridge",
"version": "3.3.3",
"date": "2025-10-18T22:27:42Z"
},
{ {
"name": "ellite/Wallos", "name": "ellite/Wallos",
"version": "v4.5.0", "version": "v4.5.0",
@@ -434,6 +364,11 @@
"version": "v2.1.10", "version": "v2.1.10",
"date": "2025-10-18T18:46:36Z" "date": "2025-10-18T18:46:36Z"
}, },
{
"name": "homarr-labs/homarr",
"version": "v1.42.1",
"date": "2025-10-18T18:31:38Z"
},
{ {
"name": "Notifiarr/notifiarr", "name": "Notifiarr/notifiarr",
"version": "v0.9.0", "version": "v0.9.0",
@@ -454,6 +389,11 @@
"version": "v13.0.9", "version": "v13.0.9",
"date": "2025-10-18T09:59:25Z" "date": "2025-10-18T09:59:25Z"
}, },
{
"name": "runtipi/runtipi",
"version": "v4.5.1",
"date": "2025-10-18T08:12:19Z"
},
{ {
"name": "nzbgetcom/nzbget", "name": "nzbgetcom/nzbget",
"version": "v25.4", "version": "v25.4",
@@ -464,6 +404,11 @@
"version": "v1.19.17", "version": "v1.19.17",
"date": "2025-10-17T23:40:02Z" "date": "2025-10-17T23:40:02Z"
}, },
{
"name": "home-assistant/core",
"version": "2025.10.3",
"date": "2025-10-17T21:15:07Z"
},
{ {
"name": "forgejo/forgejo", "name": "forgejo/forgejo",
"version": "v13.0.1", "version": "v13.0.1",
@@ -489,6 +434,16 @@
"version": "v11.5.2", "version": "v11.5.2",
"date": "2025-10-17T08:20:13Z" "date": "2025-10-17T08:20:13Z"
}, },
{
"name": "pocketbase/pocketbase",
"version": "v0.30.4",
"date": "2025-10-17T08:03:10Z"
},
{
"name": "juanfont/headscale",
"version": "v0.26.1",
"date": "2025-06-06T11:22:02Z"
},
{ {
"name": "diced/zipline", "name": "diced/zipline",
"version": "v4.3.2", "version": "v4.3.2",
@@ -506,8 +461,8 @@
}, },
{ {
"name": "ollama/ollama", "name": "ollama/ollama",
"version": "v0.12.6-rc1", "version": "v0.12.6",
"date": "2025-10-16T16:36:25Z" "date": "2025-10-16T20:07:41Z"
}, },
{ {
"name": "minio/minio", "name": "minio/minio",
@@ -524,6 +479,11 @@
"version": "v3.2.8", "version": "v3.2.8",
"date": "2025-10-16T14:21:48Z" "date": "2025-10-16T14:21:48Z"
}, },
{
"name": "zitadel/zitadel",
"version": "v4.4.0",
"date": "2025-10-16T07:20:34Z"
},
{ {
"name": "cloudreve/cloudreve", "name": "cloudreve/cloudreve",
"version": "4.9.2", "version": "4.9.2",
@@ -729,6 +689,11 @@
"version": "v1.68.0", "version": "v1.68.0",
"date": "2025-10-08T18:33:12Z" "date": "2025-10-08T18:33:12Z"
}, },
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.67",
"date": "2025-09-29T14:45:57Z"
},
{ {
"name": "advplyr/audiobookshelf", "name": "advplyr/audiobookshelf",
"version": "v2.30.0", "version": "v2.30.0",
@@ -759,6 +724,11 @@
"version": "v0.15.1", "version": "v0.15.1",
"date": "2025-10-07T20:30:56Z" "date": "2025-10-07T20:30:56Z"
}, },
{
"name": "pocket-id/pocket-id",
"version": "v1.13.1",
"date": "2025-10-07T06:32:50Z"
},
{ {
"name": "sassanix/Warracker", "name": "sassanix/Warracker",
"version": "0.10.1.14", "version": "0.10.1.14",
@@ -779,11 +749,6 @@
"version": "v1.6.5", "version": "v1.6.5",
"date": "2025-10-06T15:25:17Z" "date": "2025-10-06T15:25:17Z"
}, },
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-7.6.36",
"date": "2025-10-06T15:19:49Z"
},
{ {
"name": "bastienwirtz/homer", "name": "bastienwirtz/homer",
"version": "v25.10.1", "version": "v25.10.1",
@@ -834,6 +799,11 @@
"version": "v3.5.7.pypi", "version": "v3.5.7.pypi",
"date": "2025-10-01T05:32:27Z" "date": "2025-10-01T05:32:27Z"
}, },
{
"name": "HabitRPG/habitica",
"version": "v5.41.4",
"date": "2025-09-30T22:26:11Z"
},
{ {
"name": "WordPress/WordPress", "name": "WordPress/WordPress",
"version": "4.7.31", "version": "4.7.31",
@@ -854,6 +824,16 @@
"version": "v1.11.1", "version": "v1.11.1",
"date": "2025-09-30T00:24:16Z" "date": "2025-09-30T00:24:16Z"
}, },
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.3.3",
"date": "2025-09-29T18:53:35Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
},
{ {
"name": "MDeLuise/plant-it", "name": "MDeLuise/plant-it",
"version": "1.0.0", "version": "1.0.0",
@@ -914,6 +894,11 @@
"version": "2025.09.24", "version": "2025.09.24",
"date": "2025-09-24T13:51:23Z" "date": "2025-09-24T13:51:23Z"
}, },
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-8.4.7",
"date": "2025-09-24T12:23:38Z"
},
{ {
"name": "syncthing/syncthing", "name": "syncthing/syncthing",
"version": "v2.0.10", "version": "v2.0.10",
@@ -1004,6 +989,11 @@
"version": "v2.7.6", "version": "v2.7.6",
"date": "2025-09-15T15:50:44Z" "date": "2025-09-15T15:50:44Z"
}, },
{
"name": "usememos/memos",
"version": "v0.25.1",
"date": "2025-09-15T14:57:30Z"
},
{ {
"name": "karakeep-app/karakeep", "name": "karakeep-app/karakeep",
"version": "cli/v0.27.1", "version": "cli/v0.27.1",
@@ -1189,6 +1179,11 @@
"version": "1.34.3", "version": "1.34.3",
"date": "2025-07-30T09:10:59Z" "date": "2025-07-30T09:10:59Z"
}, },
{
"name": "OliveTin/OliveTin",
"version": "2025.7.29",
"date": "2025-07-29T22:20:13Z"
},
{ {
"name": "caddyserver/xcaddy", "name": "caddyserver/xcaddy",
"version": "v0.4.5", "version": "v0.4.5",
@@ -1449,6 +1444,11 @@
"version": "v1.11.2", "version": "v1.11.2",
"date": "2025-02-24T19:47:06Z" "date": "2025-02-24T19:47:06Z"
}, },
{
"name": "drakkan/sftpgo",
"version": "v2.6.6",
"date": "2025-02-24T19:14:46Z"
},
{ {
"name": "babybuddy/babybuddy", "name": "babybuddy/babybuddy",
"version": "v2.7.1", "version": "v2.7.1",

View File

@@ -14,40 +14,25 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt install -y \
apt-transport-https \ apt-transport-https \
apache2 \ apache2 \
git \ git \
expect \ expect
composer \
lsb-release
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
setup_mysql setup_mariadb
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
msg_info "Adding PHP8.4 Repository" setup_composer
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$STD apt-get update
msg_ok "Added PHP8.4 Repository"
msg_info "Installing PHP"
$STD apt-get remove -y php8.2*
$STD apt-get install -y \
php8.4 \
php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
libapache2-mod-php8.4
msg_ok "Installed PHP"
msg_info "Setting up database" msg_info "Setting up database"
DB_NAME=kimai_db DB_NAME=kimai_db
DB_USER=kimai DB_USER=kimai
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
MYSQL_VERSION=$(mysql --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') MYSQL_VERSION=$(mariadb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;" $STD mariadb -e "CREATE DATABASE $DB_NAME;"
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" $STD mariadb -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" $STD mariadb -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{ {
echo "Kimai-Credentials" echo "Kimai-Credentials"
echo "Kimai Database User: $DB_USER" echo "Kimai Database User: $DB_USER"
@@ -56,11 +41,9 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
} >>~/kimai.creds } >>~/kimai.creds
msg_ok "Set up database" msg_ok "Set up database"
msg_info "Installing Kimai (Patience)" fetch_and_deploy_gh_release "kimai" "kimai/kimai"
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}".zip msg_info "Setup Kimai"
$STD unzip "${RELEASE}".zip
mv kimai-"${RELEASE}" /opt/kimai
cd /opt/kimai cd /opt/kimai
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
source ~/.bashrc source ~/.bashrc
@@ -92,8 +75,6 @@ admin_lte:
options: options:
default_avatar: build/apple-touch-icon.png default_avatar: build/apple-touch-icon.png
EOF EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Kimai" msg_ok "Installed Kimai"
msg_info "Creating Service" msg_info "Creating Service"
@@ -131,6 +112,7 @@ customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf "${RELEASE}".zip rm -rf "${RELEASE}".zip
$STD apt-get -y autoremove $STD apt -y autoremove
$STD apt-get -y autoclean $STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -63,7 +63,27 @@ msg_ok "MySQL Server configured"
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)" msg_info "Installing phpMyAdmin"
$STD apt install -y \
apache2 \
php \
php-mysqli \
php-mbstring \
php-zip \
php-gd \
php-json \
php-curl
curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz"
mkdir -p /var/www/html/phpMyAdmin
tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
SECRET=$(openssl rand -base64 24)
sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php
chmod 660 /var/www/html/phpMyAdmin/config.inc.php
chown -R www-data:www-data /var/www/html/phpMyAdmin
systemctl restart apache2
msg_ok "Installed phpMyAdmin"
fi fi
msg_info "Start Service" msg_info "Start Service"

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y \
apache2-utils \ apache2-utils \
python3-pip \ python3-pip \
python3-venv python3.11-venv
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Radicale" msg_info "Setting up Radicale"

View File

@@ -1141,7 +1141,7 @@ function fetch_and_deploy_gh_release() {
rm -rf "${target:?}/"* rm -rf "${target:?}/"*
fi fi
tar --no-same-owner -xzf "$tmpdir/$filename" -C "$tmpdir" || { tar --no-same-owner -xzf "$tmpdir/$filename" -C "$tmpdir" || {
msg_error "Failed to extract tarball" msg_error "Failed to extract tarball"
rm -rf "$tmpdir" rm -rf "$tmpdir"
return 1 return 1