mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-09-13 07:10:51 +02:00
Compare commits
113 Commits
2025-08-19
...
2025-08-24
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be4a6f1a4f | ||
|
|
b383d43d9c | ||
|
|
54b676b529 | ||
|
|
d465ca87f2 | ||
|
|
e32c2b7dea | ||
|
|
444cbc2aa1 | ||
|
|
497622832e | ||
|
|
f36ac8831e | ||
|
|
66049f400c | ||
|
|
8daa235a88 | ||
|
|
072595c8fb | ||
|
|
85f8e5cd73 | ||
|
|
07fbcf57d4 | ||
|
|
f09c5db961 | ||
|
|
c1e93d7d79 | ||
|
|
292e48f4b4 | ||
|
|
1d8b8c87bd | ||
|
|
acfcf98273 | ||
|
|
5bb15dedae | ||
|
|
07394b9a7d | ||
|
|
1fce2de5c1 | ||
|
|
88579d4be3 | ||
|
|
e7ccf9a512 | ||
|
|
52a9ad733d | ||
|
|
23f65d0eb7 | ||
|
|
aece852e10 | ||
|
|
d7dea7cc5d | ||
|
|
5cd24b503c | ||
|
|
2e5db6a283 | ||
|
|
32f6a76426 | ||
|
|
5d526717ef | ||
|
|
287265d554 | ||
|
|
e72f248918 | ||
|
|
c207d65b1b | ||
|
|
fb1d5d5a33 | ||
|
|
ed5dfa6eef | ||
|
|
8314e59973 | ||
|
|
b73c50399d | ||
|
|
50feb0d846 | ||
|
|
4773649706 | ||
|
|
ebb5d8f2c4 | ||
|
|
0555dbd93c | ||
|
|
e63bc92368 | ||
|
|
a74b7c4763 | ||
|
|
73178f5ff4 | ||
|
|
0358111f5f | ||
|
|
7346e7b1ab | ||
|
|
4add8e8273 | ||
|
|
49f1f7b1e2 | ||
|
|
e5a6a5f1c0 | ||
|
|
19365b5083 | ||
|
|
12d3457002 | ||
|
|
18abecbf9b | ||
|
|
2ead98c480 | ||
|
|
265321b0c0 | ||
|
|
bae22ebf82 | ||
|
|
c80f136871 | ||
|
|
faf4fbd0fd | ||
|
|
41e8958ab9 | ||
|
|
cdc546f879 | ||
|
|
4ded6585a2 | ||
|
|
2892b85a6f | ||
|
|
e28ab86797 | ||
|
|
2c3193ebb3 | ||
|
|
96959ffdb0 | ||
|
|
13fbf25ecd | ||
|
|
21d2159f22 | ||
|
|
a42ceeac98 | ||
|
|
6e7ad44d36 | ||
|
|
9ea852ffad | ||
|
|
d4bd7a6fda | ||
|
|
316f4043d4 | ||
|
|
f799c90712 | ||
|
|
7de8934105 | ||
|
|
15dedc1e16 | ||
|
|
13f46d2c58 | ||
|
|
ff7e7a6e10 | ||
|
|
c49519a7de | ||
|
|
8ce4776a87 | ||
|
|
9cda1a8680 | ||
|
|
c9b5e27d74 | ||
|
|
70ec048aa9 | ||
|
|
89af0c466b | ||
|
|
93a1710e20 | ||
|
|
91a5c9c48f | ||
|
|
e85353856b | ||
|
|
bf99523a94 | ||
|
|
c1b3321801 | ||
|
|
beb9189c72 | ||
|
|
186c82d156 | ||
|
|
9d431458ca | ||
|
|
9c86eea347 | ||
|
|
e20af295f0 | ||
|
|
68832d71fa | ||
|
|
2e13483f19 | ||
|
|
c7643ae88c | ||
|
|
f16f7a130a | ||
|
|
94a8fe7132 | ||
|
|
059d297305 | ||
|
|
2bd2a763a1 | ||
|
|
452ba92a6f | ||
|
|
d27a875987 | ||
|
|
14418411f6 | ||
|
|
f13c8ff3ce | ||
|
|
28dc145811 | ||
|
|
170543bb66 | ||
|
|
c783024ef0 | ||
|
|
19403a627b | ||
|
|
cc08395a1d | ||
|
|
d5093a3d9d | ||
|
|
52c4f3e0c2 | ||
|
|
76a4ec9e06 | ||
|
|
bebf6f65aa |
101
CHANGELOG.md
101
CHANGELOG.md
@@ -10,8 +10,109 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-08-25
|
||||
|
||||
## 2025-08-24
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Kasm: Fix install log parsing [@tremor021](https://github.com/tremor021) ([#7140](https://github.com/community-scripts/ProxmoxVE/pull/7140))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- BookLore: Fix Nginx config [@tremor021](https://github.com/tremor021) ([#7155](https://github.com/community-scripts/ProxmoxVE/pull/7155))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Syncthing: Switch to v2 stable repository [@tremor021](https://github.com/tremor021) ([#7150](https://github.com/community-scripts/ProxmoxVE/pull/7150))
|
||||
|
||||
## 2025-08-23
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- qBittorrent: Fix file names [@tremor021](https://github.com/tremor021) ([#7136](https://github.com/community-scripts/ProxmoxVE/pull/7136))
|
||||
- Tandoor: Fix env path [@tremor021](https://github.com/tremor021) ([#7130](https://github.com/community-scripts/ProxmoxVE/pull/7130))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Immich: v1.139.2 [@vhsdream](https://github.com/vhsdream) ([#7116](https://github.com/community-scripts/ProxmoxVE/pull/7116))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Pf2eTools [@tremor021](https://github.com/tremor021) ([#7096](https://github.com/community-scripts/ProxmoxVE/pull/7096))
|
||||
- Refactor: Prowlarr [@tremor021](https://github.com/tremor021) ([#7091](https://github.com/community-scripts/ProxmoxVE/pull/7091))
|
||||
- Refactor: Radarr [@tremor021](https://github.com/tremor021) ([#7088](https://github.com/community-scripts/ProxmoxVE/pull/7088))
|
||||
- Refactor: Snipe-IT [@tremor021](https://github.com/tremor021) ([#7081](https://github.com/community-scripts/ProxmoxVE/pull/7081))
|
||||
|
||||
## 2025-08-22
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Refactor: Prometheus [@tremor021](https://github.com/tremor021) ([#7093](https://github.com/community-scripts/ProxmoxVE/pull/7093))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- paperless: nltk fix [@MickLesk](https://github.com/MickLesk) ([#7098](https://github.com/community-scripts/ProxmoxVE/pull/7098))
|
||||
- Tududi Fix: use correct tag parsing for release during update check [@vhsdream](https://github.com/vhsdream) ([#7072](https://github.com/community-scripts/ProxmoxVE/pull/7072))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: phpIPAM [@tremor021](https://github.com/tremor021) ([#7095](https://github.com/community-scripts/ProxmoxVE/pull/7095))
|
||||
- Refactor: Prometheus Paperless NGX Exporter [@tremor021](https://github.com/tremor021) ([#7092](https://github.com/community-scripts/ProxmoxVE/pull/7092))
|
||||
- Refactor: PS5-MQTT [@tremor021](https://github.com/tremor021) ([#7090](https://github.com/community-scripts/ProxmoxVE/pull/7090))
|
||||
- Refactor: qBittorrent [@tremor021](https://github.com/tremor021) ([#7089](https://github.com/community-scripts/ProxmoxVE/pull/7089))
|
||||
- Refactor: RDTClient [@tremor021](https://github.com/tremor021) ([#7086](https://github.com/community-scripts/ProxmoxVE/pull/7086))
|
||||
- Refactor: Recyclarr [@tremor021](https://github.com/tremor021) ([#7085](https://github.com/community-scripts/ProxmoxVE/pull/7085))
|
||||
- Refactor: RevealJS [@tremor021](https://github.com/tremor021) ([#7084](https://github.com/community-scripts/ProxmoxVE/pull/7084))
|
||||
- Refactor: Rclone [@tremor021](https://github.com/tremor021) ([#7087](https://github.com/community-scripts/ProxmoxVE/pull/7087))
|
||||
- Refactor: Semaphore [@tremor021](https://github.com/tremor021) ([#7083](https://github.com/community-scripts/ProxmoxVE/pull/7083))
|
||||
- Refactor: Silverbullet [@tremor021](https://github.com/tremor021) ([#7082](https://github.com/community-scripts/ProxmoxVE/pull/7082))
|
||||
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#7094](https://github.com/community-scripts/ProxmoxVE/pull/7094))
|
||||
- Refactor: TasmoAdmin [@tremor021](https://github.com/tremor021) ([#7080](https://github.com/community-scripts/ProxmoxVE/pull/7080))
|
||||
|
||||
## 2025-08-21
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- LiteLLM ([#7052](https://github.com/community-scripts/ProxmoxVE/pull/7052))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tianji: add uv deps [@MickLesk](https://github.com/MickLesk) ([#7066](https://github.com/community-scripts/ProxmoxVE/pull/7066))
|
||||
- Zitadel: installer for v4 [@MickLesk](https://github.com/MickLesk) ([#7058](https://github.com/community-scripts/ProxmoxVE/pull/7058))
|
||||
- Paperless-NGX: create direction for nltk [@MickLesk](https://github.com/MickLesk) ([#7064](https://github.com/community-scripts/ProxmoxVE/pull/7064))
|
||||
- Immich: hotfix - revert 7035 [@vhsdream](https://github.com/vhsdream) ([#7054](https://github.com/community-scripts/ProxmoxVE/pull/7054))
|
||||
- duplicati: fix release pattern [@MickLesk](https://github.com/MickLesk) ([#7049](https://github.com/community-scripts/ProxmoxVE/pull/7049))
|
||||
- technitiumdns: fix unbound variable [@MickLesk](https://github.com/MickLesk) ([#7047](https://github.com/community-scripts/ProxmoxVE/pull/7047))
|
||||
- [core]: improve binary globbing for gh releases [@MickLesk](https://github.com/MickLesk) ([#7044](https://github.com/community-scripts/ProxmoxVE/pull/7044))
|
||||
|
||||
## 2025-08-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Post-Install, change pve-test for trixie [@MickLesk](https://github.com/MickLesk) ([#7031](https://github.com/community-scripts/ProxmoxVE/pull/7031))
|
||||
- Immich: fix small issue with immich-admin "start" script [@vhsdream](https://github.com/vhsdream) ([#7035](https://github.com/community-scripts/ProxmoxVE/pull/7035))
|
||||
- WasteBin: Small fixes [@tremor021](https://github.com/tremor021) ([#7018](https://github.com/community-scripts/ProxmoxVE/pull/7018))
|
||||
- Komga: Fix update [@tremor021](https://github.com/tremor021) ([#7027](https://github.com/community-scripts/ProxmoxVE/pull/7027))
|
||||
- Barcode Buddy: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#7020](https://github.com/community-scripts/ProxmoxVE/pull/7020))
|
||||
- PBS: ifupdown2 reload [@MickLesk](https://github.com/MickLesk) ([#7013](https://github.com/community-scripts/ProxmoxVE/pull/7013))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Feature: Netdata support PVE9 (Debian 13 Trixie) [@MickLesk](https://github.com/MickLesk) ([#7012](https://github.com/community-scripts/ProxmoxVE/pull/7012))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: RustDesk Server [@tremor021](https://github.com/tremor021) ([#7008](https://github.com/community-scripts/ProxmoxVE/pull/7008))
|
||||
- ghost: fix: verbose [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7023](https://github.com/community-scripts/ProxmoxVE/pull/7023))
|
||||
- Refactor: Paperless-ngx [@MickLesk](https://github.com/MickLesk) ([#6938](https://github.com/community-scripts/ProxmoxVE/pull/6938))
|
||||
|
||||
## 2025-08-19
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -34,7 +34,7 @@ function update_script() {
|
||||
systemctl stop duplicati
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start duplicati
|
||||
|
||||
6
ct/headers/litellm
Normal file
6
ct/headers/litellm
Normal file
@@ -0,0 +1,6 @@
|
||||
__ _ __ __ __ __ ___
|
||||
/ / (_) /____ / / / / / |/ /
|
||||
/ / / / __/ _ \/ / / / / /|_/ /
|
||||
/ /___/ / /_/ __/ /___/ /___/ / / /
|
||||
/_____/_/\__/\___/_____/_____/_/ /_/
|
||||
|
||||
56
ct/immich.sh
56
ct/immich.sh
@@ -29,6 +29,8 @@ function update_script() {
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
|
||||
STAGING_DIR=/opt/staging
|
||||
BASE_DIR=${STAGING_DIR}/base-images
|
||||
@@ -59,7 +61,7 @@ function update_script() {
|
||||
done
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
RELEASE="1.138.1"
|
||||
RELEASE="1.139.2"
|
||||
#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 [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
@@ -109,15 +111,19 @@ function update_script() {
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -a
|
||||
. "$INSTALL_DIR"/.env
|
||||
. ${INSTALL_DIR}/.env
|
||||
set +a
|
||||
|
||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
|
||||
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
|
||||
EOF
|
||||
chmod +x "$INSTALL_DIR"/start.sh
|
||||
fi
|
||||
rm -rf "${APP_DIR:?}"/*
|
||||
mkdir -p "$ML_DIR"
|
||||
|
||||
(
|
||||
shopt -s dotglob
|
||||
rm -rf "${APP_DIR:?}"/*
|
||||
)
|
||||
|
||||
rm -rf "$SRC_DIR"
|
||||
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
||||
@@ -127,30 +133,34 @@ EOF
|
||||
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
|
||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
|
||||
cp package.json "$APP_DIR"/bin
|
||||
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
export CI=1
|
||||
corepack enable
|
||||
|
||||
# server build
|
||||
$STD pnpm --filter immich --frozen-lockfile build
|
||||
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
|
||||
cp "$APP_DIR"/package.json "$APP_DIR"/bin
|
||||
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
||||
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
|
||||
|
||||
# openapi & web build
|
||||
cd "$SRC_DIR"
|
||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
||||
$STD pnpm --filter @immich/sdk --filter immich-web build
|
||||
cp -a web/build "$APP_DIR"/www
|
||||
cp LICENSE "$APP_DIR"
|
||||
|
||||
# cli build
|
||||
$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
|
||||
$STD pnpm --filter @immich/sdk --filter @immich/cli build
|
||||
$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
|
||||
cd "$APP_DIR"
|
||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||
$STD npm install sharp
|
||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
||||
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
||||
msg_ok "Updated ${APP} web and microservices"
|
||||
|
||||
cd "$SRC_DIR"/machine-learning
|
||||
mkdir -p "$ML_DIR"
|
||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
||||
if [[ -f ~/.openvino ]]; then
|
||||
@@ -178,10 +188,6 @@ EOF
|
||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
||||
ln -s "$GEO_DIR" "$APP_DIR"
|
||||
|
||||
msg_info "Updating Immich CLI"
|
||||
$STD npm i -g @immich/cli
|
||||
msg_ok "Updated Immich CLI"
|
||||
|
||||
chown -R immich:immich "$INSTALL_DIR"
|
||||
if [[ ! -f ~/.debian_version.bak ]]; then
|
||||
cp /etc/debian_version ~/.debian_version.bak
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
|
||||
if [[ ! -f ~/.komga-org ]] || [[ "${RELEASE}" != "$(cat ~/.komga-org)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop komga
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
60
ct/litellm.sh
Normal file
60
ct/litellm.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/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: stout01
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/BerriAI/litellm
|
||||
|
||||
APP="LiteLLM"
|
||||
var_tags="${var_tags:-ai;interface}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /etc/systemd/system/litellm.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop litellm
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
VENV_PATH="/opt/litellm/.venv"
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Updating $APP"
|
||||
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||
|
||||
msg_info "Updating DB Schema"
|
||||
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
msg_ok "DB Schema Updated"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start litellm
|
||||
msg_ok "Started ${APP}"
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
|
||||
@@ -9,7 +9,7 @@ APP="Paperless-ngx"
|
||||
var_tags="${var_tags:-document;management}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_disk="${var_disk:-12}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
@@ -20,70 +20,115 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/paperless ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if ! command -v jq &>/dev/null; then
|
||||
$STD apt-get install -y jq
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.paperless 2>/dev/null)" ]] || [[ ! -f ~/.paperless ]]; then
|
||||
msg_info "Stopping all Paperless-ngx Services"
|
||||
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||
msg_ok "Stopped all Paperless-ngx Services"
|
||||
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
||||
"1" "Update Paperless-ngx to $RELEASE" ON \
|
||||
"2" "Paperless-ngx Credentials" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
|
||||
msg_info "Updating Ghostscript (Patience)"
|
||||
cd /tmp
|
||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz")
|
||||
tar -xzf ghostscript-10.04.0.tar.gz
|
||||
cd ghostscript-10.04.0
|
||||
$STD ./configure
|
||||
$STD make
|
||||
$STD sudo make install
|
||||
rm -rf /tmp/ghostscript*
|
||||
msg_ok "Ghostscript updated to 10.04.0"
|
||||
fi
|
||||
msg_info "Stopping all Paperless-ngx Services"
|
||||
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
||||
msg_ok "Stopped all Paperless-ngx Services"
|
||||
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
|
||||
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/paperless/backup
|
||||
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
|
||||
msg_info "Updating to ${RELEASE}"
|
||||
cd ~
|
||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o $(basename "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz")
|
||||
tar -xf paperless-ngx-$RELEASE.tar.xz
|
||||
cp -r /opt/paperless/paperless.conf paperless-ngx/
|
||||
cp -r paperless-ngx/* /opt/paperless/
|
||||
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||
cd /opt/paperless
|
||||
$STD pip install -r requirements.txt
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/paperless/src
|
||||
$STD /usr/bin/python3 manage.py migrate
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Updated to ${RELEASE}"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
cd ~
|
||||
rm paperless-ngx-$RELEASE.tar.xz
|
||||
rm -rf paperless-ngx
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_info "Starting all Paperless-ngx Services"
|
||||
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
||||
sleep 1
|
||||
msg_ok "Started all Paperless-ngx Services"
|
||||
msg_ok "Updated Successfully!\n"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
|
||||
msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
|
||||
echo -e " 1. Stop the container: pct stop <CTID>"
|
||||
echo -e " 2. Create a snapshot: pct snapshot <CTID> pre-paperless-uv-migration"
|
||||
echo -e " 3. Start the container again\n"
|
||||
|
||||
read -rp "Have you created a snapshot? [y/N]: " confirm
|
||||
if [[ ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then
|
||||
msg_error "Migration aborted. Please create a snapshot first."
|
||||
exit 1
|
||||
fi
|
||||
msg_info "Migrating old Paperless-ngx installation to uv"
|
||||
rm -rf /opt/paperless/venv
|
||||
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
|
||||
|
||||
declare -A PATCHES=(
|
||||
["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer"
|
||||
["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO"
|
||||
["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO"
|
||||
["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\""
|
||||
)
|
||||
|
||||
for svc in "${!PATCHES[@]}"; do
|
||||
path=$(systemctl show -p FragmentPath "$svc" | cut -d= -f2)
|
||||
if [[ -n "$path" && -f "$path" ]]; then
|
||||
sed -i "s|^ExecStart=.*|${PATCHES[$svc]}|" "$path"
|
||||
if [[ "$svc" == "paperless-webserver.service" ]]; then
|
||||
grep -q "^Environment=GRANIAN_HOST=" "$path" ||
|
||||
sed -i '/^\[Service\]/a Environment=GRANIAN_HOST=::' "$path"
|
||||
grep -q "^Environment=GRANIAN_PORT=" "$path" ||
|
||||
sed -i '/^\[Service\]/a Environment=GRANIAN_PORT=8000' "$path"
|
||||
grep -q "^Environment=GRANIAN_WORKERS=" "$path" ||
|
||||
sed -i '/^\[Service\]/a Environment=GRANIAN_WORKERS=1' "$path"
|
||||
fi
|
||||
msg_ok "Patched $svc"
|
||||
else
|
||||
msg_error "Service file for $svc not found!"
|
||||
fi
|
||||
done
|
||||
|
||||
$STD systemctl daemon-reload
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/paperless/backup
|
||||
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
|
||||
msg_info "Updating Paperless-ngx"
|
||||
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/paperless/src
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Paperless-ngx migration and update to ${RELEASE} completed"
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "2" ]; then
|
||||
cat paperless.creds
|
||||
exit
|
||||
|
||||
msg_info "Starting all Paperless-ngx Services"
|
||||
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||
sleep 1
|
||||
msg_ok "Started all Paperless-ngx Services"
|
||||
msg_ok "Updated Successfully!\n"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
@@ -94,3 +139,4 @@ msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
|
||||
|
||||
@@ -29,30 +29,25 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f "/opt/${APP}_version.txt" ]]; then
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.pf2etools 2>/dev/null)" ]] || [[ ! -f ~/.pf2etools ]]; then
|
||||
msg_info "Updating System"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated System"
|
||||
|
||||
rm -rf /opt/Pf2eTools
|
||||
fetch_and_deploy_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools" "tarball" "latest" "/opt/Pf2eTools"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip")
|
||||
$STD unzip ${RELEASE}.zip
|
||||
rm -rf "/opt/${APP}"
|
||||
mv ${APP}-${RELEASE:1} /opt/${APP}
|
||||
cd /opt/Pf2eTools
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
chown -R www-data: "/opt/${APP}"
|
||||
chmod -R 755 "/opt/${APP}"
|
||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
msg_ok "Cleanup Completed"
|
||||
msg_ok "Updated successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
||||
@@ -27,29 +27,25 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/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 ~/.phpipam ]] || [[ "${RELEASE}" != "$(cat ~/.phpipam 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop apache2
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt
|
||||
mv /opt/phpipam/ /opt/phpipam-backup
|
||||
curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o $(basename "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip")
|
||||
$STD unzip "phpipam-v${RELEASE}.zip"
|
||||
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||
cp /opt/phpipam-backup/config.php /opt/phpipam
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start apache2
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -r "/opt/phpipam-v${RELEASE}.zip"
|
||||
rm -r /opt/phpipam-backup
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
@@ -20,38 +20,31 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/plant-it ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop plant-it
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "/opt/plant-it/server.jar"
|
||||
cd /opt/plant-it/frontend
|
||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o $(basename "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz")
|
||||
tar -xzf client.tar.gz
|
||||
rm -f client.tar.gz
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start plant-it
|
||||
msg_ok "Started $APP"
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/plant-it ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.plant-it 2>/dev/null)" ]] || [[ ! -f ~/.plant-it ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop plant-it
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start plant-it
|
||||
msg_ok "Started $APP"
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -27,24 +27,19 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/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 ~/.prom-paperless-exp ]] || [[ "${RELEASE}" != "$(cat prom-paperless-exp 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop prometheus-paperless-ngx-exporter
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz")
|
||||
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||
cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
||||
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start prometheus-paperless-ngx-exporter
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
@@ -28,23 +28,18 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/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 ~/.prometheus ]] || [[ "${RELEASE}" != "$(cat ~/.prometheus 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop prometheus
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz")
|
||||
tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
|
||||
cp -rf prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/
|
||||
rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||
rm -f /usr/local/bin/prometheus.yml
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start prometheus
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
@@ -23,25 +23,21 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /var/lib/prowlarr/ ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating $APP LXC"
|
||||
temp_file="$(mktemp)"
|
||||
rm -rf /opt/Prowlarr
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Prowlarr/Prowlarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/Prowlarr/Prowlarr/releases/download/v${RELEASE}/Prowlarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
|
||||
$STD tar -xvzf "$temp_file"
|
||||
mv Prowlarr /opt
|
||||
chmod 775 /opt/Prowlarr
|
||||
msg_ok "Updated $APP LXC"
|
||||
if [[ "${RELEASE}" != "$(cat ~/.prowlarr 2>/dev/null)" ]] || [[ ! -f ~/.prowlarr ]]; then
|
||||
rm -rf /opt/Prowlarr
|
||||
fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz"
|
||||
chmod 775 /opt/Prowlarr
|
||||
msg_ok "Successfully updated"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleaned up"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -23,37 +23,30 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/ps5-mqtt ]]; then
|
||||
msg_error "No ${APP} installation found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
||||
|
||||
if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.ps5-mqtt 2>/dev/null)" ]] || [[ ! -f ~/.ps5-mqtt ]]; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop ps5-mqtt
|
||||
msg_ok "Stopped service"
|
||||
|
||||
msg_info "Updating PS5-MQTT to ${RELEASE}"
|
||||
curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz
|
||||
rm -rf /opt/ps5-mqtt
|
||||
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
||||
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
||||
rm /tmp/${RELEASE}.tar.gz
|
||||
echo ${RELEASE} >/opt/ps5-mqtt_version.txt
|
||||
msg_ok "Updated PS5-MQTT"
|
||||
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||
|
||||
msg_info "Building new PS5-MQTT version"
|
||||
msg_info "Configuring ${APP}"
|
||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Built new PS5-MQTT version"
|
||||
msg_ok "Configured ${APP}"
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start ps5-mqtt
|
||||
msg_ok "Started service"
|
||||
|
||||
msg_ok "Updated successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
||||
@@ -27,32 +27,25 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
touch /opt/${APP}_version.txt
|
||||
mkdir -p $HOME/.config/qBittorrent/
|
||||
mkdir -p /opt/qbittorrent/
|
||||
[ -d "/.config/qBittorrent" ] && mv /.config/qBittorrent "$HOME/.config/"
|
||||
$STD apt-get remove --purge -y qbittorrent-nox
|
||||
sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
|
||||
systemctl daemon-reload
|
||||
if [[ ! -f ~/.qbittorrent ]]; then
|
||||
msg_error "Please create new qBittorrent LXC. Updating from v4.x to v5.x is not supported!"
|
||||
exit
|
||||
fi
|
||||
FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f ~/.qbittorrent ]] || [[ "${RELEASE}" != "$(cat ~/.qbittorrent 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop qbittorrent-nox
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
rm -f /opt/qbittorrent/qbittorrent-nox
|
||||
curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox
|
||||
chmod +x /opt/qbittorrent/qbittorrent-nox
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox"
|
||||
mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start qbittorrent-nox
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
21
ct/radarr.sh
21
ct/radarr.sh
@@ -29,19 +29,16 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating $APP LXC"
|
||||
temp_file="$(mktemp)"
|
||||
rm -rf /opt/Radarr
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/Radarr/Radarr/releases/download/v${RELEASE}/Radarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
|
||||
$STD tar -xvzf "$temp_file"
|
||||
mv Radarr /opt
|
||||
chmod 775 /opt/Radarr
|
||||
msg_ok "Updated $APP LXC"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||
if [[ ! -f ~/.radarr ]] || [[ "$RELEASE" != "$(cat ~/.radarr 2>/dev/null)" ]]; then
|
||||
rm -rf /opt/Radarr
|
||||
fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz"
|
||||
chmod 775 /opt/Radarr
|
||||
msg_ok "Updated successfully"
|
||||
else
|
||||
msg_ok "No update required. $APP is already at v${RELEASE}"
|
||||
fi
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf "$temp_file"
|
||||
msg_ok "Cleaned up"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
14
ct/rclone.sh
14
ct/rclone.sh
@@ -28,27 +28,19 @@ function update_script() {
|
||||
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 [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
if [[ ! -f ~/.rclone ]] || [[ "${RELEASE}" != "$(cat ~/.rclone 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop rclone-web
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
rm -rf /opt/rclone/*
|
||||
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
||||
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start rclone-web
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
@@ -27,30 +27,37 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop rdtc
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||
$STD apt-get remove --purge -y dotnet-sdk-8.0
|
||||
$STD apt-get install -y dotnet-sdk-9.0
|
||||
RELEASE=$(curl -s https://api.github.com/repos/rogerfar/rdt-client/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f ~/.rdt-client ]] || [[ "${RELEASE}" != "$(cat ~/.rdt-client 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop rdtc
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Creating backup"
|
||||
mkdir -p /opt/rdtc-backup
|
||||
cp -R /opt/rdtc/appsettings.json /opt/rdtc-backup/
|
||||
msg_ok "Backup created"
|
||||
|
||||
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||
$STD apt-get remove --purge -y dotnet-sdk-8.0
|
||||
$STD apt-get install -y dotnet-sdk-9.0
|
||||
fi
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start rdtc
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/rdtc-backup
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
mkdir -p rdtc-backup
|
||||
cp -R /opt/rdtc/appsettings.json rdtc-backup/
|
||||
curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o $(basename "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip")
|
||||
$STD unzip -o RealDebridClient.zip -d /opt/rdtc
|
||||
cp -R rdtc-backup/appsettings.json /opt/rdtc/
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start rdtc
|
||||
msg_ok "Started ${APP}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf rdtc-backup RealDebridClient.zip
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -20,22 +20,23 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /root/.config/recyclarr/recyclarr.yml ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)")
|
||||
tar -C /usr/local/bin -xJf recyclarr*.tar.xz
|
||||
rm -rf recyclarr*.tar.xz
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /root/.config/recyclarr/recyclarr.yml ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.recyclarr 2>/dev/null)" ]] || [[ ! -f ~/.recyclarr ]]; then
|
||||
fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -23,29 +23,25 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d "/opt/revealjs" ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.revealjs 2>/dev/null)" ]] || [[ ! -f ~/.revealjs ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop revealjs
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf $temp_file
|
||||
rm -rf /opt/revealjs/node_modules/*
|
||||
cp /opt/revealjs/index.html /opt
|
||||
cp -rf reveal.js-${RELEASE}/* /opt/revealjs
|
||||
fetch_and_deploy_gh_release "revealjs" "hakimel/reveal.js" "tarball"
|
||||
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
cd /opt/revealjs
|
||||
$STD npm install
|
||||
cp -f /opt/index.html /opt/revealjs
|
||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to ${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
@@ -53,8 +49,7 @@ curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.ta
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -f $temp_file
|
||||
rm -rf ~/reveal.js-${RELEASE}
|
||||
rm -f /opt/index.html
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
@@ -71,4 +66,4 @@ description
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
|
||||
@@ -28,13 +28,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
||||
touch /opt/rustdeskapi_version.txt
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ "${APIRELEASE}" != "$(cat /opt/rustdeskapi_version.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]] || [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop rustdesk-hbbr
|
||||
systemctl stop rustdesk-hbbs
|
||||
@@ -43,28 +40,15 @@ function update_script() {
|
||||
fi
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
TEMPDIR=$(mktemp -d)
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
||||
$STD dpkg -i $TEMPDIR/*.deb
|
||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
||||
echo "${APIRELEASE}" >/opt/rustdeskapi_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf $TEMPDIR
|
||||
msg_ok "Cleanup Completed"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||
|
||||
msg_info "Starting services"
|
||||
systemctl start -q rustdesk-* --all
|
||||
msg_ok "Services started"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
@@ -29,25 +29,17 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/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 ~/.semaphore ]] || [[ "${RELEASE}" != "$(cat ~/.semaphore 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop semaphore
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb")
|
||||
$STD dpkg -i semaphore_${RELEASE}_linux_amd64.deb
|
||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start semaphore
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/semaphore_${RELEASE}_linux_amd64.deb
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||
|
||||
@@ -26,19 +26,14 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f "/opt/${APP}_version.txt" || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
if [[ ! -f ~/.silverbullet || "${RELEASE}" != "$(cat ~/.silverbullet 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop silverbullet
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
curl -fsSL "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip" -o $(basename "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip")
|
||||
$STD unzip silverbullet-server-linux-x86_64.zip
|
||||
mv silverbullet /opt/silverbullet/bin/
|
||||
chmod +x /opt/silverbullet/bin/silverbullet
|
||||
echo "${RELEASE}" >/opt/silverbullet/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start silverbullet
|
||||
|
||||
@@ -27,20 +27,24 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
if [[ ! -f ~/.snipe-it ]] || [[ "${RELEASE}" != "$(cat ~/.snipe-it 2>/dev/null)" ]]; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop nginx
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Creating backup"
|
||||
mv /opt/snipe-it /opt/snipe-it-backup
|
||||
msg_ok "Backup created"
|
||||
|
||||
fetch_and_deploy_gh_release "snipe-it" "snipe/snipe-it" "tarball"
|
||||
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||
setup_composer
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
mv /opt/snipe-it /opt/snipe-it-backup
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file"
|
||||
mv "snipe-it-${RELEASE}" /opt/snipe-it
|
||||
cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
|
||||
cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
|
||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
||||
@@ -55,7 +59,6 @@ function update_script() {
|
||||
$STD php artisan view:clear
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
rm -rf "$temp_file"
|
||||
rm -rf /opt/snipe-it-backup
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ function update_script() {
|
||||
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
|
||||
mv /opt/.env /opt/tandoor/.env
|
||||
mv /opt/tandoor.bak/.env /opt/tandoor/.env
|
||||
cd /opt/tandoor
|
||||
$STD uv venv .venv --python=python3
|
||||
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
|
||||
if [[ ! -f ~/.technitium || "${VERSION}" != "$(cat ~/.technitium)" ]]; then
|
||||
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
|
||||
msg_info "Updating ${APP}"
|
||||
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
|
||||
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
|
||||
|
||||
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^v//')
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^"v//;s/"$//')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop tududi
|
||||
|
||||
@@ -27,6 +27,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y zstd
|
||||
fi
|
||||
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
|
||||
msg_info "Running Migration"
|
||||
@@ -66,8 +70,9 @@ EOF
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
||||
tar -xf $temp_file
|
||||
cp -f wastebin /opt/wastebin/
|
||||
cp -f wastebin* /opt/wastebin/
|
||||
chmod +x /opt/wastebin/wastebin
|
||||
chmod +x /opt/wastebin/wastebin-ctl
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated Wastebin"
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Show password: `cat ~/kasm.creds`",
|
||||
"text": "Show credentials: `cat ~/kasm.creds`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
40
frontend/public/json/litellm.json
Normal file
40
frontend/public/json/litellm.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "LiteLLM",
|
||||
"slug": "litellm",
|
||||
"categories": [
|
||||
20
|
||||
],
|
||||
"date_created": "2025-08-21",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 4000,
|
||||
"documentation": "https://docs.litellm.ai/",
|
||||
"config_path": "/opt/litellm/litellm.yaml",
|
||||
"website": "https://www.litellm.ai/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/litellm-light.webp",
|
||||
"description": "LLM proxy to call 100+ LLMs in a unified interface & track spend, set budgets per virtual key/user",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/litellm.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"password": "sk-1234"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Update master key in the config file",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": null,
|
||||
"documentation": "https://docs.paperless-ngx.com/",
|
||||
"website": "https://docs.paperless-ngx.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
|
||||
"config_path": "/opt/paperless/paperless.conf",
|
||||
@@ -21,19 +21,19 @@
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 10,
|
||||
"hdd": 12,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"username": "admin",
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Show Login Credentials, type `update` in the LXC console",
|
||||
"text": "Show Login Credentials, type `cat ~/paperless-ngx.creds` in the LXC console",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9090,
|
||||
"documentation": null,
|
||||
"documentation": "https://prometheus.io/docs/introduction/overview/",
|
||||
"website": "https://prometheus.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
||||
"config_path": "/etc/prometheus/prometheus.yml",
|
||||
|
||||
@@ -1,13 +1,348 @@
|
||||
[
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.5.1",
|
||||
"date": "2025-08-24T23:58:52Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v0.8.0-beta",
|
||||
"date": "2025-08-19T23:00:51Z"
|
||||
"version": "v0.8.2-beta",
|
||||
"date": "2025-08-24T22:58:03Z"
|
||||
},
|
||||
{
|
||||
"name": "Ombi-app/Ombi",
|
||||
"version": "v4.47.1",
|
||||
"date": "2025-01-05T21:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v1.9.1",
|
||||
"date": "2025-08-24T21:27:58Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.19.1",
|
||||
"date": "2025-08-24T20:16:32Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.3.2",
|
||||
"date": "2025-08-19T04:08:36Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.1",
|
||||
"date": "2025-08-24T15:42:19Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v4.7.6",
|
||||
"date": "2025-08-23T22:49:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.26.2.10099",
|
||||
"date": "2025-06-11T20:10:39Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v2.0.5.5160",
|
||||
"date": "2025-08-23T21:23:11Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-openapi@9.2.3",
|
||||
"date": "2025-08-24T12:48:14Z"
|
||||
},
|
||||
{
|
||||
"name": "Lidarr/Lidarr",
|
||||
"version": "v2.12.4.4658",
|
||||
"date": "2025-06-09T17:27:45Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.24.22",
|
||||
"date": "2025-08-24T09:51:24Z"
|
||||
},
|
||||
{
|
||||
"name": "janeczku/calibre-web",
|
||||
"version": "0.6.25",
|
||||
"date": "2025-08-24T08:51:55Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3-beta.10",
|
||||
"date": "2025-07-15T06:07:03Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2329",
|
||||
"date": "2025-08-24T05:53:12Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.9",
|
||||
"date": "2025-08-24T04:51:15Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.19",
|
||||
"date": "2025-08-24T00:27:11Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.6.2",
|
||||
"date": "2025-07-17T12:08:03Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
"version": "debian/12.1.15.1",
|
||||
"date": "2025-08-23T20:07:50Z"
|
||||
},
|
||||
{
|
||||
"name": "sysadminsmedia/homebox",
|
||||
"version": "v0.21.0",
|
||||
"date": "2025-08-23T18:33:53Z"
|
||||
},
|
||||
{
|
||||
"name": "immich-app/immich",
|
||||
"version": "v1.139.3",
|
||||
"date": "2025-08-23T16:37:46Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v0.38.0",
|
||||
"date": "2025-08-23T14:36:32Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v0.306.0-rc.0",
|
||||
"date": "2025-08-21T13:31:03Z"
|
||||
},
|
||||
{
|
||||
"name": "TandoorRecipes/recipes",
|
||||
"version": "2.0.3",
|
||||
"date": "2025-08-23T07:08:13Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.29.3",
|
||||
"date": "2025-08-23T06:37:44Z"
|
||||
},
|
||||
{
|
||||
"name": "caddyserver/caddy",
|
||||
"version": "v2.10.2",
|
||||
"date": "2025-08-23T03:10:31Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.18.2",
|
||||
"date": "2025-08-22T23:56:41Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.11.7-rc0",
|
||||
"date": "2025-08-22T23:26:48Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.34.0",
|
||||
"date": "2025-08-22T19:16:24Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.3.3",
|
||||
"date": "2025-08-20T10:12:51Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.86.5",
|
||||
"date": "2025-08-22T17:13:13Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.71.0",
|
||||
"date": "2025-08-22T16:41:23Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e5.9.2-beta.2",
|
||||
"date": "2025-08-22T15:34:17Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.8.1",
|
||||
"date": "2025-08-22T14:55:30Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "open-webui/open-webui",
|
||||
"version": "v0.6.25",
|
||||
"date": "2025-08-22T13:22:43Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.10.3",
|
||||
"date": "2025-08-19T18:51:00Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.11",
|
||||
"date": "2025-07-22T12:11:38Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v12.0.7",
|
||||
"date": "2025-08-22T10:00:28Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v2.0.3",
|
||||
"date": "2025-08-22T08:12:47Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.11.2",
|
||||
"date": "2025-08-22T06:50:56Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.0.3",
|
||||
"date": "2025-08-22T07:43:52Z"
|
||||
},
|
||||
{
|
||||
"name": "lazy-media/Reactive-Resume",
|
||||
"version": "v1.2.4",
|
||||
"date": "2025-08-22T07:40:01Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.5",
|
||||
"date": "2025-08-22T06:57:33Z"
|
||||
},
|
||||
{
|
||||
"name": "traccar/traccar",
|
||||
"version": "v6.9.1",
|
||||
"date": "2025-08-22T04:04:12Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudreve/cloudreve",
|
||||
"version": "4.6.0",
|
||||
"date": "2025-08-22T02:21:40Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.19.5",
|
||||
"date": "2025-08-21T23:45:57Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.36.0",
|
||||
"date": "2025-07-14T18:59:57Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "nightly",
|
||||
"date": "2025-08-21T19:17:27Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.39.0",
|
||||
"date": "2025-08-21T18:40:00Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.8.3",
|
||||
"date": "2025-08-21T18:23:10Z"
|
||||
},
|
||||
{
|
||||
"name": "hargata/lubelog",
|
||||
"version": "v1.5.0",
|
||||
"date": "2025-08-21T17:33:22Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.207.4",
|
||||
"date": "2025-08-21T17:20:43Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.2.0-beta",
|
||||
"date": "2025-08-21T16:51:45Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudflare/cloudflared",
|
||||
"version": "2025.8.1",
|
||||
"date": "2025-08-21T15:39:34Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.4.6",
|
||||
"date": "2025-08-21T14:05:58Z"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/glpi",
|
||||
"version": "10.0.19",
|
||||
"date": "2025-07-16T09:45:14Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.16.18",
|
||||
"date": "2025-08-21T08:19:58Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.516.2",
|
||||
"date": "2025-08-20T17:15:26Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p10",
|
||||
"date": "2025-08-20T14:05:06Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.65",
|
||||
"date": "2025-08-20T14:02:28Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.107.4",
|
||||
"date": "2025-08-20T12:23:06Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "345",
|
||||
"date": "2025-08-20T11:52:24Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "4.3.7",
|
||||
"date": "2025-08-20T10:26:21Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "4.1.10-tentative",
|
||||
"date": "2025-08-20T10:20:25Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
||||
"date": "2025-08-20T08:15:46Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.7.5",
|
||||
"date": "2025-08-05T03:37:52Z"
|
||||
"version": "2025.8.0",
|
||||
"date": "2025-08-20T07:58:12Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.2.3",
|
||||
"date": "2025-08-20T07:57:58Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
@@ -19,26 +354,6 @@
|
||||
"version": "v3.1.1",
|
||||
"date": "2025-08-19T20:23:43Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v4.4.0",
|
||||
"date": "2025-08-17T18:47:35Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.38.4",
|
||||
"date": "2025-08-19T19:27:18Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.10.3",
|
||||
"date": "2025-08-19T18:51:00Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.13.2",
|
||||
@@ -54,46 +369,16 @@
|
||||
"version": "0.50.10",
|
||||
"date": "2025-08-19T17:21:44Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.24.18",
|
||||
"date": "2025-08-19T16:57:09Z"
|
||||
},
|
||||
{
|
||||
"name": "karlomikus/bar-assistant",
|
||||
"version": "v5.8.0",
|
||||
"date": "2025-08-19T16:46:00Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.524",
|
||||
"date": "2025-08-19T16:39:43Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "v5.8.8-beta.2",
|
||||
"date": "2025-08-19T15:40:26Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.2",
|
||||
"date": "2025-07-09T19:08:28Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "5.0.1",
|
||||
"date": "2025-08-19T14:25:29Z"
|
||||
},
|
||||
{
|
||||
"name": "traccar/traccar",
|
||||
"version": "v6.9.0",
|
||||
"date": "2025-08-19T14:22:26Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
"version": "debian/12.1.11",
|
||||
"date": "2025-08-19T13:49:52Z"
|
||||
},
|
||||
{
|
||||
"name": "fallenbagel/jellyseerr",
|
||||
"version": "preview-dns-cache-manager",
|
||||
@@ -109,16 +394,6 @@
|
||||
"version": "7.2.12",
|
||||
"date": "2025-08-19T11:16:17Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.1.101-2.1.1.101_canary_2025-08-19",
|
||||
"date": "2025-08-19T10:45:40Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.11",
|
||||
"date": "2025-07-22T12:11:38Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.80",
|
||||
@@ -129,66 +404,11 @@
|
||||
"version": "v7.12.0",
|
||||
"date": "2025-08-19T06:57:20Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2311",
|
||||
"date": "2025-08-19T06:11:09Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3-beta.10",
|
||||
"date": "2025-07-15T06:07:03Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.3.2",
|
||||
"date": "2025-08-19T04:08:36Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.11.5-rc5",
|
||||
"date": "2025-08-19T00:45:40Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.19",
|
||||
"date": "2025-08-19T00:27:08Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.6.2",
|
||||
"date": "2025-07-17T12:08:03Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.6",
|
||||
"date": "2025-08-18T23:31:31Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.2.7",
|
||||
"date": "2025-08-07T08:19:29Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.4",
|
||||
"date": "2025-08-18T20:22:07Z"
|
||||
},
|
||||
{
|
||||
"name": "immich-app/immich",
|
||||
"version": "v1.138.1",
|
||||
"date": "2025-08-18T18:51:50Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.8.0-rc2",
|
||||
"date": "2025-08-12T21:12:08Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.107.3",
|
||||
"date": "2025-08-18T18:40:54Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
"version": "v1.1.07",
|
||||
@@ -219,31 +439,16 @@
|
||||
"version": "pmm-6401-v1.124.0",
|
||||
"date": "2025-08-18T12:14:50Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p10-rc1",
|
||||
"date": "2025-08-18T09:07:06Z"
|
||||
},
|
||||
{
|
||||
"name": "jupyter/notebook",
|
||||
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
|
||||
"date": "2025-08-18T07:39:41Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.19.0",
|
||||
"date": "2025-08-18T01:22:47Z"
|
||||
},
|
||||
{
|
||||
"name": "lldap/lldap",
|
||||
"version": "v0.6.2",
|
||||
"date": "2025-08-17T22:07:10Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.18.1",
|
||||
"date": "2025-08-17T21:16:28Z"
|
||||
},
|
||||
{
|
||||
"name": "wizarrrr/wizarr",
|
||||
"version": "2025.8.3",
|
||||
@@ -264,56 +469,11 @@
|
||||
"version": "3.3.0",
|
||||
"date": "2025-08-17T19:57:11Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.26.2.10099",
|
||||
"date": "2025-06-11T20:10:39Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.37.0.5076",
|
||||
"date": "2025-06-04T11:04:53Z"
|
||||
},
|
||||
{
|
||||
"name": "Lidarr/Lidarr",
|
||||
"version": "v2.12.4.4658",
|
||||
"date": "2025-06-09T17:27:45Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.19.4",
|
||||
"date": "2025-08-17T16:11:52Z"
|
||||
},
|
||||
{
|
||||
"name": "Ombi-app/Ombi",
|
||||
"version": "v4.47.1",
|
||||
"date": "2025-01-05T21:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.16.17",
|
||||
"date": "2025-08-17T13:13:52Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-core@15.6.12",
|
||||
"date": "2025-08-17T10:37:31Z"
|
||||
},
|
||||
{
|
||||
"name": "TandoorRecipes/recipes",
|
||||
"version": "2.0.2",
|
||||
"date": "2025-08-17T09:24:37Z"
|
||||
},
|
||||
{
|
||||
"name": "mylar3/mylar3",
|
||||
"version": "v0.8.3",
|
||||
"date": "2025-08-17T06:24:54Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.3.0",
|
||||
"date": "2025-07-05T12:14:52Z"
|
||||
},
|
||||
{
|
||||
"name": "blakeblackshear/frigate",
|
||||
"version": "v0.14.1",
|
||||
@@ -329,11 +489,6 @@
|
||||
"version": "v1.12.2-rc.4",
|
||||
"date": "2025-08-16T09:16:29Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v2.0.2",
|
||||
"date": "2025-08-16T05:32:58Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.103.1",
|
||||
@@ -344,11 +499,6 @@
|
||||
"version": "r8.2.0",
|
||||
"date": "2025-08-15T22:02:15Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.33.0",
|
||||
"date": "2025-08-15T19:17:31Z"
|
||||
},
|
||||
{
|
||||
"name": "jhuckaby/Cronicle",
|
||||
"version": "v0.9.90",
|
||||
@@ -359,36 +509,11 @@
|
||||
"version": "v4.3.6",
|
||||
"date": "2025-08-12T17:16:42Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.8.2",
|
||||
"date": "2025-08-15T16:00:26Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.207.3",
|
||||
"date": "2025-08-15T15:32:33Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v4.0.2",
|
||||
"date": "2025-08-15T14:12:26Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.5.10",
|
||||
"date": "2025-08-15T12:12:06Z"
|
||||
},
|
||||
{
|
||||
"name": "intri-in/manage-my-damn-life-nextjs",
|
||||
"version": "v0.8.0-release",
|
||||
"date": "2025-08-15T06:19:12Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudreve/cloudreve",
|
||||
"version": "4.5.1",
|
||||
"date": "2025-08-15T05:53:22Z"
|
||||
},
|
||||
{
|
||||
"name": "gristlabs/grist-core",
|
||||
"version": "v1.7.2",
|
||||
@@ -399,21 +524,6 @@
|
||||
"version": "v2.11.7",
|
||||
"date": "2025-08-14T17:14:33Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.64",
|
||||
"date": "2025-07-28T14:24:56Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "Matter-1.4.1",
|
||||
"date": "2025-08-14T07:37:23Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v0.37.0",
|
||||
"date": "2025-08-14T00:37:49Z"
|
||||
},
|
||||
{
|
||||
"name": "jellyfin/jellyfin",
|
||||
"version": "v10.10.7",
|
||||
@@ -439,11 +549,6 @@
|
||||
"version": "v1.17.3",
|
||||
"date": "2025-08-13T14:04:44Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.4.5",
|
||||
"date": "2025-08-13T13:52:09Z"
|
||||
},
|
||||
{
|
||||
"name": "ellite/Wallos",
|
||||
"version": "v4.1.1",
|
||||
@@ -494,11 +599,6 @@
|
||||
"version": "v25.07.1",
|
||||
"date": "2025-08-11T13:53:22Z"
|
||||
},
|
||||
{
|
||||
"name": "open-webui/open-webui",
|
||||
"version": "v0.6.22",
|
||||
"date": "2025-08-11T13:15:39Z"
|
||||
},
|
||||
{
|
||||
"name": "FlowiseAI/Flowise",
|
||||
"version": "flowise@3.0.5",
|
||||
@@ -519,11 +619,6 @@
|
||||
"version": "v2.28.0",
|
||||
"date": "2025-08-10T23:09:55Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v1.7.0",
|
||||
"date": "2025-08-10T18:10:25Z"
|
||||
},
|
||||
{
|
||||
"name": "ioBroker/ioBroker",
|
||||
"version": "1012-08-09",
|
||||
@@ -554,11 +649,6 @@
|
||||
"version": "v4.39.6",
|
||||
"date": "2025-08-09T08:11:44Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.29.2",
|
||||
"date": "2025-08-09T07:28:08Z"
|
||||
},
|
||||
{
|
||||
"name": "kimai/kimai",
|
||||
"version": "2.38.0",
|
||||
@@ -569,11 +659,6 @@
|
||||
"version": "v2.39.2",
|
||||
"date": "2025-08-08T16:06:06Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudflare/cloudflared",
|
||||
"version": "2025.8.0",
|
||||
"date": "2025-08-08T15:50:42Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tika",
|
||||
"version": "3.2.2",
|
||||
@@ -584,11 +669,6 @@
|
||||
"version": "mariadb-12.0.2",
|
||||
"date": "2025-08-07T21:23:15Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.86.4",
|
||||
"date": "2025-08-07T16:48:40Z"
|
||||
},
|
||||
{
|
||||
"name": "rabbitmq/rabbitmq-server",
|
||||
"version": "v4.1.3",
|
||||
@@ -599,11 +679,6 @@
|
||||
"version": "v11.1.0",
|
||||
"date": "2025-08-07T14:57:29Z"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/glpi",
|
||||
"version": "10.0.19",
|
||||
"date": "2025-07-16T09:45:14Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v1.12.2rc2",
|
||||
@@ -629,11 +704,6 @@
|
||||
"version": "6.1.14",
|
||||
"date": "2025-08-06T14:24:58Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "344",
|
||||
"date": "2025-08-06T13:09:25Z"
|
||||
},
|
||||
{
|
||||
"name": "TryGhost/Ghost-CLI",
|
||||
"version": "v1.28.3",
|
||||
@@ -644,11 +714,6 @@
|
||||
"version": "v0.15.0-rc5",
|
||||
"date": "2025-08-06T08:55:10Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v12.0.4",
|
||||
"date": "2025-08-06T06:30:07Z"
|
||||
},
|
||||
{
|
||||
"name": "garethgeorge/backrest",
|
||||
"version": "v1.9.1",
|
||||
@@ -669,11 +734,6 @@
|
||||
"version": "v25.4.0",
|
||||
"date": "2025-08-05T17:10:01Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "cassandra-5.0.5",
|
||||
"date": "2025-08-05T12:08:49Z"
|
||||
},
|
||||
{
|
||||
"name": "binwiederhier/ntfy",
|
||||
"version": "v2.14.0",
|
||||
@@ -754,21 +814,11 @@
|
||||
"version": "2025.07.1",
|
||||
"date": "2025-08-01T14:40:28Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.1.8-beta",
|
||||
"date": "2025-08-01T13:35:28Z"
|
||||
},
|
||||
{
|
||||
"name": "gotson/komga",
|
||||
"version": "1.23.1",
|
||||
"date": "2025-08-01T04:30:24Z"
|
||||
},
|
||||
{
|
||||
"name": "lazy-media/Reactive-Resume",
|
||||
"version": "v1.2.3",
|
||||
"date": "2025-07-31T19:18:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Suwayomi/Suwayomi-Server",
|
||||
"version": "v2.1.1867",
|
||||
@@ -869,11 +919,6 @@
|
||||
"version": "v3.2.5r2",
|
||||
"date": "2025-07-21T12:52:26Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.0.7",
|
||||
"date": "2025-07-17T15:33:14Z"
|
||||
},
|
||||
{
|
||||
"name": "icereed/paperless-gpt",
|
||||
"version": "v0.22.0",
|
||||
@@ -899,16 +944,6 @@
|
||||
"version": "v6.1.4",
|
||||
"date": "2025-07-14T21:22:17Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.36.0",
|
||||
"date": "2025-07-14T18:59:57Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v3.5.0",
|
||||
"date": "2025-07-14T16:54:21Z"
|
||||
},
|
||||
{
|
||||
"name": "homebridge/homebridge",
|
||||
"version": "v1.11.0",
|
||||
@@ -939,21 +974,11 @@
|
||||
"version": "v2.12.6",
|
||||
"date": "2025-07-09T21:52:15Z"
|
||||
},
|
||||
{
|
||||
"name": "hargata/lubelog",
|
||||
"version": "v1.4.9",
|
||||
"date": "2025-07-09T16:27:46Z"
|
||||
},
|
||||
{
|
||||
"name": "nicolargo/glances",
|
||||
"version": "v4.3.3",
|
||||
"date": "2025-07-09T15:35:44Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.70.3",
|
||||
"date": "2025-07-09T15:06:31Z"
|
||||
},
|
||||
{
|
||||
"name": "mysql/mysql-server",
|
||||
"version": "mysql-cluster-9.4.0",
|
||||
@@ -974,11 +999,6 @@
|
||||
"version": "release-5.1.2",
|
||||
"date": "2025-07-02T06:13:16Z"
|
||||
},
|
||||
{
|
||||
"name": "sysadminsmedia/homebox",
|
||||
"version": "v0.20.2",
|
||||
"date": "2025-07-02T00:37:07Z"
|
||||
},
|
||||
{
|
||||
"name": "hivemq/hivemq-community-edition",
|
||||
"version": "2025.4",
|
||||
@@ -1054,11 +1074,6 @@
|
||||
"version": "2.402",
|
||||
"date": "2025-06-17T05:20:42Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.4.11",
|
||||
"date": "2025-06-15T21:41:02Z"
|
||||
},
|
||||
{
|
||||
"name": "TriliumNext/Notes",
|
||||
"version": "v0.95.0",
|
||||
@@ -1139,11 +1154,6 @@
|
||||
"version": "v1.13.0",
|
||||
"date": "2025-05-25T20:21:13Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.4",
|
||||
"date": "2025-05-25T06:53:34Z"
|
||||
},
|
||||
{
|
||||
"name": "0xERR0R/blocky",
|
||||
"version": "v0.26.2",
|
||||
@@ -1209,11 +1219,6 @@
|
||||
"version": "v4.1.2",
|
||||
"date": "2024-05-04T08:06:50Z"
|
||||
},
|
||||
{
|
||||
"name": "caddyserver/caddy",
|
||||
"version": "v2.10.0",
|
||||
"date": "2025-04-18T20:46:28Z"
|
||||
},
|
||||
{
|
||||
"name": "IceWhaleTech/CasaOS",
|
||||
"version": "v0.4.15",
|
||||
@@ -1374,11 +1379,6 @@
|
||||
"version": "v1.7.3",
|
||||
"date": "2024-11-27T21:26:11Z"
|
||||
},
|
||||
{
|
||||
"name": "janeczku/calibre-web",
|
||||
"version": "0.6.24",
|
||||
"date": "2024-11-16T06:47:56Z"
|
||||
},
|
||||
{
|
||||
"name": "swizzin/swizzin",
|
||||
"version": "stable",
|
||||
|
||||
@@ -14,7 +14,9 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y redis
|
||||
$STD apt-get install -y \
|
||||
redis \
|
||||
sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
|
||||
|
||||
@@ -51,6 +51,7 @@ cat <<EOF >/opt/booklore_storage/.env
|
||||
DATABASE_URL=jdbc:mariadb://localhost:3306/$DB_NAME
|
||||
DATABASE_USERNAME=$DB_USER
|
||||
DATABASE_PASSWORD=$DB_PASS
|
||||
BOOKLORE_PORT=6060
|
||||
|
||||
BOOKLORE_DATA_PATH=/opt/booklore_storage/data
|
||||
BOOKLORE_BOOKS_PATH=/opt/booklore_storage/books
|
||||
@@ -75,6 +76,7 @@ msg_info "Configure Nginx"
|
||||
rm -rf /usr/share/nginx/html
|
||||
ln -s /opt/booklore/booklore-ui/dist/booklore/browser /usr/share/nginx/html
|
||||
cp /opt/booklore/nginx.conf /etc/nginx/nginx.conf
|
||||
sed -i "s/listen \${BOOKLORE_PORT};/listen 6060;/" /etc/nginx/nginx.conf
|
||||
systemctl restart nginx
|
||||
msg_ok "Configured Nginx"
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
|
||||
libfontconfig1
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
|
||||
|
||||
msg_info "Configuring duplicati"
|
||||
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
|
||||
@@ -50,7 +50,7 @@ echo "ghost-user ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ghost-user
|
||||
mkdir -p /var/www/ghost
|
||||
chown -R ghost-user:ghost-user /var/www/ghost
|
||||
chmod 775 /var/www/ghost
|
||||
sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0"
|
||||
$STD sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0"
|
||||
rm /etc/sudoers.d/ghost-user
|
||||
msg_ok "Creating Service"
|
||||
|
||||
|
||||
@@ -30,8 +30,12 @@ $STD apt-get install --no-install-recommends -y \
|
||||
autoconf \
|
||||
build-essential \
|
||||
python3-dev \
|
||||
automake \
|
||||
cmake \
|
||||
jq \
|
||||
libtool \
|
||||
libltdl-dev \
|
||||
libgdk-pixbuf-2.0-dev \
|
||||
libbrotli-dev \
|
||||
libde265-dev \
|
||||
libexif-dev \
|
||||
@@ -39,37 +43,28 @@ $STD apt-get install --no-install-recommends -y \
|
||||
libglib2.0-dev \
|
||||
libgsf-1-dev \
|
||||
libjpeg62-turbo-dev \
|
||||
librsvg2-dev \
|
||||
libspng-dev \
|
||||
liblcms2-dev \
|
||||
libopenexr-dev \
|
||||
libgif-dev \
|
||||
librsvg2-dev \
|
||||
libexpat1 \
|
||||
libgcc-s1 \
|
||||
libgomp1 \
|
||||
liblqr-1-0 \
|
||||
libltdl7 \
|
||||
libmimalloc2.0 \
|
||||
libopenjp2-7 \
|
||||
meson \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
cpanminus \
|
||||
libde265-0 \
|
||||
libexif12 \
|
||||
libexpat1 \
|
||||
libgcc-s1 \
|
||||
libglib2.0-0 \
|
||||
libgomp1 \
|
||||
libgsf-1-114 \
|
||||
liblcms2-dev \
|
||||
liblqr-1-0 \
|
||||
libltdl7 \
|
||||
libmimalloc2.0 \
|
||||
libopenexr-dev \
|
||||
libgif-dev \
|
||||
libopenjp2-7 \
|
||||
librsvg2-2 \
|
||||
libspng0 \
|
||||
mesa-utils \
|
||||
mesa-va-drivers \
|
||||
mesa-vulkan-drivers \
|
||||
ocl-icd-libopencl1 \
|
||||
tini \
|
||||
libaom-dev \
|
||||
zlib1g
|
||||
$STD apt-get install -y \
|
||||
libgdk-pixbuf-2.0-dev librsvg2-dev libtool
|
||||
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
|
||||
DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
|
||||
export DPKG_ARCHITECTURE
|
||||
@@ -111,7 +106,8 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
msg_ok "Installed OpenVINO dependencies"
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||
|
||||
msg_info "Setting up Postgresql Database"
|
||||
@@ -149,7 +145,8 @@ $STD apt-get install -t testing --no-install-recommends -y \
|
||||
libhwy1t64 \
|
||||
libdav1d-dev \
|
||||
libhwy-dev \
|
||||
libwebp-dev
|
||||
libwebp-dev \
|
||||
libaom-dev
|
||||
if [[ -f ~/.openvino ]]; then
|
||||
$STD apt-get install -t testing -y patchelf
|
||||
fi
|
||||
@@ -281,36 +278,39 @@ APP_DIR="${INSTALL_DIR}/app"
|
||||
ML_DIR="${APP_DIR}/machine-learning"
|
||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||
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}","${INSTALL_DIR}"/cache}
|
||||
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.138.1" "$SRC_DIR"
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.139.2" "$SRC_DIR"
|
||||
|
||||
msg_info "Installing ${APPLICATION} (more patience please)"
|
||||
|
||||
cd "$SRC_DIR"/server
|
||||
$STD npm install -g node-gyp node-pre-gyp
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
$STD npm prune --omit=dev --omit=optional
|
||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
|
||||
cp package.json "$APP_DIR"/bin
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
export CI=1
|
||||
corepack enable
|
||||
|
||||
# server build
|
||||
$STD pnpm --filter immich --frozen-lockfile build
|
||||
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
|
||||
cp "$APP_DIR"/package.json "$APP_DIR"/bin
|
||||
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
||||
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
|
||||
|
||||
# openapi & web build
|
||||
cd "$SRC_DIR"
|
||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
||||
$STD pnpm --filter @immich/sdk --filter immich-web build
|
||||
cp -a web/build "$APP_DIR"/www
|
||||
cp LICENSE "$APP_DIR"
|
||||
cd "$APP_DIR"
|
||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||
$STD npm install sharp
|
||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
||||
|
||||
# cli build
|
||||
$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
|
||||
$STD pnpm --filter @immich/sdk --filter @immich/cli build
|
||||
$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
|
||||
msg_ok "Installed Immich Server and Web Components"
|
||||
|
||||
cd "$SRC_DIR"/machine-learning
|
||||
mkdir -p "$ML_DIR"
|
||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
||||
$STD uv venv "$VIRTUAL_ENV"
|
||||
if [[ -f ~/.openvino ]]; then
|
||||
@@ -337,10 +337,6 @@ sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
|
||||
ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
|
||||
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
|
||||
|
||||
msg_info "Installing Immich CLI"
|
||||
$STD npm i -g @immich/cli
|
||||
msg_ok "Installed Immich CLI"
|
||||
|
||||
msg_info "Installing GeoNames data"
|
||||
cd "$GEO_DIR"
|
||||
URL_LIST=(
|
||||
@@ -400,10 +396,10 @@ cat <<EOF >"$APP_DIR"/bin/start.sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -a
|
||||
. "$INSTALL_DIR"/.env
|
||||
. ${INSTALL_DIR}/.env
|
||||
set +a
|
||||
|
||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
|
||||
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
|
||||
EOF
|
||||
chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh
|
||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
|
||||
|
||||
@@ -16,22 +16,22 @@ update_os
|
||||
msg_info "Installing Kasm Workspaces"
|
||||
KASM_VERSION=$(curl -fsSL 'https://www.kasmweb.com/downloads' | grep -o 'https://kasm-static-content.s3.amazonaws.com/kasm_release_[^"]*\.tar\.gz' | head -n 1 | sed -E 's/.*release_(.*)\.tar\.gz/\1/')
|
||||
curl -fsSL -o "/opt/kasm_release_${KASM_VERSION}.tar.gz" "https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
|
||||
|
||||
cd /opt
|
||||
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
|
||||
chmod +x /opt/kasm_release/install.sh
|
||||
printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh > ~/kasm-install.output 2>&1
|
||||
cat ~/kasm-install.output | grep -A 20 -i "credentials\|login\|password\|admin" | sed '1i Kasm-Workspaces-Credentials' >~/kasm.creds
|
||||
|
||||
awk '
|
||||
/^Kasm UI Login Credentials$/ {capture=1}
|
||||
capture {print}
|
||||
/^Service Registration Token$/ {in_token=1}
|
||||
in_token && /^-+$/ {dash_count++}
|
||||
in_token && dash_count==2 {exit}
|
||||
' ~/kasm-install.output > ~/kasm.creds
|
||||
msg_ok "Installed Kasm Workspaces"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Displaying Kasm Credentials"
|
||||
cat ~/kasm.creds
|
||||
msg_ok "Kasm Credentials displayed"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
|
||||
rm -f ~/kasm-install.output
|
||||
|
||||
80
install/litellm-install.sh
Normal file
80
install/litellm-install.sh
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: stout01
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/BerriAI/litellm
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME="litellm_db"
|
||||
DB_USER="litellm"
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||
{
|
||||
echo "${APPLICATION} Credentials"
|
||||
echo "Database Name: $DB_NAME"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
} >>~/litellm.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Setting up Virtual Environment"
|
||||
mkdir -p /opt/litellm
|
||||
cd /opt/litellm
|
||||
$STD uv venv /opt/litellm/.venv
|
||||
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
|
||||
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
|
||||
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma
|
||||
msg_ok "Installed LiteLLM"
|
||||
|
||||
msg_info "Configuring LiteLLM"
|
||||
mkdir -p /opt
|
||||
cat <<EOF >/opt/litellm/litellm.yaml
|
||||
general_settings:
|
||||
master_key: sk-1234
|
||||
database_url: postgresql://$DB_USER:$DB_PASS@127.0.0.1:5432/$DB_NAME
|
||||
store_model_in_db: true
|
||||
EOF
|
||||
|
||||
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
msg_ok "Configured LiteLLM"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/litellm.service
|
||||
[Unit]
|
||||
Description=LiteLLM
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now litellm
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# Author: tteck (tteckster) | MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://docs.paperless-ngx.com/
|
||||
|
||||
@@ -29,22 +29,16 @@ $STD apt-get install -y \
|
||||
automake \
|
||||
libtool \
|
||||
pkg-config \
|
||||
git \
|
||||
libtiff-dev \
|
||||
libpng-dev \
|
||||
libleptonica-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-wheel
|
||||
msg_ok "Setup Python3"
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
|
||||
msg_info "Installing OCR Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
@@ -57,50 +51,18 @@ $STD apt-get install -y \
|
||||
zlib1g \
|
||||
tesseract-ocr \
|
||||
tesseract-ocr-eng
|
||||
|
||||
cd /tmp
|
||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o "ghostscript-10.04.0.tar.gz"
|
||||
$STD tar -xzf ghostscript-10.04.0.tar.gz
|
||||
cd ghostscript-10.04.0
|
||||
$STD ./configure
|
||||
$STD make
|
||||
$STD sudo make install
|
||||
msg_ok "Installed OCR Dependencies"
|
||||
|
||||
msg_info "Installing JBIG2"
|
||||
$STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc
|
||||
msg_info "Setup JBIG2"
|
||||
cd /opt/jbig2enc
|
||||
$STD bash ./autogen.sh
|
||||
$STD bash ./configure
|
||||
$STD make
|
||||
$STD make install
|
||||
cd /
|
||||
rm -rf /opt/jbig2enc
|
||||
msg_ok "Installed JBIG2"
|
||||
|
||||
msg_info "Installing Paperless-ngx (Patience)"
|
||||
Paperlessngx=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5)
|
||||
cd /opt
|
||||
$STD curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz" -o "paperless-ngx-$Paperlessngx.tar.xz"
|
||||
$STD tar -xf "paperless-ngx-$Paperlessngx.tar.xz" -C /opt/
|
||||
mv paperless-ngx paperless
|
||||
rm "paperless-ngx-$Paperlessngx.tar.xz"
|
||||
cd /opt/paperless
|
||||
$STD pip install --upgrade pip
|
||||
$STD pip install -r requirements.txt
|
||||
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
|
||||
mkdir -p {consume,data,media,static}
|
||||
sed -i -e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" /opt/paperless/paperless.conf
|
||||
echo "${Paperlessngx}" >/opt/"${APPLICATION}"_version.txt
|
||||
msg_ok "Installed Paperless-ngx"
|
||||
|
||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
||||
$STD python3 -m nltk.downloader -d /usr/share/nltk_data all
|
||||
msg_ok "Installed Natural Language Toolkit"
|
||||
|
||||
msg_info "Setting up PostgreSQL database"
|
||||
DB_NAME=paperlessdb
|
||||
DB_USER=paperless
|
||||
@@ -111,40 +73,44 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||
echo "" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx Database User: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx Database Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
||||
sed -i -e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' /opt/paperless/paperless.conf
|
||||
sed -i -e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" /opt/paperless/paperless.conf
|
||||
cd /opt/paperless/src
|
||||
$STD python3 manage.py migrate
|
||||
msg_ok "Set up PostgreSQL database"
|
||||
{
|
||||
echo "Paperless-ngx-Credentials"
|
||||
echo "Paperless-ngx Database Name: $DB_NAME"
|
||||
echo "Paperless-ngx Database User: $DB_USER"
|
||||
echo "Paperless-ngx Database Password: $DB_PASS"
|
||||
echo "Paperless-ngx Secret Key: $SECRET_KEY\n"
|
||||
echo "Paperless-ngx WebUI User: admin"
|
||||
echo "Paperless-ngx WebUI Password: $DB_PASS"
|
||||
} >>~/paperless-ngx.creds
|
||||
msg_ok "Setup PostgreSQL database"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Adminer"
|
||||
$STD apt install -y adminer
|
||||
$STD a2enconf adminer
|
||||
systemctl reload apache2
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
echo "" >>~/paperless.creds
|
||||
echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
||||
msg_ok "Installed Adminer"
|
||||
fi
|
||||
msg_info "Setup Paperless-ngx"
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
|
||||
mkdir -p {consume,data,media,static}
|
||||
sed -i \
|
||||
-e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' \
|
||||
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
|
||||
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
|
||||
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
|
||||
-e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \
|
||||
-e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \
|
||||
-e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \
|
||||
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" \
|
||||
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" \
|
||||
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" \
|
||||
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
|
||||
/opt/paperless/paperless.conf
|
||||
cd /opt/paperless/src
|
||||
set -a
|
||||
. /opt/paperless/paperless.conf
|
||||
set +a
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Setup Paperless-ngx"
|
||||
|
||||
msg_info "Setting up admin Paperless-ngx User & Password"
|
||||
## From https://github.com/linuxserver/docker-paperless-ngx/blob/main/root/etc/cont-init.d/99-migrations
|
||||
cat <<EOF | python3 /opt/paperless/src/manage.py shell
|
||||
cat <<EOF | uv run -- python /opt/paperless/src/manage.py shell
|
||||
from django.contrib.auth import get_user_model
|
||||
UserModel = get_user_model()
|
||||
user = UserModel.objects.create_user('admin', password='$DB_PASS')
|
||||
@@ -152,12 +118,17 @@ user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.save()
|
||||
EOF
|
||||
echo "" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx WebUI User: \e[32madmin\e[0m" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx WebUI Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
||||
echo "" >>~/paperless.creds
|
||||
msg_ok "Set up admin Paperless-ngx User & Password"
|
||||
|
||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
||||
cd /opt/paperless
|
||||
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data snowball_data
|
||||
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data stopwords
|
||||
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt_tab || \
|
||||
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt
|
||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
||||
msg_ok "Installed Natural Language Toolkit"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/paperless-scheduler.service
|
||||
[Unit]
|
||||
@@ -166,7 +137,7 @@ Requires=redis.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStart=celery --app paperless beat --loglevel INFO
|
||||
ExecStart=uv run -- celery --app paperless beat --loglevel INFO
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -180,7 +151,7 @@ After=postgresql.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStart=celery --app paperless worker --loglevel INFO
|
||||
ExecStart=uv run -- celery --app paperless worker --loglevel INFO
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -194,7 +165,7 @@ Requires=redis.service
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStartPre=/bin/sleep 2
|
||||
ExecStart=python3 manage.py document_consumer
|
||||
ExecStart=uv run -- python manage.py document_consumer
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -209,7 +180,7 @@ Requires=redis.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStart=granian --interface asginl --ws "paperless.asgi:application"
|
||||
ExecStart=uv run -- granian --interface asginl --ws "paperless.asgi:application"
|
||||
Environment=GRANIAN_HOST=::
|
||||
Environment=GRANIAN_PORT=8000
|
||||
Environment=GRANIAN_WORKERS=1
|
||||
@@ -217,13 +188,14 @@ Environment=GRANIAN_WORKERS=1
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
||||
|
||||
systemctl daemon-reload
|
||||
$STD systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
||||
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
||||
msg_ok "Created Services"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
setup_adminer
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
|
||||
@@ -21,18 +21,13 @@ $STD apt-get install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools" "tarball" "latest" "/opt/Pf2eTools"
|
||||
|
||||
msg_info "Setup Pf2eTools"
|
||||
cd /opt
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -fsSL "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}.zip"
|
||||
$STD unzip "${RELEASE}.zip"
|
||||
mv "Pf2eTools-${RELEASE:1}" /opt/Pf2eTools
|
||||
msg_info "Configuring Pf2eTools"
|
||||
cd /opt/Pf2eTools
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
echo "${RELEASE}" >/opt/Pf2eTools_version.txt
|
||||
msg_ok "Set up Pf2eTools"
|
||||
msg_ok "Configured Pf2eTools"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >>/etc/apache2/apache2.conf
|
||||
@@ -49,7 +44,6 @@ chmod -R 755 "/opt/Pf2eTools"
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -14,13 +14,10 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
apache2 \
|
||||
libapache2-mod-php \
|
||||
php8.2 php8.2-{fpm,curl,cli,mysql,gd,intl,imap,apcu,pspell,tidy,xmlrpc,mbstring,gmp,xml,ldap,common,snmp} \
|
||||
php-pear
|
||||
$STD apt-get install -y php-pear
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,imap,apcu,pspell,tidy,xmlrpc,gmp,ldap,common,snmp" setup_php
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Setting up MariaDB"
|
||||
@@ -38,11 +35,9 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
||||
} >>~/phpipam.creds
|
||||
msg_ok "Set up MariaDB"
|
||||
|
||||
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||
|
||||
msg_info "Installing phpIPAM"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o "phpipam-v${RELEASE}.zip"
|
||||
$STD unzip "phpipam-v${RELEASE}.zip"
|
||||
$STD mariadb -u root "${DB_NAME}" </opt/phpipam/db/SCHEMA.sql
|
||||
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
|
||||
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
||||
@@ -51,7 +46,6 @@ sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
||||
-e "s/\(\$db\['name'\] = \).*/\1'$DB_NAME';/" \
|
||||
/opt/phpipam/config.php
|
||||
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed phpIPAM"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@@ -79,7 +73,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf "/opt/phpipam-v${RELEASE}.zip"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -20,17 +20,7 @@ $STD apt-get install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Setting up Adoptium Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg
|
||||
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >/etc/apt/sources.list.d/adoptium.list
|
||||
$STD apt-get update
|
||||
msg_ok "Set up Adoptium Repository"
|
||||
|
||||
msg_info "Installing Temurin JDK 21 (LTS)"
|
||||
$STD apt-get install -y temurin-21-jdk
|
||||
msg_ok "Setup Temurin JDK 21 (LTS)"
|
||||
JAVA_VERSION="21" setup_java
|
||||
|
||||
msg_info "Setting up MariaDB"
|
||||
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
||||
@@ -48,13 +38,11 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
||||
} >>~/plant-it.creds
|
||||
msg_ok "Set up MariaDB"
|
||||
|
||||
msg_info "Setup Plant-it"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "server.jar"
|
||||
mkdir -p /opt/plant-it/{backend,frontend}
|
||||
mkdir -p /opt/plant-it-data
|
||||
mv -f server.jar /opt/plant-it/backend/server.jar
|
||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||
|
||||
msg_info "Configured Plant-it"
|
||||
mkdir -p /opt/plant-it-data
|
||||
cat <<EOF >/opt/plant-it/backend/server.env
|
||||
MYSQL_HOST=localhost
|
||||
MYSQL_PORT=3306
|
||||
@@ -78,12 +66,7 @@ CACHE_TTL=86400
|
||||
CACHE_HOST=localhost
|
||||
CACHE_PORT=6379
|
||||
EOF
|
||||
|
||||
cd /opt/plant-it/frontend
|
||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o "client.tar.gz"
|
||||
tar -xzf client.tar.gz
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Setup Plant-it"
|
||||
msg_ok "Configured Plant-it"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/plant-it.service
|
||||
@@ -136,7 +119,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/plant-it/frontend/client.tar.gz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -13,19 +13,16 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||
|
||||
msg_info "Installing Prometheus"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
mkdir -p /etc/prometheus
|
||||
mkdir -p /var/lib/prometheus
|
||||
curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz" -o "prometheus-${RELEASE}.linux-amd64.tar.gz"
|
||||
tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
|
||||
mv prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/
|
||||
mv prometheus-${RELEASE}.linux-amd64/prometheus.yml /etc/prometheus/prometheus.yml
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml
|
||||
msg_ok "Installed Prometheus"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/prometheus.service
|
||||
cat <<'EOF' >/etc/systemd/system/prometheus.service
|
||||
[Unit]
|
||||
Description=Prometheus
|
||||
Wants=network-online.target
|
||||
@@ -53,5 +50,4 @@ customize
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -13,17 +13,14 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Prometheus Paperless NGX Exporter"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o "prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz"
|
||||
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||
mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
||||
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||
|
||||
msg_info "Configuring Prometheus Paperless NGX Exporter"
|
||||
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
||||
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||
SECRET_AUTH_TOKEN
|
||||
EOF
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Prometheus Paperless NGX Exporter"
|
||||
msg_ok "Configured Prometheus Paperless NGX Exporter"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
||||
@@ -53,5 +50,4 @@ customize
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -17,23 +17,19 @@ msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Prowlarr"
|
||||
temp_file="$(mktemp)"
|
||||
fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz"
|
||||
|
||||
msg_info "Configuring Prowlarr"
|
||||
mkdir -p /var/lib/prowlarr/
|
||||
chmod 775 /var/lib/prowlarr/
|
||||
cd /var/lib/prowlarr/
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Prowlarr/Prowlarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/Prowlarr/Prowlarr/releases/download/v${RELEASE}/Prowlarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
|
||||
$STD tar -xvzf "$temp_file"
|
||||
mv Prowlarr /opt
|
||||
chmod 775 /opt/Prowlarr
|
||||
msg_ok "Installed Prowlarr"
|
||||
chmod 775 /var/lib/prowlarr/ /opt/Prowlarr
|
||||
msg_ok "Configured Prowlarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/prowlarr.service
|
||||
[Unit]
|
||||
Description=Prowlarr Daemon
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
UMask=0002
|
||||
Type=simple
|
||||
@@ -41,6 +37,7 @@ ExecStart=/opt/Prowlarr/Prowlarr -nobrowser -data=/var/lib/prowlarr/
|
||||
TimeoutStopSec=20
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
@@ -51,7 +48,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -19,6 +19,8 @@ cat <<EOF >>/etc/apt/sources.list
|
||||
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
|
||||
EOF
|
||||
$STD apt-get update
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export IFUPDOWN2_NO_IFRELOAD=1
|
||||
$STD apt-get install -y proxmox-backup-server
|
||||
msg_ok "Installed Proxmox Backup Server"
|
||||
|
||||
|
||||
@@ -20,19 +20,12 @@ $STD apt-get install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="playactor" setup_nodejs
|
||||
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||
|
||||
msg_info "Installing PS5-MQTT"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
||||
curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz
|
||||
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
||||
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
||||
msg_info "Configuring PS5-MQTT"
|
||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
echo ${RELEASE} >/opt/ps5-mqtt_version.txt
|
||||
msg_ok "Installed PS5-MQTT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
mkdir -p /opt/.config/ps5-mqtt/
|
||||
mkdir -p /opt/.config/ps5-mqtt/playactor
|
||||
cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
||||
@@ -64,6 +57,9 @@ cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
||||
"frontendPort": "8645"
|
||||
}
|
||||
EOF
|
||||
msg_ok "Configured PS5-MQTT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
|
||||
[Unit]
|
||||
Description=PS5-MQTT Daemon
|
||||
@@ -92,5 +88,4 @@ customize
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
rm /tmp/${RELEASE}.tar.gz
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -13,14 +13,12 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox"
|
||||
|
||||
msg_info "Setup qBittorrent-nox"
|
||||
FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
|
||||
mkdir -p /opt/qbittorrent
|
||||
curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox
|
||||
chmod +x /opt/qbittorrent/qbittorrent-nox
|
||||
mkdir -p $HOME/.config/qBittorrent/
|
||||
cat <<EOF >$HOME/.config/qBittorrent/qBittorrent.conf
|
||||
mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox
|
||||
mkdir -p ~/.config/qBittorrent/
|
||||
cat <<EOF >~/.config/qBittorrent/qBittorrent.conf
|
||||
[LegalNotice]
|
||||
Accepted=true
|
||||
|
||||
@@ -30,7 +28,6 @@ WebUI\Port=8090
|
||||
WebUI\UseUPnP=false
|
||||
WebUI\Username=admin
|
||||
EOF
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Setup qBittorrent-nox"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -17,23 +17,19 @@ msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Radarr"
|
||||
temp_file="$(mktemp)"
|
||||
fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz"
|
||||
|
||||
msg_info "Configuring Radarr"
|
||||
mkdir -p /var/lib/radarr/
|
||||
chmod 775 /var/lib/radarr/
|
||||
cd /var/lib/radarr/
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/Radarr/Radarr/releases/download/v${RELEASE}/Radarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
|
||||
$STD tar -xvzf "$temp_file"
|
||||
mv Radarr /opt
|
||||
chmod 775 /opt/Radarr
|
||||
msg_ok "Installed Radarr"
|
||||
chmod 775 /var/lib/radarr/ /opt/Radarr/
|
||||
msg_ok "Configured Radarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/radarr.service
|
||||
[Unit]
|
||||
Description=Radarr Daemon
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
UMask=0002
|
||||
Type=simple
|
||||
@@ -41,6 +37,7 @@ ExecStart=/opt/Radarr/Radarr -nobrowser -data=/var/lib/radarr/
|
||||
TimeoutStopSec=20
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
@@ -51,7 +48,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf "$temp_file"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -17,12 +17,9 @@ msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y apache2-utils fuse3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||
|
||||
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-amd64.zip" -o "$temp_file"
|
||||
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
||||
cd /opt/rclone
|
||||
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
||||
@@ -31,7 +28,6 @@ $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
||||
echo "rclone User Name: admin"
|
||||
echo "rclone Password: $RCLONE_PASSWORD"
|
||||
} >>~/rclone.creds
|
||||
echo "${RELEASE}" >/opt/rclone_version.txt
|
||||
msg_ok "Installed rclone"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@@ -57,7 +53,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -16,19 +16,17 @@ update_os
|
||||
msg_info "Installing ASP.NET Core Runtime"
|
||||
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
|
||||
$STD dpkg -i packages-microsoft-prod.deb
|
||||
rm packages-microsoft-prod.deb
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y dotnet-sdk-9.0
|
||||
msg_ok "Installed ASP.NET Core Runtime"
|
||||
|
||||
msg_info "Installing rdtclient"
|
||||
curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o RealDebridClient.zip
|
||||
$STD unzip RealDebridClient.zip -d /opt/rdtc
|
||||
rm RealDebridClient.zip
|
||||
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||
|
||||
msg_info "Configuring rdtclient"
|
||||
cd /opt/rdtc
|
||||
mkdir -p data/{db,downloads}
|
||||
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
||||
msg_ok "Installed rdtclient"
|
||||
msg_ok "Configured rdtclient"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/rdtc.service
|
||||
@@ -51,6 +49,7 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f ~/packages-microsoft-prod.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -17,18 +17,17 @@ msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Recyclarr"
|
||||
curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)")
|
||||
tar -C /usr/local/bin -xJf recyclarr*.tar.xz
|
||||
fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz"
|
||||
|
||||
msg_info "Configuring Recyclarr"
|
||||
mkdir -p /root/.config/recyclarr
|
||||
recyclarr config create
|
||||
msg_ok "Installed Recyclarr"
|
||||
msg_ok "Configured Recyclarr"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf recyclarr*.tar.xz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -14,17 +14,12 @@ network_check
|
||||
update_os
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "revealjs" "hakimel/reveal.js" "tarball"
|
||||
|
||||
msg_info "Setup ${APPLICATION}"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf $temp_file
|
||||
mv reveal.js-${RELEASE}/ /opt/revealjs
|
||||
msg_info "Configuring ${APPLICATION}"
|
||||
cd /opt/revealjs
|
||||
$STD npm install
|
||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Setup ${APPLICATION}"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@@ -50,7 +45,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f $temp_file
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -13,21 +13,12 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setup RustDesk"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
|
||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
TEMPDIR=$(mktemp -d)
|
||||
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
||||
$STD dpkg -i "${TEMPDIR}"/*.deb
|
||||
msg_info "Configuring RustDesk Server"
|
||||
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
cd /var/lib/rustdesk-api
|
||||
$STD rustdesk-api reset-admin-pwd $ADMINPASS
|
||||
@@ -37,14 +28,12 @@ $STD rustdesk-api reset-admin-pwd $ADMINPASS
|
||||
echo "Username: admin"
|
||||
echo "Password: $ADMINPASS"
|
||||
} >>~/rustdesk.creds
|
||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
||||
msg_ok "Setup RustDesk"
|
||||
msg_ok "Configured RustDesk Server"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf $TEMPDIR
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -14,24 +14,21 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
git
|
||||
|
||||
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmour >/usr/share/keyrings/ansible-archive-keyring.gpg
|
||||
cat <<EOF >/etc/apt/sources.list.d/ansible.list
|
||||
deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu jammy main
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt install -y ansible
|
||||
$STD apt-get install -y git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Semaphore"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
msg_info "Setting up Ansible"
|
||||
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmor -o /usr/share/keyrings/ansible-archive-keyring.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu jammy main" >/etc/apt/sources.list.d/ansible.list
|
||||
$STD apt update
|
||||
$STD apt install -y ansible
|
||||
msg_ok "Set up Ansible"
|
||||
|
||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||
|
||||
msg_info "Configuring Semaphore"
|
||||
mkdir -p /opt/semaphore
|
||||
cd /opt/semaphore
|
||||
curl -fsSL "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb" -o "semaphore_${RELEASE}_linux_amd64.deb"
|
||||
$STD dpkg -i semaphore_${RELEASE}_linux_amd64.deb
|
||||
|
||||
SEM_HASH=$(openssl rand -base64 32)
|
||||
SEM_ENCRYPTION=$(openssl rand -base64 32)
|
||||
SEM_KEY=$(openssl rand -base64 32)
|
||||
@@ -47,10 +44,8 @@ cat <<EOF >/opt/semaphore/config.json
|
||||
"access_key_encryption": "${SEM_KEY}"
|
||||
}
|
||||
EOF
|
||||
|
||||
$STD semaphore user add --admin --login admin --email admin@helper-scripts.com --name Administrator --password ${SEM_PW} --config /opt/semaphore/config.json
|
||||
$STD semaphore user add --admin --login admin --email admin@helper-scripts.com --name Administrator --password "${SEM_PW}" --config /opt/semaphore/config.json
|
||||
echo "${SEM_PW}" >~/semaphore.creds
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Setup Semaphore"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@@ -70,14 +65,13 @@ RestartSec=10s
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable --now -q semaphore.service
|
||||
systemctl enable -q --now semaphore
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf semaphore_${RELEASE}_linux_amd64.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -13,18 +13,10 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Silverbullet"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
mkdir -p /opt/silverbullet/bin /opt/silverbullet/space
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip" -o "silverbullet-server-linux-x86_64.zip"
|
||||
$STD unzip -o -d /opt/silverbullet/bin/ silverbullet-server-linux-x86_64.zip
|
||||
chmod +x /opt/silverbullet/bin/silverbullet
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Silverbullet"
|
||||
fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip"
|
||||
mkdir -p /opt/silverbullet/space
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
cat <<EOF >/etc/systemd/system/silverbullet.service
|
||||
[Unit]
|
||||
Description=Silverbullet Daemon
|
||||
@@ -47,7 +39,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/silverbullet-server-linux-x86_64.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -15,12 +15,13 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
composer \
|
||||
git \
|
||||
nginx \
|
||||
php8.2-{bcmath,common,ctype,ldap,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
|
||||
nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||
setup_composer
|
||||
fetch_and_deploy_gh_release "snipe-it" "snipe/snipe-it" "tarball"
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Setting up database"
|
||||
@@ -38,12 +39,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
||||
} >>~/snipeit.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Installing Snipe-IT"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf $temp_file
|
||||
mv snipe-it-${RELEASE} /opt/snipe-it
|
||||
msg_info "Configuring Snipe-IT"
|
||||
cd /opt/snipe-it
|
||||
cp .env.example .env
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
@@ -56,11 +52,9 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
#$STD composer update --no-plugins --no-scripts
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
$STD php artisan key:generate --force
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed SnipeIT"
|
||||
msg_ok "Configured SnipeIT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
|
||||
@@ -84,15 +78,13 @@ server {
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
systemctl reload nginx
|
||||
msg_ok "Configured Service"
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f $temp_file
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -13,16 +13,19 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Syncthing"
|
||||
curl -fsSL -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
|
||||
sh -c 'echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" > /etc/apt/sources.list.d/syncthing.list'
|
||||
msg_info "Setting up Syncthing repo"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL "https://syncthing.net/release-key.gpg" -o /etc/apt/keyrings/syncthing-archive-keyring.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" >/etc/apt/sources.list.d/syncthing.list
|
||||
$STD apt-get update
|
||||
msg_ok "Set up Syncthing repo"
|
||||
|
||||
msg_info "Installing Syncthing"
|
||||
$STD apt-get install -y syncthing
|
||||
$STD systemctl enable syncthing@root.service
|
||||
systemctl start syncthing@root.service
|
||||
systemctl enable -q --now syncthing@root
|
||||
sleep 5
|
||||
sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml
|
||||
systemctl restart syncthing@root.service
|
||||
systemctl restart syncthing@root
|
||||
msg_ok "Installed Syncthing"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -14,20 +14,14 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y apache2
|
||||
$STD apt-get install -y php8.2
|
||||
$STD apt-get install -y libapache2-mod-php
|
||||
$STD apt-get install -y php8.2-curl
|
||||
$STD apt-get install -y php8.2-zip
|
||||
$STD apt-get install -y php8.2-mbstring
|
||||
$STD apt-get install -y php8.2-xml
|
||||
$STD apt-get install -y git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing TasmoAdmin"
|
||||
curl -fsSL "https://github.com/TasmoAdmin/TasmoAdmin/releases/download/v3.1.1/tasmoadmin_v3.1.1.tar.gz" -o tasmoadmin_v3.1.1.tar.gz
|
||||
tar -xzf tasmoadmin_v3.1.1.tar.gz -C /var/www/
|
||||
rm -rf tasmoadmin_v3.1.1.tar.gz /etc/php/8.2/apache2/conf.d/10-opcache.ini
|
||||
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
|
||||
fetch_and_deploy_gh_release "tasmoadmin" "TasmoAdmin/TasmoAdmin" "prebuild" "latest" "/var/www/tasmoadmin" "tasmoadmin_v*.tar.gz"
|
||||
|
||||
msg_info "Configuring TasmoAdmin"
|
||||
rm -rf /etc/php/8.4/apache2/conf.d/10-opcache.ini
|
||||
chown -R www-data:www-data /var/www/tasmoadmin
|
||||
chmod 777 /var/www/tasmoadmin/tmp /var/www/tasmoadmin/data
|
||||
cat <<EOF >/etc/apache2/sites-available/tasmoadmin.conf
|
||||
@@ -51,7 +45,8 @@ $STD a2ensite tasmoadmin
|
||||
$STD a2enmod rewrite
|
||||
systemctl reload apache2
|
||||
systemctl restart apache2
|
||||
msg_ok "Installed TasmoAdmin"
|
||||
msg_ok "Configured TasmoAdmin"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/msgbyte/tianji/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=tianji_db
|
||||
|
||||
@@ -23,8 +23,9 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest
|
||||
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
||||
tar -xf $temp_file
|
||||
mkdir -p /opt/wastebin
|
||||
mv wastebin /opt/wastebin/
|
||||
mv wastebin* /opt/wastebin/
|
||||
chmod +x /opt/wastebin/wastebin
|
||||
chmod +x /opt/wastebin/wastebin-ctl
|
||||
|
||||
mkdir -p /opt/wastebin-data
|
||||
cat <<EOF >/opt/wastebin-data/.env
|
||||
|
||||
@@ -82,6 +82,10 @@ Database:
|
||||
RootCert: ""
|
||||
Cert: ""
|
||||
Key: ""
|
||||
DefaultInstance:
|
||||
Features:
|
||||
LoginV2:
|
||||
Required: false
|
||||
EOF
|
||||
msg_ok "Installed Zitadel Enviroments"
|
||||
|
||||
@@ -114,7 +118,7 @@ systemctl enable -q zitadel
|
||||
msg_ok "Created Services"
|
||||
|
||||
msg_info "Zitadel initial setup"
|
||||
zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null &
|
||||
$STD zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
|
||||
sleep 60
|
||||
kill $(lsof -i | awk '/zitadel/ {print $2}' | head -n1)
|
||||
useradd zitadel
|
||||
@@ -123,16 +127,16 @@ msg_ok "Zitadel initialized"
|
||||
msg_info "Set ExternalDomain to current IP and restart Zitadel"
|
||||
IP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
sed -i "0,/localhost/s/localhost/${IP}/" /opt/zitadel/config.yaml
|
||||
systemctl stop -q zitadel.service
|
||||
zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null
|
||||
systemctl restart -q zitadel.service
|
||||
systemctl stop -q zitadel
|
||||
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
|
||||
systemctl restart -q zitadel
|
||||
msg_ok "Zitadel restarted with ExternalDomain set to current IP"
|
||||
|
||||
msg_info "Create zitadel-rerun.sh"
|
||||
cat <<EOF >~/zitadel-rerun.sh
|
||||
systemctl stop zitadel.service
|
||||
systemctl stop zitadel
|
||||
timeout --kill-after=5s 15s zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
|
||||
systemctl restart zitadel.service
|
||||
systemctl restart zitadel
|
||||
EOF
|
||||
msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml"
|
||||
|
||||
|
||||
@@ -894,7 +894,12 @@ function fetch_and_deploy_gh_release() {
|
||||
# If explicit filename pattern is provided (param $6), match that first
|
||||
if [[ -n "$asset_pattern" ]]; then
|
||||
for u in $assets; do
|
||||
[[ "$u" =~ $asset_pattern || "$u" == *"$asset_pattern" ]] && url_match="$u" && break
|
||||
case "${u##*/}" in
|
||||
$asset_pattern)
|
||||
url_match="$u"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -1407,7 +1412,9 @@ function setup_gs() {
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
$STD apt-get install -y build-essential libpng-dev zlib1g-dev
|
||||
./configure >/dev/null && make && sudo make install >/dev/null
|
||||
$STD ./configure >/dev/null
|
||||
$STD make
|
||||
$STD sudo make install
|
||||
local EXIT_CODE=$?
|
||||
hash -r
|
||||
if [[ ! -x "$(command -v gs)" ]]; then
|
||||
|
||||
@@ -39,30 +39,93 @@ function msg_ok() {
|
||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||
}
|
||||
|
||||
function msg_error() { echo -e "${RD}✗ $1${CL}"; }
|
||||
|
||||
pve_check() {
|
||||
if ! command -v pveversion >/dev/null 2>&1; then
|
||||
msg_error "This script can only be run on a Proxmox VE host."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local PVE_VER
|
||||
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
|
||||
|
||||
# Proxmox VE 8.x: allow 8.0 – 8.9
|
||||
if [[ "$PVE_VER" =~ ^9\.([0-9]+)(\.[0-9]+)?$ ]]; then
|
||||
local MINOR="${BASH_REMATCH[1]}"
|
||||
if ((MINOR != 0)); then
|
||||
msg_error "Unsupported Proxmox VE version: $PVE_VER"
|
||||
msg_error "Supported versions: 8.0 – 8.9 or 9.0.x"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Proxmox VE 9.x: allow only 9.0
|
||||
if [[ "$PVE_VER" =~ ^9\.([0-9]+)$ ]]; then
|
||||
local MINOR="${BASH_REMATCH[1]}"
|
||||
if ((MINOR != 0)); then
|
||||
msg_error "Unsupported Proxmox VE version: $PVE_VER"
|
||||
msg_error "Supported versions: 8.0 – 8.9 or 9.0"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
msg_error "Unsupported Proxmox VE version: $PVE_VER"
|
||||
msg_error "Supported versions: 8.0 – 8.9 or 9.0"
|
||||
exit 1
|
||||
}
|
||||
|
||||
detect_codename() {
|
||||
source /etc/os-release
|
||||
if [[ "$ID" != "debian" ]]; then
|
||||
msg_error "Unsupported base OS: $ID (only Proxmox VE / Debian supported)."
|
||||
exit 1
|
||||
fi
|
||||
CODENAME="${VERSION_CODENAME:-}"
|
||||
if [[ -z "$CODENAME" ]]; then
|
||||
msg_error "Could not detect Debian codename."
|
||||
exit 1
|
||||
fi
|
||||
echo "$CODENAME"
|
||||
}
|
||||
|
||||
get_latest_repo_pkg() {
|
||||
local REPO_URL=$1
|
||||
curl -fsSL "$REPO_URL" |
|
||||
grep -oP 'netdata-repo_[^"]+all\.deb' |
|
||||
sort -V |
|
||||
tail -n1
|
||||
}
|
||||
|
||||
install() {
|
||||
header_info
|
||||
while true; do
|
||||
read -p "Are you sure you want to install NetData on Proxmox VE host. Proceed(y/n)?" yn
|
||||
read -p "Are you sure you want to install NetData on Proxmox VE host. Proceed(y/n)? " yn
|
||||
case $yn in
|
||||
[Yy]*) break ;;
|
||||
[Nn]*) exit ;;
|
||||
*) echo "Please answer yes or no." ;;
|
||||
esac
|
||||
done
|
||||
header_info
|
||||
|
||||
read -r -p "Verbose mode? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
STD=""
|
||||
else
|
||||
STD="silent"
|
||||
fi
|
||||
header_info
|
||||
[[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent"
|
||||
|
||||
CODENAME=$(detect_codename)
|
||||
REPO_URL="https://repo.netdata.cloud/repos/repoconfig/debian/${CODENAME}/"
|
||||
|
||||
msg_info "Setting up repository"
|
||||
$STD apt-get install -y debian-keyring
|
||||
curl -fsSL "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb" -o $(basename "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb")
|
||||
$STD dpkg -i netdata-repo_5-1+debian12_all.deb
|
||||
rm -rf netdata-repo_5-1+debian12_all.deb
|
||||
PKG=$(get_latest_repo_pkg "$REPO_URL")
|
||||
if [[ -z "$PKG" ]]; then
|
||||
msg_error "Could not find netdata-repo package for Debian $CODENAME"
|
||||
exit 1
|
||||
fi
|
||||
curl -fsSL "${REPO_URL}${PKG}" -o "$PKG"
|
||||
$STD dpkg -i "$PKG"
|
||||
rm -f "$PKG"
|
||||
msg_ok "Set up repository"
|
||||
|
||||
msg_info "Installing Netdata"
|
||||
@@ -76,46 +139,32 @@ install() {
|
||||
uninstall() {
|
||||
header_info
|
||||
read -r -p "Verbose mode? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
STD=""
|
||||
else
|
||||
STD="silent"
|
||||
fi
|
||||
header_info
|
||||
[[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent"
|
||||
|
||||
msg_info "Uninstalling Netdata"
|
||||
systemctl stop netdata
|
||||
systemctl stop netdata || true
|
||||
rm -rf /var/log/netdata /var/lib/netdata /var/cache/netdata /etc/netdata/go.d
|
||||
rm -rf /etc/apt/trusted.gpg.d/netdata-archive-keyring.gpg /etc/apt/sources.list.d/netdata.list
|
||||
$STD apt-get remove --purge -y netdata netdata-repo
|
||||
systemctl daemon-reload
|
||||
$STD apt autoremove -y
|
||||
$STD userdel netdata
|
||||
$STD userdel netdata || true
|
||||
msg_ok "Uninstalled Netdata"
|
||||
msg_ok "Completed Successfully!\n"
|
||||
}
|
||||
|
||||
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
|
||||
echo -e "This version of Proxmox Virtual Environment is not supported"
|
||||
echo -e "Requires PVE Version 8.0 or higher"
|
||||
echo -e "Exiting..."
|
||||
sleep 2
|
||||
exit
|
||||
fi
|
||||
header_info
|
||||
pve_check
|
||||
|
||||
OPTIONS=(Install "Install NetData on Proxmox VE"
|
||||
Uninstall "Uninstall NetData from Proxmox VE")
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" --menu "Select an option:" 10 58 2 \
|
||||
"${OPTIONS[@]}" 3>&1 1>&2 2>&3)
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" \
|
||||
--menu "Select an option:" 10 58 2 "${OPTIONS[@]}" 3>&1 1>&2 2>&3)
|
||||
|
||||
case $CHOICE in
|
||||
"Install")
|
||||
install
|
||||
;;
|
||||
"Uninstall")
|
||||
uninstall
|
||||
;;
|
||||
"Install") install ;;
|
||||
"Uninstall") uninstall ;;
|
||||
*)
|
||||
echo "Exiting..."
|
||||
exit 0
|
||||
|
||||
@@ -480,24 +480,24 @@ EOF
|
||||
fi
|
||||
|
||||
# ---- PVETEST ----
|
||||
if component_exists_in_sources "pvetest"; then
|
||||
msg_ok "'pvetest' repository already exists (skipped)"
|
||||
if component_exists_in_sources "pve-test"; then
|
||||
msg_ok "'pve-test' repository already exists (skipped)"
|
||||
else
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVETEST" \
|
||||
--menu "The 'pvetest' repository can give advanced users access to new features and updates before they are officially released.\n\nAdd (Disabled) 'pvetest' repository (deb822)?" 14 58 2 \
|
||||
--menu "The 'pve-test' repository can give advanced users access to new features and updates before they are officially released.\n\nAdd (Disabled) 'pvetest' repository (deb822)?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Adding 'pvetest' repository (deb822, disabled)"
|
||||
cat >/etc/apt/sources.list.d/pvetest.sources <<EOF
|
||||
msg_info "Adding 'pve-test' repository (deb822, disabled)"
|
||||
cat >/etc/apt/sources.list.d/pve-test.sources <<EOF
|
||||
# Types: deb
|
||||
# URIs: http://download.proxmox.com/debian/pve
|
||||
# Suites: trixie
|
||||
# Components: pvetest
|
||||
# Components: pve-test
|
||||
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||
EOF
|
||||
msg_ok "Added 'pvetest' repository"
|
||||
msg_ok "Added 'pve-test' repository"
|
||||
;;
|
||||
no) msg_error "Selected no to Adding 'pvetest' repository" ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user