Merge remote-tracking branch 'upstream/main'

This commit is contained in:
Sam Heinz
2025-06-24 21:42:22 +10:00
38 changed files with 802 additions and 447 deletions
+56
View File
@@ -14,8 +14,64 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-06-24
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update all Alpine Scripts to atleast 1GB HDD [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5418](https://github.com/community-scripts/ProxmoxVE/pull/5418))
- #### ✨ New Features
- [core]: Improve GitHub release fetch robustness with split timeouts and retry logic [@MickLesk](https://github.com/MickLesk) ([#5422](https://github.com/community-scripts/ProxmoxVE/pull/5422))
- Minio: use latest version or latest feature rich version [@MickLesk](https://github.com/MickLesk) ([#5423](https://github.com/community-scripts/ProxmoxVE/pull/5423))
- #### 🔧 Refactor
- Refactor: MeTube to uv based install [@MickLesk](https://github.com/MickLesk) ([#5411](https://github.com/community-scripts/ProxmoxVE/pull/5411))
- Refactor: Prometheus PVE Exporter to uv based install [@MickLesk](https://github.com/MickLesk) ([#5412](https://github.com/community-scripts/ProxmoxVE/pull/5412))
- Refactor: ESPHome to uv based install [@MickLesk](https://github.com/MickLesk) ([#5413](https://github.com/community-scripts/ProxmoxVE/pull/5413))
## 2025-06-23
### 🆕 New Scripts
- Alpine-Forgejo by @Johann3s-H [@MickLesk](https://github.com/MickLesk) ([#5396](https://github.com/community-scripts/ProxmoxVE/pull/5396))
### 🚀 Updated Scripts
- [core]: tools.func -> autoupdate npm to newest version on install [@MickLesk](https://github.com/MickLesk) ([#5397](https://github.com/community-scripts/ProxmoxVE/pull/5397))
- #### 🐞 Bug Fixes
- PLANKA: Fix the update procedure [@tremor021](https://github.com/tremor021) ([#5391](https://github.com/community-scripts/ProxmoxVE/pull/5391))
- changed trilium github repo [@miggi92](https://github.com/miggi92) ([#5390](https://github.com/community-scripts/ProxmoxVE/pull/5390))
- changedetection: fix: hermetic msedge [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5388](https://github.com/community-scripts/ProxmoxVE/pull/5388))
### 🌐 Website
- #### 📝 Script Information
- MariaDB: Add information about Adminer on website [@tremor021](https://github.com/tremor021) ([#5400](https://github.com/community-scripts/ProxmoxVE/pull/5400))
## 2025-06-22 ## 2025-06-22
### 🚀 Updated Scripts
- [core]: fix timing issues while template update & timezone setup at create new LXC [@MickLesk](https://github.com/MickLesk) ([#5358](https://github.com/community-scripts/ProxmoxVE/pull/5358))
- alpine: increase hdd to 1gb [@MickLesk](https://github.com/MickLesk) ([#5377](https://github.com/community-scripts/ProxmoxVE/pull/5377))
- #### 🐞 Bug Fixes
- fix: casing and naming error after #5254 [@GoetzGoerisch](https://github.com/GoetzGoerisch) ([#5380](https://github.com/community-scripts/ProxmoxVE/pull/5380))
- fix: install_adminer > setup_adminer [@MickLesk](https://github.com/MickLesk) ([#5356](https://github.com/community-scripts/ProxmoxVE/pull/5356))
- gitea: Update gitea.sh to stop update failures [@tystuyfzand](https://github.com/tystuyfzand) ([#5361](https://github.com/community-scripts/ProxmoxVE/pull/5361))
- #### 🔧 Refactor
- Immich: unpin release; use fetch & deploy function for update [@vhsdream](https://github.com/vhsdream) ([#5355](https://github.com/community-scripts/ProxmoxVE/pull/5355))
## 2025-06-21 ## 2025-06-21
## 2025-06-20 ## 2025-06-20
+45
View File
@@ -0,0 +1,45 @@
#!/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: Johann3s-H (An!ma)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://forgejo.org/
APP="Alpine-Forgejo"
var_tags="${var_tags:-alpine;git}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating Forgejo"
$STD apk upgrade forgejo
msg_ok "Updated Forgejo"
msg_info "Restarting Forgejo"
$STD rc-service forgejo restart
msg_ok "Restarted Forgejo"
exit 0
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
+1 -1
View File
@@ -9,7 +9,7 @@ APP="Alpine-IT-Tools"
var_tags="${var_tags:-alpine;development}" var_tags="${var_tags:-alpine;development}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}" var_ram="${var_ram:-256}"
var_disk="${var_disk:-0.5}" var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}" var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}" var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
+1 -1
View File
@@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/mis
APP="Alpine-Zigbee2MQTT" APP="Alpine-Zigbee2MQTT"
var_tags="${var_tags:-alpine;zigbee;mqtt;smarthome}" var_tags="${var_tags:-alpine;zigbee;mqtt;smarthome}"
var_disk="${var_disk:-0.3}" var_disk="${var_disk:-1}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}" var_ram="${var_ram:-256}"
var_os="${var_os:-alpine}" var_os="${var_os:-alpine}"
+1 -1
View File
@@ -9,7 +9,7 @@ APP="Alpine"
var_tags="${var_tags:-os;alpine}" var_tags="${var_tags:-os;alpine}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-0.5}" var_disk="${var_disk:-1}"
var_os="${var_os:-alpine}" var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}" var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
+2 -1
View File
@@ -52,7 +52,8 @@ function update_script() {
$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 chromium firefox webkit 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 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
+45 -10
View File
@@ -25,22 +25,57 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
msg_info "Stopping ESPHome"
msg_info "Stopping ${APP}"
systemctl stop esphomeDashboard systemctl stop esphomeDashboard
msg_ok "Stopped ESPHome" msg_ok "Stopped ${APP}"
msg_info "Updating ESPHome" VENV_PATH="/opt/esphome/.venv"
if [[ -d /srv/esphome ]]; then ESPHOME_BIN="${VENV_PATH}/bin/esphome"
$STD source /srv/esphome/bin/activate export PYTHON_VERSION="3.12"
if [[ ! -d "$VENV_PATH" || ! -x "$ESPHOME_BIN" ]]; then
PYTHON_VERSION="3.12" setup_uv
msg_info "Migrating to uv/venv"
rm -rf "$VENV_PATH"
mkdir -p /opt/esphome
cd /opt/esphome
$STD uv venv "$VENV_PATH"
$STD "$VENV_PATH/bin/python" -m ensurepip --upgrade
$STD "$VENV_PATH/bin/python" -m pip install --upgrade pip
$STD "$VENV_PATH/bin/python" -m pip install esphome tornado esptool
msg_ok "Migrated to uv/venv"
else
msg_info "Updating ESPHome"
PYTHON_VERSION="3.12" setup_uv
$STD "$VENV_PATH/bin/python" -m pip install --upgrade esphome tornado esptool
msg_ok "Updated ESPHome"
fi fi
$STD pip3 install -U esphome SERVICE_FILE="/etc/systemd/system/esphomeDashboard.service"
msg_ok "Updated ESPHome" if ! grep -q "${VENV_PATH}/bin/esphome" "$SERVICE_FILE"; then
msg_info "Updating systemd service"
cat <<EOF >"$SERVICE_FILE"
[Unit]
Description=ESPHome Dashboard
After=network.target
msg_info "Starting ESPHome" [Service]
ExecStart=${VENV_PATH}/bin/esphome dashboard /root/config/
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
$STD systemctl daemon-reload
msg_ok "Updated systemd service"
fi
msg_info "Starting ${APP}"
systemctl start esphomeDashboard systemctl start esphomeDashboard
msg_ok "Started ESPHome" msg_ok "Started ${APP}"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }
+3 -2
View File
@@ -29,10 +29,11 @@ function update_script() {
fi fi
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
msg_info "Updating $APP to ${RELEASE}" msg_info "Updating $APP to ${RELEASE}"
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $(basename "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64") FILENAME="gitea-$RELEASE-linux-amd64"
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $FILENAME
systemctl stop gitea systemctl stop gitea
rm -rf /usr/local/bin/gitea rm -rf /usr/local/bin/gitea
mv gitea* /usr/local/bin/gitea mv $FILENAME /usr/local/bin/gitea
chmod +x /usr/local/bin/gitea chmod +x /usr/local/bin/gitea
systemctl start gitea systemctl start gitea
msg_ok "Updated $APP Successfully" msg_ok "Updated $APP Successfully"
+6
View File
@@ -0,0 +1,6 @@
___ __ _ ______ _
/ | / /___ (_)___ ___ / ____/___ _________ ____ (_)___
/ /| | / / __ \/ / __ \/ _ \______/ /_ / __ \/ ___/ __ `/ _ \ / / __ \
/ ___ |/ / /_/ / / / / / __/_____/ __/ / /_/ / / / /_/ / __/ / / /_/ /
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/_/ \__, /\___/_/ /\____/
/_/ /____/ /___/
+107 -109
View File
@@ -181,116 +181,114 @@ function update_script() {
fi fi
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
msg_info "Stopping ${APP} services" msg_ok "No update required. ${APP} is already at v${RELEASE}"
systemctl stop immich-web exit
systemctl stop immich-ml
msg_ok "Stopped ${APP}"
INSTALL_DIR="/opt/${APP}"
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
SRC_DIR="${INSTALL_DIR}/source"
APP_DIR="${INSTALL_DIR}/app"
ML_DIR="${APP_DIR}/machine-learning"
GEO_DIR="${INSTALL_DIR}/geodata"
VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
msg_info "Updating VectorChord"
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
$STD sudo -u postgres pg_dumpall --clean --if-exists --username=postgres | gzip >/etc/postgresql/immich-db-vchord0.3.0.sql.gz
chown postgres /etc/postgresql/immich-db-vchord0.3.0.sql.gz
$STD sudo -u postgres gunzip --stdout /etc/postgresql/immich-db-vchord0.3.0.sql.gz |
sed -e "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
-e "/vchordrq.prewarm_dim/d" |
sudo -u postgres psql
fi
curl -fsSL "https://github.com/tensorchord/vectorchord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
$STD apt install -y ./vchord.deb
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
systemctl restart postgresql
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
$STD sudo -u postgres psql -d immich -c "REINDEX DATABASE;"
fi
echo "$VCHORD_RELEASE" >~/.vchord_version
rm ./vchord.deb
msg_ok "Updated VectorChord to v${VCHORD_RELEASE}"
fi
cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
rm -rf "${APP_DIR:?}"/*
rm -rf "$SRC_DIR"
immich_zip=$(mktemp)
curl -fsSL "https://github.com/immich-app/immich/archive/refs/tags/v${RELEASE}.zip" -o "$immich_zip"
msg_info "Updating ${APP} web and microservices"
unzip -q "$immich_zip"
mv "$APP-$RELEASE"/ "$SRC_DIR"
mkdir -p "$ML_DIR"
cd "$SRC_DIR"/server
if [[ "$RELEASE" == "1.135.1" ]]; then
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
fi
$STD npm install -g node-gyp node-pre-gyp
$STD npm ci
$STD npm run build
$STD npm prune --omit=dev --omit=optional
cd "$SRC_DIR"/open-api/typescript-sdk
$STD npm ci
$STD npm run build
cd "$SRC_DIR"/web
$STD npm ci
$STD npm run build
cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
msg_ok "Updated ${APP} web and microservices"
cd "$SRC_DIR"/machine-learning
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
if [[ -f ~/.openvino ]]; then
msg_info "Updating HW-accelerated machine-learning"
/usr/local/bin/uv -q sync --extra openvino --no-cache --active
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
msg_ok "Updated HW-accelerated machine-learning"
else
msg_info "Updating machine-learning"
/usr/local/bin/uv -q sync --extra cpu --no-cache --active
msg_ok "Updated machine-learning"
fi
cd "$SRC_DIR"
cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
mv "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
if [[ -f ~/.openvino ]]; then
sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
fi
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
cd "$APP_DIR"
grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
ln -s "$GEO_DIR" "$APP_DIR"
msg_info "Updating Immich CLI"
$STD npm install --build-from-source sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
$STD npm i -g @immich/cli
msg_ok "Updated Immich CLI"
chown -R immich:immich "$INSTALL_DIR"
echo "$RELEASE" >/opt/"${APP}"_version.txt
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Cleaning up"
rm -f "$immich_zip"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
else
msg_ok "${APP} is already at v${RELEASE}"
fi fi
msg_info "Stopping ${APP} services"
systemctl stop immich-web
systemctl stop immich-ml
msg_ok "Stopped ${APP}"
INSTALL_DIR="/opt/${APP}"
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
SRC_DIR="${INSTALL_DIR}/source"
APP_DIR="${INSTALL_DIR}/app"
ML_DIR="${APP_DIR}/machine-learning"
GEO_DIR="${INSTALL_DIR}/geodata"
VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
msg_info "Updating VectorChord"
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
$STD sudo -u postgres pg_dumpall --clean --if-exists --username=postgres | gzip >/etc/postgresql/immich-db-vchord0.3.0.sql.gz
chown postgres /etc/postgresql/immich-db-vchord0.3.0.sql.gz
$STD sudo -u postgres gunzip --stdout /etc/postgresql/immich-db-vchord0.3.0.sql.gz |
sed -e "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
-e "/vchordrq.prewarm_dim/d" |
sudo -u postgres psql
fi
curl -fsSL "https://github.com/tensorchord/vectorchord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
$STD apt install -y ./vchord.deb
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
systemctl restart postgresql
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
$STD sudo -u postgres psql -d immich -c "REINDEX DATABASE;"
fi
echo "$VCHORD_RELEASE" >~/.vchord_version
rm ./vchord.deb
msg_ok "Updated VectorChord to v${VCHORD_RELEASE}"
fi
cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
rm -rf "${APP_DIR:?}"/*
mkdir -p "$ML_DIR"
rm -rf "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
msg_info "Updating ${APP} web and microservices"
cd "$SRC_DIR"/server
if [[ "$RELEASE" == "1.135.1" ]]; then
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
fi
$STD npm install -g node-gyp node-pre-gyp
$STD npm ci
$STD npm run build
$STD npm prune --omit=dev --omit=optional
cd "$SRC_DIR"/open-api/typescript-sdk
$STD npm ci
$STD npm run build
cd "$SRC_DIR"/web
$STD npm ci
$STD npm run build
cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
msg_ok "Updated ${APP} web and microservices"
cd "$SRC_DIR"/machine-learning
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
if [[ -f ~/.openvino ]]; then
msg_info "Updating HW-accelerated machine-learning"
/usr/local/bin/uv -q sync --extra openvino --no-cache --active
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
msg_ok "Updated HW-accelerated machine-learning"
else
msg_info "Updating machine-learning"
/usr/local/bin/uv -q sync --extra cpu --no-cache --active
msg_ok "Updated machine-learning"
fi
cd "$SRC_DIR"
cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
mv "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
if [[ -f ~/.openvino ]]; then
sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
fi
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
cd "$APP_DIR"
grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
ln -s "$GEO_DIR" "$APP_DIR"
msg_info "Updating Immich CLI"
$STD npm install --build-from-source sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
$STD npm i -g @immich/cli
msg_ok "Updated Immich CLI"
chown -R immich:immich "$INSTALL_DIR"
echo "$RELEASE" >/opt/"${APP}"_version.txt
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
systemctl restart immich-ml immich-web systemctl restart immich-ml immich-web
exit exit
} }
+73 -16
View File
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/mis
APP="MeTube" APP="MeTube"
var_tags="${var_tags:-media;youtube}" var_tags="${var_tags:-media;youtube}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}" 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}"
@@ -23,40 +23,97 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /opt/metube ]]; then if [[ ! -d /opt/metube ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping ${APP} Service" msg_info "Stopping ${APP} Service"
systemctl stop metube systemctl stop metube
msg_ok "Stopped ${APP} Service" msg_ok "Stopped ${APP} Service"
msg_info "Updating ${APP} to latest Git" msg_info "Backing up Old Installation"
cd /opt if [[ -d /opt/metube_bak ]]; then
if [ -d metube_bak ]; then rm -rf /opt/metube_bak
rm -rf metube_bak
fi fi
mv metube metube_bak mv /opt/metube /opt/metube_bak
msg_ok "Backup created"
msg_info "Cloning Latest ${APP} Release"
$STD git clone https://github.com/alexta69/metube /opt/metube $STD git clone https://github.com/alexta69/metube /opt/metube
msg_ok "Cloned ${APP}"
msg_info "Building Frontend"
cd /opt/metube/ui cd /opt/metube/ui
$STD npm install $STD npm install
$STD node_modules/.bin/ng build $STD node_modules/.bin/ng build
cd /opt/metube msg_ok "Built Frontend"
cp /opt/metube_bak/.env /opt/metube/
$STD pip3 install pipenv
$STD pipenv install
if [ -d "/opt/metube_bak" ]; then PYTHON_VERSION="3.13" setup_uv
rm -rf /opt/metube_bak
msg_info "Setting up Python Environment (uv)"
$STD uv venv /opt/metube/.venv
$STD /opt/metube/.venv/bin/python -m ensurepip --upgrade
$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip
$STD /opt/metube/.venv/bin/python -m pip install pipenv
msg_ok "Python Environment Ready"
msg_info "Installing Backend Requirements"
cd /opt/metube
$STD /opt/metube/.venv/bin/pipenv install
msg_ok "Installed Backend"
msg_info "Restoring Environment File"
if [[ -f /opt/metube_bak/.env ]]; then
cp /opt/metube_bak/.env /opt/metube/.env
fi fi
msg_ok "Updated ${APP} to latest Git" msg_ok "Restored .env"
if [[ ! -d /opt/metube/.venv ]]; then
msg_info "Migrating to uv-based environment"
PYTHON_VERSION="3.13" setup_uv
$STD uv venv /opt/metube/.venv
$STD /opt/metube/.venv/bin/python -m ensurepip --upgrade
$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip
$STD /opt/metube/.venv/bin/python -m pip install pipenv
$STD /opt/metube/.venv/bin/pipenv install
$STD /opt/metube/.venv/bin/pipenv update yt-dlp
msg_info "Patching systemd Service"
cat <<EOF >/etc/systemd/system/metube.service
[Unit]
Description=Metube - YouTube Downloader
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/metube
EnvironmentFile=/opt/metube/.env
ExecStart=/opt/metube/.venv/bin/pipenv run python3 app/main.py
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
msg_ok "Patched systemd Service"
fi
$STD systemctl daemon-reload
msg_ok "Service Updated"
msg_info "Cleaning up"
rm -rf /opt/metube_bak
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned Up"
msg_info "Starting ${APP} Service" msg_info "Starting ${APP} Service"
systemctl start metube systemctl enable -q --now metube
sleep 1 sleep 1
msg_ok "Started ${APP} Service" msg_ok "Started ${APP} Service"
msg_ok "Updated Successfully!\n"
exit msg_ok "Updated Successfully!"
} }
start start
+20 -3
View File
@@ -27,16 +27,33 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
FEATURE_RICH_VERSION="2025-04-22T22-12-26Z"
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then CURRENT_VERSION=""
[[ -f /opt/${APP}_version.txt ]] && CURRENT_VERSION=$(cat /opt/${APP}_version.txt)
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
if [[ "${CURRENT_VERSION}" == "${FEATURE_RICH_VERSION}" && "${RELEASE}" != "${FEATURE_RICH_VERSION}" ]]; then
echo
echo "You are currently running the last feature-rich community version: ${FEATURE_RICH_VERSION}"
echo "WARNING: Updating to the latest version will REMOVE most management features from the Console UI."
echo "Do you still want to upgrade to the latest version? [y/N]: "
read -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
msg_ok "No update performed. Staying on the feature-rich version."
exit
fi
fi
if [[ "${CURRENT_VERSION}" != "${RELEASE}" ]]; then
msg_info "Stopping ${APP}" msg_info "Stopping ${APP}"
systemctl stop minio systemctl stop minio
msg_ok "${APP} Stopped" msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
mv /usr/local/bin/minio /usr/local/bin/minio_bak mv /usr/local/bin/minio /usr/local/bin/minio_bak
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o $(basename "https://dl.min.io/server/minio/release/linux-amd64/minio") curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o /usr/local/bin/minio
mv minio /usr/local/bin/
chmod +x /usr/local/bin/minio chmod +x /usr/local/bin/minio
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
+8 -8
View File
@@ -41,19 +41,19 @@ function update_script() {
mkdir -p /opt/planka-backup/background-images mkdir -p /opt/planka-backup/background-images
mkdir -p /opt/planka-backup/attachments mkdir -p /opt/planka-backup/attachments
mv /opt/planka/planka/.env /opt/planka-backup mv /opt/planka/planka/.env /opt/planka-backup
mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/ [ -n "$(ls -A /opt/planka/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/
mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/ [ -n "$(ls -A /opt/planka/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/ [ -n "$(ls -A /opt/planka/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/
mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/ [ -n "$(ls -A /opt/planka/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/
rm -rf /opt/planka rm -rf /opt/planka
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip" fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
cd /opt/planka/planka cd /opt/planka/planka
$STD npm install $STD npm install
mv /opt/planka-backup/.env /opt/planka/planka/ mv /opt/planka-backup/.env /opt/planka/planka/
mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/ [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/
mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/ [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/
mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/ [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/
mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/ [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/
msg_ok "Updated $APP to ${RELEASE}" msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting $APP" msg_info "Starting $APP"
+61 -18
View File
@@ -20,26 +20,69 @@ 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/prometheus-pve-exporter.service ]]; then if [[ ! -f /etc/systemd/system/prometheus-pve-exporter.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit 1
fi fi
msg_info "Stopping ${APP}"
systemctl stop prometheus-pve-exporter
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}" msg_info "Stopping ${APP}"
$STD pip install prometheus-pve-exporter --default-timeout=300 --upgrade --root-user-action=ignore systemctl stop prometheus-pve-exporter
msg_ok "Updated ${APP}" msg_ok "Stopped ${APP}"
msg_info "Starting ${APP}" export PVE_VENV_PATH="/opt/prometheus-pve-exporter/.venv"
systemctl start prometheus-pve-exporter export PVE_EXPORTER_BIN="${PVE_VENV_PATH}/bin/pve_exporter"
msg_ok "Started ${APP}"
msg_ok "Updated Successfully" if [[ ! -d "$PVE_VENV_PATH" || ! -x "$PVE_EXPORTER_BIN" ]]; then
exit PYTHON_VERSION="3.12" setup_uv
msg_info "Migrating to uv/venv"
rm -rf "$PVE_VENV_PATH"
mkdir -p /opt/prometheus-pve-exporter
cd /opt/prometheus-pve-exporter
$STD uv venv "$PVE_VENV_PATH"
$STD "$PVE_VENV_PATH/bin/python" -m ensurepip --upgrade
$STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade pip
$STD "$PVE_VENV_PATH/bin/python" -m pip install prometheus-pve-exporter
msg_ok "Migrated to uv/venv"
else
msg_info "Updating Prometheus Proxmox VE Exporter"
PYTHON_VERSION="3.12" setup_uv
$STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade prometheus-pve-exporter
msg_ok "Updated Prometheus Proxmox VE Exporter"
fi
local service_file="/etc/systemd/system/prometheus-pve-exporter.service"
if ! grep -q "${PVE_VENV_PATH}/bin/pve_exporter" "$service_file"; then
msg_info "Updating systemd service"
cat <<EOF >"$service_file"
[Unit]
Description=Prometheus Proxmox VE Exporter
Documentation=https://github.com/znerol/prometheus-pve-exporter
After=syslog.target network.target
[Service]
User=root
Restart=always
Type=simple
ExecStart=${PVE_VENV_PATH}/bin/pve_exporter \\
--config.file=/opt/prometheus-pve-exporter/pve.yml \\
--web.listen-address=0.0.0.0:9221
ExecReload=/bin/kill -HUP \$MAINPID
[Install]
WantedBy=multi-user.target
EOF
$STD systemctl daemon-reload
msg_ok "Updated systemd service"
fi
msg_info "Starting ${APP}"
systemctl start prometheus-pve-exporter
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
exit 0
} }
start start
+1 -1
View File
@@ -52,7 +52,7 @@ function update_script() {
cp -r "${DB_PATH}" /opt/trilium_backup/ cp -r "${DB_PATH}" /opt/trilium_backup/
rm -rf /opt/trilium rm -rf /opt/trilium
cd /tmp cd /tmp
curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
tar -xf "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" tar -xf "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
mv "TriliumNextNotes-Server-${RELEASE}-linux-x64" /opt/trilium mv "TriliumNextNotes-Server-${RELEASE}-linux-x64" /opt/trilium
+2 -2
View File
@@ -21,7 +21,7 @@
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 256, "ram": 256,
"hdd": 0.5, "hdd": 1,
"os": "alpine", "os": "alpine",
"version": "3.21" "version": "3.21"
} }
@@ -32,7 +32,7 @@
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 256, "ram": 256,
"hdd": 0.5, "hdd": 1,
"os": "alpine", "os": "alpine",
"version": "3.21" "version": "3.21"
} }
+1 -1
View File
@@ -21,7 +21,7 @@
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 512, "ram": 512,
"hdd": 0.5, "hdd": 1,
"os": "alpine", "os": "alpine",
"version": "3.21" "version": "3.21"
} }
+12 -1
View File
@@ -25,8 +25,19 @@
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
},
{
"type": "alpine",
"script": "ct/alpine-forgejo.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
+4
View File
@@ -46,6 +46,10 @@
{ {
"text": "This script requires some extra steps after the installation, Please checkout the 'documentation'", "text": "This script requires some extra steps after the installation, Please checkout the 'documentation'",
"type": "info" "type": "info"
},
{
"text": "Access Adminer Web UI at `http://<CONTAINER_IP>/adminer.php`",
"type": "info"
} }
] ]
} }
+35
View File
@@ -0,0 +1,35 @@
{
"name": "MeTube",
"slug": "metube",
"categories": [
11
],
"date_created": "2025-06-24",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": null,
"website": "https://github.com/alexta69/metube",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
"config_path": "/opt/metube/.env",
"description": "MeTube allows you to download videos from YouTube and dozens of other sites.",
"install_methods": [
{
"type": "default",
"script": "ct/metube.sh",
"resources": {
"cpu": 1,
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}
-35
View File
@@ -1,35 +0,0 @@
{
"name": "MeTube",
"slug": "metube",
"categories": [
11
],
"date_created": "2024-06-12",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": null,
"website": "https://github.com/alexta69/metube",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
"config_path": "/opt/metube/.env",
"description": "MeTube allows you to download videos from YouTube and dozens of other sites.",
"install_methods": [
{
"type": "default",
"script": "ct/metube.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 10,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}
+1 -1
View File
@@ -10,7 +10,7 @@
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": "https://triliumnext.github.io/Docs/", "documentation": "https://triliumnext.github.io/Docs/",
"website": "https://github.com/TriliumNext/Notes", "website": "https://github.com/TriliumNext/trilium",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/triliumnext.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/triliumnext.webp",
"config_path": "/root/trilium-data/config.ini", "config_path": "/root/trilium-data/config.ini",
"description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.", "description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.",
+113 -113
View File
@@ -1,8 +1,118 @@
[ [
{
"name": "rcourtman/Pulse",
"version": "v3.31.1",
"date": "2025-06-23T23:13:13Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-incremental-vector-store-1",
"date": "2025-06-23T21:37:47Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-06-13T11-33-47Z",
"date": "2025-06-23T20:58:42Z"
},
{
"name": "esphome/esphome",
"version": "2025.6.1",
"date": "2025-06-23T19:28:09Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.2.1",
"date": "2025-06-03T20:04:28Z"
},
{
"name": "home-assistant/core",
"version": "2025.6.2",
"date": "2025-06-23T18:38:37Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p5-rc2",
"date": "2025-06-23T15:50:55Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.120.0",
"date": "2025-06-23T15:12:12Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.98.2",
"date": "2025-06-18T18:20:16Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.3.0-rc.2",
"date": "2025-06-23T11:31:38Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.17",
"date": "2025-06-18T08:12:05Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2042",
"date": "2025-06-23T05:54:00Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.18",
"date": "2025-06-20T04:45:37Z"
},
{
"name": "gotson/komga",
"version": "1.22.0",
"date": "2025-06-23T03:11:37Z"
},
{ {
"name": "plexguide/Huntarr.io", "name": "plexguide/Huntarr.io",
"version": "8.1.7", "version": "8.1.8",
"date": "2025-06-21T23:25:45Z" "date": "2025-06-23T00:21:30Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.6.22",
"date": "2025-06-22T22:41:11Z"
},
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.1",
"date": "2025-06-22T21:41:17Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.4.1",
"date": "2025-06-22T19:38:08Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.22.3",
"date": "2025-06-22T18:29:00Z"
},
{
"name": "clusterzx/paperless-ai",
"version": "v3.0.7",
"date": "2025-06-22T17:49:29Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@15.5.4",
"date": "2025-06-22T13:12:24Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
"date": "2025-06-22T08:30:10Z"
},
{
"name": "inventree/InvenTree",
"version": "0.17.14",
"date": "2025-06-21T23:43:04Z"
}, },
{ {
"name": "HabitRPG/habitica", "name": "HabitRPG/habitica",
@@ -14,11 +124,6 @@
"version": "preview-fix-proxy-auth", "version": "preview-fix-proxy-auth",
"date": "2025-06-21T13:43:58Z" "date": "2025-06-21T13:43:58Z"
}, },
{
"name": "rcourtman/Pulse",
"version": "v3.30.0",
"date": "2025-06-17T16:00:01Z"
},
{ {
"name": "rogerfar/rdt-client", "name": "rogerfar/rdt-client",
"version": "v2.0.114", "version": "v2.0.114",
@@ -32,7 +137,7 @@
{ {
"name": "theonedev/onedev", "name": "theonedev/onedev",
"version": "v11.11.1", "version": "v11.11.1",
"date": "2025-06-21T09:23:39Z" "date": "2025-06-21T07:32:15Z"
}, },
{ {
"name": "pocketbase/pocketbase", "name": "pocketbase/pocketbase",
@@ -44,11 +149,6 @@
"version": "0.50.4", "version": "0.50.4",
"date": "2025-06-21T07:47:02Z" "date": "2025-06-21T07:47:02Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.22.2035",
"date": "2025-06-21T05:52:31Z"
},
{ {
"name": "coder/code-server", "name": "coder/code-server",
"version": "v4.101.1", "version": "v4.101.1",
@@ -69,21 +169,11 @@
"version": "3.2.1-rc1", "version": "3.2.1-rc1",
"date": "2025-06-20T19:41:10Z" "date": "2025-06-20T19:41:10Z"
}, },
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "v1.24.0-victorialogs",
"date": "2025-06-20T19:31:31Z"
},
{ {
"name": "homarr-labs/homarr", "name": "homarr-labs/homarr",
"version": "v1.25.0", "version": "v1.25.0",
"date": "2025-06-20T19:15:43Z" "date": "2025-06-20T19:15:43Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.22.1",
"date": "2025-06-20T18:12:20Z"
},
{ {
"name": "mongodb/mongo", "name": "mongodb/mongo",
"version": "r8.1.2-rc0", "version": "r8.1.2-rc0",
@@ -134,21 +224,11 @@
"version": "v2.16.3", "version": "v2.16.3",
"date": "2025-06-20T05:49:06Z" "date": "2025-06-20T05:49:06Z"
}, },
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.18",
"date": "2025-06-20T04:45:37Z"
},
{ {
"name": "paperless-ngx/paperless-ngx", "name": "paperless-ngx/paperless-ngx",
"version": "v2.17.1", "version": "v2.17.1",
"date": "2025-06-19T19:35:01Z" "date": "2025-06-19T19:35:01Z"
}, },
{
"name": "pocket-id/pocket-id",
"version": "v1.4.0",
"date": "2025-06-19T18:30:11Z"
},
{ {
"name": "rclone/rclone", "name": "rclone/rclone",
"version": "v1.70.1", "version": "v1.70.1",
@@ -164,16 +244,6 @@
"version": "2025.05.1", "version": "2025.05.1",
"date": "2025-06-19T11:28:36Z" "date": "2025-06-19T11:28:36Z"
}, },
{
"name": "mattermost/mattermost",
"version": "v9.11.17",
"date": "2025-06-18T08:12:05Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.98.2",
"date": "2025-06-18T18:20:16Z"
},
{ {
"name": "redis/redis", "name": "redis/redis",
"version": "8.2-m01-int2", "version": "8.2-m01-int2",
@@ -209,11 +279,6 @@
"version": "v3.12.7", "version": "v3.12.7",
"date": "2025-06-18T14:22:53Z" "date": "2025-06-18T14:22:53Z"
}, },
{
"name": "clusterzx/paperless-ai",
"version": "v3.0.6",
"date": "2025-06-18T14:18:13Z"
},
{ {
"name": "openhab/openhab-core", "name": "openhab/openhab-core",
"version": "5.0.0.M3", "version": "5.0.0.M3",
@@ -229,11 +294,6 @@
"version": "v10.7.0", "version": "v10.7.0",
"date": "2025-06-18T11:57:05Z" "date": "2025-06-18T11:57:05Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.6.0",
"date": "2025-06-18T09:41:11Z"
},
{ {
"name": "forgejo/forgejo", "name": "forgejo/forgejo",
"version": "v11.0.2", "version": "v11.0.2",
@@ -324,21 +384,11 @@
"version": "version/2025.6.2", "version": "version/2025.6.2",
"date": "2025-06-16T17:54:39Z" "date": "2025-06-16T17:54:39Z"
}, },
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-06-16T17:35:17Z"
},
{ {
"name": "emqx/emqx", "name": "emqx/emqx",
"version": "e5.9.1-alpha.1", "version": "e5.9.1-alpha.1",
"date": "2025-06-16T15:34:01Z" "date": "2025-06-16T15:34:01Z"
}, },
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.0.12",
"date": "2025-06-16T15:09:27Z"
},
{ {
"name": "open-webui/open-webui", "name": "open-webui/open-webui",
"version": "v0.6.15", "version": "v0.6.15",
@@ -349,11 +399,6 @@
"version": "v8.1.16", "version": "v8.1.16",
"date": "2025-06-16T13:49:37Z" "date": "2025-06-16T13:49:37Z"
}, },
{
"name": "Graylog2/graylog2-server",
"version": "6.3.0-rc.1",
"date": "2025-06-16T11:28:08Z"
},
{ {
"name": "home-assistant/operating-system", "name": "home-assistant/operating-system",
"version": "15.2", "version": "15.2",
@@ -434,11 +479,6 @@
"version": "v3.3.25", "version": "v3.3.25",
"date": "2025-06-14T02:52:44Z" "date": "2025-06-14T02:52:44Z"
}, },
{
"name": "home-assistant/core",
"version": "2025.6.1",
"date": "2025-06-13T20:16:18Z"
},
{ {
"name": "wazuh/wazuh", "name": "wazuh/wazuh",
"version": "coverity-w25-4.13.0", "version": "coverity-w25-4.13.0",
@@ -454,16 +494,6 @@
"version": "v2025-06-12", "version": "v2025-06-12",
"date": "2025-06-12T20:59:47Z" "date": "2025-06-12T20:59:47Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-06-12T19:09:18Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p34",
"date": "2025-06-12T12:15:44Z"
},
{ {
"name": "zitadel/zitadel", "name": "zitadel/zitadel",
"version": "v3.3.0", "version": "v3.3.0",
@@ -474,11 +504,6 @@
"version": "v1.12.0-rc.4", "version": "v1.12.0-rc.4",
"date": "2025-06-12T00:27:41Z" "date": "2025-06-12T00:27:41Z"
}, },
{
"name": "TandoorRecipes/recipes",
"version": "2.0.0-alpha-4",
"date": "2025-05-14T05:01:45Z"
},
{ {
"name": "MediaBrowser/Emby.Releases", "name": "MediaBrowser/Emby.Releases",
"version": "4.8.11.0", "version": "4.8.11.0",
@@ -559,11 +584,6 @@
"version": "v1.10.0", "version": "v1.10.0",
"date": "2025-06-07T08:31:48Z" "date": "2025-06-07T08:31:48Z"
}, },
{
"name": "OliveTin/OliveTin",
"version": "2025.6.6",
"date": "2025-06-06T21:39:22Z"
},
{ {
"name": "diced/zipline", "name": "diced/zipline",
"version": "v4.1.2", "version": "v4.1.2",
@@ -644,11 +664,6 @@
"version": "1.26.3", "version": "1.26.3",
"date": "2025-06-02T22:00:14Z" "date": "2025-06-02T22:00:14Z"
}, },
{
"name": "inventree/InvenTree",
"version": "0.17.13",
"date": "2025-06-02T12:44:20Z"
},
{ {
"name": "usememos/memos", "name": "usememos/memos",
"version": "v0.24.4", "version": "v0.24.4",
@@ -759,11 +774,6 @@
"version": "v4.39.4", "version": "v4.39.4",
"date": "2025-05-25T02:27:28Z" "date": "2025-05-25T02:27:28Z"
}, },
{
"name": "minio/minio",
"version": "RELEASE.2025-05-24T17-08-30Z",
"date": "2025-05-24T21:42:19Z"
},
{ {
"name": "0xERR0R/blocky", "name": "0xERR0R/blocky",
"version": "v0.26.2", "version": "v0.26.2",
@@ -814,11 +824,6 @@
"version": "2.0.4", "version": "2.0.4",
"date": "2025-05-16T15:09:53Z" "date": "2025-05-16T15:09:53Z"
}, },
{
"name": "gotson/komga",
"version": "1.21.3",
"date": "2025-05-16T04:31:05Z"
},
{ {
"name": "Dolibarr/dolibarr", "name": "Dolibarr/dolibarr",
"version": "18.0.7", "version": "18.0.7",
@@ -944,11 +949,6 @@
"version": "v2.6.3", "version": "v2.6.3",
"date": "2025-04-27T09:05:42Z" "date": "2025-04-27T09:05:42Z"
}, },
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.0",
"date": "2025-04-27T08:53:48Z"
},
{ {
"name": "photoprism/photoprism", "name": "photoprism/photoprism",
"version": "250426-27ec7a128", "version": "250426-27ec7a128",
+48 -48
View File
@@ -1,51 +1,51 @@
{ {
"name": "Zigbee2MQTT", "name": "Zigbee2MQTT",
"slug": "zigbee2mqtt", "slug": "zigbee2mqtt",
"categories": [ "categories": [
17 17
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": true, "privileged": true,
"interface_port": 9442, "interface_port": 9442,
"documentation": "https://www.zigbee2mqtt.io/guide/getting-started/", "documentation": "https://www.zigbee2mqtt.io/guide/getting-started/",
"website": "https://www.zigbee2mqtt.io/", "website": "https://www.zigbee2mqtt.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zigbee2mqtt.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zigbee2mqtt.webp",
"config_path": "/opt/zigbee2mqtt/data/configuration.yaml", "config_path": "/opt/zigbee2mqtt/data/configuration.yaml",
"description": "Zigbee2MQTT is an open-source software project that allows you to use Zigbee-based smart home devices (such as those sold under the Philips Hue and Ikea Tradfri brands) with MQTT-based home automation systems, like Home Assistant, Node-RED, and others. The software acts as a bridge between your Zigbee devices and MQTT, allowing you to control and monitor these devices from your home automation system.", "description": "Zigbee2MQTT is an open-source software project that allows you to use Zigbee-based smart home devices (such as those sold under the Philips Hue and Ikea Tradfri brands) with MQTT-based home automation systems, like Home Assistant, Node-RED, and others. The software acts as a bridge between your Zigbee devices and MQTT, allowing you to control and monitor these devices from your home automation system.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/zigbee2mqtt.sh", "script": "ct/zigbee2mqtt.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
},
{
"type": "alpine",
"script": "ct/alpine-zigbee2mqtt.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
}, },
"notes": [ {
{ "type": "alpine",
"text": "You can find the post-install guide here: `https://github.com/community-scripts/ProxmoxVE/discussions/410`", "script": "ct/alpine-zigbee2mqtt.sh",
"type": "info" "resources": {
} "cpu": 1,
] "ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "You can find the post-install guide here: `https://github.com/community-scripts/ProxmoxVE/discussions/410`",
"type": "info"
}
]
} }
+2 -4
View File
@@ -22,8 +22,8 @@ $STD apt-get install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
PG_VERSION="16" PG_MODULES="postgis" install_postgresql PG_VERSION="16" PG_MODULES="postgis" setup_postgresql
msg_info "Set up PostgreSQL Database" msg_info "Set up PostgreSQL Database"
DB_NAME="adventurelog_db" DB_NAME="adventurelog_db"
@@ -90,7 +90,6 @@ EOF
cd /opt/adventurelog/frontend cd /opt/adventurelog/frontend
$STD pnpm i $STD pnpm i
$STD pnpm build $STD pnpm build
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed AdventureLog" msg_ok "Installed AdventureLog"
msg_info "Setting up Django Admin" msg_info "Setting up Django Admin"
@@ -148,7 +147,6 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /opt/v${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"
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Johann3s-H (An!ma)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://forgejo.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Forgejo"
$STD apk add --no-cache forgejo
msg_ok "Installed Forgejo"
msg_info "Enabling Forgejo Service"
$STD rc-update add forgejo default
msg_ok "Enabled Forgejo Service"
msg_info "Starting Forgejo"
$STD service forgejo start
msg_ok "Started Forgejo"
motd_ssh
customize
+13 -13
View File
@@ -17,34 +17,34 @@ msg_info "Installing Dependencies"
$STD apt-get install -y git $STD apt-get install -y git
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setup Python3" PYTHON_VERSION="3.12" setup_uv
$STD apt-get install -y \
python3 \
python3-dev \
python3-pip \
python3-venv
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Setup Python3"
msg_info "Installing ESPHome" msg_info "Setting up Virtual Environment"
mkdir /root/config mkdir -p /opt/esphome
$STD pip install esphome tornado esptool mkdir -p /root/config
msg_ok "Installed ESPHome" cd /opt/esphome
$STD uv venv /opt/esphome/.venv
$STD /opt/esphome/.venv/bin/python -m ensurepip --upgrade
$STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip
$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool
msg_ok "Setup and Installed ESPHome"
msg_info "Creating Service" msg_info "Creating Service"
mkdir -p /root/config
cat <<EOF >/etc/systemd/system/esphomeDashboard.service cat <<EOF >/etc/systemd/system/esphomeDashboard.service
[Unit] [Unit]
Description=ESPHome Dashboard Description=ESPHome Dashboard
After=network.target After=network.target
[Service] [Service]
ExecStart=/usr/local/bin/esphome dashboard /root/config/ ExecStart=/opt/esphome/.venv/bin/esphome dashboard /root/config/
Restart=always Restart=always
User=root User=root
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now esphomeDashboard systemctl enable -q --now esphomeDashboard
msg_ok "Created Service" msg_ok "Created Service"
+1 -1
View File
@@ -282,7 +282,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.135.0" "$SRC_DIR" fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (more patience please)" msg_info "Installing ${APPLICATION} (more patience please)"
+1 -1
View File
@@ -44,7 +44,7 @@ msg_ok "Set up PostgreSQL DB"
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
install_adminer setup_adminer
fi fi
msg_info "Installing Linkwarden (Patience)" msg_info "Installing Linkwarden (Patience)"
+10 -14
View File
@@ -1,8 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck # Author: MickLesk (Canbiz)
# Co-Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alexta69/metube # Source: https://github.com/alexta69/metube
@@ -28,15 +27,7 @@ $STD apt-get install -y --no-install-recommends \
ca-certificates ca-certificates
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setup Python3" PYTHON_VERSION="3.13" setup_uv
$STD apt-get install -y \
python3 \
python3-dev \
python3-pip \
python3-venv
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Setup Python3"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
msg_info "Installing MeTube" msg_info "Installing MeTube"
@@ -45,8 +36,13 @@ cd /opt/metube/ui
$STD npm install $STD npm install
$STD node_modules/.bin/ng build $STD node_modules/.bin/ng build
cd /opt/metube cd /opt/metube
$STD pip3 install pipenv $STD uv venv /opt/metube/.venv
$STD pipenv install $STD /opt/metube/.venv/bin/python -m ensurepip --upgrade
$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip
$STD /opt/metube/.venv/bin/python -m pip install pipenv
$STD /opt/metube/.venv/bin/pipenv install
$STD /opt/metube/.venv/bin/pipenv update yt-dlp
mkdir -p /opt/metube_downloads /opt/metube_downloads/.metube /opt/metube_downloads/music /opt/metube_downloads/videos mkdir -p /opt/metube_downloads /opt/metube_downloads/.metube /opt/metube_downloads/music /opt/metube_downloads/videos
cat <<EOF >/opt/metube/.env cat <<EOF >/opt/metube/.env
DOWNLOAD_DIR=/opt/metube_downloads DOWNLOAD_DIR=/opt/metube_downloads
@@ -66,7 +62,7 @@ After=network.target
Type=simple Type=simple
WorkingDirectory=/opt/metube WorkingDirectory=/opt/metube
EnvironmentFile=/opt/metube/.env EnvironmentFile=/opt/metube/.env
ExecStart=/usr/local/bin/pipenv run python3 app/main.py ExecStart=/opt/metube/.venv/bin/pipenv run python3 app/main.py
Restart=always Restart=always
User=root User=root
+38 -8
View File
@@ -13,31 +13,60 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Setup MinIO" FEATURE_RICH_VERSION="2025-04-22T22-12-26Z"
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o /usr/local/bin/minio echo
echo "MinIO recently removed many management features from the Console UI."
echo "The last feature-complete version is: $FEATURE_RICH_VERSION"
echo "Latest versions require the paid edition for full UI functionality."
echo
echo "Choose which version to install:"
echo " [N] Feature-rich community version ($FEATURE_RICH_VERSION) [Recommended]"
echo " [Y] Latest version (may lack UI features)"
echo
read -p "Install latest MinIO version? [y/N]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
USE_LATEST=true
else
USE_LATEST=false
fi
msg_info "Setting up MinIO"
if [[ "$USE_LATEST" == "true" ]]; then
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
DOWNLOAD_URL="https://dl.min.io/server/minio/release/linux-amd64/minio"
else
RELEASE="$FEATURE_RICH_VERSION"
DOWNLOAD_URL="https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.${FEATURE_RICH_VERSION}"
fi
curl -fsSL "$DOWNLOAD_URL" -o /usr/local/bin/minio
chmod +x /usr/local/bin/minio chmod +x /usr/local/bin/minio
useradd -r minio-user -s /sbin/nologin useradd -r minio-user -s /sbin/nologin
mkdir -p /home/minio-user mkdir -p /home/minio-user
chown minio-user:minio-user /home/minio-user chown minio-user:minio-user /home/minio-user
mkdir -p /data mkdir -p /data
chown minio-user:minio-user /data chown minio-user:minio-user /data
MINIO_ADMIN_USER="minioadmin" MINIO_ADMIN_USER="minioadmin"
MINIO_ADMIN_PASSWORD="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" MINIO_ADMIN_PASSWORD="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
cat <<EOF >/etc/default/minio cat <<EOF >/etc/default/minio
MINIO_ROOT_USER=${MINIO_ADMIN_USER} MINIO_ROOT_USER=${MINIO_ADMIN_USER}
MINIO_ROOT_PASSWORD=${MINIO_ADMIN_PASSWORD} MINIO_ROOT_PASSWORD=${MINIO_ADMIN_PASSWORD}
EOF EOF
{ {
echo "" echo ""
echo "MinIO-Credentials" echo "MinIO Credentials"
echo "MinIO Admin User: $MINIO_ADMIN_USER" echo "MinIO Admin User: $MINIO_ADMIN_USER"
echo "MinIO Admin Password: $MINIO_ADMIN_PASSWORD" echo "MinIO Admin Password: $MINIO_ADMIN_PASSWORD"
} >>~/minio.creds } >>~/minio.creds
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt echo "${RELEASE}" >/opt/${APPLICATION,,}_version.txt
msg_ok "Setup MinIO" msg_ok "Setup MinIO"
msg_info "Creating Service" msg_info "Creating service"
cat <<EOF >/etc/systemd/system/minio.service cat <<EOF >/etc/systemd/system/minio.service
[Unit] [Unit]
Description=MinIO Description=MinIO
@@ -57,8 +86,9 @@ LimitNOFILE=65536
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now minio systemctl enable -q --now minio
msg_ok "Created Service" msg_ok "Service created"
motd_ssh motd_ssh
customize customize
@@ -66,4 +96,4 @@ customize
msg_info "Cleaning up" msg_info "Cleaning up"
$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 "Cleanup complete"
+8 -8
View File
@@ -13,16 +13,16 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Setup Python3" PYTHON_VERSION="3.12" setup_uv
$STD apt-get install -y \
python3 \
python3-pip
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Setup Python3"
msg_info "Installing Prometheus Proxmox VE Exporter" msg_info "Installing Prometheus Proxmox VE Exporter"
python3 -m pip install --default-timeout=300 --quiet --root-user-action=ignore prometheus-pve-exporter
mkdir -p /opt/prometheus-pve-exporter mkdir -p /opt/prometheus-pve-exporter
cd /opt/prometheus-pve-exporter
$STD uv venv /opt/prometheus-pve-exporter/.venv
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m ensurepip --upgrade
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install --upgrade pip
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install prometheus-pve-exporter
cat <<EOF >/opt/prometheus-pve-exporter/pve.yml cat <<EOF >/opt/prometheus-pve-exporter/pve.yml
default: default:
user: prometheus@pve user: prometheus@pve
@@ -42,7 +42,7 @@ After=syslog.target network.target
User=root User=root
Restart=always Restart=always
Type=simple Type=simple
ExecStart=pve_exporter \ ExecStart=/opt/prometheus-pve-exporter/.venv/bin/pve_exporter \
--config.file=/opt/prometheus-pve-exporter/pve.yml \ --config.file=/opt/prometheus-pve-exporter/pve.yml \
--web.listen-address=0.0.0.0:9221 --web.listen-address=0.0.0.0:9221
ExecReload=/bin/kill -HUP \$MAINPID ExecReload=/bin/kill -HUP \$MAINPID
+2 -2
View File
@@ -15,8 +15,8 @@ update_os
msg_info "Setup TriliumNext" msg_info "Setup TriliumNext"
cd /opt cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/trilium/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-arm64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-arm64.tar.xz" curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-arm64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-arm64.tar.xz"
tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-arm64.tar.xz tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-arm64.tar.xz
mv TriliumNextNotes-Server-$RELEASE-linux-arm64 /opt/trilium mv TriliumNextNotes-Server-$RELEASE-linux-arm64 /opt/trilium
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
+8 -3
View File
@@ -1063,7 +1063,9 @@ EOF
msg_info "Starting LXC Container" msg_info "Starting LXC Container"
pct start "$CTID" pct start "$CTID"
msg_ok "Started LXC Container" msg_ok "Started LXC Container"
msg_info "Customizing LXC Container" msg_info "Customizing LXC Container"
: "${tz:=Etc/UTC}"
if [ "$var_os" == "alpine" ]; then if [ "$var_os" == "alpine" ]; then
sleep 3 sleep 3
pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
@@ -1073,19 +1075,22 @@ EOF'
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses >/dev/null" pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses >/dev/null"
else else
sleep 3 sleep 3
# Set locale and timezone before update
pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen" pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen"
pct exec "$CTID" -- bash -c "locale_line=\$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print \$1}' | head -n 1) && \ pct exec "$CTID" -- bash -c "locale_line=\$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print \$1}' | head -n 1) && \
echo LANG=\$locale_line >/etc/default/locale && \ echo LANG=\$locale_line >/etc/default/locale && \
locale-gen >/dev/null && \ locale-gen >/dev/null && \
export LANG=\$locale_line" export LANG=\$locale_line"
pct exec "$CTID" -- bash -c "echo $tz >/etc/timezone && ln -sf /usr/share/zoneinfo/$tz /etc/localtime" if pct exec "$CTID" -- test -e "/usr/share/zoneinfo/$tz"; then
pct exec "$CTID" -- bash -c "echo $tz >/etc/timezone && ln -sf /usr/share/zoneinfo/$tz /etc/localtime"
else
msg_info "Skipping timezone setup zone '$tz' not found in container"
fi
# Install curl
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null" pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null"
fi fi
msg_ok "Customized LXC Container" msg_ok "Customized LXC Container"
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/install/"$var_install".sh)" $? lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/asylumexp/Proxmox/main/install/"$var_install".sh)" $?
} }
+11 -5
View File
@@ -155,13 +155,19 @@ if [ -f /etc/pve/corosync.conf ]; then
fi fi
# Update LXC template list # Update LXC template list
msg_info "Updating LXC Template List" TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
if ! timeout 10 pveam update >/dev/null 2>&1; then msg_info "Updating LXC Template List"
msg_error "Failed to update LXC template list. Please check your Proxmox host's internet connection and DNS resolution." if ! timeout 15 pveam update >/dev/null 2>&1; then
exit 201 TEMPLATE_FALLBACK=$(pveam list "$TEMPLATE_STORAGE" | awk "/$TEMPLATE_SEARCH/ {print \$2}" | sort -t - -k 2 -V | tail -n1)
if [[ -z "$TEMPLATE_FALLBACK" ]]; then
msg_error "Failed to update LXC template list and no local template matching '$TEMPLATE_SEARCH' found."
exit 201
fi
msg_info "Skipping template update using local fallback: $TEMPLATE_FALLBACK"
else
msg_ok "LXC Template List Updated"
fi fi
$STD msg_ok "LXC Template List Updated"
# Get LXC template string # Get LXC template string
if [ $PCT_OSTYPE = debian ]; then if [ $PCT_OSTYPE = debian ]; then
+30 -13
View File
@@ -64,6 +64,12 @@ function setup_nodejs() {
exit 1 exit 1
fi fi
# Update to latest npm
$STD npm install -g npm@latest || {
msg_error "Failed to update npm to latest version"
exit 1
}
msg_ok "Setup Node.js ${NODE_VERSION}" msg_ok "Setup Node.js ${NODE_VERSION}"
fi fi
@@ -741,12 +747,12 @@ function fetch_and_deploy_gh_release() {
local app_lc=$(echo "${app,,}" | tr -d ' ') local app_lc=$(echo "${app,,}" | tr -d ' ')
local version_file="$HOME/.${app_lc}" local version_file="$HOME/.${app_lc}"
local curl_timeout="--connect-timeout 10 --max-time 30"
local api_timeout="--connect-timeout 5 --max-time 30"
local download_timeout="--connect-timeout 15 --max-time 900"
local current_version="" local current_version=""
if [[ -f "$version_file" ]]; then [[ -f "$version_file" ]] && current_version=$(<"$version_file")
current_version=$(<"$version_file")
fi
if ! command -v jq &>/dev/null; then if ! command -v jq &>/dev/null; then
$STD apt-get install -y jq &>/dev/null $STD apt-get install -y jq &>/dev/null
@@ -757,11 +763,22 @@ function fetch_and_deploy_gh_release() {
local header=() local header=()
[[ -n "${GITHUB_TOKEN:-}" ]] && header=(-H "Authorization: token $GITHUB_TOKEN") [[ -n "${GITHUB_TOKEN:-}" ]] && header=(-H "Authorization: token $GITHUB_TOKEN")
local resp http_code local max_retries=3 retry_delay=2 attempt=1 success=false resp http_code
resp=$(curl $curl_timeout -fsSL -w "%{http_code}" -o /tmp/gh_rel.json "${header[@]}" "$api_url")
while ((attempt <= max_retries)); do
resp=$(curl $api_timeout -fsSL -w "%{http_code}" -o /tmp/gh_rel.json "${header[@]}" "$api_url") && success=true && break
sleep "$retry_delay"
((attempt++))
done
if ! $success; then
msg_error "Failed to fetch release metadata after $max_retries attempts"
return 1
fi
http_code="${resp:(-3)}" http_code="${resp:(-3)}"
[[ "$http_code" != "200" ]] && { [[ "$http_code" != "200" ]] && {
msg_error "Failed to fetch release: HTTP $http_code" msg_error "GitHub API returned HTTP $http_code"
return 1 return 1
} }
@@ -779,14 +796,14 @@ function fetch_and_deploy_gh_release() {
tmpdir=$(mktemp -d) || return 1 tmpdir=$(mktemp -d) || return 1
local filename="" url="" local filename="" url=""
msg_info "Setup $app ($version)" msg_info "Fetching GitHub release: $app ($version)"
if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
url=$(echo "$json" | jq -r '.tarball_url // empty') url=$(echo "$json" | jq -r '.tarball_url // empty')
[[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz" [[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz"
filename="${app_lc}-${version}.tar.gz" filename="${app_lc}-${version}.tar.gz"
curl $curl_timeout -fsSL -o "$tmpdir/$filename" "$url" || { curl $download_timeout -fsSL -o "$tmpdir/$filename" "$url" || {
msg_error "Download failed: $url" msg_error "Download failed: $url"
rm -rf "$tmpdir" rm -rf "$tmpdir"
return 1 return 1
@@ -830,7 +847,7 @@ function fetch_and_deploy_gh_release() {
fi fi
filename="${url_match##*/}" filename="${url_match##*/}"
curl $curl_timeout -fsSL -o "$tmpdir/$filename" "$url_match" || { curl $download_timeout -fsSL -o "$tmpdir/$filename" "$url_match" || {
msg_error "Download failed: $url_match" msg_error "Download failed: $url_match"
rm -rf "$tmpdir" rm -rf "$tmpdir"
return 1 return 1
@@ -865,7 +882,7 @@ function fetch_and_deploy_gh_release() {
} }
filename="${asset_url##*/}" filename="${asset_url##*/}"
curl $curl_timeout -fsSL -o "$tmpdir/$filename" "$asset_url" || { curl $download_timeout -fsSL -o "$tmpdir/$filename" "$asset_url" || {
msg_error "Download failed: $asset_url" msg_error "Download failed: $asset_url"
rm -rf "$tmpdir" rm -rf "$tmpdir"
return 1 return 1
@@ -906,7 +923,7 @@ function fetch_and_deploy_gh_release() {
filename="${asset_url##*/}" filename="${asset_url##*/}"
mkdir -p "$target" mkdir -p "$target"
curl $curl_timeout -fsSL -o "$target/$app" "$asset_url" || { curl $download_timeout -fsSL -o "$target/$app" "$asset_url" || {
msg_error "Download failed: $asset_url" msg_error "Download failed: $asset_url"
rm -rf "$tmpdir" rm -rf "$tmpdir"
return 1 return 1
@@ -921,7 +938,7 @@ function fetch_and_deploy_gh_release() {
fi fi
echo "$version" >"$version_file" echo "$version" >"$version_file"
msg_ok "Setup $app ($version)" msg_ok "Deployed: $app ($version)"
rm -rf "$tmpdir" rm -rf "$tmpdir"
} }
+1 -1
View File
@@ -516,7 +516,7 @@ DESCRIPTION=$(
<img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/> <img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/>
</a> </a>
<h2 style='font-size: 24px; margin: 20px 0;'>OpenWRT VM</h2> <h2 style='font-size: 24px; margin: 20px 0;'>OpenWrt VM</h2>
<p style='margin: 16px 0;'> <p style='margin: 16px 0;'>
<a href='https://ko-fi.com/community_scripts' target='_blank' rel='noopener noreferrer'> <a href='https://ko-fi.com/community_scripts' target='_blank' rel='noopener noreferrer'>
+1 -1
View File
@@ -403,7 +403,7 @@ DESCRIPTION=$(
<img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/> <img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png' alt='Logo' style='width:81px;height:112px;'/>
</a> </a>
<h2 style='font-size: 24px; margin: 20px 0;'>OpenWRT VM</h2> <h2 style='font-size: 24px; margin: 20px 0;'>Homeassistant VM</h2>
<p style='margin: 16px 0;'> <p style='margin: 16px 0;'>
<a href='https://ko-fi.com/community_scripts' target='_blank' rel='noopener noreferrer'> <a href='https://ko-fi.com/community_scripts' target='_blank' rel='noopener noreferrer'>