Compare commits

..
Author SHA1 Message Date
MickLesk bf1a99e4ad homeassistant: use get_latest_github_release 2026-09-30 21:03:12 +02:00
MickLesk 6fe405c864 Use the release helpers instead of hand-rolled version checks and downloads
Legacy /opt/*_version.txt files move to ~/.<app> on the next update.
2026-09-30 20:58:07 +02:00
84 changed files with 204 additions and 321 deletions
+6 -13
View File
@@ -29,20 +29,13 @@ function update_script() {
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
msg_info "Updating ${APP} LXC"
curl -fsSL "https://github.com/sharevb/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" -o it-tools.zip
mkdir -p /usr/share/nginx/html
rm -rf /usr/share/nginx/html/*
$STD unzip it-tools.zip -d /tmp
cp -r /tmp/dist/* /usr/share/nginx/html
rm -rf /tmp/dist
rm -f it-tools.zip
echo "${RELEASE}" >/opt/${APP}_version.txt
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.it-tools
fi
if check_for_gh_release "it-tools" "sharevb/it-tools"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "it-tools" "sharevb/it-tools" "prebuild" "latest" "/usr/share/nginx/html" "it-tools-*.zip"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}
+3 -16
View File
@@ -29,8 +29,7 @@ function update_script() {
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/muety/wakapi/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [ "${RELEASE}" != "$(cat ~/.wakapi 2>/dev/null)" ] || [ ! -f ~/.wakapi ]; then
if check_for_gh_release "wakapi" "muety/wakapi"; then
msg_info "Stopping Wakapi Service"
$STD rc-service wakapi stop
msg_ok "Stopped Wakapi Service"
@@ -39,26 +38,14 @@ function update_script() {
$STD apk -U upgrade
msg_ok "Updated Wakapi LXC"
msg_info "Creating backup"
mkdir -p /opt/wakapi-backup
cp /opt/wakapi/config.yml /opt/wakapi/wakapi_db.db /opt/wakapi-backup/
msg_ok "Created backup"
create_backup /opt/wakapi/config.yml /opt/wakapi/wakapi_db.db
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wakapi" "muety/wakapi" "prebuild" "latest" "/opt/wakapi" "wakapi_linux_$(arch_resolve).zip"
msg_info "Configuring Wakapi"
cd /opt/wakapi
cp /opt/wakapi-backup/config.yml /opt/wakapi/
cp /opt/wakapi-backup/wakapi_db.db /opt/wakapi/
rm -rf /opt/wakapi-backup
msg_ok "Configured Wakapi"
restore_backup
msg_info "Starting Service"
$STD rc-service wakapi start
msg_ok "Started Service"
msg_ok "Updated successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}
+1 -1
View File
@@ -31,7 +31,7 @@ function update_script() {
fi
msg_info "Updating Apache CouchDB"
apt_update_safe
$STD apt install -y --only-upgrade couchdb
$STD apt-get install -y --only-upgrade couchdb
msg_ok "Updated Apache CouchDB"
msg_ok "Updated successfully!"
exit
+1 -1
View File
@@ -58,7 +58,7 @@ function update_script() {
mkdir -p "$INSTALL_DIR"/metadata_temp
$STD tar -xf ~/autocaliweb_bkp.tar --directory /
KEPUB_VERSION="$(/usr/bin/kepubify --version)"
CALIBRE_RELEASE="$(curl -s https://api.github.com/repos/kovidgoyal/calibre/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4)"
CALIBRE_RELEASE="$(get_latest_github_release "kovidgoyal/calibre")"
echo "${KEPUB_VERSION#v}" >"$INSTALL_DIR"/KEPUBIFY_RELEASE
echo "${CALIBRE_RELEASE#v}" >/"$INSTALL_DIR"/CALIBRE_RELEASE
sed 's/^/v/' ~/.autocaliweb >"$INSTALL_DIR"/ACW_RELEASE
+18 -19
View File
@@ -75,8 +75,7 @@ update_deb_based() {
msg_info "Configuring Bitmagnet"
cd /opt/bitmagnet
VREL=v$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v$(cat ~/.bitmagnet)"
chmod +x bitmagnet
msg_ok "Configured Bitmagnet"
@@ -92,8 +91,10 @@ update_alpine() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
if [[ -f /opt/bitmagnet_version.txt ]]; then
mv /opt/bitmagnet_version.txt ~/.bitmagnet
fi
if check_for_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"; then
msg_info "Backing up database"
rm -f /tmp/backup.sql
$STD sudo -u postgres pg_dump \
@@ -119,27 +120,25 @@ update_alpine() {
mv /tmp/backup.sql /opt/
msg_ok "Database backed up"
msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}"
msg_info "Stopping Service"
$STD apk -U upgrade
$STD service bitmagnet stop
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
rm -rf /opt/bitmagnet/*
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
msg_ok "Stopped Service"
create_backup /opt/bitmagnet/.env /opt/bitmagnet/config.yml
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball"
restore_backup
msg_info "Building ${APP}"
cd /opt/bitmagnet
VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v$(cat ~/.bitmagnet)"
chmod +x bitmagnet
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
rm -f "$temp_file"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
msg_ok "Built ${APP}"
msg_info "Starting Service"
$STD service bitmagnet start
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
}
+1 -1
View File
@@ -31,7 +31,7 @@ function update_script() {
fi
msg_info "Updating ${APP} LXC"
apt_update_safe
$STD apt -y upgrade
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!"
exit
+1 -1
View File
@@ -31,7 +31,7 @@ function update_script() {
fi
msg_info "Updating ${APP} LXC"
apt_update_safe
$STD apt -y upgrade
$STD apt-get -y upgrade
msg_ok "Updated successfully!"
exit
}
+1 -1
View File
@@ -47,7 +47,7 @@ function update_script() {
msg_ok "Backup created"
msg_info "Installing Dependencies"
$STD apt install -y pkg-config
$STD apt-get install -y pkg-config
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"; cd /opt/frappe-bench && uv python install 3.14'
msg_ok "Installed Dependencies"
+4 -4
View File
@@ -31,11 +31,11 @@ function update_script() {
exit
fi
setup_mariadb
RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.glpi
fi
if check_for_gh_release "glpi" "glpi-project/glpi"; then
msg_error "Currently we don't provide an update function for this ${APP}."
else
msg_ok "No update required. ${APP} is already at v${RELEASE}."
fi
exit
}
+1 -1
View File
@@ -62,7 +62,7 @@ function update_script() {
GRAMPS_VERSION=$(/opt/gramps-web/venv/bin/python3 -c "import gramps.version; print('%s%s' % (gramps.version.VERSION_TUPLE[0], gramps.version.VERSION_TUPLE[1]))" 2>/dev/null || echo "60")
GRAMPS_PLUGINS_DIR="/opt/gramps-web/data/gramps/gramps${GRAMPS_VERSION}/plugins"
mkdir -p "$GRAMPS_PLUGINS_DIR"
curl -fsSL -o /tmp/gramps-addons.zip https://github.com/gramps-project/addons/archive/refs/heads/master.zip
$STD wget -q https://github.com/gramps-project/addons/archive/refs/heads/master.zip -O /tmp/gramps-addons.zip
for addon in FilterRules JSON; do
unzip -p /tmp/gramps-addons.zip "addons-master/gramps${GRAMPS_VERSION}/download/${addon}.addon.tgz" |
tar -xz -C "$GRAMPS_PLUGINS_DIR"
+1 -1
View File
@@ -44,7 +44,7 @@ function update_script() {
msg_info "Updating packages"
apt_update_safe
$STD apt -y upgrade
$STD apt-get -y upgrade
msg_ok "Updated packages"
msg_info "Backup old Keycloak"
+1 -1
View File
@@ -39,7 +39,7 @@ function update_script() {
msg_info "Updating packages"
apt_update_safe
$STD apt dist-upgrade -y
$STD apt-get dist-upgrade -y
ensure_dependencies "inotify-tools"
msg_ok "Updated packages"
+12 -13
View File
@@ -54,19 +54,22 @@ EOF
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.pterodactyl-panel
fi
if check_for_gh_release "pterodactyl-panel" "pterodactyl/panel"; then
msg_info "Stopping Service"
cd /opt/pterodactyl-panel
$STD php artisan down
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
cp -r /opt/pterodactyl-panel/.env /opt/
rm -rf * .*
curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz")
tar -xzf "panel.tar.gz"
mv /opt/.env /opt/pterodactyl-panel/
create_backup /opt/pterodactyl-panel/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pterodactyl-panel" "pterodactyl/panel" "prebuild" "latest" "/opt/pterodactyl-panel" "panel.tar.gz"
restore_backup
msg_info "Updating ${APP}"
cd /opt/pterodactyl-panel
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan view:clear
$STD php artisan config:clear
@@ -74,17 +77,13 @@ EOF
chown -R www-data:www-data /opt/pterodactyl-panel/*
chmod -R 755 /opt/pterodactyl-panel/storage /opt/pterodactyl-panel/bootstrap/cache/
ln -s /opt/pterodactyl-panel /var/www/pterodactyl
rm -rf "/opt/pterodactyl-panel/panel.tar.gz"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_ok "Updated ${APP}"
msg_info "Starting Service"
$STD php artisan queue:restart
$STD php artisan up
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
+5 -10
View File
@@ -56,17 +56,12 @@ update_alpine() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then
msg_info "Updating ${APP} LXC"
temp_file=$(mktemp)
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file"
$STD unzip -o "$temp_file" '*/**' -d /opt/rclone
rm -f "$temp_file"
echo "${RELEASE}" >/opt/rclone_version.txt
if [[ -f /opt/rclone_version.txt ]]; then
mv /opt/rclone_version.txt ~/.rclone
fi
if check_for_gh_release "rclone" "rclone/rclone"; then
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
}
+2 -2
View File
@@ -44,8 +44,8 @@ function update_script() {
msg_info "Migrating to v4: Removing RabbitMQ"
systemctl stop rabbitmq-server
systemctl disable rabbitmq-server
$STD apt purge -y rabbitmq-server erlang-base
$STD apt autoremove -y
$STD apt-get purge -y rabbitmq-server erlang-base
$STD apt-get autoremove -y
msg_ok "Removed RabbitMQ"
fi
+1 -1
View File
@@ -109,7 +109,7 @@ function update_script() {
if [[ -f /etc/angie/http.d/romm.conf ]]; then
if ! grep -q "js_content decode.decodeBase64" /etc/angie/http.d/romm.conf; then
msg_info "Adding missing /decode and /cache locations to Angie config"
dpkg -l angie-module-njs &>/dev/null || $STD apt install -y angie-module-njs
dpkg -l angie-module-njs &>/dev/null || $STD apt-get install -y angie-module-njs
grep -q "ngx_http_js_module.so" /etc/angie/angie.conf || sed -i '1i load_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf
mkdir -p /etc/angie/js "${ROMM_BASE}/cache"
cat <<'JSEOF' >/etc/angie/js/decode.js
+16 -27
View File
@@ -66,41 +66,30 @@ update_alpine() {
exit
fi
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
msg_info "Updating RustDesk Server to v${RELEASE}"
if check_for_gh_release "rustdesk-server" "lejianwen/rustdesk-server"; then
msg_info "Stopping RustDesk Server"
$STD apk -U upgrade
$STD service rustdesk-server-hbbs stop
$STD service rustdesk-server-hbbr stop
temp_file1=$(mktemp)
ARCH=$(arch_resolve "amd64" "arm64v8")
curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1"
$STD unzip "$temp_file1"
cp -r "$ARCH"/* /opt/rustdesk-server/
echo "${RELEASE}" >~/.rustdesk-server
msg_ok "Stopped RustDesk Server"
fetch_and_deploy_gh_release "rustdesk-server" "lejianwen/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip"
msg_info "Starting RustDesk Server"
$STD service rustdesk-server-hbbs start
$STD service rustdesk-server-hbbr start
rm -rf "$ARCH"
rm -f "$temp_file1"
msg_ok "Updated RustDesk Server"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
msg_ok "Started RustDesk Server"
fi
if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then
msg_info "Updating RustDesk API to v${APIRELEASE}"
if check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then
msg_info "Stopping RustDesk API"
$STD service rustdesk-api stop
temp_file2=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2"
$STD tar zxvf "$temp_file2"
cp -r release/* /opt/rustdesk-api
echo "${APIRELEASE}" >~/.rustdesk-api
msg_ok "Stopped RustDesk API"
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "prebuild" "latest" "/opt/rustdesk-api" "linux-$(arch_resolve).tar.gz"
msg_info "Starting RustDesk API"
$STD service rustdesk-api start
rm -rf release
rm -f "$temp_file2"
msg_ok "Updated RustDesk API"
else
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
msg_ok "Started RustDesk API"
fi
msg_ok "Updated successfully!"
}
+7 -12
View File
@@ -29,34 +29,29 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.tasmocompiler
fi
if check_for_gh_release "tasmocompiler" "benzino77/tasmocompiler"; then
msg_info "Stopping Service"
systemctl stop tasmocompiler
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tasmocompiler" "benzino77/tasmocompiler" "tarball"
msg_info "Updating TasmoCompiler"
cd /opt
rm -rf /opt/tasmocompiler
RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz")
tar xzf v${RELEASE}.tar.gz
mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/
cd /opt/tasmocompiler
$STD yarn install
export NODE_OPTIONS=--openssl-legacy-provider
$STD npm i
$STD yarn build
rm -r "/opt/v${RELEASE}.tar.gz"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated TasmoCompiler"
msg_info "Starting Service"
systemctl start tasmocompiler
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
+2 -10
View File
@@ -62,8 +62,7 @@ update_alpine() {
$STD apk -U upgrade
msg_ok "Updated packages"
RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then
if check_for_gh_release "tinyauth" "tinyauthapp/tinyauth"; then
msg_info "Stopping Service"
$STD service tinyauth stop
msg_ok "Service Stopped"
@@ -82,19 +81,12 @@ update_alpine() {
msg_ok "Migrated .env to v5 format"
fi
msg_info "Updating Tinyauth"
rm -f /opt/tinyauth/tinyauth
curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth
chmod +x /opt/tinyauth/tinyauth
echo "${RELEASE}" >~/.tinyauth
msg_ok "Updated Tinyauth"
fetch_and_deploy_gh_release "tinyauth" "tinyauthapp/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)"
msg_info "Restarting Tinyauth"
$STD service tinyauth start
msg_ok "Restarted Tinyauth"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
}
+1 -1
View File
@@ -31,7 +31,7 @@ function update_script() {
fi
msg_info "Updating ${APP} LXC"
apt_update_safe
$STD apt -y upgrade
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!"
exit
+1 -1
View File
@@ -42,7 +42,7 @@ function update_script() {
msg_info "Updating UHF Server"
if dpkg -l ffmpeg 2>&1 | grep -q "ii"; then
$STD apt remove -y ffmpeg && $STD apt autoremove -y
apt remove ffmpeg -y && apt autoremove -y
fi
setup_ffmpeg
fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-$(arch_resolve "x64" "arm64")-*.zip"
+7 -17
View File
@@ -30,11 +30,11 @@ function update_script() {
exit
fi
ensure_dependencies zstd
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.wastebin
fi
msg_info "Running Migration"
if [[ ! -f /opt/${APP}_version.txt ]]; then
echo "2.7.1" >/opt/${APP}_version.txt
if [[ ! -f /opt/wastebin-data/.env ]]; then
mkdir -p /opt/wastebin-data
cat <<EOF >/opt/wastebin-data/.env
WASTEBIN_DATABASE_PATH=/opt/wastebin-data/wastebin.db
@@ -60,28 +60,18 @@ EOF
systemctl daemon-reload
fi
msg_ok "Migration Done"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if check_for_gh_release "wastebin" "matze/wastebin"; then
msg_info "Stopping Wastebin"
systemctl stop wastebin
msg_ok "Wastebin Stopped"
msg_info "Updating Wastebin"
temp_file=$(mktemp)
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl.tar.zst" -o "$temp_file"
tar -xf "$temp_file"
cp -f wastebin* /opt/wastebin/
chmod +x /opt/wastebin/wastebin
chmod +x /opt/wastebin/wastebin-ctl
rm -f "$temp_file"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Wastebin"
fetch_and_deploy_gh_release "wastebin" "matze/wastebin" "prebuild" "latest" "/opt/wastebin" "wastebin_*_$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl.tar.zst"
chmod +x /opt/wastebin/wastebin /opt/wastebin/wastebin-ctl
msg_info "Starting Wastebin"
systemctl start wastebin
msg_ok "Started Wastebin"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
+1 -1
View File
@@ -31,7 +31,7 @@ function update_script() {
fi
msg_info "Updating OS"
apt_update_safe
$STD apt -y upgrade
$STD apt-get -y upgrade
msg_ok "Updated OS"
msg_info "Updating $APP LXC"
-1
View File
@@ -19,4 +19,3 @@ msg_ok "Installed Dependencies"
motd_ssh
customize
cleanup_lxc
+7 -9
View File
@@ -19,12 +19,9 @@ $STD apk add --no-cache \
python3
msg_ok "Installed Dependencies"
msg_info "Installing IT-Tools"
RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
curl -fsSL "https://github.com/sharevb/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" -o it-tools.zip
mkdir -p /usr/share/nginx/html
$STD unzip it-tools.zip -d /tmp/
mv /tmp/dist/* /usr/share/nginx/html
fetch_and_deploy_gh_release "it-tools" "sharevb/it-tools" "prebuild" "latest" "/usr/share/nginx/html" "it-tools-*.zip"
msg_info "Configuring IT-Tools"
cat <<'EOF' >/etc/nginx/http.d/default.conf
server {
listen 80;
@@ -39,12 +36,13 @@ server {
EOF
$STD rc-update add nginx default
$STD rc-service nginx start
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
msg_ok "Installed IT-Tools"
msg_ok "Configured IT-Tools"
motd_ssh
customize
msg_info "Cleaning up"
rm -rf /tmp/dist
rm -f it-tools.zip
cleanup_lxc
$STD apk cache clean
msg_ok "Cleaned"
-1
View File
@@ -194,4 +194,3 @@ msg_ok "Finished Nextcloud Setup-Wizard"
motd_ssh
customize
cleanup_lxc
+3 -1
View File
@@ -93,4 +93,6 @@ msg_ok "Started Redlib Service"
motd_ssh
customize
cleanup_lxc
msg_info "Cleaning up"
$STD apk cache clean
msg_ok "Cleaned"
-1
View File
@@ -55,4 +55,3 @@ msg_ok "Started Wakapi"
motd_ssh
customize
cleanup_lxc
+2 -2
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
gdal-bin \
tesseract-ocr \
tesseract-ocr-eng \
@@ -24,7 +24,7 @@ $STD apt install -y \
tesseract-ocr-deu
$STD echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections
$STD apt install -y \
$STD apt-get install -y \
xfonts-utils \
fonts-freefont-ttf \
fonts-liberation \
+2 -2
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
git \
expect \
libssl-dev \
@@ -27,7 +27,7 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
msg_info "Installing Python Dependencies"
$STD apt install -y \
$STD apt-get install -y \
python3-ldap \
python3-msgpack \
python3-regex
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
uwsgi \
uwsgi-plugin-python3 \
libopenjp2-7-dev \
+4 -12
View File
@@ -90,20 +90,14 @@ setup_alpine() {
$STD rc-service postgresql start
msg_ok "Installed PostreSQL"
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball"
msg_info "Installing bitmagnet v${RELEASE}"
mkdir -p /opt/bitmagnet
temp_file=$(mktemp)
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
msg_info "Building bitmagnet"
cd /opt/bitmagnet
VREL=v$RELEASE
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v$(cat ~/.bitmagnet)"
chmod +x bitmagnet
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
echo "${RELEASE}" >/opt/bitmagnet_version.txt
msg_ok "Installed bitmagnet v${RELEASE}"
msg_ok "Built bitmagnet"
read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
@@ -133,8 +127,6 @@ EOF
msg_info "Starting bitmagnet"
$STD service bitmagnet start
msg_ok "Started bitmagnet"
rm -f "$temp_file"
}
run_os_setup
+2 -4
View File
@@ -78,12 +78,10 @@ EOF
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "prebuild" "latest" "/opt/xcaddy" "xcaddy_*_linux_$(arch_resolve).tar.gz"
ln -sf /opt/xcaddy/xcaddy /usr/local/bin/xcaddy
msg_info "Setup xCaddy"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.tar.gz" -o "xcaddy_${RELEASE:1}_linux_amd64.tar.gz"
$STD tar xzf xcaddy_"${RELEASE:1}"_linux_amd64.tar.gz -C /usr/local/bin xcaddy
rm -rf /opt/xcaddy*
$STD xcaddy build
msg_ok "Setup xCaddy"
fi
+3 -3
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies (Patience)"
$STD apt install -y \
$STD apt-get install -y \
git \
build-essential \
dumb-init \
@@ -85,7 +85,7 @@ $STD npm prune production --prefix /opt/browserless
msg_ok "Installed Browserless & Playwright"
msg_info "Installing Font Packages"
$STD apt install -y \
$STD apt-get install -y \
fontconfig \
libfontconfig1 \
fonts-freefont-ttf \
@@ -100,7 +100,7 @@ $STD apt install -y \
msg_ok "Installed Font Packages"
msg_info "Installing X11 Packages"
$STD apt install -y \
$STD apt-get install -y \
libx11-6 \
libx11-xcb1 \
libxcb1 \
+1
View File
@@ -159,6 +159,7 @@ StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
$STD systemctl daemon-reload
$STD systemctl enable -q --now databasus
msg_ok "Created Databasus Service"
+2 -5
View File
@@ -30,7 +30,7 @@ setup_deb_based() {
if [[ -n "$socket" ]]; then
msg_info "Enabling Docker TCP socket on $socket"
$STD apt install -y jq
$STD apt-get install -y jq
tmpfile=$(mktemp)
jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json >"$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json
@@ -65,10 +65,7 @@ setup_alpine() {
$STD rc-update add docker default
msg_ok "Installed Docker"
get_latest_release() {
curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose")
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_github_release "docker/compose" false)
read -r -p "${TAB3}Would you like to add Docker Compose? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
+2 -2
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
php-imap \
debconf-utils
msg_ok "Installed Dependencies"
@@ -36,7 +36,7 @@ RELEASE=$(curl -fsSL "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debia
FILE=$(curl -fsSL "${BASE}${RELEASE}/" | grep -oP 'dolibarr_[^"]+_all.deb' | head -n1)
curl -fsSL "https://altushost-swe.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -o ""$FILE""
echo "dolibarr dolibarr/reconfigure-webserver multiselect apache2" | debconf-set-selections
$STD apt install ./$FILE -y
$STD apt-get install ./$FILE -y
$STD apt install -f
rm -rf ~/$FILE
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
+2 -2
View File
@@ -15,12 +15,12 @@ update_os
msg_info "Installing Dependencies"
apt_update_safe
$STD apt install -y \
$STD apt-get install -y \
ssh \
software-properties-common
$STD add-apt-repository -y ppa:dotnet/backports
$STD apt install -y \
$STD apt-get install -y \
dotnet-sdk-9.0 \
vsftpd \
nginx
+1 -6
View File
@@ -51,12 +51,7 @@ EOF
$STD systemctl restart mariadb
msg_ok "Configured MariaDB for ERPNext"
msg_info "Installing wkhtmltopdf"
WKHTMLTOPDF_URL="https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_$(arch_resolve).deb"
$STD curl -fsSL -o /tmp/wkhtmltox.deb "$WKHTMLTOPDF_URL"
$STD apt install -y /tmp/wkhtmltox.deb
rm -f /tmp/wkhtmltox.deb
msg_ok "Installed wkhtmltopdf"
fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb"
msg_info "Installing Frappe Bench"
useradd -m -s /bin/bash frappe
+1 -1
View File
@@ -15,7 +15,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
apt-transport-https \
xvfb
msg_ok "Installed Dependencies"
+1 -9
View File
@@ -41,14 +41,7 @@ Password: $DB_PASS
EOF
msg_ok "Set up database"
msg_info "Installing GLPi"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
curl -fsSL "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz" -o $(basename "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz")
$STD tar -xzvf glpi-${RELEASE}.tgz
cd /opt/glpi
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed GLPi"
fetch_and_deploy_gh_release "glpi" "glpi-project/glpi" "prebuild" "latest" "/opt/glpi" "glpi-*.tgz"
msg_info "Setting Downstream file"
cat <<EOF >/opt/glpi/inc/downstream.php
@@ -133,7 +126,6 @@ $STD a2dissite 000-default.conf
$STD a2enmod rewrite
$STD a2ensite glpi.conf
rm -rf /opt/glpi/install/install.php
rm -rf /opt/glpi-${RELEASE}.tgz
msg_ok "Setup Service"
msg_info "Setup Cronjob"
+1 -1
View File
@@ -82,7 +82,7 @@ GRAMPS_PLUGINS_DIR="/opt/gramps-web/data/gramps/gramps${GRAMPS_VERSION}/plugins"
mkdir -p "$GRAMPS_PLUGINS_DIR"
msg_info "Installing Gramps Addons (gramps${GRAMPS_VERSION})"
curl -fsSL -o /tmp/gramps-addons.zip https://github.com/gramps-project/addons/archive/refs/heads/master.zip
$STD wget -q https://github.com/gramps-project/addons/archive/refs/heads/master.zip -O /tmp/gramps-addons.zip
for addon in FilterRules JSON; do
unzip -p /tmp/gramps-addons.zip "addons-master/gramps${GRAMPS_VERSION}/download/${addon}.addon.tgz" | \
tar -xz -C "$GRAMPS_PLUGINS_DIR"
+2 -2
View File
@@ -20,13 +20,13 @@ PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
$STD dpkg -i graylog-7.0-repository_latest.deb
apt_update_safe
$STD apt install graylog-datanode -y
$STD apt-get install graylog-datanode -y
sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf
systemctl enable -q --now graylog-datanode
msg_ok "Setup Graylog Data Node"
msg_info "Setup ${APPLICATION}"
$STD apt install graylog-server
$STD apt-get install graylog-server
ROOT_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
cat <<EOF >~/graylog.creds
${APPLICATION} Credentials
+1
View File
@@ -79,6 +79,7 @@ ExecStart=/opt/homarr/run.sh
WantedBy=multi-user.target
EOF
chmod +x /opt/homarr/run.sh
systemctl daemon-reload
systemctl enable -q --now redis-server
systemctl enable -q --now homarr
systemctl disable -q --now nginx
+1 -5
View File
@@ -26,11 +26,7 @@ msg_info "Installing runlike"
$STD pip install runlike
msg_ok "Installed runlike"
get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
CORE_LATEST_VERSION=$(get_latest_release "home-assistant/core")
CORE_LATEST_VERSION=$(get_latest_github_release "home-assistant/core")
setup_docker
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y"
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y jq
$STD apt-get install -y jq
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
+3 -1
View File
@@ -111,7 +111,9 @@ server {
}
}
EOF
nginx_enable_site ignis.conf
ln -sf /etc/nginx/sites-available/ignis.conf /etc/nginx/sites-enabled/ignis.conf
rm -f /etc/nginx/sites-enabled/default
systemctl restart nginx
msg_ok "Configured Nginx"
motd_ssh
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y libicu-dev
$STD apt-get install -y libicu-dev
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.Linux$(arch_resolve "AMDx64" "ARM64").tar.gz"
+2 -1
View File
@@ -34,7 +34,7 @@ msg_ok "Installed GUI Dependencies"
msg_info "Downloading JDownloader"
mkdir -p /opt/jdownloader
curl -fsSL -o /opt/jdownloader/JDownloader.jar https://installer.jdownloader.org/JDownloader.jar
$STD wget -O /opt/jdownloader/JDownloader.jar https://installer.jdownloader.org/JDownloader.jar
msg_ok "Downloaded JDownloader"
msg_info "Installing JDownloader (Patience)"
@@ -194,6 +194,7 @@ EOF
msg_ok "Created Services"
msg_info "Starting Services"
systemctl daemon-reload
systemctl enable -q --now xvfb
sleep 2
systemctl enable -q --now openbox
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y libicu-dev
$STD apt-get install -y libicu-dev
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "Kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-$(arch_resolve "x64" "arm64").tar.gz"
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
build-essential \
git \
openssl \
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
build-essential \
ca-certificates \
cmake \
+4 -1
View File
@@ -148,4 +148,7 @@ msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
+1 -1
View File
@@ -80,7 +80,7 @@ setup_alpine() {
sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf
mkdir -p /var/www/localhost/htdocs
ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
ADMINER_VERSION=$(get_latest_github_release "vrana/adminer")
curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
chmod 755 /var/www/localhost/htdocs/adminer.php
+1
View File
@@ -111,6 +111,7 @@ systemctl restart apache2
mv /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
mv /opt/netbox/contrib/*.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable -q --now netbox netbox-rq
echo -e "Netbox Secret: \e[32m$SECRET_KEY\e[0m" >>~/netbox.creds
msg_ok "Configured NetBox"
+1
View File
@@ -65,6 +65,7 @@ KillMode=mixed
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
msg_ok "Created Service"
msg_info "Starting Service"
+1 -5
View File
@@ -25,10 +25,7 @@ $STD apk add docker
$STD rc-service docker start
$STD rc-update add docker default
get_latest_release() {
curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose")
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_github_release "docker/compose" false)
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose
@@ -86,4 +83,3 @@ msg_ok "Builded and started NPMplus"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -37,7 +37,7 @@ couchdb couchdb/adminpass seen true
couchdb couchdb/adminpass_again password ${COUCHDB_PASSWORD}
couchdb couchdb/adminpass_again seen true
EOF
DEBIAN_FRONTEND=noninteractive $STD apt install -y couchdb
DEBIAN_FRONTEND=noninteractive $STD apt-get install -y couchdb
cat <<EOF >/root/.couchdb.credentials
COUCHDB_ADMIN_USER="${COUCHDB_ADMIN_USER}"
+1 -1
View File
@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
JAVA_VERSION="21" setup_java
msg_info "Installing OneDev"
RELEASE=$(curl -fsSL https://api.github.com/repos/theonedev/onedev/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
RELEASE=$(get_latest_github_release "theonedev/onedev" false)
cd /opt
curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o onedev-latest.tar.gz
tar -xzf onedev-latest.tar.gz
+1 -1
View File
@@ -51,7 +51,7 @@ Suites: ./
Signed-By: /etc/apt/keyrings/collaboraonline-release-keyring.gpg
EOF
apt_update_safe
$STD apt install -y coolwsd code-brand
$STD apt-get install -y coolwsd code-brand
systemctl stop coolwsd
mkdir -p /etc/systemd/system/coolwsd.service.d
cat <<EOF >/etc/systemd/system/coolwsd.service.d/override.conf
+1
View File
@@ -33,6 +33,7 @@ chown -R openhab:openhab /var/lib/openhab /etc/openhab /var/log/openhab
msg_ok "Initialized openHAB directories"
msg_info "Starting Service"
systemctl daemon-reload
systemctl enable -q --now openhab
msg_ok "Started Service"
+1
View File
@@ -268,6 +268,7 @@ RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now plane-api plane-worker plane-beat plane-live plane-space
cat <<EOF >~/plane.creds
RabbitMQ User: plane
+1 -1
View File
@@ -180,7 +180,7 @@ setup_alpine() {
sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf
mkdir -p /var/www/localhost/htdocs
ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
ADMINER_VERSION=$(get_latest_github_release "vrana/adminer")
curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
chmod 755 /var/www/localhost/htdocs/adminer.php
+2 -6
View File
@@ -64,12 +64,10 @@ read -p "${TAB3}Provide an email address for admin login, this should be a valid
read -p "${TAB3}Enter your First Name: " NAME_FIRST
read -p "${TAB3}Enter your Last Name: " NAME_LAST
fetch_and_deploy_gh_release "pterodactyl-panel" "pterodactyl/panel" "prebuild" "latest" "/opt/pterodactyl-panel" "panel.tar.gz"
msg_info "Installing pterodactyl Panel"
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
mkdir /opt/pterodactyl-panel
cd /opt/pterodactyl-panel
curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o "panel.tar.gz"
tar -xzf "panel.tar.gz"
cp .env.example .env
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD composer install --no-dev --optimize-autoloader --no-interaction
@@ -88,9 +86,7 @@ pterodactyl Admin Username: admin
pterodactyl Admin Email: $ADMIN_EMAIL
pterodactyl Admin Password: $ADMIN_PASS
EOF
rm -rf "/opt/pterodactyl-panel/panel.tar.gz"
rm -rf "/tmp/debsuryorg-archive-keyring.deb"
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
msg_ok "Installed pterodactyl Panel"
msg_info "Creating Service"
+4 -11
View File
@@ -57,12 +57,9 @@ setup_alpine() {
apache2-utils fuse3
msg_ok "Installed dependencies"
msg_info "Installing rclone"
temp_file=$(mktemp)
mkdir -p /opt/rclone
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file"
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip"
msg_info "Configuring rclone"
cd /opt/rclone
RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16)
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
@@ -71,9 +68,7 @@ rclone-Credentials
rclone User Name: admin
rclone Password: $RCLONE_PASSWORD
EOF
echo "${RELEASE}" >/opt/rclone_version.txt
rm -f "$temp_file"
msg_ok "Installed rclone"
msg_ok "Configured rclone"
msg_info "Enabling rclone Service"
cat <<EOF >/etc/init.d/rclone
@@ -96,8 +91,6 @@ EOF
msg_info "Starting rclone"
$STD service rclone start
msg_ok "Started rclone"
rm -rf "$temp_file"
}
run_os_setup
+1
View File
@@ -115,6 +115,7 @@ RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now chromium-printer.service reactive-resume.service
msg_ok "Created Services"
+1 -1
View File
@@ -49,7 +49,7 @@ setup_deb822_repo \
"https://download.angie.software/angie/debian/$(get_os_info version_id)" \
"$(get_os_info codename)" \
"main"
$STD apt install -y angie angie-module-zip angie-module-njs
$STD apt-get install -y angie angie-module-zip angie-module-njs
sed -i '1i load_module modules/ngx_http_zip_module.so;\nload_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf
mkdir -p /etc/angie/js
cat <<'EOF' >/etc/angie/js/decode.js
+1
View File
@@ -55,6 +55,7 @@ EOF
cat <<EOF >>/etc/php/${PHP_VER}/fpm/pool.d/www.conf
env[CURL_IMPERSONATE] = chrome142
EOF
$STD systemctl daemon-reload
safe_service_restart php${PHP_VER}-fpm
msg_ok "Enabled curl-impersonate for PHP-FPM"
fi
+8 -19
View File
@@ -24,13 +24,9 @@ setup_deb_based() {
}
setup_alpine() {
RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
msg_info "Installing RustDesk Server v${RELEASE}"
temp_file1=$(mktemp)
ARCH=$(arch_resolve "amd64" "arm64v8")
curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1"
$STD unzip "$temp_file1"
mv "$ARCH" /opt/rustdesk-server
fetch_and_deploy_gh_release "rustdesk-server" "lejianwen/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip"
msg_info "Configuring RustDesk Server"
mkdir -p /root/.config/rustdesk
cd /opt/rustdesk-server
./rustdesk-utils genkeypair >/tmp/rustdesk_keys.txt
@@ -39,15 +35,11 @@ setup_alpine() {
chmod 600 /root/.config/rustdesk/id_ed25519
chmod 644 /root/.config/rustdesk/id_ed25519.pub
rm /tmp/rustdesk_keys.txt
echo "${RELEASE}" >~/.rustdesk-server
msg_ok "Installed RustDesk Server v${RELEASE}"
msg_ok "Configured RustDesk Server"
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing RustDesk API v${APIRELEASE}"
temp_file2=$(mktemp)
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2"
$STD tar zxvf "$temp_file2"
mv release /opt/rustdesk-api
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "prebuild" "latest" "/opt/rustdesk-api" "linux-$(arch_resolve).tar.gz"
msg_info "Configuring RustDesk API"
cd /opt/rustdesk-api
ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16)
$STD ./apimain reset-admin-pwd "$ADMINPASS"
@@ -57,8 +49,7 @@ RustDesk WebUI
Username: admin
Password: $ADMINPASS
EOF
echo "${APIRELEASE}" >~/.rustdesk-api
msg_ok "Installed RustDesk API v${APIRELEASE}"
msg_ok "Configured RustDesk API"
msg_info "Enabling RustDesk Server Services"
cat <<EOF >/etc/init.d/rustdesk-server-hbbs
@@ -124,8 +115,6 @@ EOF
$STD service rustdesk-server-hbbr start
$STD service rustdesk-api start
msg_ok "Started RustDesk Server"
rm -f "$temp_file1" "$temp_file2"
}
run_os_setup
+4 -4
View File
@@ -16,16 +16,16 @@ update_os
setup_hwaccel
msg_info "Installing Dependencies"
$STD apt install -y make zip net-tools git
$STD apt install -y gcc g++ cmake
$STD apt install -y ca-certificates
$STD apt-get install -y make zip net-tools git
$STD apt-get install -y gcc g++ cmake
$STD apt-get install -y ca-certificates
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
setup_mariadb
msg_info "Installing FFMPEG"
$STD apt install -y ffmpeg
$STD apt-get install -y ffmpeg
msg_ok "Installed FFMPEG"
msg_info "Cloning Shinobi"
+1
View File
@@ -122,6 +122,7 @@ RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now snapotter
msg_ok "Created Service"
+1 -1
View File
@@ -39,7 +39,7 @@ setup_deb822_repo \
"https://packages.microsoft.com/ubuntu/22.04/prod" \
"jammy" \
"main"
$STD apt install -y \
$STD apt-get install -y \
mssql-tools18 \
unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >>~/.bash_profile
+1 -1
View File
@@ -39,7 +39,7 @@ setup_deb822_repo \
"https://packages.microsoft.com/ubuntu/24.04/prod" \
"noble" \
"main"
$STD apt install -y \
$STD apt-get install -y \
mssql-tools18 \
unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >>~/.bash_profile
+3 -1
View File
@@ -51,7 +51,9 @@ server {
}
}
EOF
nginx_enable_site super-productivity.conf
ln -sf /etc/nginx/sites-available/super-productivity.conf /etc/nginx/sites-enabled/super-productivity.conf
rm -f /etc/nginx/sites-enabled/default
systemctl reload nginx
msg_ok "Configured Nginx"
motd_ssh
+3 -8
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies. Patience"
$STD apt install -y \
$STD apt-get install -y \
git \
python3-venv
msg_ok "Installed Dependencies"
@@ -26,13 +26,10 @@ curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/pla
$STD python3 get-platformio.py
msg_ok "Setup Platformio"
fetch_and_deploy_gh_release "tasmocompiler" "benzino77/tasmocompiler" "tarball"
msg_info "Setup TasmoCompiler"
mkdir /tmp/Tasmota
RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl_download "/tmp/v${RELEASE}.tar.gz" "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz"
cd /tmp
tar xzf /tmp/v${RELEASE}.tar.gz
mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/
cd /opt/tasmocompiler
$STD yarn install
export NODE_OPTIONS=--openssl-legacy-provider
@@ -42,8 +39,6 @@ mkdir -p /usr/local/bin
ln -s ~/.platformio/penv/bin/platformio /usr/local/bin/platformio
ln -s ~/.platformio/penv/bin/pio /usr/local/bin/pio
ln -s ~/.platformio/penv/bin/piodebuggdb /usr/local/bin/piodebuggdb
rm -f /tmp/v${RELEASE}.tar.gz
echo "${RELEASE}" >"/opt/tasmocompiler_version.txt"
msg_ok "Setup TasmoCompiler"
msg_info "Creating Service"
+1
View File
@@ -35,6 +35,7 @@ export SPRING_DATASOURCE_PASSWORD=${PG_DB_PASS}
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
EOF
systemctl daemon-reload
msg_ok "Configured ThingsBoard"
msg_info "Running ThingsBoard Installation Script"
+4 -7
View File
@@ -64,11 +64,9 @@ setup_alpine() {
$STD apk add --no-cache openssl apache2-utils
msg_ok "Installed Dependencies"
msg_info "Installing Tinyauth"
mkdir -p /opt/tinyauth
RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth
chmod +x /opt/tinyauth/tinyauth
fetch_and_deploy_gh_release "tinyauth" "tinyauthapp/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)"
msg_info "Configuring Tinyauth"
PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
USER=$(htpasswd -Bbn "tinyauth" "${PASS}")
@@ -77,8 +75,7 @@ Tinyauth Credentials
Username: tinyauth
Password: ${PASS}
EOF
echo "${RELEASE}" >~/.tinyauth
msg_ok "Installed Tinyauth"
msg_ok "Configured Tinyauth"
read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url
+1 -1
View File
@@ -34,7 +34,7 @@ apt_update_safe
msg_ok "Setup Twingate Repository"
msg_info "Setup Twingate Connector"
$STD apt install -y twingate-connector
$STD apt-get install -y twingate-connector
msg_ok "Setup Twingate Connector"
msg_info "Configure Twingate-Connector"
+1 -1
View File
@@ -44,7 +44,7 @@ $STD sudo -u www-data php /opt/wallos/endpoints/db/migrate.php
msg_ok "Installed Wallos"
msg_info "Setting up Crontabs"
$STD apt install -y cron
$STD apt-get install -y cron
mkdir -p /var/log/cron
cat <<EOF >/opt/wallos.cron
0 1 * * * php /opt/wallos/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1
+5 -13
View File
@@ -17,15 +17,10 @@ msg_info "Installing dependencies"
$STD apt install -y zstd
msg_ok "Installed dependencies"
msg_info "Installing Wastebin"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl.tar.zst" -o "$temp_file"
tar -xf "$temp_file"
mkdir -p /opt/wastebin
mv wastebin* /opt/wastebin/
chmod +x /opt/wastebin/wastebin
chmod +x /opt/wastebin/wastebin-ctl
fetch_and_deploy_gh_release "wastebin" "matze/wastebin" "prebuild" "latest" "/opt/wastebin" "wastebin_*_$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl.tar.zst"
chmod +x /opt/wastebin/wastebin /opt/wastebin/wastebin-ctl
msg_info "Configuring Wastebin"
mkdir -p /opt/wastebin-data
cat <<EOF >/opt/wastebin-data/.env
@@ -35,10 +30,7 @@ WASTEBIN_HTTP_TIMEOUT=30
WASTEBIN_SIGNING_KEY=$(openssl rand -hex 32)
WASTEBIN_PASTE_EXPIRATIONS=0,600,3600=d,86400,604800,2419200,29030400
EOF
rm -f "$temp_file"
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Wastebin"
msg_ok "Configured Wastebin"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/wastebin.service
+1 -1
View File
@@ -13,7 +13,7 @@ setting_up_container
network_check
update_os
RELEASE=$(curl -fsSL https://api.github.com/repos/wazuh/wazuh/releases/latest | grep '"tag_name"' | awk -F '"' '{print substr($4, 2, length($2)-4)}')
RELEASE=$(get_latest_github_release "wazuh/wazuh" | cut -d. -f1,2)
msg_warn "WARNING: This script will run an external installer from a third-party source (https://wazuh.com/)."
msg_warn "The following code is NOT maintained or audited by our repository."
+1 -1
View File
@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
apt-transport-https \
lsb-release \
ca-certificates
+1 -1
View File
@@ -15,7 +15,7 @@ update_os
msg_info "Installing Dependencies"
echo "davfs2 davfs2/suid_file boolean false" | debconf-set-selections
$STD apt install -y \
$STD apt-get install -y \
bzip2 \
fuse3 \
git \
+2 -1
View File
@@ -37,7 +37,7 @@ msg_ok "Setup Zerotier-One"
msg_info "Setting up UI"
if [[ "$(arch_resolve)" == "arm64" ]]; then
$STD apt install -y build-essential python3 openssl
$STD apt-get install -y build-essential python3 openssl
NODE_VERSION="20" setup_nodejs
curl -fsSL "https://github.com/key-networks/ztncui/archive/refs/heads/master.tar.gz" -o /tmp/ztncui.tar.gz
$STD tar -xzf /tmp/ztncui.tar.gz -C /tmp
@@ -68,6 +68,7 @@ Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q ztncui
else
curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb