Compare commits

..

8 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
community-scripts-pr-app[bot]
99617f265a Update CHANGELOG.md (#8596)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 13:46:59 +00:00
CanbiZ
1fe00c2493 Refactor: Kavita + Updated tools.func (no-same-owner) (#8594) 2025-10-23 15:46:28 +02:00
community-scripts-pr-app[bot]
05fd03d160 Update versions.json (#8592)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 14:05:51 +02:00
community-scripts-pr-app[bot]
e837ebb0e5 Update CHANGELOG.md (#8591)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 11:11:51 +00:00
Slaviša Arežina
8e1a9ffb07 MeTube: Fix inserting path into .bashrc (#8589)
* Fixes

* Update

* Update
2025-10-23 04:11:22 -07:00
community-scripts-pr-app[bot]
af991286dc Update CHANGELOG.md (#8590)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 11:06:45 +00:00
CanbiZ
c1205691e7 tools.func: update update_check messages for clarity (#8588)
* Update update check messages for clarity

* Change message for no update available case
2025-10-23 13:06:13 +02:00
25 changed files with 201 additions and 226 deletions

View File

@@ -12,6 +12,17 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
## 2025-10-23 ## 2025-10-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
- #### 🔧 Refactor
- Refactor: Kavita + Updated tools.func (no-same-owner) [@MickLesk](https://github.com/MickLesk) ([#8594](https://github.com/community-scripts/ProxmoxVE/pull/8594))
- tools.func: update update_check messages for clarity [@MickLesk](https://github.com/MickLesk) ([#8588](https://github.com/community-scripts/ProxmoxVE/pull/8588))
## 2025-10-22 ## 2025-10-22
### 🚀 Updated Scripts ### 🚀 Updated Scripts

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"
@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt-get update $STD apt update
$STD apt-get -y upgrade $STD apt -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
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,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"

View File

@@ -28,24 +28,24 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "Jackett" "Jackett/Jackett"; then
if [ ! -f /opt/.env ]; then if [ ! -f /opt/.env ]; then
sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
cat <<EOF >/opt/.env 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"
@@ -27,10 +27,14 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC"
$STD apt-get update JAVA_VERSION="21" setup_java
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_info "Updating Jenkings"
$STD apt update
$STD apt -y upgrade
msg_ok "Updated Jenkins"
msg_ok "Update Successfully!"
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:-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:-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"
@@ -27,15 +27,20 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC"
if check_for_gh_release "kavita" "Kareadita/Kavita"; then
msg_info "Stopping Service"
systemctl stop kavita systemctl stop kavita
RELEASE=$(curl -fsSL https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') msg_ok "Service Stopped"
$STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner
rm -rf Kavita/config fetch_and_deploy_gh_release "kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz"
cp -r Kavita/* /opt/Kavita chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita
rm -rf Kavita
msg_info "Starting Service"
systemctl start kavita systemctl start kavita
msg_ok "Updated $APP LXC" msg_ok "Service Started"
msg_ok "Update Successfully!"
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:-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
setup_composer
if check_for_gh_release "koillection" "benjaminjonard/koillection"; then
BACKUP_DIR="/opt/kimai_backup" 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

@@ -30,7 +30,7 @@ function update_script() {
fi fi
if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc
source ~/.bashrc source ~/.bashrc
if ! command -v deno &>/dev/null; then if ! command -v deno &>/dev/null; then
export DENO_INSTALL="/usr/local" export DENO_INSTALL="/usr/local"
@@ -110,6 +110,7 @@ EOF
msg_ok "Updated Successfully!" msg_ok "Updated Successfully!"
fi fi
exit
} }
start start

View File

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

View File

@@ -1,4 +1,34 @@
[ [
{
"name": "duplicati/duplicati",
"version": "v2.2.0.0-2.2.0.0_stable_2025-10-23",
"date": "2025-10-23T11:25:25Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.2",
"date": "2025-10-23T06:59:32Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.175",
"date": "2025-10-23T05:50:23Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.31",
"date": "2025-10-23T00:45:04Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"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",
"version": "v1.78.7-nightly", "version": "v1.78.7-nightly",
@@ -9,11 +39,6 @@
"version": "v0.9.99", "version": "v0.9.99",
"date": "2025-10-22T22:20:33Z" "date": "2025-10-22T22:20:33Z"
}, },
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.30",
"date": "2025-10-22T22:18:18Z"
},
{ {
"name": "sabnzbd/sabnzbd", "name": "sabnzbd/sabnzbd",
"version": "4.5.4", "version": "4.5.4",
@@ -89,11 +114,6 @@
"version": "v1.5.3", "version": "v1.5.3",
"date": "2025-09-20T12:12:33Z" "date": "2025-09-20T12:12:33Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.24.170",
"date": "2025-10-22T05:55:43Z"
},
{ {
"name": "fuma-nama/fumadocs", "name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@16.0.1", "version": "create-fumadocs-app@16.0.1",
@@ -104,26 +124,11 @@
"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": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-22T00:27:04Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{ {
"name": "msgbyte/tianji", "name": "msgbyte/tianji",
"version": "v1.30.0", "version": "v1.30.0",
"date": "2025-10-21T21:37:52Z" "date": "2025-10-21T21:37:52Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.4.1",
"date": "2025-10-16T07:21:53Z"
},
{ {
"name": "bluenviron/mediamtx", "name": "bluenviron/mediamtx",
"version": "v1.15.3", "version": "v1.15.3",
@@ -179,6 +184,11 @@
"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",
@@ -419,11 +429,6 @@
"version": "5.26.14", "version": "5.26.14",
"date": "2025-10-17T12:38:22Z" "date": "2025-10-17T12:38:22Z"
}, },
{
"name": "wazuh/wazuh",
"version": "coverity-w43-4.14.0",
"date": "2025-10-17T09:07:27Z"
},
{ {
"name": "zwave-js/zwave-js-ui", "name": "zwave-js/zwave-js-ui",
"version": "v11.5.2", "version": "v11.5.2",
@@ -599,11 +604,6 @@
"version": "v0.10.4", "version": "v0.10.4",
"date": "2025-10-11T19:53:39Z" "date": "2025-10-11T19:53:39Z"
}, },
{
"name": "duplicati/duplicati",
"version": "v2.1.2.3-2.1.2.3_beta_2025-10-11",
"date": "2025-10-11T06:49:43Z"
},
{ {
"name": "0xERR0R/blocky", "name": "0xERR0R/blocky",
"version": "v0.27.0", "version": "v0.27.0",

View File

@@ -13,15 +13,11 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Kavita" fetch_and_deploy_gh_release "Kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
$STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner
msg_ok "Installed Kavita"
msg_info "Creating Service" msg_info "Creating Service"
service_path="/etc/systemd/system/kavita.service" cat <<EOF >/etc/systemd/system/kavita.service
echo "[Unit] [Unit]
Description=Kavita Server Description=Kavita Server
After=network.target After=network.target
@@ -34,15 +30,17 @@ KillMode=process
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=multi-user.target" >$service_path WantedBy=multi-user.target
chmod +x /opt/Kavita/* && chown root /opt/Kavita/* EOF
systemctl enable --now -q kavita.service chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita
systemctl enable -q --now kavita
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
$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

@@ -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

@@ -33,7 +33,7 @@ msg_info "Installing Deno"
export DENO_INSTALL="/usr/local" export DENO_INSTALL="/usr/local"
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
[[ ":$PATH:" != *":/usr/local/bin:"* ]] && [[ ":$PATH:" != *":/usr/local/bin:"* ]] &&
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc && echo -e "\nexport PATH=\"/usr/local/bin:\$PATH\"" >>~/.bashrc &&
source ~/.bashrc source ~/.bashrc
msg_ok "Installed Deno" msg_ok "Installed Deno"

View File

@@ -901,22 +901,22 @@ check_for_gh_release() {
if [[ "$current" != "$pin_clean" ]]; then if [[ "$current" != "$pin_clean" ]]; then
CHECK_UPDATE_RELEASE="$match_raw" CHECK_UPDATE_RELEASE="$match_raw"
msg_ok "Checking for update: ${app}" msg_ok "Update available: ${app} ${current:-not installed}${pin_clean}"
return 0 return 0
fi fi
msg_ok "Checking for update: ${app}" msg_error "No update available: ${app} is not installed!"
return 1 return 1
fi fi
# No pinning → use latest # No pinning → use latest
if [[ -z "$current" || "$current" != "$latest_clean" ]]; then if [[ -z "$current" || "$current" != "$latest_clean" ]]; then
CHECK_UPDATE_RELEASE="$latest_raw" CHECK_UPDATE_RELEASE="$latest_raw"
msg_ok "Checking for update: ${app}" msg_ok "Update available: ${app} ${current:-not installed}${latest_clean}"
return 0 return 0
fi fi
msg_ok "Checking for update: ${app}" msg_ok "No update available: ${app} (${latest_clean})"
return 1 return 1
} }
@@ -1141,7 +1141,7 @@ function fetch_and_deploy_gh_release() {
rm -rf "${target:?}/"* rm -rf "${target:?}/"*
fi fi
tar -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
@@ -1263,7 +1263,7 @@ function fetch_and_deploy_gh_release() {
return 1 return 1
} }
elif [[ "$filename" == *.tar.* || "$filename" == *.tgz ]]; then elif [[ "$filename" == *.tar.* || "$filename" == *.tgz ]]; then
tar -xf "$tmpdir/$filename" -C "$unpack_tmp" || { tar --no-same-owner -xf "$tmpdir/$filename" -C "$unpack_tmp" || {
msg_error "Failed to extract TAR archive" msg_error "Failed to extract TAR archive"
rm -rf "$tmpdir" "$unpack_tmp" rm -rf "$tmpdir" "$unpack_tmp"
return 1 return 1