mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-10-11 18:40:06 -04:00
Compare commits
11 Commits
refactor/r
...
fix/caddy-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08ca5b1c84 | ||
|
|
48843e0d5f | ||
|
|
fb82f7084a | ||
|
|
7198d218be | ||
|
|
afdd1560ae | ||
|
|
560bd81537 | ||
|
|
33f516930b | ||
|
|
bbcea041e7 | ||
|
|
386bb80e1e | ||
|
|
61336cd55e | ||
|
|
6b8698fe87 |
10
CHANGELOG.md
10
CHANGELOG.md
@@ -564,20 +564,28 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
## 2026-10-11
|
## 2026-10-11
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Cinephage ([#17852](https://github.com/community-scripts/ProxmoxVE/pull/17852))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- hermesagent: match the relaunched root gateway regardless of interpreter [@MickLesk](https://github.com/MickLesk) ([#17847](https://github.com/community-scripts/ProxmoxVE/pull/17847))
|
||||||
- Radicale: install the bcrypt and argon2 extras [@MickLesk](https://github.com/MickLesk) ([#17813](https://github.com/community-scripts/ProxmoxVE/pull/17813))
|
- Radicale: install the bcrypt and argon2 extras [@MickLesk](https://github.com/MickLesk) ([#17813](https://github.com/community-scripts/ProxmoxVE/pull/17813))
|
||||||
- fix(zigbee2mqtt): preserve backup stream and prevent filename collisions [@petermnt](https://github.com/petermnt) ([#17751](https://github.com/community-scripts/ProxmoxVE/pull/17751))
|
- fix(zigbee2mqtt): preserve backup stream and prevent filename collisions [@petermnt](https://github.com/petermnt) ([#17751](https://github.com/community-scripts/ProxmoxVE/pull/17751))
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- QoL: let var_* answer the optional add-on prompts [@MickLesk](https://github.com/MickLesk) ([#17858](https://github.com/community-scripts/ProxmoxVE/pull/17858))
|
||||||
|
- QoL: Confirm third-party installers through confirm_external_installer [@MickLesk](https://github.com/MickLesk) ([#17857](https://github.com/community-scripts/ProxmoxVE/pull/17857))
|
||||||
- docker: take the lxcfs toggle, TCP socket and Compose choice from app variables [@MickLesk](https://github.com/MickLesk) ([#17850](https://github.com/community-scripts/ProxmoxVE/pull/17850))
|
- docker: take the lxcfs toggle, TCP socket and Compose choice from app variables [@MickLesk](https://github.com/MickLesk) ([#17850](https://github.com/community-scripts/ProxmoxVE/pull/17850))
|
||||||
|
|
||||||
### 💾 Core
|
### 💾 Core
|
||||||
|
|
||||||
- setup_docker: make LXC resource limits visible to nested containers [@andrebrait](https://github.com/andrebrait) ([core#9](https://github.com/community-scripts/core/pull/9))
|
- Add confirm_external_installer [@MickLesk](https://github.com/MickLesk) ([core#130](https://github.com/community-scripts/core/pull/130))
|
||||||
|
- setup_docker: make LXC resource limits visible to nested containers [@andrebrait](https://github.com/andrebrait) ([core#9](https://github.com/community-scripts/core/pull/9))
|
||||||
- Incus: fix ENABLE_FUSE / TUN vars [@MickLesk](https://github.com/MickLesk) ([core#127](https://github.com/community-scripts/core/pull/127))
|
- Incus: fix ENABLE_FUSE / TUN vars [@MickLesk](https://github.com/MickLesk) ([core#127](https://github.com/community-scripts/core/pull/127))
|
||||||
- Resolve a uv required-version range to the newest release inside it [@MickLesk](https://github.com/MickLesk) ([core#126](https://github.com/community-scripts/core/pull/126))
|
- Resolve a uv required-version range to the newest release inside it [@MickLesk](https://github.com/MickLesk) ([core#126](https://github.com/community-scripts/core/pull/126))
|
||||||
- Upgrade MongoDB in place when an app package depends on it [@MickLesk](https://github.com/MickLesk) ([core#128](https://github.com/community-scripts/core/pull/128))
|
- Upgrade MongoDB in place when an app package depends on it [@MickLesk](https://github.com/MickLesk) ([core#128](https://github.com/community-scripts/core/pull/128))
|
||||||
|
|||||||
@@ -38,11 +38,18 @@ update_deb_based() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
cleanup_old_repo_files "caddy"
|
||||||
msg_info "Updating Caddy LXC"
|
msg_info "Updating Caddy LXC"
|
||||||
apt_update_safe
|
apt_update_safe
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
msg_ok "Updated Caddy LXC"
|
msg_ok "Updated Caddy LXC"
|
||||||
|
|
||||||
|
[[ -f ~/.caddy ]] || dpkg-query -W -f='${Version}' caddy >~/.caddy 2>/dev/null || true
|
||||||
|
if check_for_gh_release "caddy" "caddyserver/caddy"; then
|
||||||
|
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "caddy" "caddyserver/caddy" "binary" "latest" "/opt/caddy" "caddy_*_linux_$(arch_resolve).deb"
|
||||||
|
systemctl restart caddy
|
||||||
|
fi
|
||||||
|
|
||||||
if command -v xcaddy >/dev/null 2>&1; then
|
if command -v xcaddy >/dev/null 2>&1; then
|
||||||
if check_for_gh_release "xcaddy" "caddyserver/xcaddy"; then
|
if check_for_gh_release "xcaddy" "caddyserver/xcaddy"; then
|
||||||
setup_go
|
setup_go
|
||||||
|
|||||||
69
ct/cinephage.sh
Normal file
69
ct/cinephage.sh
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||||
|
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/MoldyTaint/Cinephage
|
||||||
|
|
||||||
|
APP="Cinephage"
|
||||||
|
var_tags="${var_tags:-arr;media;torrent;usenet}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-10}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-yes}"
|
||||||
|
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/cinephage ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "cinephage" "MoldyTaint/Cinephage"; then
|
||||||
|
msg_info "Stopping Cinephage"
|
||||||
|
systemctl stop cinephage
|
||||||
|
msg_ok "Stopped Cinephage"
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cinephage" "MoldyTaint/Cinephage" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building Cinephage"
|
||||||
|
cd /opt/cinephage
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
$STD npm prune --omit=dev
|
||||||
|
sed -i "s/^APP_VERSION=.*/APP_VERSION=$(cat ~/.cinephage)/" /opt/cinephage_data/.env
|
||||||
|
msg_ok "Built Cinephage"
|
||||||
|
|
||||||
|
msg_info "Updating Camoufox"
|
||||||
|
$STD /opt/cinephage/node_modules/.bin/camoufox-js fetch
|
||||||
|
msg_ok "Updated Camoufox"
|
||||||
|
|
||||||
|
msg_info "Starting Cinephage"
|
||||||
|
systemctl start cinephage
|
||||||
|
msg_ok "Started Cinephage"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
@@ -31,16 +31,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://hermes-agent.nousresearch.com/)."
|
confirm_external_installer "https://hermes-agent.nousresearch.com/" "hermes update (https://hermes-agent.nousresearch.com/)"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ hermes update (https://hermes-agent.nousresearch.com/)"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop hermes-dashboard
|
systemctl stop hermes-dashboard
|
||||||
@@ -51,8 +42,7 @@ function update_script() {
|
|||||||
set -a; source /etc/default/hermes; set +a
|
set -a; source /etc/default/hermes; set +a
|
||||||
/home/hermes/.local/bin/hermes update --yes
|
/home/hermes/.local/bin/hermes update --yes
|
||||||
'
|
'
|
||||||
# See https://github.com/community-scripts/ProxmoxVE/issues/17123
|
mapfile -t root_gateway_pids < <(ps -eo user=,pid=,args= | awk '$1 == "root" && /\/home\/hermes\/\.hermes\// && /hermes_cli[.]main/ && / gateway run --replace$/ { print $2 }')
|
||||||
mapfile -t root_gateway_pids < <(ps -eo user=,pid=,args= | awk '$1 == "root" && $0 ~ /\/home\/hermes\/\.hermes\/hermes-agent\/venv\/bin\/python -m hermes_cli\.main gateway run --replace$/ { print $2 }')
|
|
||||||
if ((${#root_gateway_pids[@]})); then
|
if ((${#root_gateway_pids[@]})); then
|
||||||
kill -TERM "${root_gateway_pids[@]}"
|
kill -TERM "${root_gateway_pids[@]}"
|
||||||
for pid in "${root_gateway_pids[@]}"; do
|
for pid in "${root_gateway_pids[@]}"; do
|
||||||
@@ -61,7 +51,14 @@ function update_script() {
|
|||||||
done
|
done
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
chown -R hermes:hermes /home/hermes
|
if ps -eo user=,args= | awk '$1 == "root" && /\/home\/hermes\/\.hermes\// { found = 1 } END { exit !found }'; then
|
||||||
|
msg_warn "A root-owned Hermes process is still running; it may keep writing root-owned files"
|
||||||
|
fi
|
||||||
|
# A writer racing chown makes files vanish between readdir and chown; one retry covers it.
|
||||||
|
if ! chown -R hermes:hermes /home/hermes 2>/dev/null; then
|
||||||
|
sleep 1
|
||||||
|
chown -R hermes:hermes /home/hermes || msg_warn "Could not take ownership of everything under /home/hermes"
|
||||||
|
fi
|
||||||
msg_ok "Updated Hermes Agent"
|
msg_ok "Updated Hermes Agent"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
|
|||||||
11
ct/kasm.sh
11
ct/kasm.sh
@@ -62,16 +62,7 @@ function update_script() {
|
|||||||
msg_info "Updating Kasm"
|
msg_info "Updating Kasm"
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://www.kasmweb.com/)."
|
confirm_external_installer "https://www.kasmweb.com/" "upgrade.sh inside tar.gz $KASM_URL"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ upgrade.sh inside tar.gz $KASM_URL"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
curl_download "/tmp/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
|
curl_download "/tmp/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
|
||||||
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
|
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
|
||||||
chmod +x /tmp/kasm_release/install.sh
|
chmod +x /tmp/kasm_release/install.sh
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ var_tags="${var_tags:-remote-desktop}"
|
|||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_arm64="${var_arm64:-yes}"
|
var_arm64="${var_arm64:-yes}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
export var_rustdesk_api="${var_rustdesk_api:-}"
|
|
||||||
if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then
|
if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then
|
||||||
var_os=$(msg_menu "Choose the container OS" \
|
var_os=$(msg_menu "Choose the container OS" \
|
||||||
"debian" "Debian 13" \
|
"debian" "Debian 13" \
|
||||||
@@ -39,32 +38,25 @@ update_deb_based() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server"; then
|
if check_for_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server"; then
|
||||||
msg_info "Stopping RustDesk Server"
|
msg_info "Stopping Service"
|
||||||
systemctl stop rustdesk-hbbr rustdesk-hbbs
|
systemctl stop rustdesk-hbbr
|
||||||
msg_ok "Stopped RustDesk Server"
|
systemctl stop rustdesk-hbbs
|
||||||
|
if [[ -f /lib/systemd/system/rustdesk-api.service ]]; then
|
||||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb"
|
systemctl stop rustdesk-api
|
||||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb"
|
fi
|
||||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Starting RustDesk Server"
|
|
||||||
systemctl start rustdesk-hbbs rustdesk-hbbr
|
|
||||||
msg_ok "Started RustDesk Server"
|
|
||||||
msg_ok "Updated RustDesk Server"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f /lib/systemd/system/rustdesk-api.service ]] && check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then
|
|
||||||
msg_info "Stopping RustDesk API"
|
|
||||||
systemctl stop rustdesk-api
|
|
||||||
msg_ok "Stopped RustDesk API"
|
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb"
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb"
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb"
|
||||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb"
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb"
|
||||||
|
|
||||||
msg_info "Starting RustDesk API"
|
msg_info "Starting services"
|
||||||
systemctl start rustdesk-api
|
systemctl start -q rustdesk-*
|
||||||
msg_ok "Started RustDesk API"
|
msg_ok "Services started"
|
||||||
msg_ok "Updated RustDesk API"
|
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,26 +66,21 @@ update_alpine() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Alpine Packages"
|
if check_for_gh_release "rustdesk-server" "lejianwen/rustdesk-server"; then
|
||||||
$STD apk -U upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
|
||||||
|
|
||||||
if check_for_gh_release "rustdesk-server" "rustdesk/rustdesk-server"; then
|
|
||||||
msg_info "Stopping RustDesk Server"
|
msg_info "Stopping RustDesk Server"
|
||||||
|
$STD apk -U upgrade
|
||||||
$STD service rustdesk-server-hbbs stop
|
$STD service rustdesk-server-hbbs stop
|
||||||
$STD service rustdesk-server-hbbr stop
|
$STD service rustdesk-server-hbbr stop
|
||||||
msg_ok "Stopped RustDesk Server"
|
msg_ok "Stopped RustDesk Server"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "rustdesk-server" "rustdesk/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip"
|
fetch_and_deploy_gh_release "rustdesk-server" "lejianwen/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip"
|
||||||
|
|
||||||
msg_info "Starting RustDesk Server"
|
msg_info "Starting RustDesk Server"
|
||||||
$STD service rustdesk-server-hbbs start
|
$STD service rustdesk-server-hbbs start
|
||||||
$STD service rustdesk-server-hbbr start
|
$STD service rustdesk-server-hbbr start
|
||||||
msg_ok "Started RustDesk Server"
|
msg_ok "Started RustDesk Server"
|
||||||
msg_ok "Updated RustDesk Server"
|
|
||||||
fi
|
fi
|
||||||
|
if check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then
|
||||||
if [[ -x /opt/rustdesk-api/apimain ]] && check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then
|
|
||||||
msg_info "Stopping RustDesk API"
|
msg_info "Stopping RustDesk API"
|
||||||
$STD service rustdesk-api stop
|
$STD service rustdesk-api stop
|
||||||
msg_ok "Stopped RustDesk API"
|
msg_ok "Stopped RustDesk API"
|
||||||
@@ -103,8 +90,8 @@ update_alpine() {
|
|||||||
msg_info "Starting RustDesk API"
|
msg_info "Starting RustDesk API"
|
||||||
$STD service rustdesk-api start
|
$STD service rustdesk-api start
|
||||||
msg_ok "Started RustDesk API"
|
msg_ok "Started RustDesk API"
|
||||||
msg_ok "Updated RustDesk API"
|
|
||||||
fi
|
fi
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
@@ -120,7 +107,5 @@ description
|
|||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW}Set this as ID server in the RustDesk client, the key is in ~/rustdesk.creds:${CL}"
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
echo -e "${GATEWAY}${BGN}${IP}${CL}"
|
echo -e "${GATEWAY}${BGN}http://${IP}:21114${CL}"
|
||||||
echo -e "${INFO}${YW}Web UI, if selected during setup:${CL}"
|
|
||||||
echo -e "${GATEWAY}${BGN}http://${IP}:21114/_admin/${CL}"
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ msg_info "Installing Aria2"
|
|||||||
$STD apt install -y aria2
|
$STD apt install -y aria2
|
||||||
msg_ok "Installed Aria2"
|
msg_ok "Installed Aria2"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add AriaNG? <y/N> " prompt
|
prompt="${var_aria2_ariang:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add AriaNG? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y nginx
|
$STD apt install -y nginx
|
||||||
|
|||||||
@@ -20,16 +20,7 @@ $STD apt install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
RELEASE=$(get_latest_github_release "bunkerity/bunkerweb")
|
RELEASE=$(get_latest_github_release "bunkerity/bunkerweb")
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (install-bunkerweb.sh)."
|
confirm_external_installer "install-bunkerweb.sh" "https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
msg_info "Installing BunkerWeb (Patience)"
|
msg_info "Installing BunkerWeb (Patience)"
|
||||||
curl -fsSL -o install-bunkerweb.sh "https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh"
|
curl -fsSL -o install-bunkerweb.sh "https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh"
|
||||||
chmod +x install-bunkerweb.sh
|
chmod +x install-bunkerweb.sh
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ cd /opt/bytestash/client
|
|||||||
$STD npm install
|
$STD npm install
|
||||||
msg_ok "Installed ByteStash"
|
msg_ok "Installed ByteStash"
|
||||||
|
|
||||||
read -rp "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg
|
allowreg="${var_bytestash_registration:-}"
|
||||||
|
[[ -n "$allowreg" ]] || read -rp "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/bytestash-backend.service
|
cat <<EOF >/etc/systemd/system/bytestash-backend.service
|
||||||
@@ -42,7 +43,7 @@ Environment=JWT_SECRET=$JWT_SECRET
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if [[ "$allowreg" =~ ^[Yy]$ ]]; then
|
if [[ "${allowreg,,}" =~ ^(y|yes)$ ]]; then
|
||||||
sed -i '8i\Environment=ALLOW_NEW_ACCOUNTS=true' /etc/systemd/system/bytestash-backend.service
|
sed -i '8i\Environment=ALLOW_NEW_ACCOUNTS=true' /etc/systemd/system/bytestash-backend.service
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -14,23 +14,11 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
setup_deb_based() {
|
setup_deb_based() {
|
||||||
msg_info "Installing Dependencies"
|
fetch_and_deploy_gh_release "caddy" "caddyserver/caddy" "binary" "latest" "/opt/caddy" "caddy_*_linux_$(arch_resolve).deb"
|
||||||
$STD apt install -y \
|
systemctl enable -q --now caddy
|
||||||
debian-keyring \
|
|
||||||
debian-archive-keyring \
|
|
||||||
apt-transport-https
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Installing Caddy"
|
prompt="${var_caddy_xcaddy:-}"
|
||||||
setup_deb822_repo \
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
||||||
"caddy" \
|
|
||||||
"https://dl.cloudsmith.io/public/caddy/stable/gpg.key" \
|
|
||||||
"https://dl.cloudsmith.io/public/caddy/stable/deb/debian" \
|
|
||||||
"any-version"
|
|
||||||
$STD apt install -y caddy
|
|
||||||
msg_ok "Installed Caddy"
|
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
setup_go
|
setup_go
|
||||||
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary"
|
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary"
|
||||||
@@ -75,7 +63,8 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
msg_ok "Installed Caddy"
|
msg_ok "Installed Caddy"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
prompt="${var_caddy_xcaddy:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go
|
GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go
|
||||||
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "prebuild" "latest" "/opt/xcaddy" "xcaddy_*_linux_$(arch_resolve).tar.gz"
|
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "prebuild" "latest" "/opt/xcaddy" "xcaddy_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
|||||||
@@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://casaos.zimaspace.com/)."
|
confirm_external_installer "https://casaos.zimaspace.com/" "https://get.casaos.io/"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://get.casaos.io/"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
msg_info "Installing CasaOS (Patience)"
|
msg_info "Installing CasaOS (Patience)"
|
||||||
DOCKER_CONFIG_PATH='/etc/docker/daemon.json'
|
DOCKER_CONFIG_PATH='/etc/docker/daemon.json'
|
||||||
mkdir -p $(dirname $DOCKER_CONFIG_PATH)
|
mkdir -p $(dirname $DOCKER_CONFIG_PATH)
|
||||||
|
|||||||
@@ -19,16 +19,7 @@ $STD apt install -y \
|
|||||||
xvfb
|
xvfb
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://getchannels.com)."
|
confirm_external_installer "https://getchannels.com" "https://getchannels.com/dvr/setup.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://getchannels.com/dvr/setup.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
setup_hwaccel
|
setup_hwaccel
|
||||||
|
|
||||||
|
|||||||
84
install/cinephage-install.sh
Normal file
84
install/cinephage-install.sh
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/MoldyTaint/Cinephage
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
build-essential \
|
||||||
|
python3 \
|
||||||
|
libasound2t64 \
|
||||||
|
libgtk-3-0t64 \
|
||||||
|
libx11-xcb1 \
|
||||||
|
xvfb
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_ffmpeg
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "cinephage" "MoldyTaint/Cinephage" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building Cinephage"
|
||||||
|
cd /opt/cinephage
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
$STD npm prune --omit=dev
|
||||||
|
msg_ok "Built Cinephage"
|
||||||
|
|
||||||
|
msg_info "Installing Camoufox"
|
||||||
|
$STD /opt/cinephage/node_modules/.bin/camoufox-js fetch
|
||||||
|
msg_ok "Installed Camoufox"
|
||||||
|
|
||||||
|
msg_info "Configuring Cinephage"
|
||||||
|
mkdir -p /opt/cinephage_data/indexers/custom /opt/cinephage_data/external-lists/custom
|
||||||
|
cat <<EOF >/opt/cinephage_data/.env
|
||||||
|
NODE_ENV=production
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=3000
|
||||||
|
APP_VERSION=$(cat ~/.cinephage)
|
||||||
|
BETTER_AUTH_SECRET=$(openssl rand -base64 32)
|
||||||
|
DATA_DIR=/opt/cinephage_data
|
||||||
|
INDEXER_DEFINITIONS_PATH=/opt/cinephage/data/indexers/definitions
|
||||||
|
INDEXER_CUSTOM_DEFINITIONS_PATH=/opt/cinephage_data/indexers/custom
|
||||||
|
EXTERNAL_LISTS_PRESETS_PATH=/opt/cinephage/data/external-lists/presets
|
||||||
|
EXTERNAL_LISTS_CUSTOM_PRESETS_PATH=/opt/cinephage_data/external-lists/custom
|
||||||
|
CAPTCHA_ADDON_PATH=/opt/cinephage/src/lib/server/captcha/browser/addon
|
||||||
|
FFPROBE_PATH=/usr/bin/ffprobe
|
||||||
|
EOF
|
||||||
|
chmod 600 /opt/cinephage_data/.env
|
||||||
|
msg_ok "Configured Cinephage"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/cinephage.service
|
||||||
|
[Unit]
|
||||||
|
Description=Cinephage
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/cinephage
|
||||||
|
EnvironmentFile=/opt/cinephage_data/.env
|
||||||
|
Environment=NODE_OPTIONS=--max-old-space-size=2048
|
||||||
|
ExecStart=/usr/bin/node server.js
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now cinephage
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -31,7 +31,10 @@ sed -i "s/root//g" /etc/cockpit/disallowed-users
|
|||||||
msg_ok "Installed Cockpit"
|
msg_ok "Installed Cockpit"
|
||||||
|
|
||||||
# 45Drives only publishes amd64 packages
|
# 45Drives only publishes amd64 packages
|
||||||
[[ "$(arch_resolve)" == "arm64" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt
|
if [[ "$(arch_resolve)" != "arm64" ]]; then
|
||||||
|
prompt="${var_cockpit_45drives:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt
|
||||||
|
fi
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing 45Drives' cockpit extensions"
|
msg_info "Installing 45Drives' cockpit extensions"
|
||||||
setup_deb822_repo "45drives" \
|
setup_deb822_repo "45drives" \
|
||||||
|
|||||||
@@ -19,14 +19,15 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
read -rp "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
|
onlyoffice="${var_cryptpad_onlyoffice:-}"
|
||||||
|
[[ -n "$onlyoffice" ]] || read -rp "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
|
||||||
fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
||||||
|
|
||||||
msg_info "Setup CryptPad"
|
msg_info "Setup CryptPad"
|
||||||
cd /opt/cryptpad
|
cd /opt/cryptpad
|
||||||
$STD npm ci --allow-git=all
|
$STD npm ci --allow-git=all
|
||||||
$STD npm run install:components
|
$STD npm run install:components
|
||||||
if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
|
if [[ "${onlyoffice,,}" =~ ^(y|yes)$ ]]; then
|
||||||
$STD bash -c "./install-onlyoffice.sh --accept-license"
|
$STD bash -c "./install-onlyoffice.sh --accept-license"
|
||||||
fi
|
fi
|
||||||
cp config/config.example.js config/config.js
|
cp config/config.example.js config/config.js
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ rm -f "$DEB_FILE"
|
|||||||
echo "$LATEST_VERSION" >~/.emqx
|
echo "$LATEST_VERSION" >~/.emqx
|
||||||
msg_ok "Installed EMQX"
|
msg_ok "Installed EMQX"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to disable the EMQX MQ feature? (reduces disk/CPU usage) <y/N> " prompt
|
prompt="${var_emqx_disable_mq:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to disable the EMQX MQ feature? (reduces disk/CPU usage) <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Disabling EMQX MQ feature"
|
msg_info "Disabling EMQX MQ feature"
|
||||||
mkdir -p /etc/emqx
|
mkdir -p /etc/emqx
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ update_os
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
|
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt
|
prompt="${var_headscale_admin:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
|
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
|
||||||
|
|
||||||
|
|||||||
@@ -33,16 +33,7 @@ NODE_OPTIONS=${NODE_OPTIONS}
|
|||||||
EOF
|
EOF
|
||||||
msg_ok "Configured Service Environment"
|
msg_ok "Configured Service Environment"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://hermes-agent.nousresearch.com/)."
|
confirm_external_installer "https://hermes-agent.nousresearch.com/" "https://hermes-agent.nousresearch.com/install.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://hermes-agent.nousresearch.com/install.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Installing Hermes Agent"
|
msg_info "Installing Hermes Agent"
|
||||||
curl -fsSL https://hermes-agent.nousresearch.com/install.sh -o /tmp/hermes-install.sh
|
curl -fsSL https://hermes-agent.nousresearch.com/install.sh -o /tmp/hermes-install.sh
|
||||||
|
|||||||
@@ -50,7 +50,8 @@ else
|
|||||||
fi
|
fi
|
||||||
msg_ok "Installed InfluxDB"
|
msg_ok "Installed InfluxDB"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Telegraf? <y/N> " prompt
|
prompt="${var_influxdb_telegraf:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Telegraf? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Telegraf"
|
msg_info "Installing Telegraf"
|
||||||
$STD apt install -y telegraf
|
$STD apt install -y telegraf
|
||||||
|
|||||||
@@ -17,16 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt install -y ca-certificates
|
$STD apt install -y ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://iobroker.net/)."
|
confirm_external_installer "https://iobroker.net/" "https://iobroker.net/install.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://iobroker.net/install.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
NODE_VERSION="24" NPM_VERSION="11" setup_nodejs
|
NODE_VERSION="24" NPM_VERSION="11" setup_nodejs
|
||||||
|
|
||||||
|
|||||||
@@ -56,16 +56,7 @@ if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then
|
|||||||
fi
|
fi
|
||||||
msg_ok "Detected Kasm Workspaces version $KASM_VERSION"
|
msg_ok "Detected Kasm Workspaces version $KASM_VERSION"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://www.kasmweb.com/)."
|
confirm_external_installer "https://www.kasmweb.com/" "install.sh inside tar.gz $KASM_URL"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ install.sh inside tar.gz $KASM_URL"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Installing Kasm Workspaces"
|
msg_info "Installing Kasm Workspaces"
|
||||||
curl_download "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
|
curl_download "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ PG_VERSION="16" setup_postgresql
|
|||||||
RUST_CRATES="monolith" setup_rust
|
RUST_CRATES="monolith" setup_rust
|
||||||
PG_DB_NAME="linkwardendb" PG_DB_USER="linkwarden" setup_postgresql_db
|
PG_DB_NAME="linkwardendb" PG_DB_USER="linkwarden" setup_postgresql_db
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
prompt="${var_linkwarden_adminer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
setup_adminer
|
setup_adminer
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -28,16 +28,7 @@ export HOME=/opt/livebook
|
|||||||
$STD adduser --system --group --home /opt/livebook --shell /bin/bash livebook
|
$STD adduser --system --group --home /opt/livebook --shell /bin/bash livebook
|
||||||
msg_ok "Created livebook user"
|
msg_ok "Created livebook user"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://elixir-lang.org)."
|
confirm_external_installer "https://elixir-lang.org" "https://elixir-lang.org/install.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://elixir-lang.org/install.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
curl -fsSO https://elixir-lang.org/install.sh
|
curl -fsSO https://elixir-lang.org/install.sh
|
||||||
$STD sh install.sh elixir@latest otp@latest
|
$STD sh install.sh elixir@latest otp@latest
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ setup_deb_based() {
|
|||||||
sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf
|
sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||||
msg_ok "Setup MariaDB"
|
msg_ok "Setup MariaDB"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
|
prompt="${var_mariadb_phpmyadmin:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing phpMyAdmin"
|
msg_info "Installing phpMyAdmin"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
@@ -58,7 +59,8 @@ setup_alpine() {
|
|||||||
$STD rc-service mariadb start
|
$STD rc-service mariadb start
|
||||||
msg_ok "MariaDB Configured"
|
msg_ok "MariaDB Configured"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
|
prompt="${var_mariadb_adminer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Adminer and dependencies"
|
msg_info "Installing Adminer and dependencies"
|
||||||
$STD apk add --no-cache \
|
$STD apk add --no-cache \
|
||||||
|
|||||||
@@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://mattermost.com/)."
|
confirm_external_installer "https://mattermost.com/" "https://deb.packages.mattermost.com/repo-setup.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://deb.packages.mattermost.com/repo-setup.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ update_os
|
|||||||
|
|
||||||
MEILISEARCH_BIND="0.0.0.0:7700" setup_meilisearch
|
MEILISEARCH_BIND="0.0.0.0:7700" setup_meilisearch
|
||||||
|
|
||||||
read -r -p "${TAB3}Do you want add meilisearch-ui? [y/n]: " prompt
|
prompt="${var_meilisearch_ui:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Do you want add meilisearch-ui? [y/n]: " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
|
fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
|
||||||
|
|||||||
@@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://nextcloudpi.com/)."
|
confirm_external_installer "https://nextcloudpi.com/" "https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Making ssh.service reloads behave like restarts"
|
msg_info "Making ssh.service reloads behave like restarts"
|
||||||
mkdir -p /etc/systemd/system/ssh.service.d
|
mkdir -p /etc/systemd/system/ssh.service.d
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ setup_hwaccel
|
|||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
OTEL_ARGS=()
|
OTEL_ARGS=()
|
||||||
read -r -p "${TAB3}Would you like to install OpenTelemetry instrumentation packages (requires manual .env configuration)? <y/N> " prompt
|
prompt="${var_openwebui_otel:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install OpenTelemetry instrumentation packages (requires manual .env configuration)? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
for pkg in \
|
for pkg in \
|
||||||
opentelemetry-api \
|
opentelemetry-api \
|
||||||
@@ -52,7 +53,8 @@ for attempt in $(seq 1 3); do
|
|||||||
done
|
done
|
||||||
msg_ok "Installed Open WebUI"
|
msg_ok "Installed Open WebUI"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
prompt="${var_openwebui_ollama:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
if [[ "$(arch_resolve)" == "amd64" ]]; then
|
if [[ "$(arch_resolve)" == "amd64" ]]; then
|
||||||
msg_info "Setting up Intel® Repositories"
|
msg_info "Setting up Intel® Repositories"
|
||||||
|
|||||||
@@ -163,7 +163,8 @@ EOF
|
|||||||
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
prompt="${var_paperless_ngx_adminer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
setup_adminer
|
setup_adminer
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://pi-hole.net/)."
|
confirm_external_installer "https://pi-hole.net/" "https://install.pi-hole.net"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://install.pi-hole.net"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y ufw
|
$STD apt install -y ufw
|
||||||
@@ -65,9 +56,11 @@ $STD pihole-FTL --config ntp.sync.interval 0
|
|||||||
systemctl restart pihole-FTL.service
|
systemctl restart pihole-FTL.service
|
||||||
msg_ok "Installed Pi-hole"
|
msg_ok "Installed Pi-hole"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Unbound? <y/N> " prompt
|
prompt="${var_pihole_unbound:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Unbound? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
read -r -p "${TAB3}Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt
|
prompt="${var_pihole_unbound_dot:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt
|
||||||
msg_info "Installing Unbound"
|
msg_info "Installing Unbound"
|
||||||
mkdir -p /etc/unbound/unbound.conf.d
|
mkdir -p /etc/unbound/unbound.conf.d
|
||||||
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf
|
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ msg_ok "Installed Podman"
|
|||||||
|
|
||||||
mkdir -p /etc/containers/systemd
|
mkdir -p /etc/containers/systemd
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
|
prompt="${var_podman_homeassistant_portainer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
||||||
podman volume create portainer_data >/dev/null
|
podman volume create portainer_data >/dev/null
|
||||||
@@ -75,7 +76,8 @@ EOF
|
|||||||
$STD systemctl start portainer
|
$STD systemctl start portainer
|
||||||
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
||||||
else
|
else
|
||||||
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
|
prompt="${var_podman_homeassistant_portainer_agent:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
|
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
|
||||||
cat <<EOF >/etc/containers/systemd/portainer-agent.container
|
cat <<EOF >/etc/containers/systemd/portainer-agent.container
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ msg_ok "Installed Podman"
|
|||||||
|
|
||||||
mkdir -p /etc/containers/systemd
|
mkdir -p /etc/containers/systemd
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
|
prompt="${var_podman_portainer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
||||||
podman volume create portainer_data >/dev/null
|
podman volume create portainer_data >/dev/null
|
||||||
@@ -76,7 +77,8 @@ EOF
|
|||||||
$STD systemctl start portainer
|
$STD systemctl start portainer
|
||||||
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
||||||
else
|
else
|
||||||
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
|
prompt="${var_podman_portainer_agent:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
|
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
|
||||||
$STD podman pull docker.io/portainer/agent:latest
|
$STD podman pull docker.io/portainer/agent:latest
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ EOF
|
|||||||
systemctl restart postgresql
|
systemctl restart postgresql
|
||||||
msg_ok "Installed PostgreSQL"
|
msg_ok "Installed PostgreSQL"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
prompt="${var_postgresql_adminer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Adminer"
|
msg_info "Installing Adminer"
|
||||||
$STD apt install -y adminer
|
$STD apt install -y adminer
|
||||||
@@ -158,7 +159,8 @@ setup_alpine() {
|
|||||||
$STD rc-service postgresql restart
|
$STD rc-service postgresql restart
|
||||||
msg_ok "Configured and Restarted PostgreSQL"
|
msg_ok "Configured and Restarted PostgreSQL"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
|
prompt="${var_postgresql_adminer:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Adminer and dependencies"
|
msg_info "Installing Adminer and dependencies"
|
||||||
$STD apk add --no-cache \
|
$STD apk add --no-cache \
|
||||||
|
|||||||
@@ -13,126 +13,108 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
if [[ -n "${var_rustdesk_api:-}" ]]; then
|
|
||||||
prompt="$var_rustdesk_api"
|
|
||||||
else
|
|
||||||
read -r -p "${TAB3}Would you like to add the RustDesk API web UI (lejianwen/rustdesk-api, unmaintained since 09/2025)? <y/N> " prompt
|
|
||||||
fi
|
|
||||||
INSTALL_API=0
|
|
||||||
[[ "${prompt,,}" =~ ^(y|yes|true)$ ]] && INSTALL_API=1
|
|
||||||
API_PASS="$(random_password 16)"
|
|
||||||
|
|
||||||
# rustdesk-api hands these to clients; its shipped defaults point at 192.168.1.66
|
|
||||||
api_env() {
|
|
||||||
printf '%s\n' \
|
|
||||||
"RUSTDESK_API_RUSTDESK_ID_SERVER=${LOCAL_IP}:21116" \
|
|
||||||
"RUSTDESK_API_RUSTDESK_RELAY_SERVER=${LOCAL_IP}:21117" \
|
|
||||||
"RUSTDESK_API_RUSTDESK_API_SERVER=http://${LOCAL_IP}:21114" \
|
|
||||||
"RUSTDESK_API_RUSTDESK_KEY_FILE=$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
# hbbs creates its key pair in its working directory on first start
|
|
||||||
write_creds() {
|
|
||||||
local key_file="$1"
|
|
||||||
for _ in $(seq 1 30); do
|
|
||||||
[[ -s "$key_file" ]] && break
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
if [[ ! -s "$key_file" ]]; then
|
|
||||||
msg_error "hbbs did not create ${key_file}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
cat <<EOF >~/rustdesk.creds
|
|
||||||
RustDesk Server
|
|
||||||
ID Server: ${LOCAL_IP}
|
|
||||||
Key: $(<"$key_file")
|
|
||||||
EOF
|
|
||||||
if ((INSTALL_API)); then
|
|
||||||
cat <<EOF >>~/rustdesk.creds
|
|
||||||
|
|
||||||
RustDesk API Web UI: http://${LOCAL_IP}:21114/_admin/
|
|
||||||
Username: admin
|
|
||||||
Password: ${API_PASS}
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_deb_based() {
|
setup_deb_based() {
|
||||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb"
|
fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb"
|
||||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb"
|
fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb"
|
||||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb"
|
fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb"
|
||||||
systemctl enable -q --now rustdesk-hbbs rustdesk-hbbr
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb"
|
||||||
write_creds /var/lib/rustdesk-server/id_ed25519.pub
|
systemctl enable -q --now rustdesk-hbbr
|
||||||
|
systemctl enable -q --now rustdesk-hbbs
|
||||||
if ((INSTALL_API)); then
|
systemctl enable -q --now rustdesk-api
|
||||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb"
|
|
||||||
msg_info "Configuring RustDesk API"
|
|
||||||
mkdir -p /etc/systemd/system/rustdesk-api.service.d
|
|
||||||
{
|
|
||||||
echo "[Service]"
|
|
||||||
api_env /var/lib/rustdesk-server/id_ed25519.pub | sed 's/^/Environment=/'
|
|
||||||
} >/etc/systemd/system/rustdesk-api.service.d/override.conf
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl stop rustdesk-api
|
|
||||||
cd /var/lib/rustdesk-api
|
|
||||||
$STD rustdesk-api reset-admin-pwd "$API_PASS"
|
|
||||||
systemctl enable -q --now rustdesk-api
|
|
||||||
msg_ok "Configured RustDesk API"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_alpine() {
|
setup_alpine() {
|
||||||
fetch_and_deploy_gh_release "rustdesk-server" "rustdesk/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip"
|
fetch_and_deploy_gh_release "rustdesk-server" "lejianwen/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip"
|
||||||
|
|
||||||
msg_info "Creating RustDesk Server Services"
|
msg_info "Configuring RustDesk Server"
|
||||||
for svc in hbbs hbbr; do
|
mkdir -p /root/.config/rustdesk
|
||||||
cat <<EOF >"/etc/init.d/rustdesk-server-${svc}"
|
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
|
||||||
|
msg_ok "Configured RustDesk Server"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "prebuild" "latest" "/opt/rustdesk-api" "linux-$(arch_resolve).tar.gz"
|
||||||
|
|
||||||
|
msg_info "Configuring RustDesk API"
|
||||||
|
cd /opt/rustdesk-api
|
||||||
|
ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16)
|
||||||
|
$STD ./apimain reset-admin-pwd "$ADMINPASS"
|
||||||
|
cat <<EOF >~/rustdesk.creds
|
||||||
|
RustDesk WebUI
|
||||||
|
|
||||||
|
Username: admin
|
||||||
|
Password: $ADMINPASS
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured RustDesk API"
|
||||||
|
|
||||||
|
msg_info "Enabling RustDesk Server Services"
|
||||||
|
cat <<EOF >/etc/init.d/rustdesk-server-hbbs
|
||||||
#!/sbin/openrc-run
|
#!/sbin/openrc-run
|
||||||
description="RustDesk ${svc^^} Service"
|
description="RustDesk HBBS Service"
|
||||||
directory="/opt/rustdesk-server"
|
directory="/opt/rustdesk-server"
|
||||||
command="/opt/rustdesk-server/${svc}"
|
command="/opt/rustdesk-server/hbbs"
|
||||||
|
command_args=""
|
||||||
command_background="true"
|
command_background="true"
|
||||||
pidfile="/var/run/rustdesk-server-${svc}.pid"
|
command_user="root"
|
||||||
output_log="/var/log/rustdesk-${svc}.log"
|
pidfile="/var/run/rustdesk-server-hbbs.pid"
|
||||||
error_log="/var/log/rustdesk-${svc}.err"
|
output_log="/var/log/rustdesk-hbbs.log"
|
||||||
|
error_log="/var/log/rustdesk-hbbs.err"
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
use net
|
use net
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
chmod +x "/etc/init.d/rustdesk-server-${svc}"
|
|
||||||
$STD rc-update add "rustdesk-server-${svc}" default
|
|
||||||
$STD service "rustdesk-server-${svc}" start
|
|
||||||
done
|
|
||||||
msg_ok "Created RustDesk Server Services"
|
|
||||||
write_creds /opt/rustdesk-server/id_ed25519.pub
|
|
||||||
|
|
||||||
if ((INSTALL_API)); then
|
cat <<EOF >/etc/init.d/rustdesk-server-hbbr
|
||||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "prebuild" "latest" "/opt/rustdesk-api" "linux-$(arch_resolve).tar.gz"
|
#!/sbin/openrc-run
|
||||||
msg_info "Configuring RustDesk API"
|
description="RustDesk HBBR Service"
|
||||||
api_env /opt/rustdesk-server/id_ed25519.pub | sed 's/^/export /' >/etc/conf.d/rustdesk-api
|
directory="/opt/rustdesk-server"
|
||||||
cd /opt/rustdesk-api
|
command="/opt/rustdesk-server/hbbr"
|
||||||
$STD ./apimain reset-admin-pwd "$API_PASS"
|
command_args=""
|
||||||
cat <<EOF >/etc/init.d/rustdesk-api
|
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
|
#!/sbin/openrc-run
|
||||||
description="RustDesk API Service"
|
description="RustDesk API Service"
|
||||||
directory="/opt/rustdesk-api"
|
directory="/opt/rustdesk-api"
|
||||||
command="/opt/rustdesk-api/apimain"
|
command="/opt/rustdesk-api/apimain"
|
||||||
|
command_args=""
|
||||||
command_background="true"
|
command_background="true"
|
||||||
|
command_user="root"
|
||||||
pidfile="/var/run/rustdesk-api.pid"
|
pidfile="/var/run/rustdesk-api.pid"
|
||||||
output_log="/var/log/rustdesk-api.log"
|
output_log="/var/log/rustdesk-api.log"
|
||||||
error_log="/var/log/rustdesk-api.err"
|
error_log="/var/log/rustdesk-api.err"
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
use net
|
use net
|
||||||
after rustdesk-server-hbbs
|
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
chmod +x /etc/init.d/rustdesk-api
|
chmod +x /etc/init.d/rustdesk-server-hbbs
|
||||||
$STD rc-update add rustdesk-api default
|
chmod +x /etc/init.d/rustdesk-server-hbbr
|
||||||
$STD service rustdesk-api start
|
chmod +x /etc/init.d/rustdesk-api
|
||||||
msg_ok "Configured RustDesk API"
|
$STD rc-update add rustdesk-server-hbbs default
|
||||||
fi
|
$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"
|
||||||
}
|
}
|
||||||
|
|
||||||
run_os_setup
|
run_os_setup
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ $STD uv venv --clear /opt/sabnzbd/venv
|
|||||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||||
msg_ok "Installed SABnzbd"
|
msg_ok "Installed SABnzbd"
|
||||||
|
|
||||||
read -r -p "Would you like to install par2cmdline-turbo? <y/N> " prompt
|
prompt="${var_sabnzbd_par2_turbo:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "Would you like to install par2cmdline-turbo? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
mv /usr/bin/par2 /usr/bin/par2.old
|
mv /usr/bin/par2 /usr/bin/par2.old
|
||||||
fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-$(arch_resolve).zip"
|
fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-$(arch_resolve).zip"
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebui
|
|||||||
mkdir -p /opt/silverbullet/space
|
mkdir -p /opt/silverbullet/space
|
||||||
|
|
||||||
RUNTIME_API_ENV=""
|
RUNTIME_API_ENV=""
|
||||||
read -rp "${TAB3}Enable Silverbullet Runtime API? Requires Chromium (~700MB). Uses ~200MB extra RAM. (y/N): " runtime_api_prompt
|
runtime_api_prompt="${var_silverbullet_runtime_api:-}"
|
||||||
|
[[ -n "$runtime_api_prompt" ]] || read -rp "${TAB3}Enable Silverbullet Runtime API? Requires Chromium (~700MB). Uses ~200MB extra RAM. (y/N): " runtime_api_prompt
|
||||||
if [[ "${runtime_api_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${runtime_api_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Chromium for Runtime API"
|
msg_info "Installing Chromium for Runtime API"
|
||||||
$STD apt install -y chromium
|
$STD apt install -y chromium
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ sed -i \
|
|||||||
-e 's/^.*picture/#&/' /opt/slskd/config/slskd.yml
|
-e 's/^.*picture/#&/' /opt/slskd/config/slskd.yml
|
||||||
msg_ok "Configured Slskd"
|
msg_ok "Configured Slskd"
|
||||||
|
|
||||||
read -rp "${TAB3}Do you want to install Soularr? y/N " soularr
|
soularr="${var_slskd_soularr:-}"
|
||||||
|
[[ -n "$soularr" ]] || read -rp "${TAB3}Do you want to install Soularr? y/N " soularr
|
||||||
if [[ ${soularr,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${soularr,,} =~ ^(y|yes)$ ]]; then
|
||||||
PYTHON_VERSION="3.11" setup_uv
|
PYTHON_VERSION="3.11" setup_uv
|
||||||
fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
|
fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ msg_ok "Installed Dependencies"
|
|||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
JAVA_VERSION="25" setup_java
|
JAVA_VERSION="25" setup_java
|
||||||
|
|
||||||
if ! read -r -p "${TAB3}Do you want to use Stirling-PDF with Login? (no/n = without Login) [Y/n] " response; then
|
response="${var_stirling_pdf_login:-}"
|
||||||
|
if [[ -z "$response" ]] && ! read -r -p "${TAB3}Do you want to use Stirling-PDF with Login? (no/n = without Login) [Y/n] " response; then
|
||||||
# No interactive stdin (EOF): fall back to the no-login install instead of
|
# No interactive stdin (EOF): fall back to the no-login install instead of
|
||||||
# silently selecting login, which the -z test below would otherwise do.
|
# silently selecting login, which the -z test below would otherwise do.
|
||||||
response="n"
|
response="n"
|
||||||
|
|||||||
@@ -105,8 +105,9 @@ setup_alpine() {
|
|||||||
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||||
msg_ok "Installed Traefik"
|
msg_ok "Installed Traefik"
|
||||||
|
|
||||||
read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
|
enable_webui="${var_traefik_webui:-}"
|
||||||
if [[ "$enable_webui" =~ ^[Yy]$ ]]; then
|
[[ -n "$enable_webui" ]] || read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
|
||||||
|
if [[ "${enable_webui,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Configuring Traefik WebUI"
|
msg_info "Configuring Traefik WebUI"
|
||||||
sed -i 's/localhost//g' /etc/traefik/traefik.yaml
|
sed -i 's/localhost//g' /etc/traefik/traefik.yaml
|
||||||
msg_ok "Configured Traefik WebUI"
|
msg_ok "Configured Traefik WebUI"
|
||||||
|
|||||||
@@ -36,9 +36,11 @@ setup_deb_based() {
|
|||||||
msg_ok "Installed Valkey"
|
msg_ok "Installed Valkey"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt
|
prompt="${var_valkey_tls:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only
|
tls_only="${var_valkey_tls_only:-}"
|
||||||
|
[[ -n "$tls_only" ]] || read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only
|
||||||
msg_info "Configuring TLS for Valkey..."
|
msg_info "Configuring TLS for Valkey..."
|
||||||
|
|
||||||
create_self_signed_cert "Valkey"
|
create_self_signed_cert "Valkey"
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ update_os
|
|||||||
fetch_and_deploy_gh_release "versitygw" "versity/versitygw" "binary"
|
fetch_and_deploy_gh_release "versitygw" "versity/versitygw" "binary"
|
||||||
|
|
||||||
WEBUI_CONF=""
|
WEBUI_CONF=""
|
||||||
read -rp "Would you like to enable the VersityGW WebGUI (Beta)? (y/N): " webui_prompt
|
webui_prompt="${var_versitygw_webgui:-}"
|
||||||
|
[[ -n "$webui_prompt" ]] || read -rp "Would you like to enable the VersityGW WebGUI (Beta)? (y/N): " webui_prompt
|
||||||
if [[ "${webui_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${webui_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
WEBUI_CONF="\nVGW_WEBUI_PORT=:7071\nVGW_WEBUI_NO_TLS=true"
|
WEBUI_CONF="\nVGW_WEBUI_PORT=:7071\nVGW_WEBUI_NO_TLS=true"
|
||||||
msg_ok "WebGUI will be enabled on port 7071"
|
msg_ok "WebGUI will be enabled on port 7071"
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ msg_ok "Got version $victoriametrics_release of VictoriaMetrics"
|
|||||||
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$victoriametrics_filename"
|
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$victoriametrics_filename"
|
||||||
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$vmutils_filename"
|
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$vmutils_filename"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add VictoriaLogs? <y/N> " prompt
|
prompt="${var_victoriametrics_logs:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add VictoriaLogs? <y/N> " prompt
|
||||||
|
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
vl_release_json="$(mktemp)"
|
vl_release_json="$(mktemp)"
|
||||||
|
|||||||
@@ -15,16 +15,7 @@ update_os
|
|||||||
|
|
||||||
RELEASE=$(get_latest_github_release "wazuh/wazuh" | cut -d. -f1,2)
|
RELEASE=$(get_latest_github_release "wazuh/wazuh" | cut -d. -f1,2)
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://wazuh.com/)."
|
confirm_external_installer "https://wazuh.com/" "https://packages.wazuh.com/$RELEASE/wazuh-install.sh"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://packages.wazuh.com/$RELEASE/wazuh-install.sh "
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Setup Wazuh"
|
msg_info "Setup Wazuh"
|
||||||
curl -fsSL https://packages.wazuh.com/$RELEASE/wazuh-install.sh -o wazuh-install.sh
|
curl -fsSL https://packages.wazuh.com/$RELEASE/wazuh-install.sh -o wazuh-install.sh
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ setup_deb_based() {
|
|||||||
$STD netfilter-persistent reload
|
$STD netfilter-persistent reload
|
||||||
msg_ok "Installed WireGuard"
|
msg_ok "Installed WireGuard"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add WGDashboard? <y/N> " prompt
|
prompt="${var_wireguard_wgdashboard:-}"
|
||||||
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add WGDashboard? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
|
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
|
||||||
|
|
||||||
@@ -109,8 +110,9 @@ EOF
|
|||||||
$STD sysctl -p /etc/sysctl.conf
|
$STD sysctl -p /etc/sysctl.conf
|
||||||
msg_ok "Installed WireGuard"
|
msg_ok "Installed WireGuard"
|
||||||
|
|
||||||
read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD
|
INSTALL_WGD="${var_wireguard_wgdashboard:-}"
|
||||||
if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
|
[[ -n "$INSTALL_WGD" ]] || read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD
|
||||||
|
if [[ "${INSTALL_WGD,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing additional dependencies for WGDashboard"
|
msg_info "Installing additional dependencies for WGDashboard"
|
||||||
$STD apk add --no-cache \
|
$STD apk add --no-cache \
|
||||||
python3 \
|
python3 \
|
||||||
|
|||||||
@@ -20,16 +20,7 @@ $STD apt install -y \
|
|||||||
ca-certificates
|
ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://yunohost.org/)."
|
confirm_external_installer "https://yunohost.org/" "https://install.yunohost.org"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://install.yunohost.org"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Installing YunoHost (Patience)"
|
msg_info "Installing YunoHost (Patience)"
|
||||||
touch /etc/.pve-ignore.resolv.conf
|
touch /etc/.pve-ignore.resolv.conf
|
||||||
|
|||||||
@@ -13,16 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://install.zerotier.com)."
|
confirm_external_installer "https://install.zerotier.com" "https://install.zerotier.com"
|
||||||
msg_warn "The following code is NOT maintained or audited by our repository."
|
|
||||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
|
|
||||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://install.zerotier.com"
|
|
||||||
echo
|
|
||||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
|
|
||||||
if [[ ! $CONFIRM =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
||||||
msg_error "Aborted by user. No changes have been made."
|
|
||||||
exit 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Setting up Zerotier-One"
|
msg_info "Setting up Zerotier-One"
|
||||||
curl -fsSL https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg | gpg --import >/dev/null 2>&1
|
curl -fsSL https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg | gpg --import >/dev/null 2>&1
|
||||||
|
|||||||
Reference in New Issue
Block a user