diff --git a/CHANGELOG.md b/CHANGELOG.md index 9472a5efe..4d99a84ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,42 @@

All notable changes to this project will be documented in this file.

> [!CAUTION] -Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. It is imperative to rely solely on information from https://Helper-Scripts.com/ or https://tteck.github.io/Proxmox/ for accurate and trustworthy content. +Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. > [!NOTE] All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2024-10-27 + +### Changed + +- **Open WebUI LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/8a21f6e7f025a911865395d4c0fa9a001bd0d512) + - Refactor Script to add an option to install Ollama. + +## 2024-10-26 + +### Changed + +- **AdventureLog LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/adventurelog-install.sh) + - NEW Script + +## 2024-10-25 + +### Changed + +- **Zoraxy LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/468a5d367ded4cf453a1507452e112ac3e234e2a) + - Switch built from source to a pre-compiled binary version. + - Breaking Change + +## 2024-10-23 + +### Changed + +- **Wallos LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/wallos-install.sh) + - NEW Script +- **Open WebUI LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/openwebui-install.sh) + - NEW Script + ## 2024-10-19 ### Changed diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh new file mode 100644 index 000000000..3d7137e57 --- /dev/null +++ b/ct/adventurelog.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: MickLesk (Canbiz) +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +function header_info { +clear +cat <<"EOF" + ___ __ __ __ + / | ____/ / _____ ____ / /___ __________ / / ____ ____ _ + / /| |/ __ / | / / _ \/ __ \/ __/ / / / ___/ _ \/ / / __ \/ __ `/ + / ___ / /_/ /| |/ / __/ / / / /_/ /_/ / / / __/ /___/ /_/ / /_/ / +/_/ |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/ \___/_____/\____/\__, / + /____/ +EOF +} +header_info +echo -e "Loading..." +APP="AdventureLog" +var_disk="7" +var_cpu="2" +var_ram="2048" +var_os="debian" +var_version="12" +variables +color +catch_errors + +function default_settings() { + CT_TYPE="1" + PW="" + CT_ID=$NEXTID + HN=$NSAPP + DISK_SIZE="$var_disk" + CORE_COUNT="$var_cpu" + RAM_SIZE="$var_ram" + BRG="vmbr0" + NET="dhcp" + GATE="" + APT_CACHER="" + APT_CACHER_IP="" + DISABLEIP6="no" + MTU="" + SD="" + NS="" + MAC="" + VLAN="" + SSH="no" + VERB="no" + echo_default +} +function update_script() { +header_info +if [[ ! -d /opt/adventurelog ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then + read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt + [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit +fi +RELEASE=$(curl -s https://api.github.com/repos/seanmorley15/AdventureLog/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 + msg_info "Stopping Services" + systemctl stop adventurelog-backend + systemctl stop adventurelog-frontend + msg_ok "Services Stopped" + + msg_info "Updating ${APP} to ${RELEASE}" + cp /opt/adventurelog/backend/server/.env /opt/server.env + cp /opt/adventurelog/frontend/env /opt/frontend.env + wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" + unzip -q v${RELEASE}.zip + mv AdventureLog-${RELEASE} /opt/adventurelog + mv /opt/server.env /opt/adventurelog/backend/server/.env + cd /opt/adventurelog/backend/server + pip install --upgrade pip &>/dev/null + pip install -r requirements.txt &>/dev/null + python3 manage.py collectstatic --noinput &>/dev/null + python3 manage.py migrate &>/dev/null + + mv /opt/frontend.env /opt/adventurelog/frontend/.env + cd /opt/adventurelog/frontend + pnpm install &>/dev/null + pnpm run build &>/dev/null + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP}" + + msg_info "Starting Services" + systemctl start adventurelog-backend + systemctl start adventurelog-frontend + msg_ok "Started Services" + + msg_info "Cleaning Up" + rm -rf v${RELEASE}.zip + msg_ok "Cleaned" + msg_ok "Updated Successfully" +else + msg_ok "No update required. ${APP} is already at ${RELEASE}" +fi +exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${APP} Setup should be reachable by going to the following URL. + ${BL}http://${IP}:3000${CL} \n" \ No newline at end of file diff --git a/ct/changedetection.sh b/ct/changedetection.sh index 82c307ed5..030821b4a 100644 --- a/ct/changedetection.sh +++ b/ct/changedetection.sh @@ -63,7 +63,8 @@ fi pip3 install changedetection.io --upgrade &>/dev/null pip3 install playwright --upgrade &>/dev/null if [[ -f /etc/systemd/system/browserless.service ]]; then - git -C /opt/browserless/ pull &>/dev/null + git -C /opt/browserless/ fetch --all &>/dev/null + git -C /opt/browserless/ reset --hard origin/main &>/dev/null npm update --prefix /opt/browserless &>/dev/null npm run build --prefix /opt/browserless &>/dev/null npm run build:function --prefix /opt/browserless &>/dev/null diff --git a/ct/gotify.sh b/ct/gotify.sh index 0c4c6d3c2..89eda7515 100644 --- a/ct/gotify.sh +++ b/ct/gotify.sh @@ -55,7 +55,29 @@ function default_settings() { function update_script() { header_info if [[ ! -d /opt/gotify ]]; then msg_error "No ${APP} Installation Found!"; exit; fi -msg_error "There is currently no update path available." + +RELEASE=$(curl -s https://api.github.com/repos/gotify/server/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 + msg_info "Stopping ${APP}" + systemctl stop gotify + msg_ok "Stopped ${APP}" + + msg_info "Updating ${APP} to ${RELEASE}" + cd /opt/gotify + wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip + unzip -oq gotify-linux-amd64.zip + rm -rf gotify-linux-amd64.zip + chmod +x gotify-linux-amd64 + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP} to ${RELEASE}" + + msg_info "Starting ${APP}" + systemctl start gotify + msg_ok "Started ${APP}" + msg_ok "Updated Successfully" +else + msg_ok "No update required. ${APP} is already at ${RELEASE}" +fi exit } diff --git a/ct/memos.sh b/ct/memos.sh new file mode 100644 index 000000000..ceb1fd913 --- /dev/null +++ b/ct/memos.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: MickLesk (Canbiz) +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +function header_info { +clear +cat <<"EOF" + __ ___ + / |/ /__ ____ ___ ____ _____ + / /|_/ / _ \/ __ `__ \/ __ \/ ___/ + / / / / __/ / / / / / /_/ (__ ) +/_/ /_/\___/_/ /_/ /_/\____/____/ + +EOF +} +header_info +echo -e "Loading..." +APP="Memos" +var_disk="7" +var_cpu="2" +var_ram="2048" +var_os="debian" +var_version="12" +variables +color +catch_errors + +function default_settings() { + CT_TYPE="1" + PW="" + CT_ID=$NEXTID + HN=$NSAPP + DISK_SIZE="$var_disk" + CORE_COUNT="$var_cpu" + RAM_SIZE="$var_ram" + BRG="vmbr0" + NET="dhcp" + GATE="" + APT_CACHER="" + APT_CACHER_IP="" + DISABLEIP6="no" + MTU="" + SD="" + NS="" + MAC="" + VLAN="" + SSH="no" + VERB="no" + echo_default +} + +function update_script() { +header_info +if [[ ! -d /opt/memos ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +msg_info "Updating $APP (Patience)" +cd /opt/memos +output=$(git pull --no-rebase) +if echo "$output" | grep -q "Already up to date." +then + msg_ok "$APP is already up to date." + exit +fi +systemctl stop memos +cd /opt/memos/web +pnpm i --frozen-lockfile &>/dev/null +pnpm build &>/dev/null +cd /opt/memos +mkdir -p /opt/memos/server/dist +cp -r web/dist/* /opt/memos/server/dist/ +cp -r web/dist/* /opt/memos/server/router/frontend/dist/ +go build -o /opt/memos/memos -tags=embed bin/memos/main.go &>/dev/null +systemctl start memos +msg_ok "Updated $APP" +exit +} + + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${APP} should be reachable by going to the following URL. + ${BL}http://${IP}:9030${CL} \n" diff --git a/ct/nzbget.sh b/ct/nzbget.sh new file mode 100644 index 000000000..d4caa8f60 --- /dev/null +++ b/ct/nzbget.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: havardthom +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +function header_info { +clear +cat <<"EOF" + _ _______ ____ ______ __ + / | / /__ / / __ )/ ____/__ / /_ + / |/ / / / / __ / / __/ _ \/ __/ + / /| / / /__/ /_/ / /_/ / __/ /_ +/_/ |_/ /____/_____/\____/\___/\__/ + +EOF +} +header_info +echo -e "Loading..." +APP="NZBGet" +var_disk="4" +var_cpu="2" +var_ram="2048" +var_os="debian" +var_version="12" +variables +color +catch_errors + +function default_settings() { + CT_TYPE="1" + PW="" + CT_ID=$NEXTID + HN=$NSAPP + DISK_SIZE="$var_disk" + CORE_COUNT="$var_cpu" + RAM_SIZE="$var_ram" + BRG="vmbr0" + NET="dhcp" + GATE="" + APT_CACHER="" + APT_CACHER_IP="" + DISABLEIP6="no" + MTU="" + SD="" + NS="" + MAC="" + VLAN="" + SSH="no" + VERB="no" + echo_default +} + +function update_script() { +header_info +if [[ ! -f /lib/systemd/system/nzbget.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +msg_info "Updating $APP LXC" +apt-get update &>/dev/null +apt-get -y upgrade &>/dev/null +msg_ok "Updated $APP LXC" +exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${APP} should be reachable by going to the following URL. + ${BL}http://${IP}:6789${CL} \n" diff --git a/ct/ollama.sh b/ct/ollama.sh new file mode 100644 index 000000000..1b275ab64 --- /dev/null +++ b/ct/ollama.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: havardthom +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +function header_info { +clear +cat <<"EOF" + ____ ____ + / __ \/ / /___ _____ ___ ____ _ + / / / / / / __ `/ __ `__ \/ __ `/ +/ /_/ / / / /_/ / / / / / / /_/ / +\____/_/_/\__,_/_/ /_/ /_/\__,_/ + +EOF +} +header_info +echo -e "Loading..." +APP="Ollama" +var_disk="24" +var_cpu="4" +var_ram="4096" +var_os="ubuntu" +var_version="22.04" +variables +color +catch_errors + +function default_settings() { + CT_TYPE="1" + PW="" + CT_ID=$NEXTID + HN=$NSAPP + DISK_SIZE="$var_disk" + CORE_COUNT="$var_cpu" + RAM_SIZE="$var_ram" + BRG="vmbr0" + NET="dhcp" + GATE="" + APT_CACHER="" + APT_CACHER_IP="" + DISABLEIP6="no" + MTU="" + SD="" + NS="" + MAC="" + VLAN="" + SSH="no" + VERB="no" + echo_default +} + +function update_script() { +header_info +if [[ ! -d /opt/ollama ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +msg_info "Updating ${APP}" +apt-get update &>/dev/null +apt-get -y upgrade &>/dev/null +msg_ok "Updated Successfully" +exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${APP} should be reachable by going to the following URL. + ${BL}http://${IP}:11434${CL} \n" diff --git a/ct/openwebui.sh b/ct/openwebui.sh index 051c42f68..daee783a0 100644 --- a/ct/openwebui.sh +++ b/ct/openwebui.sh @@ -67,6 +67,7 @@ then fi systemctl stop open-webui.service npm install &>/dev/null +export NODE_OPTIONS="--max-old-space-size=3584" npm run build &>/dev/null cd ./backend pip install -r requirements.txt -U &>/dev/null diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh index 839717663..a810b545d 100644 --- a/ct/paperless-ngx.sh +++ b/ct/paperless-ngx.sh @@ -67,6 +67,18 @@ function update_script() { header_info if [ "$UPD" == "1" ]; then if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then + msg_info "Updating Ghostscript" + cd /tmp + wget -q https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz + tar -xzf ghostscript-10.04.0.tar.gz + cd ghostscript-10.04.0 + ./configure &>/dev/null + make &>/dev/null + sudo make install &>/dev/null + rm -rf /tmp/ghostscript* + msg_ok "Ghostscript updated to 10.04.0" + fi msg_info "Stopping all Paperless-ngx Services" systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service msg_ok "Stopped all Paperless-ngx Services" diff --git a/ct/tianji.sh b/ct/tianji.sh index 6e7889533..771781ad4 100644 --- a/ct/tianji.sh +++ b/ct/tianji.sh @@ -61,12 +61,25 @@ if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then fi RELEASE=$(curl -s https://api.github.com/repos/msgbyte/tianji/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 + whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75 msg_info "Stopping ${APP} Service" systemctl stop tianji msg_ok "Stopped ${APP} Service" msg_info "Updating ${APP} to ${RELEASE}" - cd /opt/tianji - git checkout -f -q v${RELEASE} + cd /opt + cp /opt/tianji/src/server/.env /opt/.env + mv /opt/tianji /opt/tianji_bak + wget -q "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip" + unzip -q v${RELEASE}.zip + mv tianji-${RELEASE} /opt/tianji + cd tianji + pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile >/dev/null 2>&1 + pnpm build:static >/dev/null 2>&1 + pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false >/dev/null 2>&1 + mkdir -p ./src/server/public >/dev/null 2>&1 + cp -r ./geo ./src/server/public >/dev/null 2>&1 + pnpm build:server >/dev/null 2>&1 + mv /opt/.env /opt/tianji/src/server/.env cd src/server pnpm db:migrate:apply >/dev/null 2>&1 echo "${RELEASE}" >/opt/${APP}_version.txt @@ -74,6 +87,13 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v msg_info "Starting ${APP}" systemctl start tianji msg_ok "Started ${APP}" + msg_info "Cleaning up" + rm -R /opt/v${RELEASE}.zip + rm -rf /opt/tianji_bak + rm -rf /opt/tianji/src/client + rm -rf /opt/tianji/website + rm -rf /opt/tianji/reporter + msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at ${RELEASE}." diff --git a/ct/wallos.sh b/ct/wallos.sh new file mode 100644 index 000000000..0bd4dc275 --- /dev/null +++ b/ct/wallos.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: MickLesk (Canbiz) +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +function header_info { +clear +cat <<"EOF" + _ __ ____ +| | / /___ _/ / /___ _____ +| | /| / / __ `/ / / __ \/ ___/ +| |/ |/ / /_/ / / / /_/ (__ ) +|__/|__/\__,_/_/_/\____/____/ + +EOF +} +header_info +echo -e "Loading..." +APP="Wallos" +var_disk="5" +var_cpu="1" +var_ram="1024" +var_os="debian" +var_version="12" +variables +color +catch_errors + +function default_settings() { + CT_TYPE="1" + PW="" + CT_ID=$NEXTID + HN=$NSAPP + DISK_SIZE="$var_disk" + CORE_COUNT="$var_cpu" + RAM_SIZE="$var_ram" + BRG="vmbr0" + NET="dhcp" + GATE="" + APT_CACHER="" + APT_CACHER_IP="" + DISABLEIP6="no" + MTU="" + SD="" + NS="" + MAC="" + VLAN="" + SSH="no" + VERB="no" + echo_default +} + +function update_script() { +header_info +if [[ ! -d /opt/wallos ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then + read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt + [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit +fi +RELEASE=$(curl -s https://api.github.com/repos/ellite/Wallos/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 + msg_info "Updating ${APP} to ${RELEASE}" + cd /opt + wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" + mv /opt/wallos/db/wallos.db /opt/wallos.db + unzip -q v${RELEASE}.zip + mv Wallos-${RELEASE} /opt/wallos + rm -rf /opt/wallos/db/wallos.empty.db + mv /opt/wallos.db /opt/wallos/db/wallos.db + chown -R www-data:www-data /opt/wallos + chmod -R 755 /opt/wallos + curl http://localhost/endpoints/db/migrate.php &>/dev/null + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP}" + + msg_info "Reload Apache2" + systemctl reload apache2 + msg_ok "Apache2 Reloaded" + + msg_info "Cleaning Up" + rm -R /opt/v${RELEASE}.zip + msg_ok "Cleaned" + msg_ok "Updated Successfully" +else + msg_ok "No update required. ${APP} is already at ${RELEASE}" +fi +exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${APP} should be reachable by going to the following URL. + ${BL}http://${IP} ${CL} \n" diff --git a/ct/zabbix.sh b/ct/zabbix.sh index b6b09e966..a38d6ea84 100644 --- a/ct/zabbix.sh +++ b/ct/zabbix.sh @@ -58,6 +58,7 @@ if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then msg_error "No ${APP} Installa msg_info "Updating $APP LXC" apt-get update &>/dev/null apt-get -y upgrade &>/dev/null +systemctl restart zabbix-server msg_ok "Updated $APP LXC" exit } diff --git a/ct/zoraxy.sh b/ct/zoraxy.sh index 87defa0c6..9eea07eb9 100644 --- a/ct/zoraxy.sh +++ b/ct/zoraxy.sh @@ -20,7 +20,7 @@ header_info echo -e "Loading..." APP="Zoraxy" var_disk="6" -var_cpu="4" +var_cpu="2" var_ram="2048" var_os="debian" var_version="12" @@ -54,30 +54,28 @@ function default_settings() { function update_script() { header_info -if [[ ! -d /opt/zoraxy/src ]]; then msg_error "No ${APP} Installation Found!"; exit; fi -whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75 -msg_info "Updating $APP" -systemctl stop zoraxy -cd /opt/zoraxy/src -systemctl stop zoraxy -if git pull | grep -q 'Already up to date.'; then - msg_ok "Already up to date. No update required." -else - go mod tidy - go build +if [[ ! -d /opt/zoraxy/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +RELEASE=$(curl -s https://api.github.com/repos/tobychui/zoraxy/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 + msg_info "Updating $APP to ${RELEASE}" + systemctl stop zoraxy + wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64" + rm /opt/zoraxy/zoraxy + mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy + chmod +x /opt/zoraxy/zoraxy + systemctl start zoraxy + echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP" -fi -systemctl start zoraxy -exit +else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start build_container description -msg_info "Setting Container to Normal Resources" -pct set $CTID -cores 2 -msg_ok "Set Container to Normal Resources" msg_ok "Completed Successfully!\n" echo -e "${APP} should be reachable by going to the following URL. ${BL}http://${IP}:8000${CL} \n" diff --git a/install/actualbudget-install.sh b/install/actualbudget-install.sh index ab51b2063..4141f4d8e 100644 --- a/install/actualbudget-install.sh +++ b/install/actualbudget-install.sh @@ -36,6 +36,13 @@ msg_ok "Installed Node.js" msg_info "Installing Actual Budget" $STD git clone https://github.com/actualbudget/actual-server.git /opt/actualbudget +mkdir -p /opt/actualbudget/server-files +chown -R root:root /opt/actualbudget/server-files +chmod 755 /opt/actualbudget/server-files +cat < /opt/actualbudget/.env +ACTUAL_UPLOAD_DIR=/opt/actualbudget/server-files +PORT=5006 +EOF cd /opt/actualbudget $STD yarn install msg_ok "Installed Actual Budget" @@ -47,9 +54,14 @@ Description=Actual Budget Service After=network.target [Service] -Type=exec +Type=simple +User=root +Group=root WorkingDirectory=/opt/actualbudget +EnvironmentFile=/opt/actualbudget/.env ExecStart=/usr/bin/yarn start +Restart=always +RestartSec=10 [Install] WantedBy=multi-user.target diff --git a/install/adventurelog-install.sh b/install/adventurelog-install.sh new file mode 100644 index 000000000..f4913880b --- /dev/null +++ b/install/adventurelog-install.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: MickLesk (Canbiz) +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE +# Source: https://github.com/seanmorley15/AdventureLog + +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 \ + gpg \ + curl \ + sudo \ + mc \ + gdal-bin \ + libgdal-dev \ + git \ + python3-venv \ + python3-pip +msg_ok "Installed Dependencies" + +msg_info "Setting up Node.js Repository" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +msg_ok "Set up Node.js Repository" + +msg_info "Setting up PostgreSQL Repository" +curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg +echo "deb https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" >/etc/apt/sources.list.d/pgdg.list +msg_ok "Set up PostgreSQL Repository" + +msg_info "Installing Node.js" +$STD apt-get update +$STD apt-get install -y nodejs +$STD npm install -g pnpm +msg_ok "Installed Node.js" + +msg_info "Install/Set up PostgreSQL Database" +$STD apt-get install -y postgresql-16 postgresql-16-postgis +DB_NAME="adventurelog_db" +DB_USER="adventurelog_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)" +$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 "CREATE EXTENSION IF NOT EXISTS postgis;" $DB_NAME +$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 "AdventureLog-Credentials" + echo "AdventureLog Database User: $DB_USER" + echo "AdventureLog Database Password: $DB_PASS" + echo "AdventureLog Database Name: $DB_NAME" + echo "AdventureLog Secret: $SECRET_KEY" +} >> ~/adventurelog.creds +msg_ok "Set up PostgreSQL" + +msg_info "Installing AdventureLog (Patience)" +DJANGO_ADMIN_USER="djangoadmin" +DJANGO_ADMIN_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" +LOCAL_IP="$(hostname -I | awk '{print $1}')" +cd /opt +RELEASE=$(curl -s https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" +unzip -q v${RELEASE}.zip +mv AdventureLog-${RELEASE} /opt/adventurelog +cat < /opt/adventurelog/backend/server/.env +PGHOST='localhost' +PGDATABASE='${DB_NAME}' +PGUSER='${DB_USER}' +PGPASSWORD='${DB_PASS}' +SECRET_KEY='${SECRET_KEY}' +PUBLIC_URL='http://$LOCAL_IP:8000' +DEBUG=True +FRONTEND_URL='http://$LOCAL_IP:3000' +CSRF_TRUSTED_ORIGINS='http://127.0.0.1:3000,http://localhost:3000,http://$LOCAL_IP:3000' +DJANGO_ADMIN_USERNAME='${DJANGO_ADMIN_USER}' +DJANGO_ADMIN_PASSWORD='${DJANGO_ADMIN_PASS}' +DISABLE_REGISTRATION=False +# EMAIL_BACKEND='email' +# EMAIL_HOST='smtp.gmail.com' +# EMAIL_USE_TLS=False +# EMAIL_PORT=587 +# EMAIL_USE_SSL=True +# EMAIL_HOST_USER='user' +# EMAIL_HOST_PASSWORD='password' +# DEFAULT_FROM_EMAIL='user@example.com' +EOF +cd /opt/adventurelog/backend/server +mkdir -p /opt/adventurelog/backend/server/media +$STD pip install --upgrade pip +$STD pip install -r requirements.txt +$STD python3 manage.py collectstatic --noinput +$STD python3 manage.py migrate +$STD python3 manage.py download-countries +cat < /opt/adventurelog/frontend/.env +PUBLIC_SERVER_URL=http://$LOCAL_IP:8000 +BODY_SIZE_LIMIT=Infinity +ORIGIN='http://$LOCAL_IP:3000' +EOF +cd /opt/adventurelog/frontend +$STD pnpm i +$STD pnpm build +echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" +msg_ok "Installed AdventureLog" + +msg_info "Setting up Django Admin" +$STD python3 /opt/adventurelog/backend/server/manage.py shell << EOF +from django.contrib.auth import get_user_model +UserModel = get_user_model() +user = UserModel.objects.create_user('$DJANGO_ADMIN_USER', password='$DJANGO_ADMIN_PASS') +user.is_superuser = True +user.is_staff = True +user.save() +EOF +{ + echo "" + echo "Django-Credentials" + echo "Django Admin User: $DJANGO_ADMIN_USER" + echo "Django Admin Password: $DJANGO_ADMIN_PASS" +} >> ~/adventurelog.creds +msg_ok "Setup Django Admin" + +msg_info "Creating Service" +cat </etc/systemd/system/adventurelog-backend.service +[Unit] +Description=AdventureLog Backend Service +After=network.target postgresql.service + +[Service] +WorkingDirectory=/opt/adventurelog/backend/server +ExecStart=python3 manage.py runserver 0.0.0.0:8000 +Restart=always +EnvironmentFile=/opt/adventurelog/backend/server/.env + +[Install] +WantedBy=multi-user.target +EOF +cat </etc/systemd/system/adventurelog-frontend.service +[Unit] +Description=AdventureLog SvelteKit Frontend Service +After=network.target + +[Service] +WorkingDirectory=/opt/adventurelog/frontend +ExecStart=/usr/bin/node build 127.0.0.1:3000 +Restart=always +EnvironmentFile=/opt/adventurelog/frontend/.env + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now adventurelog-backend.service +systemctl enable -q --now adventurelog-frontend.service +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +rm -rf /opt/v${RELEASE}.zip +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" \ No newline at end of file diff --git a/install/gotify-install.sh b/install/gotify-install.sh index c734a976b..7c6333e9f 100644 --- a/install/gotify-install.sh +++ b/install/gotify-install.sh @@ -29,7 +29,10 @@ wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-li $STD unzip gotify-linux-arm64.zip rm -rf gotify-linux-arm64.zip chmod +x gotify-linux-arm64 +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +msg_ok "Installed Gotify" +msg_info "Creating Service" cat </etc/systemd/system/gotify.service [Unit] Description=Gotify @@ -48,7 +51,7 @@ RestartSec=3 WantedBy=multi-user.target EOF systemctl enable -q --now gotify -msg_ok "Installed Gotify" +msg_ok "Created Service" motd_ssh customize diff --git a/install/memos-install.sh b/install/memos-install.sh new file mode 100644 index 000000000..f41d6f275 --- /dev/null +++ b/install/memos-install.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: MickLesk (Canbiz) +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE +# Source: https://github.com/usememos/memos + +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 \ + build-essential \ + git \ + curl \ + sudo \ + tzdata \ + mc +msg_ok "Installed Dependencies" + +msg_info "Setting up Node.js Repository" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +msg_ok "Set up Node.js Repository" + +msg_info "Installing Node.js" +$STD apt-get update +$STD apt-get install -y nodejs +msg_ok "Installed Node.js" + +msg_info "Installing pnpm" +$STD npm install -g pnpm +msg_ok "Installed pnpm" + +msg_info "Installing Golang" +set +o pipefail +GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1) +wget -q https://golang.org/dl/$GOLANG +tar -xzf $GOLANG -C /usr/local +ln -s /usr/local/go/bin/go /usr/local/bin/go +set -o pipefail +msg_ok "Installed Golang" + +msg_info "Installing Memos (Patience)" +mkdir -p /opt/memos_data +$STD sudo git clone https://github.com/usememos/memos.git /opt/memos +cd /opt/memos/web +$STD pnpm i --frozen-lockfile +$STD pnpm build +cd /opt/memos +mkdir -p /opt/memos/server/dist +cp -r web/dist/* /opt/memos/server/dist/ +cp -r web/dist/* /opt/memos/server/router/frontend/dist/ +$STD go build -o /opt/memos/memos -tags=embed bin/memos/main.go +msg_ok "Installed Memos" + +msg_info "Creating Service" +cat </etc/systemd/system/memos.service +[Unit] +Description=Memos Server +After=network.target + +[Service] +ExecStart=/opt/memos/memos +Environment="MEMOS_MODE=prod" +Environment="MEMOS_PORT=9030" +Environment="MEMOS_DATA=/opt/memos_data" +WorkingDirectory=/opt/memos +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now memos.service +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/nzbget-install.sh b/install/nzbget-install.sh new file mode 100644 index 000000000..b4f95b912 --- /dev/null +++ b/install/nzbget-install.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: havardthom +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +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 curl +$STD apt-get install -y sudo +$STD apt-get install -y mc +$STD apt-get install -y gpg +$STD apt-get install -y par2 +cat </etc/apt/sources.list.d/non-free.list +deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware +EOF +$STD apt-get update +$STD apt-get install -y unrar +rm /etc/apt/sources.list.d/non-free.list +msg_ok "Installed Dependencies" + +msg_info "Installing NZBGet" +mkdir -p /etc/apt/keyrings +curl -fsSL https://nzbgetcom.github.io/nzbgetcom.asc | gpg --dearmor -o /etc/apt/keyrings/nzbgetcom.gpg +echo "deb [signed-by=/etc/apt/keyrings/nzbgetcom.gpg] https://nzbgetcom.github.io/deb stable main" >/etc/apt/sources.list.d/nzbgetcom.list +$STD apt-get update +$STD apt-get install -y nzbget +msg_ok "Installed NZBGet" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/ollama-install.sh b/install/ollama-install.sh new file mode 100644 index 000000000..ea8a849a2 --- /dev/null +++ b/install/ollama-install.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: havardthom +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE + +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 curl +$STD apt-get install -y sudo +$STD apt-get install -y mc +$STD apt-get install -y gpg +$STD apt-get install -y git +$STD apt-get install -y build-essential +$STD apt-get install -y pkg-config +$STD apt-get install -y cmake +msg_ok "Installed Dependencies" + +msg_info "Installing Golang" +$STD wget https://golang.org/dl/go1.23.2.linux-amd64.tar.gz +$STD tar -xzf go1.23.2.linux-amd64.tar.gz -C /usr/local +$STD ln -s /usr/local/go/bin/go /usr/local/bin/go +rm -rf go1.23.2.linux-amd64.tar.gz +msg_ok "Installed Golang" + +msg_info "Setting up Intel® Repositories" +mkdir -p /etc/apt/keyrings +curl -fsSL https://repositories.intel.com/gpu/intel-graphics.key | gpg --dearmor -o /etc/apt/keyrings/intel-graphics.gpg +echo "deb [arch=amd64,i386 signed-by=/etc/apt/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" >/etc/apt/sources.list.d/intel-gpu-jammy.list +curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor -o /etc/apt/keyrings/oneapi-archive-keyring.gpg +echo "deb [signed-by=/etc/apt/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" >/etc/apt/sources.list.d/oneAPI.list +$STD apt-get update +msg_ok "Set up Intel® Repositories" + +msg_info "Setting Up Hardware Acceleration" +$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools,intel-level-zero-gpu,level-zero,level-zero-dev} +if [[ "$CTTYPE" == "0" ]]; then + chgrp video /dev/dri + chmod 755 /dev/dri + chmod 660 /dev/dri/* + $STD adduser $(id -u -n) video + $STD adduser $(id -u -n) render +fi +msg_ok "Set Up Hardware Acceleration" + +msg_info "Installing Intel® oneAPI Base Toolkit (Patience)" +$STD apt-get install -y --no-install-recommends intel-basekit-2024.1 +msg_ok "Installed Intel® oneAPI Base Toolkit" + +msg_info "Installing Ollama (Patience)" +$STD git clone https://github.com/ollama/ollama.git /opt/ollama +cd /opt/ollama +$STD go generate ./... +$STD go build . +msg_ok "Installed Ollama" + +msg_info "Creating Service" +cat </etc/systemd/system/ollama.service +[Unit] +Description=Ollama Service +After=network-online.target + +[Service] +Type=exec +ExecStart=/opt/ollama/ollama serve +Environment=HOME=$HOME +Environment=OLLAMA_INTEL_GPU=true +Environment=OLLAMA_HOST=0.0.0.0 +Environment=OLLAMA_NUM_GPU=999 +Environment=SYCL_CACHE_PERSISTENT=1 +Environment=ZES_ENABLE_SYSMAN=1 +Restart=always +RestartSec=3 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now ollama.service +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/install/openwebui-install.sh b/install/openwebui-install.sh index a5edd8640..31930cb59 100644 --- a/install/openwebui-install.sh +++ b/install/openwebui-install.sh @@ -49,11 +49,40 @@ cp .env.example .env cat </opt/open-webui/.env ENV=prod ENABLE_OLLAMA_API=false +OLLAMA_BASE_URL=http://0.0.0.0:11434 EOF $STD npm install +export NODE_OPTIONS="--max-old-space-size=3584" $STD npm run build msg_ok "Installed Open WebUI" +read -r -p "Would you like to add Ollama? " prompt +if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Ollama" + curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz + tar -C /usr -xzf ollama-linux-amd64.tgz + rm -rf ollama-linux-amd64.tgz + cat </etc/systemd/system/ollama.service +[Unit] +Description=Ollama Service +After=network-online.target + +[Service] +Type=exec +ExecStart=/usr/bin/ollama serve +Environment=HOME=$HOME +Environment=OLLAMA_HOST=0.0.0.0 +Restart=always +RestartSec=3 + +[Install] +WantedBy=multi-user.target +EOF + systemctl enable -q --now ollama.service + sed -i 's/ENABLE_OLLAMA_API=false/ENABLE_OLLAMA_API=true/g' /opt/open-webui/.env + msg_ok "Installed Ollama" +fi + msg_info "Creating Service" cat </etc/systemd/system/open-webui.service [Unit] diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index 34a8abc44..a70d5b232 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -42,7 +42,7 @@ $STD apt-get install -y --no-install-recommends \ openssh-server msg_ok "Installed Dependencies" -msg_info "Installing Python3 Dependencies" +msg_info "Installing Python3 Dependencies (Patience)" $STD apt-get install -y --no-install-recommends \ python3 \ python3-pip \ @@ -54,7 +54,6 @@ msg_ok "Installed Python3 Dependencies" msg_info "Installing OCR Dependencies (Patience)" $STD apt-get install -y --no-install-recommends \ unpaper \ - ghostscript \ icc-profiles-free \ qpdf \ liblept5 \ @@ -63,6 +62,14 @@ $STD apt-get install -y --no-install-recommends \ zlib1g \ tesseract-ocr \ tesseract-ocr-eng + +cd /tmp +wget -q https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz +$STD tar -xzf ghostscript-10.04.0.tar.gz +cd ghostscript-10.04.0 +$STD ./configure +$STD make +$STD sudo make install msg_ok "Installed OCR Dependencies" msg_info "Installing JBIG2" @@ -224,6 +231,7 @@ customize msg_info "Cleaning up" rm -rf /opt/paperless/docker +rm -rf /tmp/ghostscript* $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/install/pihole-install.sh b/install/pihole-install.sh index 62b866cbe..1b87d0f2b 100644 --- a/install/pihole-install.sh +++ b/install/pihole-install.sh @@ -51,7 +51,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then cat </etc/unbound/unbound.conf.d/pi-hole.conf server: verbosity: 0 - interface: 0.0.0.0 + interface: 127.0.0.1 port: 5335 do-ip6: no do-ip4: yes diff --git a/install/wallos-install.sh b/install/wallos-install.sh new file mode 100644 index 000000000..0407b05fb --- /dev/null +++ b/install/wallos-install.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 tteck +# Author: tteck +# Co-Author: MickLesk (Canbiz) +# License: MIT +# https://github.com/tteck/Proxmox/raw/main/LICENSE +# Source: https://github.com/ellite/wallos + +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 \ + curl \ + sudo \ + mc \ + apache2 \ + libapache2-mod-php \ + php8.2-{mbstring,gd,curl,intl,imagick,bz2,sqlite3,zip,xml} +msg_ok "Installed Dependencies" + +msg_info "Installing Wallos (Patience)" +cd /opt +RELEASE=$(curl -s https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" +unzip -q v${RELEASE}.zip +mv Wallos-${RELEASE} /opt/wallos +cd /opt/wallos +mv /opt/wallos/db/wallos.empty.db /opt/wallos/db/wallos.db +chown -R www-data:www-data /opt/wallos +chmod -R 755 /opt/wallos +echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" + +cat </etc/apache2/sites-available/wallos.conf + + ServerAdmin webmaster@localhost + DocumentRoot /opt/wallos + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + + ErrorLog \${APACHE_LOG_DIR}/wallos_error.log + CustomLog \${APACHE_LOG_DIR}/wallos_access.log combined + +EOF +$STD a2ensite wallos.conf +$STD a2dissite 000-default.conf +$STD systemctl reload apache2 +$STD curl http://localhost/endpoints/db/migrate.php +msg_ok "Installed Wallos" + +msg_info "Setting up Crontabs" +cat < /opt/wallos.cron +0 1 * * * php /opt/wallos/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1 +0 2 * * * php /opt/wallos/endpoints/cronjobs/updateexchange.php >> /var/log/cron/updateexchange.log 2>&1 +0 8 * * * php /opt/wallos/endpoints/cronjobs/sendcancellationnotifications.php >> /var/log/cron/sendcancellationnotifications.log 2>&1 +0 9 * * * php /opt/wallos/endpoints/cronjobs/sendnotifications.php >> /var/log/cron/sendnotifications.log 2>&1 +*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1 +*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1 +0 */6 * * * php /opt/wallos/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1 +EOF +crontab /opt/wallos.cron +msg_ok "Crontabs setup" + +motd_ssh +customize + +msg_info "Cleaning up" +rm -rf /opt/v${RELEASE}.zip +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" \ No newline at end of file diff --git a/install/zoraxy-install.sh b/install/zoraxy-install.sh index a59d55ed3..3b455eb20 100644 --- a/install/zoraxy-install.sh +++ b/install/zoraxy-install.sh @@ -17,24 +17,18 @@ msg_info "Installing Dependencies" $STD apt-get install -y curl $STD apt-get install -y sudo $STD apt-get install -y mc -$STD apt-get install -y git $STD apt-get install -y wget $STD apt-get install -y openssh-server msg_ok "Installed Dependencies" -msg_info "Installing Golang" -set +o pipefail -wget -q https://golang.org/dl/go1.22.2.linux-arm64.tar.gz -tar -xzf go1.22.2.linux-arm64.tar.gz -C /usr/local -$STD ln -s /usr/local/go/bin/go /usr/local/bin/go -set -o pipefail -msg_ok "Installed Golang" - msg_info "Installing Zoraxy (Patience)" -$STD git clone https://github.com/tobychui/zoraxy /opt/zoraxy -cd /opt/zoraxy/src -$STD go mod tidy -$STD go build +RELEASE=$(curl -s https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_arm64" +mkdir -p /opt/zoraxy +mv zoraxy_linux_arm64 /opt/zoraxy/zoraxy +chmod +x /opt/zoraxy/zoraxy +ln -s /opt/zoraxy/zoraxy /usr/local/bin/zoraxy +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Zoraxy" msg_info "Creating Service" @@ -44,8 +38,8 @@ Description=General purpose request proxy and forwarding tool After=syslog.target network-online.target [Service] -ExecStart=/opt/zoraxy/src/./zoraxy -WorkingDirectory=/opt/zoraxy/src/ +ExecStart=/opt/zoraxy/./zoraxy +WorkingDirectory=/opt/zoraxy/ Restart=always [Install] @@ -58,7 +52,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf go1.22.2.linux-arm64.tar.gz $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/misc/build.func b/misc/build.func index 318e9800e..3b6ccccf4 100644 --- a/misc/build.func +++ b/misc/build.func @@ -491,7 +491,7 @@ install_script() { start() { if command -v pveversion >/dev/null 2>&1; then - if ! (whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC" --yesno "To ensure the safety of your system, please use ONLY https://tteck.github.io/Proxmox/ or https://pimox_scripts.com\n\nThis will create a New ${APP} LXC. Proceed?" 10 90); then + if ! (whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC" --yesno "This will create a New ${APP} LXC. Proceed?" 10 58); then clear echo -e "⚠ User exited script \n" exit @@ -577,7 +577,7 @@ EOF fi if [ "$CT_TYPE" == "0" ]; then - if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" ]]; then + if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" ]]; then cat <>$LXC_CONFIG # VAAPI hardware transcoding lxc.cgroup2.devices.allow: c 226:0 rwm @@ -589,7 +589,7 @@ lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,creat EOF fi else - if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" ]]; then + if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" ]]; then if [[ -e "/dev/dri/renderD128" ]]; then if [[ -e "/dev/dri/card0" ]]; then cat <>$LXC_CONFIG