mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 10:52:49 +00:00
Compare commits
105 Commits
2025-08-21
...
2025-08-25
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea1c5b4561 | ||
|
|
957eea7a0f | ||
|
|
476fcedfe0 | ||
|
|
d590e91597 | ||
|
|
8c796a0870 | ||
|
|
b57efdb78a | ||
|
|
2cc3ce1ea1 | ||
|
|
468defcd97 | ||
|
|
78398309c0 | ||
|
|
08d1d7be62 | ||
|
|
05a4fcd471 | ||
|
|
36acf4aaae | ||
|
|
4182815b4c | ||
|
|
73a0910239 | ||
|
|
bd6626e919 | ||
|
|
3ad6cdf85a | ||
|
|
732bb75e9b | ||
|
|
d372b45a95 | ||
|
|
df564ace13 | ||
|
|
d2b28413eb | ||
|
|
b93a30ffb0 | ||
|
|
a4044b1cfd | ||
|
|
83eb2da451 | ||
|
|
9fda9f34c5 | ||
|
|
3715ea5946 | ||
|
|
de2d8d0e75 | ||
|
|
9f6abbe572 | ||
|
|
d90a071d88 | ||
|
|
69dd06b107 | ||
|
|
2be054a004 | ||
|
|
a2fcd3992e | ||
|
|
9a92df420e | ||
|
|
c6864c74bc | ||
|
|
941457b392 | ||
|
|
e84ea56a8f | ||
|
|
0d36d64454 | ||
|
|
74b2407c53 | ||
|
|
b97331282f | ||
|
|
fed5ebd9c8 | ||
|
|
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 |
92
CHANGELOG.md
92
CHANGELOG.md
@@ -10,8 +10,100 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
|
## 2025-08-26
|
||||||
|
|
||||||
|
## 2025-08-25
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-RustDesk Server [@tremor021](https://github.com/tremor021) ([#7191](https://github.com/community-scripts/ProxmoxVE/pull/7191))
|
||||||
|
- Alpine-Redlib ([#7178](https://github.com/community-scripts/ProxmoxVE/pull/7178))
|
||||||
|
- healthchecks ([#7177](https://github.com/community-scripts/ProxmoxVE/pull/7177))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect) [@CommanderPaladin](https://github.com/CommanderPaladin) ([#7174](https://github.com/community-scripts/ProxmoxVE/pull/7174))
|
||||||
|
- Immich: bump to v1.139.4 [@vhsdream](https://github.com/vhsdream) ([#7138](https://github.com/community-scripts/ProxmoxVE/pull/7138))
|
||||||
|
- Komodo: Fix compose.env path [@tremor021](https://github.com/tremor021) ([#7202](https://github.com/community-scripts/ProxmoxVE/pull/7202))
|
||||||
|
- Komodo: Fix update procedure and missing env var [@tremor021](https://github.com/tremor021) ([#7198](https://github.com/community-scripts/ProxmoxVE/pull/7198))
|
||||||
|
- SnipeIT: Update nginx config to v8.3 [@tremor021](https://github.com/tremor021) ([#7171](https://github.com/community-scripts/ProxmoxVE/pull/7171))
|
||||||
|
- Lidarr: Fix RELEASE variable fetching [@tremor021](https://github.com/tremor021) ([#7162](https://github.com/community-scripts/ProxmoxVE/pull/7162))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Komodo: Generate admin users password [@tremor021](https://github.com/tremor021) ([#7193](https://github.com/community-scripts/ProxmoxVE/pull/7193))
|
||||||
|
- [core]: uv uses now "update-shell" command [@MickLesk](https://github.com/MickLesk) ([#7172](https://github.com/community-scripts/ProxmoxVE/pull/7172))
|
||||||
|
- [core]: tools.func - better verbose for postgresql [@MickLesk](https://github.com/MickLesk) ([#7173](https://github.com/community-scripts/ProxmoxVE/pull/7173))
|
||||||
|
- n8n: Force update to NodeJS v22 [@tremor021](https://github.com/tremor021) ([#7176](https://github.com/community-scripts/ProxmoxVE/pull/7176))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- 2FAuth: Fix website and docs URLs [@tremor021](https://github.com/tremor021) ([#7199](https://github.com/community-scripts/ProxmoxVE/pull/7199))
|
||||||
|
|
||||||
|
## 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
|
## 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
|
## 2025-08-21
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
56
ct/alpine-redlib.sh
Normal file
56
ct/alpine-redlib.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/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: andrej-kocijan (Andrej Kocijan)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/redlib-org/redlib
|
||||||
|
|
||||||
|
APP="Alpine-Redlib"
|
||||||
|
var_tags="${var_tags:-alpine;frontend}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-1}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/redlib ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating Alpine Packages"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
|
msg_info "Stopping ${APP} Service"
|
||||||
|
$STD rc-service redlib stop
|
||||||
|
msg_ok "Stopped ${APP} Service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP} Service"
|
||||||
|
$STD rc-service redlib start
|
||||||
|
msg_ok "Started ${APP} Service"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
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}:5252${CL}"
|
||||||
74
ct/alpine-rustdeskserver.sh
Normal file
74
ct/alpine-rustdeskserver.sh
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/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: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/rustdesk/rustdesk-server
|
||||||
|
|
||||||
|
APP="Alpine-RustDeskServer"
|
||||||
|
var_tags="${var_tags:-alpine;monitoring}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-3}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
if [[ ! -d /opt/rustdesk-server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
|
||||||
|
msg_info "Updating RustDesk Server to v${RELEASE}"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
$STD service rustdesk-server-hbbs stop
|
||||||
|
$STD service rustdesk-server-hbbr stop
|
||||||
|
temp_file1=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
|
||||||
|
$STD unzip "$temp_file1"
|
||||||
|
cp -r amd64/* /opt/rustdesk-server/
|
||||||
|
echo "${RELEASE}" >~/.rustdesk-server
|
||||||
|
$STD service rustdesk-server-hbbs start
|
||||||
|
$STD service rustdesk-server-hbbr start
|
||||||
|
rm -rf amd64
|
||||||
|
rm -f $temp_file1
|
||||||
|
msg_ok "Updated RustDesk Server successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then
|
||||||
|
msg_info "Updating RustDesk API to v${APIRELEASE}"
|
||||||
|
$STD service rustdesk-api stop
|
||||||
|
temp_file2=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-amd64.tar.gz" -o "$temp_file2"
|
||||||
|
$STD tar zxvf "$temp_file2"
|
||||||
|
cp -r release/* /opt/rustdesk-api
|
||||||
|
echo "${APIRELEASE}" >~/.rustdesk-api
|
||||||
|
$STD service rustdesk-api start
|
||||||
|
rm -rf release
|
||||||
|
rm -f $temp_file2
|
||||||
|
msg_ok "Updated RustDesk API"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:21114${CL}"
|
||||||
6
ct/headers/alpine-redlib
Normal file
6
ct/headers/alpine-redlib
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ____ _____ __
|
||||||
|
/ | / /___ (_)___ ___ / __ \___ ____/ / (_) /_
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / _ \/ __ / / / __ \
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ __/ /_/ / / / /_/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\___/\__,_/_/_/_.___/
|
||||||
|
/_/
|
||||||
6
ct/headers/alpine-rustdeskserver
Normal file
6
ct/headers/alpine-rustdeskserver
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ____ __ ____ __ _____
|
||||||
|
/ | / /___ (_)___ ___ / __ \__ _______/ /_/ __ \___ _____/ /__/ ___/___ ______ _____ _____
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / _ \/ ___/ //_/\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / __(__ ) ,< ___/ / __/ / | |/ / __/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/_____/\___/____/_/|_|/____/\___/_/ |___/\___/_/
|
||||||
|
/_/
|
||||||
6
ct/headers/healthchecks
Normal file
6
ct/headers/healthchecks
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ ____ __ __ __
|
||||||
|
/ /_ ___ ____ _/ / /_/ /_ _____/ /_ ___ _____/ /_______
|
||||||
|
/ __ \/ _ \/ __ `/ / __/ __ \/ ___/ __ \/ _ \/ ___/ //_/ ___/
|
||||||
|
/ / / / __/ /_/ / / /_/ / / / /__/ / / / __/ /__/ ,< (__ )
|
||||||
|
/_/ /_/\___/\__,_/_/\__/_/ /_/\___/_/ /_/\___/\___/_/|_/____/
|
||||||
|
|
||||||
70
ct/healthchecks.sh
Normal file
70
ct/healthchecks.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/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: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://healthchecks.io/
|
||||||
|
|
||||||
|
APP="healthchecks"
|
||||||
|
var_tags="${var_tags:-monitoring}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
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 [[ ! -d /opt/healthchecks ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/healthchecks/healthchecks/releases/latest | jq '.tag_name' | sed 's/^"v//;s/"$//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.healthchecks 2>/dev/null)" ]] || [[ ! -f ~/.healthchecks ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop healthchecks
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt/healthchecks
|
||||||
|
mkdir -p /opt/healthchecks/static-collected/
|
||||||
|
$STD uv pip install wheel gunicorn -r requirements.txt --system
|
||||||
|
$STD uv run -- python manage.py makemigrations
|
||||||
|
$STD uv run -- python manage.py migrate --noinput
|
||||||
|
$STD uv run -- python manage.py collectstatic --noinput
|
||||||
|
$STD uv run -- python manage.py compress
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start healthchecks
|
||||||
|
systemctl restart caddy
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
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}https://${IP}${CL}"
|
||||||
52
ct/immich.sh
52
ct/immich.sh
@@ -29,6 +29,8 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
setup_uv
|
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
|
STAGING_DIR=/opt/staging
|
||||||
BASE_DIR=${STAGING_DIR}/base-images
|
BASE_DIR=${STAGING_DIR}/base-images
|
||||||
@@ -59,7 +61,7 @@ function update_script() {
|
|||||||
done
|
done
|
||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
RELEASE="1.138.1"
|
RELEASE="1.139.4"
|
||||||
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
#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
|
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
@@ -116,8 +118,12 @@ set +a
|
|||||||
EOF
|
EOF
|
||||||
chmod +x "$INSTALL_DIR"/start.sh
|
chmod +x "$INSTALL_DIR"/start.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
shopt -s dotglob
|
||||||
rm -rf "${APP_DIR:?}"/*
|
rm -rf "${APP_DIR:?}"/*
|
||||||
mkdir -p "$ML_DIR"
|
)
|
||||||
|
|
||||||
rm -rf "$SRC_DIR"
|
rm -rf "$SRC_DIR"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
||||||
@@ -127,30 +133,36 @@ EOF
|
|||||||
if [[ "$RELEASE" == "1.135.1" ]]; then
|
if [[ "$RELEASE" == "1.135.1" ]]; then
|
||||||
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
|
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
|
||||||
fi
|
fi
|
||||||
$STD npm install -g node-gyp node-pre-gyp
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
$STD npm ci
|
export CI=1
|
||||||
$STD npm run build
|
corepack enable
|
||||||
$STD npm prune --omit=dev --omit=optional
|
|
||||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
|
# server build
|
||||||
cp package.json "$APP_DIR"/bin
|
export SHARP_IGNORE_GLOBAL_LIBVIPS=true
|
||||||
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
$STD pnpm --filter immich --frozen-lockfile build
|
||||||
|
unset SHARP_IGNORE_GLOBAL_LIBVIPS
|
||||||
|
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||||
|
$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
|
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
||||||
cd "$SRC_DIR"/open-api/typescript-sdk
|
|
||||||
$STD npm ci
|
# openapi & web build
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"/web
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
|
$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 -a web/build "$APP_DIR"/www
|
||||||
cp LICENSE "$APP_DIR"
|
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"
|
cd "$APP_DIR"
|
||||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
||||||
$STD npm install sharp
|
|
||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
|
||||||
msg_ok "Updated ${APP} web and microservices"
|
msg_ok "Updated ${APP} web and microservices"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
|
mkdir -p "$ML_DIR"
|
||||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
@@ -178,10 +190,6 @@ EOF
|
|||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
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"
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
if [[ ! -f ~/.debian_version.bak ]]; then
|
if [[ ! -f ~/.debian_version.bak ]]; then
|
||||||
cp /etc/debian_version ~/.debian_version.bak
|
cp /etc/debian_version ~/.debian_version.bak
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ function update_script() {
|
|||||||
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
|
||||||
|
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
|
||||||
|
fi
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y jq
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then
|
||||||
|
|||||||
@@ -27,13 +27,6 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
|
|
||||||
if ! command -v npm >/dev/null 2>&1; then
|
|
||||||
echo "Installing NPM..."
|
|
||||||
$STD apt-get install -y npm
|
|
||||||
echo "Installed NPM..."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ ! -f /opt/n8n.env ]; then
|
if [ ! -f /opt/n8n.env ]; then
|
||||||
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
||||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||||
@@ -45,6 +38,7 @@ N8N_PROTOCOL=http
|
|||||||
N8N_HOST=$HOST_IP
|
N8N_HOST=$HOST_IP
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
$STD npm update -g n8n
|
$STD npm update -g n8n
|
||||||
|
|||||||
@@ -29,30 +29,25 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
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 /opt/${APP}_version.txt)" ]] || [[ ! -f "/opt/${APP}_version.txt" ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.pf2etools 2>/dev/null)" ]] || [[ ! -f ~/.pf2etools ]]; then
|
||||||
msg_info "Updating System"
|
msg_info "Updating System"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
msg_ok "Updated System"
|
msg_ok "Updated System"
|
||||||
|
|
||||||
|
rm -rf /opt/Pf2eTools
|
||||||
|
fetch_and_deploy_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools" "tarball" "latest" "/opt/Pf2eTools"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
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
|
cd /opt/Pf2eTools
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
chown -R www-data: "/opt/${APP}"
|
chown -R www-data: "/opt/${APP}"
|
||||||
chmod -R 755 "/opt/${APP}"
|
chmod -R 755 "/opt/${APP}"
|
||||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_ok "Updated successfully"
|
||||||
rm -rf /opt/${RELEASE}.zip
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,29 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
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"
|
msg_info "Stopping Service"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
cd /opt
|
|
||||||
mv /opt/phpipam/ /opt/phpipam-backup
|
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")
|
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||||
$STD unzip "phpipam-v${RELEASE}.zip"
|
|
||||||
cp /opt/phpipam-backup/config.php /opt/phpipam
|
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"
|
msg_info "Starting Service"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -r "/opt/phpipam-v${RELEASE}.zip"
|
|
||||||
rm -r /opt/phpipam-backup
|
rm -r /opt/phpipam-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -23,26 +23,19 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/plant-it ]]; then
|
if [[ ! -d /opt/plant-it ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
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) }')
|
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
|
if [[ "${RELEASE}" != "$(cat ~/.plant-it 2>/dev/null)" ]] || [[ ! -f ~/.plant-it ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop plant-it
|
systemctl stop plant-it
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "/opt/plant-it/server.jar"
|
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||||
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"
|
msg_info "Starting $APP"
|
||||||
systemctl start plant-it
|
systemctl start plant-it
|
||||||
|
|||||||
@@ -27,24 +27,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
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) }')
|
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}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop prometheus-paperless-ngx-exporter
|
systemctl stop prometheus-paperless-ngx-exporter
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||||
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}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start prometheus-paperless-ngx-exporter
|
systemctl start prometheus-paperless-ngx-exporter
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -28,23 +28,18 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
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}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop prometheus
|
systemctl stop prometheus
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||||
cd /opt
|
rm -f /usr/local/bin/prometheus.yml
|
||||||
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}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start prometheus
|
systemctl start prometheus
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -23,25 +23,21 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /var/lib/prowlarr/ ]]; then
|
if [[ ! -d /var/lib/prowlarr/ ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
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) }')
|
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"
|
if [[ "${RELEASE}" != "$(cat ~/.prowlarr 2>/dev/null)" ]] || [[ ! -f ~/.prowlarr ]]; then
|
||||||
$STD tar -xvzf "$temp_file"
|
rm -rf /opt/Prowlarr
|
||||||
mv Prowlarr /opt
|
fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz"
|
||||||
chmod 775 /opt/Prowlarr
|
chmod 775 /opt/Prowlarr
|
||||||
msg_ok "Updated $APP LXC"
|
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
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,37 +23,30 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/ps5-mqtt ]]; then
|
if [[ ! -d /opt/ps5-mqtt ]]; then
|
||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
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
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop ps5-mqtt
|
systemctl stop ps5-mqtt
|
||||||
msg_ok "Stopped service"
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
msg_info "Updating PS5-MQTT to ${RELEASE}"
|
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||||
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"
|
|
||||||
|
|
||||||
msg_info "Building new PS5-MQTT version"
|
msg_info "Configuring ${APP}"
|
||||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Built new PS5-MQTT version"
|
msg_ok "Configured ${APP}"
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start ps5-mqtt
|
systemctl start ps5-mqtt
|
||||||
msg_ok "Started service"
|
msg_ok "Started service"
|
||||||
|
|
||||||
|
msg_ok "Updated successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,32 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ ! -f ~/.qbittorrent ]]; then
|
||||||
touch /opt/${APP}_version.txt
|
msg_error "Please create new qBittorrent LXC. Updating from v4.x to v5.x is not supported!"
|
||||||
mkdir -p $HOME/.config/qBittorrent/
|
exit
|
||||||
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
|
|
||||||
fi
|
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)
|
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 /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.qbittorrent ]] || [[ "${RELEASE}" != "$(cat ~/.qbittorrent 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop qbittorrent-nox
|
systemctl stop qbittorrent-nox
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
rm -f /opt/qbittorrent/qbittorrent-nox
|
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
|
fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox"
|
||||||
chmod +x /opt/qbittorrent/qbittorrent-nox
|
mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start qbittorrent-nox
|
systemctl start qbittorrent-nox
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
17
ct/radarr.sh
17
ct/radarr.sh
@@ -29,19 +29,16 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Radarr/Radarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
temp_file="$(mktemp)"
|
if [[ ! -f ~/.radarr ]] || [[ "$RELEASE" != "$(cat ~/.radarr 2>/dev/null)" ]]; then
|
||||||
rm -rf /opt/Radarr
|
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) }')
|
fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz"
|
||||||
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
|
chmod 775 /opt/Radarr
|
||||||
msg_ok "Updated $APP LXC"
|
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
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
ct/rclone.sh
14
ct/rclone.sh
@@ -28,27 +28,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
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"
|
msg_info "Stopping Service"
|
||||||
systemctl stop rclone-web
|
systemctl stop rclone-web
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||||
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}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start rclone-web
|
systemctl start rclone-web
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f "$temp_file"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -27,30 +27,37 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
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}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop rdtc
|
systemctl stop rdtc
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${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
|
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 remove --purge -y dotnet-sdk-8.0
|
||||||
$STD apt-get install -y dotnet-sdk-9.0
|
$STD apt-get install -y dotnet-sdk-9.0
|
||||||
fi
|
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}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start rdtc
|
systemctl start rdtc
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf rdtc-backup RealDebridClient.zip
|
rm -rf /opt/rdtc-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,13 +28,14 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
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)")
|
if [[ "${RELEASE}" != "$(cat ~/.recyclarr 2>/dev/null)" ]] || [[ ! -f ~/.recyclarr ]]; then
|
||||||
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"
|
||||||
rm -rf recyclarr*.tar.xz
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,29 +23,25 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d "/opt/revealjs" ]]; then
|
if [[ ! -d "/opt/revealjs" ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
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) }')
|
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"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop revealjs
|
systemctl stop revealjs
|
||||||
msg_ok "Stopped $APP"
|
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 /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
|
cd /opt/revealjs
|
||||||
$STD npm install
|
$STD npm install
|
||||||
cp -f /opt/index.html /opt/revealjs
|
cp -f /opt/index.html /opt/revealjs
|
||||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
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_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
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_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -f $temp_file
|
rm -f /opt/index.html
|
||||||
rm -rf ~/reveal.js-${RELEASE}
|
|
||||||
msg_ok "Cleanup Completed"
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
|
|||||||
@@ -29,25 +29,17 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
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"
|
msg_info "Stopping Service"
|
||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||||
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}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf /opt/semaphore_${RELEASE}_linux_amd64.deb
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||||
|
|||||||
@@ -26,19 +26,14 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
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}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop silverbullet
|
systemctl stop silverbullet
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip"
|
||||||
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}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start silverbullet
|
systemctl start silverbullet
|
||||||
|
|||||||
@@ -27,20 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
|
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"
|
msg_info "Stopping Services"
|
||||||
systemctl stop nginx
|
systemctl stop nginx
|
||||||
msg_ok "Services Stopped"
|
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
|
||||||
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$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 /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/public/uploads/ /opt/snipe-it/public/uploads/
|
||||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
||||||
@@ -55,7 +60,6 @@ function update_script() {
|
|||||||
$STD php artisan view:clear
|
$STD php artisan view:clear
|
||||||
chown -R www-data: /opt/snipe-it
|
chown -R www-data: /opt/snipe-it
|
||||||
chmod -R 755 /opt/snipe-it
|
chmod -R 755 /opt/snipe-it
|
||||||
rm -rf "$temp_file"
|
|
||||||
rm -rf /opt/snipe-it-backup
|
rm -rf /opt/snipe-it-backup
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
|
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
|
cd /opt/tandoor
|
||||||
$STD uv venv .venv --python=python3
|
$STD uv venv .venv --python=python3
|
||||||
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
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
|
if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop tududi
|
systemctl stop tududi
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 80,
|
"interface_port": 80,
|
||||||
"documentation": null,
|
"documentation": "https://docs.2fauth.app/",
|
||||||
"website": "https://docs.2fauth.app/",
|
"website": "https://2fauth.app/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/2fauth.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/2fauth.webp",
|
||||||
"config_path": "cat /opt/2fauth/.env",
|
"config_path": "cat /opt/2fauth/.env",
|
||||||
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
|
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
|
||||||
|
|||||||
44
frontend/public/json/healthchecks.json
Normal file
44
frontend/public/json/healthchecks.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "Healthchecks",
|
||||||
|
"slug": "healthchecks",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-25",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/opt/healthchecks/hc/local_settings.py",
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://healthchecks.io/docs/",
|
||||||
|
"website": "https://healthchecks.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/healthchecks.webp",
|
||||||
|
"description": "Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages (\"pings\") from your cron jobs and scheduled tasks (\"checks\"). When a ping does not arrive on time, Healthchecks sends out alerts. Healthchecks comes with a web dashboard, API, 25+ integrations for delivering notifications, monthly email reports, WebAuthn 2FA support, team management features: projects, team members, read-only access.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/healthchecks.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "if you change your LXC-IP, you need to update /etc/caddy/Caddyfile & /opt/healthchecks/hc/local_settings.py",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Show credentials: `cat ~/healthchecks.creds`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
"type": "warning"
|
"type": "warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "Show password: `cat ~/kasm.creds`",
|
"text": "Show credentials: `cat ~/kasm.creds`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "After the initial installation: Enter your desired admin user and password and then click on Sign Up",
|
"text": "For admin username and password type `cat ~/komodo.creds` inside LXC.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Show Login Credentials, type `cat ~/paperless.creds` in the LXC console",
|
"text": "Show Login Credentials, type `cat ~/paperless-ngx.creds` in the LXC console",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 9090,
|
"interface_port": 9090,
|
||||||
"documentation": null,
|
"documentation": "https://prometheus.io/docs/introduction/overview/",
|
||||||
"website": "https://prometheus.io/",
|
"website": "https://prometheus.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
||||||
"config_path": "/etc/prometheus/prometheus.yml",
|
"config_path": "/etc/prometheus/prometheus.yml",
|
||||||
|
|||||||
35
frontend/public/json/redlib.json
Normal file
35
frontend/public/json/redlib.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Redlib",
|
||||||
|
"slug": "redlib",
|
||||||
|
"categories": [
|
||||||
|
10
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-25",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 5252,
|
||||||
|
"documentation": "https://github.com/redlib-org/redlib/blob/main/README.md",
|
||||||
|
"website": "https://github.com/redlib-org/redlib",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redlib.webp",
|
||||||
|
"config_path": "/opt/redlib/redlib.conf",
|
||||||
|
"description": "An alternative private front-end to Reddit. Redlib hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/alpine-redlib.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -25,6 +25,17 @@
|
|||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-rustdeskserver.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
|
|||||||
@@ -1,49 +1,334 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "coder/code-server",
|
||||||
|
"version": "v4.103.2",
|
||||||
|
"date": "2025-08-25T23:30:54Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "advplyr/audiobookshelf",
|
||||||
|
"version": "v2.29.0",
|
||||||
|
"date": "2025-08-25T22:43:20Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "booklore-app/booklore",
|
||||||
|
"version": "v0.38.2",
|
||||||
|
"date": "2025-08-25T22:41:41Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "esphome/esphome",
|
||||||
|
"version": "2025.8.1",
|
||||||
|
"date": "2025-08-25T20:48:19Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Brandawg93/PeaNUT",
|
||||||
|
"version": "v5.13.0",
|
||||||
|
"date": "2025-08-25T19:19:51Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "immich-app/immich",
|
||||||
|
"version": "v1.139.4",
|
||||||
|
"date": "2025-08-25T18:31:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.11.7",
|
||||||
|
"date": "2025-08-25T18:04:05Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mealie-recipes/mealie",
|
||||||
|
"version": "v3.1.2",
|
||||||
|
"date": "2025-08-25T18:00:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "linkwarden/linkwarden",
|
||||||
|
"version": "v2.11.8",
|
||||||
|
"date": "2025-08-25T16:27:12Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rcourtman/Pulse",
|
||||||
|
"version": "v4.7.6",
|
||||||
|
"date": "2025-08-23T22:49:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Checkmk/checkmk",
|
||||||
|
"version": "v2.3.0p36",
|
||||||
|
"date": "2025-08-25T15:32:14Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n8n-io/n8n",
|
||||||
|
"version": "n8n@1.107.4",
|
||||||
|
"date": "2025-08-20T12:23:06Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "crowdsecurity/crowdsec",
|
||||||
|
"version": "v1.6.11",
|
||||||
|
"date": "2025-07-22T12:11:38Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sabnzbd/sabnzbd",
|
||||||
|
"version": "4.5.3",
|
||||||
|
"date": "2025-08-25T13:59:56Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zabbix/zabbix",
|
||||||
|
"version": "7.4.2",
|
||||||
|
"date": "2025-08-25T12:38:14Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gotson/komga",
|
||||||
|
"version": "1.23.2",
|
||||||
|
"date": "2025-08-25T09:39:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meilisearch/meilisearch",
|
||||||
|
"version": "latest",
|
||||||
|
"date": "2025-08-25T09:14:19Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "emqx/emqx",
|
||||||
|
"version": "e5.10.1-beta.2",
|
||||||
|
"date": "2025-08-25T08:51:40Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.3-beta.10",
|
||||||
|
"date": "2025-07-15T06:07:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.22.2343",
|
||||||
|
"date": "2025-08-25T05:50:39Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "v6.3.2",
|
||||||
|
"date": "2025-08-19T04:08:36Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FlareSolverr/FlareSolverr",
|
||||||
|
"version": "v3.4.0",
|
||||||
|
"date": "2025-08-25T03:22:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "plexguide/Huntarr.io",
|
||||||
|
"version": "8.2.10",
|
||||||
|
"date": "2025-08-25T01:26:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jeedom/core",
|
||||||
|
"version": "4.4.19",
|
||||||
|
"date": "2025-08-25T00:27:05Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gtsteffaniak/filebrowser",
|
||||||
|
"version": "v0.8.2-beta",
|
||||||
|
"date": "2025-08-25T00:26:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "steveiliop56/tinyauth",
|
||||||
|
"version": "v3.6.2",
|
||||||
|
"date": "2025-07-17T12:08:03Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "crafty-controller/crafty-4",
|
||||||
|
"version": "v4.5.1",
|
||||||
|
"date": "2025-08-24T23:58:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "documenso/documenso",
|
||||||
|
"version": "v1.12.2-rc.5",
|
||||||
|
"date": "2025-08-24T23:48:04Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "runtipi/runtipi",
|
||||||
|
"version": "v4.3.0",
|
||||||
|
"date": "2025-07-05T12:14:52Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wavelog/wavelog",
|
||||||
|
"version": "2.1",
|
||||||
|
"date": "2025-08-24T15:42:19Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "keycloak/keycloak",
|
||||||
|
"version": "26.3.3",
|
||||||
|
"date": "2025-08-20T10:12:51Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "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": "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": "homarr-labs/homarr",
|
||||||
|
"version": "v1.34.0",
|
||||||
|
"date": "2025-08-22T19:16:24Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "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": "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",
|
"name": "9001/copyparty",
|
||||||
"version": "v1.19.5",
|
"version": "v1.19.5",
|
||||||
"date": "2025-08-21T23:45:57Z"
|
"date": "2025-08-21T23:45:57Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "rcourtman/Pulse",
|
|
||||||
"version": "v4.6.0",
|
|
||||||
"date": "2025-08-20T20:53:43Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "immich-app/immich",
|
|
||||||
"version": "v1.139.2",
|
|
||||||
"date": "2025-08-21T22:35:59Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ipfs/kubo",
|
"name": "ipfs/kubo",
|
||||||
"version": "v0.36.0",
|
"version": "v0.36.0",
|
||||||
"date": "2025-07-14T18:59:57Z"
|
"date": "2025-07-14T18:59:57Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "runtipi/runtipi",
|
|
||||||
"version": "nightly",
|
|
||||||
"date": "2025-08-16T16:04:53Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "HabitRPG/habitica",
|
"name": "HabitRPG/habitica",
|
||||||
"version": "v5.39.0",
|
"version": "v5.39.0",
|
||||||
"date": "2025-08-21T18:40:00Z"
|
"date": "2025-08-21T18:40:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zitadel/zitadel",
|
|
||||||
"version": "v4.0.2",
|
|
||||||
"date": "2025-08-15T14:12:26Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "home-assistant/core",
|
"name": "home-assistant/core",
|
||||||
"version": "2025.8.3",
|
"version": "2025.8.3",
|
||||||
"date": "2025-08-21T18:23:10Z"
|
"date": "2025-08-21T18:23:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "open-webui/open-webui",
|
|
||||||
"version": "v0.6.23",
|
|
||||||
"date": "2025-08-21T18:21:20Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hargata/lubelog",
|
"name": "hargata/lubelog",
|
||||||
"version": "v1.5.0",
|
"version": "v1.5.0",
|
||||||
@@ -69,106 +354,26 @@
|
|||||||
"version": "v1.4.6",
|
"version": "v1.4.6",
|
||||||
"date": "2025-08-21T14:05:58Z"
|
"date": "2025-08-21T14:05:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "prometheus/prometheus",
|
|
||||||
"version": "v0.306.0-rc.0",
|
|
||||||
"date": "2025-08-21T13:31:03Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "glpi-project/glpi",
|
"name": "glpi-project/glpi",
|
||||||
"version": "10.0.19",
|
"version": "10.0.19",
|
||||||
"date": "2025-07-16T09:45:14Z"
|
"date": "2025-07-16T09:45:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "mattermost/mattermost",
|
|
||||||
"version": "v10.5.10",
|
|
||||||
"date": "2025-08-15T12:12:06Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fuma-nama/fumadocs",
|
|
||||||
"version": "fumadocs-core@15.7.0",
|
|
||||||
"date": "2025-08-21T10:12:00Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "emqx/emqx",
|
|
||||||
"version": "e6.0.0-M2.202508-rc.1",
|
|
||||||
"date": "2025-08-20T18:02:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "semaphoreui/semaphore",
|
"name": "semaphoreui/semaphore",
|
||||||
"version": "v2.16.18",
|
"version": "v2.16.18",
|
||||||
"date": "2025-08-21T08:19:58Z"
|
"date": "2025-08-21T08:19:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "theonedev/onedev",
|
|
||||||
"version": "v12.0.5",
|
|
||||||
"date": "2025-08-21T07:12:27Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.3-beta.10",
|
|
||||||
"date": "2025-07-15T06:07:03Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.22.2319",
|
|
||||||
"date": "2025-08-21T05:52:32Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jeedom/core",
|
|
||||||
"version": "4.4.19",
|
|
||||||
"date": "2025-08-21T00:27:08Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "steveiliop56/tinyauth",
|
|
||||||
"version": "v3.6.2",
|
|
||||||
"date": "2025-07-17T12:08:03Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.3.3",
|
|
||||||
"date": "2025-08-20T10:12:51Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.11.6",
|
|
||||||
"date": "2025-08-20T21:00:13Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "YunoHost/yunohost",
|
|
||||||
"version": "debian/12.1.14",
|
|
||||||
"date": "2025-08-20T20:52:44Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "MediaBrowser/Emby.Releases",
|
|
||||||
"version": "4.9.1.2",
|
|
||||||
"date": "2025-06-26T22:08:00Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "goauthentik/authentik",
|
|
||||||
"version": "version/2025.8.0",
|
|
||||||
"date": "2025-08-20T18:09:17Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jenkinsci/jenkins",
|
"name": "jenkinsci/jenkins",
|
||||||
"version": "jenkins-2.516.2",
|
"version": "jenkins-2.516.2",
|
||||||
"date": "2025-08-20T17:15:26Z"
|
"date": "2025-08-20T17:15:26Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Checkmk/checkmk",
|
|
||||||
"version": "v2.4.0p10",
|
|
||||||
"date": "2025-08-20T14:05:06Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "AdguardTeam/AdGuardHome",
|
"name": "AdguardTeam/AdGuardHome",
|
||||||
"version": "v0.107.65",
|
"version": "v0.107.65",
|
||||||
"date": "2025-08-20T14:02:28Z"
|
"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",
|
"name": "cockpit-project/cockpit",
|
||||||
"version": "345",
|
"version": "345",
|
||||||
@@ -189,36 +394,16 @@
|
|||||||
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
||||||
"date": "2025-08-20T08:15:46Z"
|
"date": "2025-08-20T08:15:46Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "esphome/esphome",
|
|
||||||
"version": "2025.8.0",
|
|
||||||
"date": "2025-08-20T07:58:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Luligu/matterbridge",
|
"name": "Luligu/matterbridge",
|
||||||
"version": "3.2.3",
|
"version": "3.2.3",
|
||||||
"date": "2025-08-20T07:57:58Z"
|
"date": "2025-08-20T07:57:58Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "gtsteffaniak/filebrowser",
|
|
||||||
"version": "v0.8.0-beta",
|
|
||||||
"date": "2025-08-20T01:02:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "TwiN/gatus",
|
"name": "TwiN/gatus",
|
||||||
"version": "v5.23.2",
|
"version": "v5.23.2",
|
||||||
"date": "2025-08-19T21:24:45Z"
|
"date": "2025-08-19T21:24:45Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "mealie-recipes/mealie",
|
|
||||||
"version": "v3.1.1",
|
|
||||||
"date": "2025-08-19T20:23:43Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wazuh/wazuh",
|
|
||||||
"version": "v4.10.3",
|
|
||||||
"date": "2025-08-19T18:51:00Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "cross-seed/cross-seed",
|
"name": "cross-seed/cross-seed",
|
||||||
"version": "v6.13.2",
|
"version": "v6.13.2",
|
||||||
@@ -234,26 +419,11 @@
|
|||||||
"version": "0.50.10",
|
"version": "0.50.10",
|
||||||
"date": "2025-08-19T17:21:44Z"
|
"date": "2025-08-19T17:21:44Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "msgbyte/tianji",
|
|
||||||
"version": "v1.24.18",
|
|
||||||
"date": "2025-08-19T16:57:09Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "karlomikus/bar-assistant",
|
"name": "karlomikus/bar-assistant",
|
||||||
"version": "v5.8.0",
|
"version": "v5.8.0",
|
||||||
"date": "2025-08-19T16:46:00Z"
|
"date": "2025-08-19T16:46:00Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "sabnzbd/sabnzbd",
|
|
||||||
"version": "4.5.2",
|
|
||||||
"date": "2025-07-09T19:08:28Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "traccar/traccar",
|
|
||||||
"version": "v6.9.0",
|
|
||||||
"date": "2025-08-19T14:22:26Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "fallenbagel/jellyseerr",
|
"name": "fallenbagel/jellyseerr",
|
||||||
"version": "preview-dns-cache-manager",
|
"version": "preview-dns-cache-manager",
|
||||||
@@ -264,16 +434,6 @@
|
|||||||
"version": "v1.136.0",
|
"version": "v1.136.0",
|
||||||
"date": "2025-08-12T14:26:27Z"
|
"date": "2025-08-12T14:26:27Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "zabbix/zabbix",
|
|
||||||
"version": "7.2.12",
|
|
||||||
"date": "2025-08-19T11:16:17Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "crowdsecurity/crowdsec",
|
|
||||||
"version": "v1.6.11",
|
|
||||||
"date": "2025-07-22T12:11:38Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "chrisvel/tududi",
|
"name": "chrisvel/tududi",
|
||||||
"version": "v0.80",
|
"version": "v0.80",
|
||||||
@@ -284,16 +444,6 @@
|
|||||||
"version": "v7.12.0",
|
"version": "v7.12.0",
|
||||||
"date": "2025-08-19T06:57:20Z"
|
"date": "2025-08-19T06:57:20Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "firefly-iii/firefly-iii",
|
|
||||||
"version": "v6.3.2",
|
|
||||||
"date": "2025-08-19T04:08:36Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "plexguide/Huntarr.io",
|
|
||||||
"version": "8.2.6",
|
|
||||||
"date": "2025-08-18T23:31:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "bunkerity/bunkerweb",
|
"name": "bunkerity/bunkerweb",
|
||||||
"version": "v1.6.4",
|
"version": "v1.6.4",
|
||||||
@@ -319,11 +469,6 @@
|
|||||||
"version": "v25.2",
|
"version": "v25.2",
|
||||||
"date": "2025-07-04T08:21:42Z"
|
"date": "2025-07-04T08:21:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "meilisearch/meilisearch",
|
|
||||||
"version": "prototype-arroy-becomes-hannoy-with-sharding-0",
|
|
||||||
"date": "2025-08-18T14:48:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||||
"version": "pmm-6401-v1.124.0",
|
"version": "pmm-6401-v1.124.0",
|
||||||
@@ -334,21 +479,11 @@
|
|||||||
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
|
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
|
||||||
"date": "2025-08-18T07:39:41Z"
|
"date": "2025-08-18T07:39:41Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "moghtech/komodo",
|
|
||||||
"version": "v1.19.0",
|
|
||||||
"date": "2025-08-18T01:22:47Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "lldap/lldap",
|
"name": "lldap/lldap",
|
||||||
"version": "v0.6.2",
|
"version": "v0.6.2",
|
||||||
"date": "2025-08-17T22:07:10Z"
|
"date": "2025-08-17T22:07:10Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "paperless-ngx/paperless-ngx",
|
|
||||||
"version": "v2.18.1",
|
|
||||||
"date": "2025-08-17T21:16:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "wizarrrr/wizarr",
|
"name": "wizarrrr/wizarr",
|
||||||
"version": "2025.8.3",
|
"version": "2025.8.3",
|
||||||
@@ -369,31 +504,6 @@
|
|||||||
"version": "3.3.0",
|
"version": "3.3.0",
|
||||||
"date": "2025-08-17T19:57:11Z"
|
"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": "Ombi-app/Ombi",
|
|
||||||
"version": "v4.47.1",
|
|
||||||
"date": "2025-01-05T21:14:23Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "TandoorRecipes/recipes",
|
|
||||||
"version": "2.0.2",
|
|
||||||
"date": "2025-08-17T09:24:37Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mylar3/mylar3",
|
"name": "mylar3/mylar3",
|
||||||
"version": "v0.8.3",
|
"version": "v0.8.3",
|
||||||
@@ -409,31 +519,11 @@
|
|||||||
"version": "v1.2.10",
|
"version": "v1.2.10",
|
||||||
"date": "2025-08-16T11:45:23Z"
|
"date": "2025-08-16T11:45:23Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "documenso/documenso",
|
|
||||||
"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",
|
|
||||||
"date": "2025-08-16T01:59:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mongodb/mongo",
|
"name": "mongodb/mongo",
|
||||||
"version": "r8.2.0",
|
"version": "r8.2.0",
|
||||||
"date": "2025-08-15T22:02:15Z"
|
"date": "2025-08-15T22:02:15Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "homarr-labs/homarr",
|
|
||||||
"version": "v1.33.0",
|
|
||||||
"date": "2025-08-15T19:17:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jhuckaby/Cronicle",
|
"name": "jhuckaby/Cronicle",
|
||||||
"version": "v0.9.90",
|
"version": "v0.9.90",
|
||||||
@@ -449,26 +539,11 @@
|
|||||||
"version": "v0.8.0-release",
|
"version": "v0.8.0-release",
|
||||||
"date": "2025-08-15T06:19:12Z"
|
"date": "2025-08-15T06:19:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "cloudreve/cloudreve",
|
|
||||||
"version": "4.5.1",
|
|
||||||
"date": "2025-08-15T05:53:22Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "gristlabs/grist-core",
|
"name": "gristlabs/grist-core",
|
||||||
"version": "v1.7.2",
|
"version": "v1.7.2",
|
||||||
"date": "2025-08-14T19:07:57Z"
|
"date": "2025-08-14T19:07:57Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "linkwarden/linkwarden",
|
|
||||||
"version": "v2.11.7",
|
|
||||||
"date": "2025-08-14T17:14:33Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "booklore-app/booklore",
|
|
||||||
"version": "v0.37.0",
|
|
||||||
"date": "2025-08-14T00:37:49Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "jellyfin/jellyfin",
|
"name": "jellyfin/jellyfin",
|
||||||
"version": "v10.10.7",
|
"version": "v10.10.7",
|
||||||
@@ -514,11 +589,6 @@
|
|||||||
"version": "v2.5.308",
|
"version": "v2.5.308",
|
||||||
"date": "2025-08-13T07:09:29Z"
|
"date": "2025-08-13T07:09:29Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Brandawg93/PeaNUT",
|
|
||||||
"version": "v5.12.0",
|
|
||||||
"date": "2025-08-12T15:09:35Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "bluenviron/mediamtx",
|
"name": "bluenviron/mediamtx",
|
||||||
"version": "v1.14.0",
|
"version": "v1.14.0",
|
||||||
@@ -559,16 +629,6 @@
|
|||||||
"version": "0.23.2",
|
"version": "0.23.2",
|
||||||
"date": "2025-08-10T23:35:07Z"
|
"date": "2025-08-10T23:35:07Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "advplyr/audiobookshelf",
|
|
||||||
"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",
|
"name": "ioBroker/ioBroker",
|
||||||
"version": "1012-08-09",
|
"version": "1012-08-09",
|
||||||
@@ -599,11 +659,6 @@
|
|||||||
"version": "v4.39.6",
|
"version": "v4.39.6",
|
||||||
"date": "2025-08-09T08:11:44Z"
|
"date": "2025-08-09T08:11:44Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pocketbase/pocketbase",
|
|
||||||
"version": "v0.29.2",
|
|
||||||
"date": "2025-08-09T07:28:08Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "kimai/kimai",
|
"name": "kimai/kimai",
|
||||||
"version": "2.38.0",
|
"version": "2.38.0",
|
||||||
@@ -624,11 +679,6 @@
|
|||||||
"version": "mariadb-12.0.2",
|
"version": "mariadb-12.0.2",
|
||||||
"date": "2025-08-07T21:23:15Z"
|
"date": "2025-08-07T21:23:15Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "tailscale/tailscale",
|
|
||||||
"version": "v1.86.4",
|
|
||||||
"date": "2025-08-07T16:48:40Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "rabbitmq/rabbitmq-server",
|
"name": "rabbitmq/rabbitmq-server",
|
||||||
"version": "v4.1.3",
|
"version": "v4.1.3",
|
||||||
@@ -774,16 +824,6 @@
|
|||||||
"version": "2025.07.1",
|
"version": "2025.07.1",
|
||||||
"date": "2025-08-01T14:40:28Z"
|
"date": "2025-08-01T14:40: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",
|
"name": "Suwayomi/Suwayomi-Server",
|
||||||
"version": "v2.1.1867",
|
"version": "v2.1.1867",
|
||||||
@@ -884,11 +924,6 @@
|
|||||||
"version": "v3.2.5r2",
|
"version": "v3.2.5r2",
|
||||||
"date": "2025-07-21T12:52:26Z"
|
"date": "2025-07-21T12:52:26Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "wavelog/wavelog",
|
|
||||||
"version": "2.0.7",
|
|
||||||
"date": "2025-07-17T15:33:14Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "icereed/paperless-gpt",
|
"name": "icereed/paperless-gpt",
|
||||||
"version": "v0.22.0",
|
"version": "v0.22.0",
|
||||||
@@ -949,11 +984,6 @@
|
|||||||
"version": "v4.3.3",
|
"version": "v4.3.3",
|
||||||
"date": "2025-07-09T15:35:44Z"
|
"date": "2025-07-09T15:35:44Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "rclone/rclone",
|
|
||||||
"version": "v1.70.3",
|
|
||||||
"date": "2025-07-09T15:06:31Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mysql/mysql-server",
|
"name": "mysql/mysql-server",
|
||||||
"version": "mysql-cluster-9.4.0",
|
"version": "mysql-cluster-9.4.0",
|
||||||
@@ -974,11 +1004,6 @@
|
|||||||
"version": "release-5.1.2",
|
"version": "release-5.1.2",
|
||||||
"date": "2025-07-02T06:13:16Z"
|
"date": "2025-07-02T06:13:16Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "sysadminsmedia/homebox",
|
|
||||||
"version": "v0.20.2",
|
|
||||||
"date": "2025-07-02T00:37:07Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hivemq/hivemq-community-edition",
|
"name": "hivemq/hivemq-community-edition",
|
||||||
"version": "2025.4",
|
"version": "2025.4",
|
||||||
@@ -1054,11 +1079,6 @@
|
|||||||
"version": "2.402",
|
"version": "2.402",
|
||||||
"date": "2025-06-17T05:20:42Z"
|
"date": "2025-06-17T05:20:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "crafty-controller/crafty-4",
|
|
||||||
"version": "v4.4.11",
|
|
||||||
"date": "2025-06-15T21:41:02Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "TriliumNext/Notes",
|
"name": "TriliumNext/Notes",
|
||||||
"version": "v0.95.0",
|
"version": "v0.95.0",
|
||||||
@@ -1069,11 +1089,6 @@
|
|||||||
"version": "v2.0.0.4645",
|
"version": "v2.0.0.4645",
|
||||||
"date": "2017-03-07T18:56:06Z"
|
"date": "2017-03-07T18:56:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "FlareSolverr/FlareSolverr",
|
|
||||||
"version": "v3.3.25",
|
|
||||||
"date": "2025-06-14T02:52:44Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "OctoPrint/OctoPrint",
|
"name": "OctoPrint/OctoPrint",
|
||||||
"version": "1.11.2",
|
"version": "1.11.2",
|
||||||
@@ -1139,11 +1154,6 @@
|
|||||||
"version": "v1.13.0",
|
"version": "v1.13.0",
|
||||||
"date": "2025-05-25T20:21:13Z"
|
"date": "2025-05-25T20:21:13Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Kozea/Radicale",
|
|
||||||
"version": "v3.5.4",
|
|
||||||
"date": "2025-05-25T06:53:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "0xERR0R/blocky",
|
"name": "0xERR0R/blocky",
|
||||||
"version": "v0.26.2",
|
"version": "v0.26.2",
|
||||||
@@ -1209,11 +1219,6 @@
|
|||||||
"version": "v4.1.2",
|
"version": "v4.1.2",
|
||||||
"date": "2024-05-04T08:06:50Z"
|
"date": "2024-05-04T08:06:50Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "caddyserver/caddy",
|
|
||||||
"version": "v2.10.0",
|
|
||||||
"date": "2025-04-18T20:46:28Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "IceWhaleTech/CasaOS",
|
"name": "IceWhaleTech/CasaOS",
|
||||||
"version": "v0.4.15",
|
"version": "v0.4.15",
|
||||||
@@ -1374,11 +1379,6 @@
|
|||||||
"version": "v1.7.3",
|
"version": "v1.7.3",
|
||||||
"date": "2024-11-27T21:26:11Z"
|
"date": "2024-11-27T21:26:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "janeczku/calibre-web",
|
|
||||||
"version": "0.6.24",
|
|
||||||
"date": "2024-11-16T06:47:56Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "swizzin/swizzin",
|
"name": "swizzin/swizzin",
|
||||||
"version": "stable",
|
"version": "stable",
|
||||||
|
|||||||
98
install/alpine-redlib-install.sh
Normal file
98
install/alpine-redlib-install.sh
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: andrej-kocijan (Andrej Kocijan)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/redlib-org/redlib
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "redlib" "redlib-org/redlib" "prebuild" "latest" "/opt/redlib" "redlib-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Configuring Redlib"
|
||||||
|
cat <<EOF >/opt/redlib/redlib.conf
|
||||||
|
############################################
|
||||||
|
# Redlib Instance Configuration File
|
||||||
|
# Uncomment and edit values as needed
|
||||||
|
############################################
|
||||||
|
|
||||||
|
## Instance settings
|
||||||
|
ADDRESS=0.0.0.0
|
||||||
|
PORT=5252 # Integer (0-65535) - Internal port
|
||||||
|
#REDLIB_SFW_ONLY=off # ["on", "off"] - Filter all NSFW content
|
||||||
|
#REDLIB_BANNER= # String - Displayed on instance info page
|
||||||
|
#REDLIB_ROBOTS_DISABLE_INDEXING=off # ["on", "off"] - Disable search engine indexing
|
||||||
|
#REDLIB_PUSHSHIFT_FRONTEND=undelete.pullpush.io # Pushshift frontend for removed links
|
||||||
|
#REDLIB_ENABLE_RSS=off # ["on", "off"] - Enable RSS feed generation
|
||||||
|
#REDLIB_FULL_URL= # String - Needed for proper RSS URLs
|
||||||
|
|
||||||
|
## Default user settings
|
||||||
|
#REDLIB_DEFAULT_THEME=system # Theme (system, light, dark, black, dracula, nord, laserwave, violet, gold, rosebox, gruvboxdark, gruvboxlight, tokyoNight, icebergDark, doomone, libredditBlack, libredditDark, libredditLight)
|
||||||
|
#REDLIB_DEFAULT_FRONT_PAGE=default # ["default", "popular", "all"]
|
||||||
|
#REDLIB_DEFAULT_LAYOUT=card # ["card", "clean", "compact"]
|
||||||
|
#REDLIB_DEFAULT_WIDE=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_POST_SORT=hot # ["hot", "new", "top", "rising", "controversial"]
|
||||||
|
#REDLIB_DEFAULT_COMMENT_SORT=confidence # ["confidence", "top", "new", "controversial", "old"]
|
||||||
|
#REDLIB_DEFAULT_BLUR_SPOILER=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_SHOW_NSFW=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_BLUR_NSFW=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_USE_HLS=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_HIDE_HLS_NOTIFICATION=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_AUTOPLAY_VIDEOS=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_SUBSCRIPTIONS= # Example: sub1+sub2+sub3
|
||||||
|
#REDLIB_DEFAULT_HIDE_AWARDS=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_DISABLE_VISIT_REDDIT_CONFIRMATION=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_HIDE_SCORE=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_HIDE_SIDEBAR_AND_SUMMARY=off # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_FIXED_NAVBAR=on # ["on", "off"]
|
||||||
|
#REDLIB_DEFAULT_REMOVE_DEFAULT_FEEDS=off # ["on", "off"]
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Redlib"
|
||||||
|
|
||||||
|
msg_info "Creating Redlib Service"
|
||||||
|
cat <<EOF >/etc/init.d/redlib
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
name="Redlib"
|
||||||
|
description="Redlib Service"
|
||||||
|
command="/opt/redlib/redlib"
|
||||||
|
pidfile="/run/redlib.pid"
|
||||||
|
supervisor="supervise-daemon"
|
||||||
|
command_background="yes"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need net
|
||||||
|
}
|
||||||
|
|
||||||
|
start_pre() {
|
||||||
|
|
||||||
|
set -a
|
||||||
|
. /opt/redlib/redlib.conf
|
||||||
|
set +a
|
||||||
|
|
||||||
|
: ${ADDRESS:=0.0.0.0}
|
||||||
|
: ${PORT:=5252}
|
||||||
|
|
||||||
|
command_args="-a ${ADDRESS} -p ${PORT}"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
$STD chmod +x /etc/init.d/redlib
|
||||||
|
$STD rc-update add redlib default
|
||||||
|
msg_ok "Created Redlib Service"
|
||||||
|
|
||||||
|
msg_info "Starting Redlib Service"
|
||||||
|
$STD rc-service redlib start
|
||||||
|
msg_ok "Started Redlib Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apk cache clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
122
install/alpine-rustdeskserver-install.sh
Normal file
122
install/alpine-rustdeskserver-install.sh
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/rustdesk/rustdesk-server
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
msg_info "Installing RustDesk Server v${RELEASE}"
|
||||||
|
temp_file1=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
|
||||||
|
$STD unzip "$temp_file1"
|
||||||
|
mv amd64 /opt/rustdesk-server
|
||||||
|
mkdir -p /root/.config/rustdesk
|
||||||
|
cd /opt/rustdesk-server
|
||||||
|
./rustdesk-utils genkeypair > /tmp/rustdesk_keys.txt
|
||||||
|
grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' > /root/.config/rustdesk/id_ed25519.pub
|
||||||
|
grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' > /root/.config/rustdesk/id_ed25519
|
||||||
|
chmod 600 /root/.config/rustdesk/id_ed25519
|
||||||
|
chmod 644 /root/.config/rustdesk/id_ed25519.pub
|
||||||
|
rm /tmp/rustdesk_keys.txt
|
||||||
|
echo "${RELEASE}" >~/.rustdesk-server
|
||||||
|
msg_ok "Installed RustDesk Server v${RELEASE}"
|
||||||
|
|
||||||
|
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
msg_info "Installing RustDesk API v${APIRELEASE}"
|
||||||
|
temp_file2=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-amd64.tar.gz" -o "$temp_file2"
|
||||||
|
$STD tar zxvf "$temp_file2"
|
||||||
|
mv release /opt/rustdesk-api
|
||||||
|
cd /opt/rustdesk-api
|
||||||
|
ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16)
|
||||||
|
$STD ./apimain reset-admin-pwd "$ADMINPASS"
|
||||||
|
{
|
||||||
|
echo "RustDesk WebUI"
|
||||||
|
echo ""
|
||||||
|
echo "Username: admin"
|
||||||
|
echo "Password: $ADMINPASS"
|
||||||
|
} >>~/rustdesk.creds
|
||||||
|
echo "${APIRELEASE}" >~/.rustdesk-api
|
||||||
|
msg_ok "Installed RustDesk API v${APIRELEASE}"
|
||||||
|
|
||||||
|
msg_info "Enabling RustDesk Server Services"
|
||||||
|
cat <<EOF >/etc/init.d/rustdesk-server-hbbs
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
description="RustDesk HBBS Service"
|
||||||
|
directory="/opt/rustdesk-server"
|
||||||
|
command="/opt/rustdesk-server/hbbs"
|
||||||
|
command_args=""
|
||||||
|
command_background="true"
|
||||||
|
command_user="root"
|
||||||
|
pidfile="/var/run/rustdesk-server-hbbs.pid"
|
||||||
|
output_log="/var/log/rustdesk-hbbs.log"
|
||||||
|
error_log="/var/log/rustdesk-hbbs.err"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
use net
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/init.d/rustdesk-server-hbbr
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
description="RustDesk HBBR Service"
|
||||||
|
directory="/opt/rustdesk-server"
|
||||||
|
command="/opt/rustdesk-server/hbbr"
|
||||||
|
command_args=""
|
||||||
|
command_background="true"
|
||||||
|
command_user="root"
|
||||||
|
pidfile="/var/run/rustdesk-server-hbbr.pid"
|
||||||
|
output_log="/var/log/rustdesk-hbbr.log"
|
||||||
|
error_log="/var/log/rustdesk-hbbr.err"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
use net
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/init.d/rustdesk-api
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
description="RustDesk API Service"
|
||||||
|
directory="/opt/rustdesk-api"
|
||||||
|
command="/opt/rustdesk-api/apimain"
|
||||||
|
command_args=""
|
||||||
|
command_background="true"
|
||||||
|
command_user="root"
|
||||||
|
pidfile="/var/run/rustdesk-api.pid"
|
||||||
|
output_log="/var/log/rustdesk-api.log"
|
||||||
|
error_log="/var/log/rustdesk-api.err"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
use net
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
chmod +x /etc/init.d/rustdesk-server-hbbs
|
||||||
|
chmod +x /etc/init.d/rustdesk-server-hbbr
|
||||||
|
chmod +x /etc/init.d/rustdesk-api
|
||||||
|
$STD rc-update add rustdesk-server-hbbs default
|
||||||
|
$STD rc-update add rustdesk-server-hbbr default
|
||||||
|
$STD rc-update add rustdesk-api default
|
||||||
|
msg_ok "Enabled RustDesk Server Services"
|
||||||
|
|
||||||
|
msg_info "Starting RustDesk Server"
|
||||||
|
$STD service rustdesk-server-hbbs start
|
||||||
|
$STD service rustdesk-server-hbbr start
|
||||||
|
$STD service rustdesk-api start
|
||||||
|
msg_ok "Started RustDesk Server"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file1" "$temp_file2"
|
||||||
|
$STD apk cache clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -51,6 +51,7 @@ cat <<EOF >/opt/booklore_storage/.env
|
|||||||
DATABASE_URL=jdbc:mariadb://localhost:3306/$DB_NAME
|
DATABASE_URL=jdbc:mariadb://localhost:3306/$DB_NAME
|
||||||
DATABASE_USERNAME=$DB_USER
|
DATABASE_USERNAME=$DB_USER
|
||||||
DATABASE_PASSWORD=$DB_PASS
|
DATABASE_PASSWORD=$DB_PASS
|
||||||
|
BOOKLORE_PORT=6060
|
||||||
|
|
||||||
BOOKLORE_DATA_PATH=/opt/booklore_storage/data
|
BOOKLORE_DATA_PATH=/opt/booklore_storage/data
|
||||||
BOOKLORE_BOOKS_PATH=/opt/booklore_storage/books
|
BOOKLORE_BOOKS_PATH=/opt/booklore_storage/books
|
||||||
@@ -75,6 +76,7 @@ msg_info "Configure Nginx"
|
|||||||
rm -rf /usr/share/nginx/html
|
rm -rf /usr/share/nginx/html
|
||||||
ln -s /opt/booklore/booklore-ui/dist/booklore/browser /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
|
cp /opt/booklore/nginx.conf /etc/nginx/nginx.conf
|
||||||
|
sed -i "s/listen \${BOOKLORE_PORT};/listen 6060;/" /etc/nginx/nginx.conf
|
||||||
systemctl restart nginx
|
systemctl restart nginx
|
||||||
msg_ok "Configured Nginx"
|
msg_ok "Configured Nginx"
|
||||||
|
|
||||||
|
|||||||
136
install/healthchecks-install.sh
Normal file
136
install/healthchecks-install.sh
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (Canbiz)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://healthchecks.io/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
gcc \
|
||||||
|
libpq-dev \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
libssl-dev \
|
||||||
|
caddy
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
PG_VERSION=16 setup_postgresql
|
||||||
|
|
||||||
|
msg_info "Setup Database"
|
||||||
|
DB_NAME=healthchecks_db
|
||||||
|
DB_USER=hc_user
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
||||||
|
ADMIN_EMAIL="admin@helper-scripts.local"
|
||||||
|
ADMIN_PASSWORD="$DB_PASS"
|
||||||
|
|
||||||
|
$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 "healthchecks-Credentials"
|
||||||
|
echo "healthchecks Database User: $DB_USER"
|
||||||
|
echo "healthchecks Database Password: $DB_PASS"
|
||||||
|
echo "healthchecks Database Name: $DB_NAME"
|
||||||
|
echo "healthchecks Admin Email: $ADMIN_EMAIL"
|
||||||
|
echo "healthchecks Admin Password: $ADMIN_PASSWORD"
|
||||||
|
} >>~/healthchecks.creds
|
||||||
|
msg_ok "Set up Database"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
|
||||||
|
|
||||||
|
msg_info "Setup healthchecks"
|
||||||
|
cd /opt/healthchecks
|
||||||
|
mkdir -p /opt/healthchecks/static-collected/
|
||||||
|
$STD uv pip install wheel gunicorn -r requirements.txt --system
|
||||||
|
|
||||||
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
|
cat <<EOF >/opt/healthchecks/hc/local_settings.py
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
ALLOWED_HOSTS = ["${LOCAL_IP}", "127.0.0.1", "localhost"]
|
||||||
|
CSRF_TRUSTED_ORIGINS = ["http://${LOCAL_IP}", "https://${LOCAL_IP}"]
|
||||||
|
|
||||||
|
SECRET_KEY = "${SECRET_KEY}"
|
||||||
|
|
||||||
|
SITE_ROOT = "http://${LOCAL_IP}:8000"
|
||||||
|
SITE_NAME = "MyChecks"
|
||||||
|
DEFAULT_FROM_EMAIL = "healthchecks@${LOCAL_IP}"
|
||||||
|
|
||||||
|
STATIC_ROOT = "/opt/healthchecks/static-collected"
|
||||||
|
COMPRESS_OFFLINE = True
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql',
|
||||||
|
'NAME': '${DB_NAME}',
|
||||||
|
'USER': '${DB_USER}',
|
||||||
|
'PASSWORD': '${DB_PASS}',
|
||||||
|
'HOST': '127.0.0.1',
|
||||||
|
'PORT': '5432',
|
||||||
|
'TEST': {'CHARSET': 'UTF8'}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
$STD uv run -- python manage.py makemigrations
|
||||||
|
$STD uv run -- python manage.py migrate --noinput
|
||||||
|
$STD uv run -- python manage.py collectstatic --noinput
|
||||||
|
$STD uv run -- python manage.py compress
|
||||||
|
|
||||||
|
cat <<EOF | $STD uv run -- python manage.py shell
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
User = get_user_model()
|
||||||
|
if not User.objects.filter(email="${ADMIN_EMAIL}").exists():
|
||||||
|
User.objects.create_superuser("${ADMIN_EMAIL}", "${ADMIN_EMAIL}", "${ADMIN_PASSWORD}")
|
||||||
|
EOF
|
||||||
|
msg_ok "Installed healthchecks"
|
||||||
|
|
||||||
|
msg_info "Configuring Caddy"
|
||||||
|
cat <<EOF >/etc/caddy/Caddyfile
|
||||||
|
{
|
||||||
|
email admin@example.com
|
||||||
|
}
|
||||||
|
|
||||||
|
${LOCAL_IP} {
|
||||||
|
reverse_proxy 127.0.0.1:8000
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Caddy"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/healthchecks.service
|
||||||
|
[Unit]
|
||||||
|
Description=Healthchecks Service
|
||||||
|
After=network.target postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/healthchecks/
|
||||||
|
ExecStart=/usr/local/bin/uv run -- gunicorn hc.wsgi:application --bind 127.0.0.1:8000
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now healthchecks caddy
|
||||||
|
systemctl reload caddy
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -30,8 +30,12 @@ $STD apt-get install --no-install-recommends -y \
|
|||||||
autoconf \
|
autoconf \
|
||||||
build-essential \
|
build-essential \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
|
automake \
|
||||||
cmake \
|
cmake \
|
||||||
jq \
|
jq \
|
||||||
|
libtool \
|
||||||
|
libltdl-dev \
|
||||||
|
libgdk-pixbuf-2.0-dev \
|
||||||
libbrotli-dev \
|
libbrotli-dev \
|
||||||
libde265-dev \
|
libde265-dev \
|
||||||
libexif-dev \
|
libexif-dev \
|
||||||
@@ -39,37 +43,28 @@ $STD apt-get install --no-install-recommends -y \
|
|||||||
libglib2.0-dev \
|
libglib2.0-dev \
|
||||||
libgsf-1-dev \
|
libgsf-1-dev \
|
||||||
libjpeg62-turbo-dev \
|
libjpeg62-turbo-dev \
|
||||||
librsvg2-dev \
|
|
||||||
libspng-dev \
|
libspng-dev \
|
||||||
|
liblcms2-dev \
|
||||||
|
libopenexr-dev \
|
||||||
|
libgif-dev \
|
||||||
|
librsvg2-dev \
|
||||||
|
libexpat1 \
|
||||||
|
libgcc-s1 \
|
||||||
|
libgomp1 \
|
||||||
|
liblqr-1-0 \
|
||||||
|
libltdl7 \
|
||||||
|
libmimalloc2.0 \
|
||||||
|
libopenjp2-7 \
|
||||||
meson \
|
meson \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
cpanminus \
|
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-utils \
|
||||||
mesa-va-drivers \
|
mesa-va-drivers \
|
||||||
mesa-vulkan-drivers \
|
mesa-vulkan-drivers \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
tini \
|
tini \
|
||||||
libaom-dev \
|
|
||||||
zlib1g
|
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
|
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
|
||||||
DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
|
DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
|
||||||
export DPKG_ARCHITECTURE
|
export DPKG_ARCHITECTURE
|
||||||
@@ -111,7 +106,8 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|||||||
msg_ok "Installed OpenVINO dependencies"
|
msg_ok "Installed OpenVINO dependencies"
|
||||||
fi
|
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
|
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up Postgresql Database"
|
msg_info "Setting up Postgresql Database"
|
||||||
@@ -149,7 +145,8 @@ $STD apt-get install -t testing --no-install-recommends -y \
|
|||||||
libhwy1t64 \
|
libhwy1t64 \
|
||||||
libdav1d-dev \
|
libdav1d-dev \
|
||||||
libhwy-dev \
|
libhwy-dev \
|
||||||
libwebp-dev
|
libwebp-dev \
|
||||||
|
libaom-dev
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
$STD apt-get install -t testing -y patchelf
|
$STD apt-get install -t testing -y patchelf
|
||||||
fi
|
fi
|
||||||
@@ -281,36 +278,41 @@ APP_DIR="${INSTALL_DIR}/app"
|
|||||||
ML_DIR="${APP_DIR}/machine-learning"
|
ML_DIR="${APP_DIR}/machine-learning"
|
||||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
|
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${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.4" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (more patience please)"
|
msg_info "Installing ${APPLICATION} (more patience please)"
|
||||||
|
|
||||||
cd "$SRC_DIR"/server
|
cd "$SRC_DIR"/server
|
||||||
$STD npm install -g node-gyp node-pre-gyp
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
$STD npm ci
|
export CI=1
|
||||||
$STD npm run build
|
corepack enable
|
||||||
$STD npm prune --omit=dev --omit=optional
|
|
||||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
|
# server build
|
||||||
cp package.json "$APP_DIR"/bin
|
export SHARP_IGNORE_GLOBAL_LIBVIPS=true
|
||||||
|
$STD pnpm --filter immich --frozen-lockfile build
|
||||||
|
unset SHARP_IGNORE_GLOBAL_LIBVIPS
|
||||||
|
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||||
|
$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
|
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
||||||
cd "$SRC_DIR"/open-api/typescript-sdk
|
|
||||||
$STD npm ci
|
# openapi & web build
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"/web
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
|
$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 -a web/build "$APP_DIR"/www
|
||||||
cp LICENSE "$APP_DIR"
|
cp LICENSE "$APP_DIR"
|
||||||
cd "$APP_DIR"
|
|
||||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
# cli build
|
||||||
$STD npm install sharp
|
$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
|
||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
$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"
|
msg_ok "Installed Immich Server and Web Components"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
|
mkdir -p "$ML_DIR"
|
||||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
||||||
$STD uv venv "$VIRTUAL_ENV"
|
$STD uv venv "$VIRTUAL_ENV"
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
@@ -337,10 +339,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" "$APP_DIR"/upload
|
||||||
ln -s "$UPLOAD_DIR" "$ML_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"
|
msg_info "Installing GeoNames data"
|
||||||
cd "$GEO_DIR"
|
cd "$GEO_DIR"
|
||||||
URL_LIST=(
|
URL_LIST=(
|
||||||
@@ -400,10 +398,10 @@ cat <<EOF >"$APP_DIR"/bin/start.sh
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -a
|
set -a
|
||||||
. "$INSTALL_DIR"/.env
|
. ${INSTALL_DIR}/.env
|
||||||
set +a
|
set +a
|
||||||
|
|
||||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
|
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh
|
chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh
|
||||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
|
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
|
||||||
|
|||||||
@@ -16,22 +16,22 @@ update_os
|
|||||||
msg_info "Installing Kasm Workspaces"
|
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/')
|
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"
|
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
|
cd /opt
|
||||||
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
|
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
|
||||||
chmod +x /opt/kasm_release/install.sh
|
chmod +x /opt/kasm_release/install.sh
|
||||||
printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh > ~/kasm-install.output 2>&1
|
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"
|
msg_ok "Installed Kasm Workspaces"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Displaying Kasm Credentials"
|
|
||||||
cat ~/kasm.creds
|
|
||||||
msg_ok "Kasm Credentials displayed"
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
|
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
|
||||||
rm -f ~/kasm-install.output
|
rm -f ~/kasm-install.output
|
||||||
|
|||||||
@@ -62,15 +62,23 @@ curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/$DB_C
|
|||||||
msg_info "Setup Komodo Environment"
|
msg_info "Setup Komodo Environment"
|
||||||
curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env"
|
curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env"
|
||||||
DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
|
DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
|
||||||
|
ADMIN_PASSWORD=$(openssl rand -base64 8 | tr -d '/+=')
|
||||||
PASSKEY=$(openssl rand -base64 24 | tr -d '/+=')
|
PASSKEY=$(openssl rand -base64 24 | tr -d '/+=')
|
||||||
WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
||||||
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
||||||
|
|
||||||
sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env
|
sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env
|
||||||
sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env
|
sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env
|
||||||
|
sed -i "s/^KOMODO_INIT_ADMIN_PASSWORD=changeme/KOMODO_INIT_ADMIN_PASSWORD=${ADMIN_PASSWORD}/" /opt/komodo/compose.env
|
||||||
sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env
|
sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env
|
||||||
sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env
|
sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env
|
||||||
sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env
|
sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env
|
||||||
|
{
|
||||||
|
echo "Komodo Credentials"
|
||||||
|
echo ""
|
||||||
|
echo "Admin User : admin"
|
||||||
|
echo "Admin Password: $ADMIN_PASSWORD"
|
||||||
|
} >>~/komodo.creds
|
||||||
msg_ok "Setup Komodo Environment"
|
msg_ok "Setup Komodo Environment"
|
||||||
|
|
||||||
msg_info "Initialize Komodo"
|
msg_info "Initialize Komodo"
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ $STD bash ./autogen.sh
|
|||||||
$STD bash ./configure
|
$STD bash ./configure
|
||||||
$STD make
|
$STD make
|
||||||
$STD make install
|
$STD make install
|
||||||
rm -rf /opt/jbig2enc
|
|
||||||
cd /
|
cd /
|
||||||
|
rm -rf /opt/jbig2enc
|
||||||
msg_ok "Installed JBIG2"
|
msg_ok "Installed JBIG2"
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL database"
|
msg_info "Setting up PostgreSQL database"
|
||||||
@@ -73,16 +73,16 @@ $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 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 default_transaction_isolation TO 'read committed';"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
$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 "Paperless-ngx-Credentials"
|
||||||
echo -e "Paperless-ngx Database Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
echo "Paperless-ngx Database Name: $DB_NAME"
|
||||||
echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
echo "Paperless-ngx Database User: $DB_USER"
|
||||||
|
echo "Paperless-ngx Database Password: $DB_PASS"
|
||||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
echo "Paperless-ngx Secret Key: $SECRET_KEY\n"
|
||||||
mkdir -p /usr/share/nltk_data
|
echo "Paperless-ngx WebUI User: admin"
|
||||||
$STD uv run -- python -m nltk.downloader -d /usr/share/nltk_data all
|
echo "Paperless-ngx WebUI Password: $DB_PASS"
|
||||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
} >>~/paperless-ngx.creds
|
||||||
msg_ok "Installed Natural Language Toolkit"
|
msg_ok "Setup PostgreSQL database"
|
||||||
|
|
||||||
msg_info "Setup Paperless-ngx"
|
msg_info "Setup Paperless-ngx"
|
||||||
cd /opt/paperless
|
cd /opt/paperless
|
||||||
@@ -103,6 +103,9 @@ sed -i \
|
|||||||
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
|
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
|
||||||
/opt/paperless/paperless.conf
|
/opt/paperless/paperless.conf
|
||||||
cd /opt/paperless/src
|
cd /opt/paperless/src
|
||||||
|
set -a
|
||||||
|
. /opt/paperless/paperless.conf
|
||||||
|
set +a
|
||||||
$STD uv run -- python manage.py migrate
|
$STD uv run -- python manage.py migrate
|
||||||
msg_ok "Setup Paperless-ngx"
|
msg_ok "Setup Paperless-ngx"
|
||||||
|
|
||||||
@@ -115,17 +118,17 @@ user.is_superuser = True
|
|||||||
user.is_staff = True
|
user.is_staff = True
|
||||||
user.save()
|
user.save()
|
||||||
EOF
|
EOF
|
||||||
{
|
|
||||||
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 "Set up admin Paperless-ngx User & Password"
|
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"
|
msg_info "Creating Services"
|
||||||
cat <<EOF >/etc/systemd/system/paperless-scheduler.service
|
cat <<EOF >/etc/systemd/system/paperless-scheduler.service
|
||||||
[Unit]
|
[Unit]
|
||||||
|
|||||||
@@ -21,18 +21,13 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools" "tarball" "latest" "/opt/Pf2eTools"
|
||||||
|
|
||||||
msg_info "Setup Pf2eTools"
|
msg_info "Configuring 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
|
|
||||||
cd /opt/Pf2eTools
|
cd /opt/Pf2eTools
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
echo "${RELEASE}" >/opt/Pf2eTools_version.txt
|
msg_ok "Configured Pf2eTools"
|
||||||
msg_ok "Set up Pf2eTools"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >>/etc/apache2/apache2.conf
|
cat <<EOF >>/etc/apache2/apache2.conf
|
||||||
@@ -49,7 +44,6 @@ chmod -R 755 "/opt/Pf2eTools"
|
|||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/${RELEASE}.zip
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -14,13 +14,10 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y php-pear
|
||||||
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
|
|
||||||
msg_ok "Installed Dependencies"
|
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
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up 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
|
} >>~/phpipam.creds
|
||||||
msg_ok "Set up MariaDB"
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||||
|
|
||||||
msg_info "Installing phpIPAM"
|
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
|
$STD mariadb -u root "${DB_NAME}" </opt/phpipam/db/SCHEMA.sql
|
||||||
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
|
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
|
||||||
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
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';/" \
|
-e "s/\(\$db\['name'\] = \).*/\1'$DB_NAME';/" \
|
||||||
/opt/phpipam/config.php
|
/opt/phpipam/config.php
|
||||||
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
|
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_ok "Installed phpIPAM"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -79,7 +73,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf "/opt/phpipam-v${RELEASE}.zip"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -20,17 +20,7 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
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)"
|
|
||||||
|
|
||||||
msg_info "Setting up MariaDB"
|
msg_info "Setting up MariaDB"
|
||||||
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
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
|
} >>~/plant-it.creds
|
||||||
msg_ok "Set up MariaDB"
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
msg_info "Setup Plant-it"
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||||
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
|
|
||||||
|
|
||||||
|
msg_info "Configured Plant-it"
|
||||||
|
mkdir -p /opt/plant-it-data
|
||||||
cat <<EOF >/opt/plant-it/backend/server.env
|
cat <<EOF >/opt/plant-it/backend/server.env
|
||||||
MYSQL_HOST=localhost
|
MYSQL_HOST=localhost
|
||||||
MYSQL_PORT=3306
|
MYSQL_PORT=3306
|
||||||
@@ -78,12 +66,7 @@ CACHE_TTL=86400
|
|||||||
CACHE_HOST=localhost
|
CACHE_HOST=localhost
|
||||||
CACHE_PORT=6379
|
CACHE_PORT=6379
|
||||||
EOF
|
EOF
|
||||||
|
msg_ok "Configured Plant-it"
|
||||||
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_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/plant-it.service
|
cat <<EOF >/etc/systemd/system/plant-it.service
|
||||||
@@ -136,7 +119,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/plant-it/frontend/client.tar.gz
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,19 +13,16 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Installing Prometheus"
|
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 /etc/prometheus
|
||||||
mkdir -p /var/lib/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"
|
mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml
|
||||||
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
|
|
||||||
msg_ok "Installed Prometheus"
|
msg_ok "Installed Prometheus"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/prometheus.service
|
cat <<'EOF' >/etc/systemd/system/prometheus.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Prometheus
|
Description=Prometheus
|
||||||
Wants=network-online.target
|
Wants=network-online.target
|
||||||
@@ -53,5 +50,4 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,17 +13,14 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Prometheus Paperless NGX Exporter"
|
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||||
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"
|
msg_info "Configuring Prometheus Paperless NGX Exporter"
|
||||||
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
|
||||||
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
||||||
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||||
SECRET_AUTH_TOKEN
|
SECRET_AUTH_TOKEN
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
msg_ok "Configured Prometheus Paperless NGX Exporter"
|
||||||
msg_ok "Installed Prometheus Paperless NGX Exporter"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
||||||
@@ -53,5 +50,4 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -17,23 +17,19 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y sqlite3
|
$STD apt-get install -y sqlite3
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Prowlarr"
|
fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz"
|
||||||
temp_file="$(mktemp)"
|
|
||||||
|
msg_info "Configuring Prowlarr"
|
||||||
mkdir -p /var/lib/prowlarr/
|
mkdir -p /var/lib/prowlarr/
|
||||||
chmod 775 /var/lib/prowlarr/
|
chmod 775 /var/lib/prowlarr/ /opt/Prowlarr
|
||||||
cd /var/lib/prowlarr/
|
msg_ok "Configured 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"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/prowlarr.service
|
cat <<EOF >/etc/systemd/system/prowlarr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Prowlarr Daemon
|
Description=Prowlarr Daemon
|
||||||
After=syslog.target network.target
|
After=syslog.target network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
UMask=0002
|
UMask=0002
|
||||||
Type=simple
|
Type=simple
|
||||||
@@ -41,6 +37,7 @@ ExecStart=/opt/Prowlarr/Prowlarr -nobrowser -data=/var/lib/prowlarr/
|
|||||||
TimeoutStopSec=20
|
TimeoutStopSec=20
|
||||||
KillMode=process
|
KillMode=process
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
@@ -51,7 +48,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$temp_file"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -20,19 +20,12 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="playactor" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="playactor" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||||
|
|
||||||
msg_info "Installing PS5-MQTT"
|
msg_info "Configuring 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
|
|
||||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$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/
|
||||||
mkdir -p /opt/.config/ps5-mqtt/playactor
|
mkdir -p /opt/.config/ps5-mqtt/playactor
|
||||||
cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
||||||
@@ -64,6 +57,9 @@ cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
|||||||
"frontendPort": "8645"
|
"frontendPort": "8645"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
msg_ok "Configured PS5-MQTT"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
|
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=PS5-MQTT Daemon
|
Description=PS5-MQTT Daemon
|
||||||
@@ -92,5 +88,4 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm /tmp/${RELEASE}.tar.gz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,14 +13,12 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
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"
|
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) }')
|
mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox
|
||||||
RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
|
mkdir -p ~/.config/qBittorrent/
|
||||||
mkdir -p /opt/qbittorrent
|
cat <<EOF >~/.config/qBittorrent/qBittorrent.conf
|
||||||
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
|
|
||||||
[LegalNotice]
|
[LegalNotice]
|
||||||
Accepted=true
|
Accepted=true
|
||||||
|
|
||||||
@@ -30,7 +28,6 @@ WebUI\Port=8090
|
|||||||
WebUI\UseUPnP=false
|
WebUI\UseUPnP=false
|
||||||
WebUI\Username=admin
|
WebUI\Username=admin
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Setup qBittorrent-nox"
|
msg_ok "Setup qBittorrent-nox"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -17,23 +17,19 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y sqlite3
|
$STD apt-get install -y sqlite3
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Radarr"
|
fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz"
|
||||||
temp_file="$(mktemp)"
|
|
||||||
|
msg_info "Configuring Radarr"
|
||||||
mkdir -p /var/lib/radarr/
|
mkdir -p /var/lib/radarr/
|
||||||
chmod 775 /var/lib/radarr/
|
chmod 775 /var/lib/radarr/ /opt/Radarr/
|
||||||
cd /var/lib/radarr/
|
msg_ok "Configured 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"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/radarr.service
|
cat <<EOF >/etc/systemd/system/radarr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Radarr Daemon
|
Description=Radarr Daemon
|
||||||
After=syslog.target network.target
|
After=syslog.target network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
UMask=0002
|
UMask=0002
|
||||||
Type=simple
|
Type=simple
|
||||||
@@ -41,6 +37,7 @@ ExecStart=/opt/Radarr/Radarr -nobrowser -data=/var/lib/radarr/
|
|||||||
TimeoutStopSec=20
|
TimeoutStopSec=20
|
||||||
KillMode=process
|
KillMode=process
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
@@ -51,7 +48,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf "$temp_file"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -17,12 +17,9 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y apache2-utils fuse3
|
$STD apt-get install -y apache2-utils fuse3
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||||
|
|
||||||
msg_info "Installing rclone"
|
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
|
cd /opt/rclone
|
||||||
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
$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 User Name: admin"
|
||||||
echo "rclone Password: $RCLONE_PASSWORD"
|
echo "rclone Password: $RCLONE_PASSWORD"
|
||||||
} >>~/rclone.creds
|
} >>~/rclone.creds
|
||||||
echo "${RELEASE}" >/opt/rclone_version.txt
|
|
||||||
msg_ok "Installed rclone"
|
msg_ok "Installed rclone"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -57,7 +53,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$temp_file"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -16,19 +16,17 @@ update_os
|
|||||||
msg_info "Installing ASP.NET Core Runtime"
|
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
|
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
|
$STD dpkg -i packages-microsoft-prod.deb
|
||||||
rm packages-microsoft-prod.deb
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y dotnet-sdk-9.0
|
$STD apt-get install -y dotnet-sdk-9.0
|
||||||
msg_ok "Installed ASP.NET Core Runtime"
|
msg_ok "Installed ASP.NET Core Runtime"
|
||||||
|
|
||||||
msg_info "Installing rdtclient"
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o RealDebridClient.zip
|
|
||||||
$STD unzip RealDebridClient.zip -d /opt/rdtc
|
msg_info "Configuring rdtclient"
|
||||||
rm RealDebridClient.zip
|
|
||||||
cd /opt/rdtc
|
cd /opt/rdtc
|
||||||
mkdir -p data/{db,downloads}
|
mkdir -p data/{db,downloads}
|
||||||
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
||||||
msg_ok "Installed rdtclient"
|
msg_ok "Configured rdtclient"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/rdtc.service
|
cat <<EOF >/etc/systemd/system/rdtc.service
|
||||||
@@ -51,6 +49,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
rm -f ~/packages-microsoft-prod.deb
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -17,18 +17,17 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y git
|
$STD apt-get install -y git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Recyclarr"
|
fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz"
|
||||||
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
|
msg_info "Configuring Recyclarr"
|
||||||
mkdir -p /root/.config/recyclarr
|
mkdir -p /root/.config/recyclarr
|
||||||
recyclarr config create
|
recyclarr config create
|
||||||
msg_ok "Installed Recyclarr"
|
msg_ok "Configured Recyclarr"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf recyclarr*.tar.xz
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -14,17 +14,12 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "revealjs" "hakimel/reveal.js" "tarball"
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Configuring ${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
|
|
||||||
cd /opt/revealjs
|
cd /opt/revealjs
|
||||||
$STD npm install
|
$STD npm install
|
||||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -50,7 +45,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f $temp_file
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -14,24 +14,21 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y git
|
||||||
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
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup Semaphore"
|
msg_info "Setting up Ansible"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
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
|
mkdir -p /opt/semaphore
|
||||||
cd /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_HASH=$(openssl rand -base64 32)
|
||||||
SEM_ENCRYPTION=$(openssl rand -base64 32)
|
SEM_ENCRYPTION=$(openssl rand -base64 32)
|
||||||
SEM_KEY=$(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}"
|
"access_key_encryption": "${SEM_KEY}"
|
||||||
}
|
}
|
||||||
EOF
|
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 "${SEM_PW}" >~/semaphore.creds
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Setup Semaphore"
|
msg_ok "Setup Semaphore"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -70,14 +65,13 @@ RestartSec=10s
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl enable --now -q semaphore.service
|
systemctl enable -q --now semaphore
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf semaphore_${RELEASE}_linux_amd64.deb
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,18 +13,10 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Silverbullet"
|
fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip"
|
||||||
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/space
|
||||||
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"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/silverbullet.service
|
cat <<EOF >/etc/systemd/system/silverbullet.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Silverbullet Daemon
|
Description=Silverbullet Daemon
|
||||||
@@ -47,7 +39,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/silverbullet-server-linux-x86_64.zip
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -15,12 +15,13 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
composer \
|
|
||||||
git \
|
git \
|
||||||
nginx \
|
nginx
|
||||||
php8.2-{bcmath,common,ctype,ldap,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
|
|
||||||
msg_ok "Installed Dependencies"
|
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
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up database"
|
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
|
} >>~/snipeit.creds
|
||||||
msg_ok "Set up database"
|
msg_ok "Set up database"
|
||||||
|
|
||||||
msg_info "Installing Snipe-IT"
|
msg_info "Configuring 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
|
|
||||||
cd /opt/snipe-it
|
cd /opt/snipe-it
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
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
|
chown -R www-data: /opt/snipe-it
|
||||||
chmod -R 755 /opt/snipe-it
|
chmod -R 755 /opt/snipe-it
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
#$STD composer update --no-plugins --no-scripts
|
|
||||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||||
$STD php artisan key:generate --force
|
$STD php artisan key:generate --force
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
msg_ok "Configured SnipeIT"
|
||||||
msg_ok "Installed SnipeIT"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
|
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
|
||||||
@@ -77,22 +71,20 @@ server {
|
|||||||
location ~ \.php\$ {
|
location ~ \.php\$ {
|
||||||
include fastcgi.conf;
|
include fastcgi.conf;
|
||||||
include snippets/fastcgi-php.conf;
|
include snippets/fastcgi-php.conf;
|
||||||
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
|
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)\$;
|
fastcgi_split_path_info ^(.+\.php)(/.+)\$;
|
||||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl reload nginx
|
systemctl reload nginx
|
||||||
msg_ok "Configured Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f $temp_file
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,16 +13,19 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Syncthing"
|
msg_info "Setting up Syncthing repo"
|
||||||
curl -fsSL -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
|
mkdir -p /etc/apt/keyrings
|
||||||
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'
|
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
|
$STD apt-get update
|
||||||
|
msg_ok "Set up Syncthing repo"
|
||||||
|
|
||||||
|
msg_info "Installing Syncthing"
|
||||||
$STD apt-get install -y syncthing
|
$STD apt-get install -y syncthing
|
||||||
$STD systemctl enable syncthing@root.service
|
systemctl enable -q --now syncthing@root
|
||||||
systemctl start syncthing@root.service
|
|
||||||
sleep 5
|
sleep 5
|
||||||
sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml
|
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"
|
msg_ok "Installed Syncthing"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -14,20 +14,14 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
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
|
$STD apt-get install -y git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing TasmoAdmin"
|
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
|
||||||
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
|
fetch_and_deploy_gh_release "tasmoadmin" "TasmoAdmin/TasmoAdmin" "prebuild" "latest" "/var/www/tasmoadmin" "tasmoadmin_v*.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
|
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
|
chown -R www-data:www-data /var/www/tasmoadmin
|
||||||
chmod 777 /var/www/tasmoadmin/tmp /var/www/tasmoadmin/data
|
chmod 777 /var/www/tasmoadmin/tmp /var/www/tasmoadmin/data
|
||||||
cat <<EOF >/etc/apache2/sites-available/tasmoadmin.conf
|
cat <<EOF >/etc/apache2/sites-available/tasmoadmin.conf
|
||||||
@@ -51,7 +45,8 @@ $STD a2ensite tasmoadmin
|
|||||||
$STD a2enmod rewrite
|
$STD a2enmod rewrite
|
||||||
systemctl reload apache2
|
systemctl reload apache2
|
||||||
systemctl restart apache2
|
systemctl restart apache2
|
||||||
msg_ok "Installed TasmoAdmin"
|
msg_ok "Configured TasmoAdmin"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ network_check() {
|
|||||||
update_os() {
|
update_os() {
|
||||||
msg_info "Updating Container OS"
|
msg_info "Updating Container OS"
|
||||||
$STD apk -U upgrade
|
$STD apk -U upgrade
|
||||||
|
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/tools.func)
|
||||||
msg_ok "Updated Container OS"
|
msg_ok "Updated Container OS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ if ! check_storage_support "vztmpl"; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Checking template storage"
|
#msg_info "Checking template storage"
|
||||||
while true; do
|
while true; do
|
||||||
if select_storage template; then
|
if select_storage template; then
|
||||||
TEMPLATE_STORAGE="$STORAGE_RESULT"
|
TEMPLATE_STORAGE="$STORAGE_RESULT"
|
||||||
@@ -251,13 +251,13 @@ fi
|
|||||||
# Update LXC template list
|
# Update LXC template list
|
||||||
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
|
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
|
||||||
case "$PCT_OSTYPE" in
|
case "$PCT_OSTYPE" in
|
||||||
debian|ubuntu)
|
debian | ubuntu)
|
||||||
TEMPLATE_PATTERN="-standard_"
|
TEMPLATE_PATTERN="-standard_"
|
||||||
;;
|
;;
|
||||||
alpine|fedora|rocky|centos)
|
alpine | fedora | rocky | centos)
|
||||||
TEMPLATE_PATTERN="-default_"
|
TEMPLATE_PATTERN="-default_"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
TEMPLATE_PATTERN=""
|
TEMPLATE_PATTERN=""
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -161,19 +161,19 @@ function setup_postgresql() {
|
|||||||
if [[ "$CURRENT_PG_VERSION" == "$PG_VERSION" ]]; then
|
if [[ "$CURRENT_PG_VERSION" == "$PG_VERSION" ]]; then
|
||||||
: # PostgreSQL is already at the desired version – no action needed
|
: # PostgreSQL is already at the desired version – no action needed
|
||||||
else
|
else
|
||||||
msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
|
$STD msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
|
||||||
NEED_PG_INSTALL=true
|
NEED_PG_INSTALL=true
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_info "Setup PostgreSQL $PG_VERSION"
|
|
||||||
NEED_PG_INSTALL=true
|
NEED_PG_INSTALL=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$NEED_PG_INSTALL" == true ]]; then
|
if [[ "$NEED_PG_INSTALL" == true ]]; then
|
||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
msg_info "Dumping PostgreSQL $CURRENT_PG_VERSION data"
|
$STD msg_info "Dumping PostgreSQL $CURRENT_PG_VERSION data"
|
||||||
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
||||||
msg_ok "Data dump completed"
|
$STD msg_ok "Data dump completed"
|
||||||
|
|
||||||
systemctl stop postgresql
|
systemctl stop postgresql
|
||||||
fi
|
fi
|
||||||
@@ -186,29 +186,30 @@ function setup_postgresql() {
|
|||||||
|
|
||||||
echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \
|
echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \
|
||||||
>/etc/apt/sources.list.d/pgdg.list
|
>/etc/apt/sources.list.d/pgdg.list
|
||||||
$STD msg_ok "Repository added"
|
|
||||||
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
|
$STD msg_ok "Repository added"
|
||||||
|
|
||||||
msg_info "Setup PostgreSQL $PG_VERSION"
|
msg_info "Setup PostgreSQL $PG_VERSION"
|
||||||
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
|
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
|
||||||
msg_ok "Setup PostgreSQL $PG_VERSION"
|
|
||||||
|
|
||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
|
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$STD msg_info "Starting PostgreSQL $PG_VERSION"
|
|
||||||
systemctl enable -q --now postgresql
|
systemctl enable -q --now postgresql
|
||||||
$STD msg_ok "PostgreSQL $PG_VERSION started"
|
|
||||||
|
|
||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
msg_info "Restoring dumped data"
|
$STD msg_info "Restoring dumped data"
|
||||||
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
||||||
msg_ok "Data restored"
|
$STD msg_ok "Data restored"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_ok "PostgreSQL $PG_VERSION installed"
|
$STD msg_ok "PostgreSQL $PG_VERSION installed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install optional PostgreSQL modules
|
# Install optional PostgreSQL modules
|
||||||
@@ -216,13 +217,13 @@ function setup_postgresql() {
|
|||||||
IFS=',' read -ra MODULES <<<"$PG_MODULES"
|
IFS=',' read -ra MODULES <<<"$PG_MODULES"
|
||||||
for module in "${MODULES[@]}"; do
|
for module in "${MODULES[@]}"; do
|
||||||
local pkg="postgresql-${PG_VERSION}-${module}"
|
local pkg="postgresql-${PG_VERSION}-${module}"
|
||||||
msg_info "Setup PostgreSQL module/s: $pkg"
|
$STD msg_info "Setup PostgreSQL module/s: $pkg"
|
||||||
$STD apt-get install -y "$pkg" || {
|
$STD apt-get install -y "$pkg" || {
|
||||||
msg_error "Failed to install $pkg"
|
msg_error "Failed to install $pkg"
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
msg_ok "Setup PostgreSQL modules"
|
$STD msg_ok "Setup PostgreSQL modules"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1328,8 +1329,13 @@ function setup_uv() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
rm -rf "$TMP_DIR"
|
if [[ ":$PATH:" != *":/usr/local/bin:"* ]]; then
|
||||||
|
export PATH="/usr/local/bin:$PATH"
|
||||||
|
fi
|
||||||
ensure_usr_local_bin_persist
|
ensure_usr_local_bin_persist
|
||||||
|
if ! $STD uv python update-shell; then
|
||||||
|
msg_error "uv shell integration failed – continuing anyway"
|
||||||
|
fi
|
||||||
msg_ok "Setup uv $LATEST_VERSION"
|
msg_ok "Setup uv $LATEST_VERSION"
|
||||||
|
|
||||||
# Optional: install specific Python version
|
# Optional: install specific Python version
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ if [[ -f "$LEGACY_DB" || -f "$LEGACY_BIN" && ! -f "$CONFIG_PATH" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Check existing installation
|
# Check existing installation
|
||||||
if [[ -f "$INSTALL_PATH" ]]; then
|
if [[ -f "$INSTALL_PATH" ]]; then
|
||||||
echo -e "${YW}⚠️ ${APP} is already installed.${CL}"
|
echo -e "${YW}⚠️ ${APP} is already installed.${CL}"
|
||||||
echo -n "Uninstall ${APP}? (y/N): "
|
echo -n "Uninstall ${APP}? (y/N): "
|
||||||
read -r uninstall_prompt
|
read -r uninstall_prompt
|
||||||
@@ -120,8 +120,18 @@ if [[ -f "$INSTALL_PATH" ]]; then
|
|||||||
read -r update_prompt
|
read -r update_prompt
|
||||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$INSTALL_PATH"
|
tmp="${INSTALL_PATH}.tmp.$$"
|
||||||
chmod +x "$INSTALL_PATH"
|
if ! curl -fSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$tmp"; then
|
||||||
|
msg_error "Download failed"
|
||||||
|
rm -f "$tmp"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
chmod 0755 "$tmp"
|
||||||
|
if ! mv -f "$tmp" "$INSTALL_PATH"; then
|
||||||
|
msg_error "Install failed (cannot move into $INSTALL_PATH)"
|
||||||
|
rm -f "$tmp"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user