mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			51 Commits
		
	
	
		
			2025-07-31
			...
			2025-08-02
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					77c37a5552 | ||
| 
						 | 
					8efcab38a4 | ||
| 
						 | 
					201782552c | ||
| 
						 | 
					7433f7df0c | ||
| 
						 | 
					dde882f9e5 | ||
| 
						 | 
					b8bdf56297 | ||
| 
						 | 
					df504635a5 | ||
| 
						 | 
					158bdfc88e | ||
| 
						 | 
					4eaffda82d | ||
| 
						 | 
					074bb615e7 | ||
| 
						 | 
					7c0869e29b | ||
| 
						 | 
					7862d23866 | ||
| 
						 | 
					e1669c22de | ||
| 
						 | 
					00a69678c0 | ||
| 
						 | 
					1c2ccf81d2 | ||
| 
						 | 
					88483b7dab | ||
| 
						 | 
					7c41c51bfe | ||
| 
						 | 
					ecf01637a5 | ||
| 
						 | 
					3068ae1383 | ||
| 
						 | 
					ca8cddb788 | ||
| 
						 | 
					750397e1af | ||
| 
						 | 
					30172379cd | ||
| 
						 | 
					f07b273be3 | ||
| 
						 | 
					e5c673df44 | ||
| 
						 | 
					61fb45a0b8 | ||
| 
						 | 
					084ceae9d9 | ||
| 
						 | 
					054a963ca2 | ||
| 
						 | 
					b366ffac34 | ||
| 
						 | 
					29747ab8b8 | ||
| 
						 | 
					12b904a014 | ||
| 
						 | 
					fad4d2e0d7 | ||
| 
						 | 
					899e576426 | ||
| 
						 | 
					0f29e5672c | ||
| 
						 | 
					3e1d43c29a | ||
| 
						 | 
					ff695fa4ea | ||
| 
						 | 
					93b80362f6 | ||
| 
						 | 
					52e08e5474 | ||
| 
						 | 
					b9408ef06f | ||
| 
						 | 
					4652338536 | ||
| 
						 | 
					3c7c540576 | ||
| 
						 | 
					a0502e00db | ||
| 
						 | 
					6f56655ad6 | ||
| 
						 | 
					6de8d50969 | ||
| 
						 | 
					da217bb3e0 | ||
| 
						 | 
					f80c7008a8 | ||
| 
						 | 
					afd577db9e | ||
| 
						 | 
					47ab850e5b | ||
| 
						 | 
					654bd1f0d5 | ||
| 
						 | 
					b6bd8a6de4 | ||
| 
						 | 
					ae7fe6e3e1 | ||
| 
						 | 
					3bb787d746 | 
							
								
								
									
										43
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,51 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-08-03
 | 
			
		||||
 | 
			
		||||
## 2025-08-02
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Alternative connectivity checks for LXC [@mariano-dagostino](https://github.com/mariano-dagostino) ([#6472](https://github.com/community-scripts/ProxmoxVE/pull/6472))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Immich: fix copy error during install [@vhsdream](https://github.com/vhsdream) ([#6497](https://github.com/community-scripts/ProxmoxVE/pull/6497))
 | 
			
		||||
    - MagicMirror: Fix install process [@tremor021](https://github.com/tremor021) ([#6492](https://github.com/community-scripts/ProxmoxVE/pull/6492))
 | 
			
		||||
    - chore: BookLore repo change [@vhsdream](https://github.com/vhsdream) ([#6493](https://github.com/community-scripts/ProxmoxVE/pull/6493))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - VictoriaMetrics: Make VictoriaLogs optional add-on [@tremor021](https://github.com/tremor021) ([#6489](https://github.com/community-scripts/ProxmoxVE/pull/6489))
 | 
			
		||||
 | 
			
		||||
## 2025-08-01
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fumadocs: add git as dependency [@MickLesk](https://github.com/MickLesk) ([#6459](https://github.com/community-scripts/ProxmoxVE/pull/6459))
 | 
			
		||||
    - Immich: Fix immich-admin script; other fixes | pin to v.137.3 [@vhsdream](https://github.com/vhsdream) ([#6443](https://github.com/community-scripts/ProxmoxVE/pull/6443))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Re-Add: Suwayomi-Server [@MickLesk](https://github.com/MickLesk) ([#6458](https://github.com/community-scripts/ProxmoxVE/pull/6458))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Update homepage.sh to use setup_nodejs [@burgerga](https://github.com/burgerga) ([#6462](https://github.com/community-scripts/ProxmoxVE/pull/6462))
 | 
			
		||||
    - Refactor: Owncast [@tremor021](https://github.com/tremor021) ([#6434](https://github.com/community-scripts/ProxmoxVE/pull/6434))
 | 
			
		||||
    - Refactor: MediaMTX [@tremor021](https://github.com/tremor021) ([#6406](https://github.com/community-scripts/ProxmoxVE/pull/6406))
 | 
			
		||||
    - Refactor: LubeLogger [@tremor021](https://github.com/tremor021) ([#6400](https://github.com/community-scripts/ProxmoxVE/pull/6400))
 | 
			
		||||
    - Refactor: MagicMirror [@tremor021](https://github.com/tremor021) ([#6402](https://github.com/community-scripts/ProxmoxVE/pull/6402))
 | 
			
		||||
    - Refactor: Manage My Damn Life [@tremor021](https://github.com/tremor021) ([#6403](https://github.com/community-scripts/ProxmoxVE/pull/6403))
 | 
			
		||||
    - Refactor: Meilisearch [@tremor021](https://github.com/tremor021) ([#6407](https://github.com/community-scripts/ProxmoxVE/pull/6407))
 | 
			
		||||
    - Refactor: NodeBB [@tremor021](https://github.com/tremor021) ([#6419](https://github.com/community-scripts/ProxmoxVE/pull/6419))
 | 
			
		||||
    - Refactor: oauth2-proxy [@tremor021](https://github.com/tremor021) ([#6421](https://github.com/community-scripts/ProxmoxVE/pull/6421))
 | 
			
		||||
    - Refactor: Outline [@tremor021](https://github.com/tremor021) ([#6424](https://github.com/community-scripts/ProxmoxVE/pull/6424))
 | 
			
		||||
    - Refactor: Overseerr [@tremor021](https://github.com/tremor021) ([#6425](https://github.com/community-scripts/ProxmoxVE/pull/6425))
 | 
			
		||||
 | 
			
		||||
## 2025-07-31
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/adityachandelgit/BookLore
 | 
			
		||||
# Source: https://github.com/booklore-app/BookLore
 | 
			
		||||
 | 
			
		||||
APP="BookLore"
 | 
			
		||||
var_tags="${var_tags:-books;library}"
 | 
			
		||||
@@ -29,13 +29,13 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.booklore 2>/dev/null)" ]] || [[ ! -f ~/.booklore ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop booklore
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "booklore" "adityachandelgit/BookLore"
 | 
			
		||||
    fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Frontend"
 | 
			
		||||
    cd /opt/booklore/booklore-ui
 | 
			
		||||
@@ -45,7 +45,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Backend"
 | 
			
		||||
    cd /opt/booklore/booklore-api
 | 
			
		||||
    APP_VERSION=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
    APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
    yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
 | 
			
		||||
    $STD ./gradlew clean build --no-daemon
 | 
			
		||||
    mkdir -p /opt/booklore/dist
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@ function update_script() {
 | 
			
		||||
    mv /opt/.env /opt/docmost/.env
 | 
			
		||||
    mv /opt/data /opt/docmost/data
 | 
			
		||||
    $STD pnpm install --force
 | 
			
		||||
    $STD pnpm nx run server:build # Dirty fix https://github.com/community-scripts/ProxmoxVE/issues/6377
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,9 @@ function update_script() {
 | 
			
		||||
    msg_error "Project directory does not exist: $PROJECT_DIR"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v git &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y git
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping service $SERVICE_NAME"
 | 
			
		||||
  systemctl stop "$SERVICE_NAME"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,14 +27,9 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
 | 
			
		||||
    if ! command -v npm >/dev/null 2>&1; then
 | 
			
		||||
      echo "Installing NPM..."
 | 
			
		||||
      $STD apt-get install -y npm
 | 
			
		||||
      $STD npm install -g pnpm
 | 
			
		||||
      echo "Installed NPM..."
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  # ensure that jq is installed
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD msg_info "Installing jq..."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -58,7 +58,7 @@ function update_script() {
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries updated"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE="1.136.0"
 | 
			
		||||
  RELEASE="1.137.3"
 | 
			
		||||
  #RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
@@ -99,11 +99,25 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
 | 
			
		||||
  if grep -qs "set -a" "$APP_DIR"/bin/start.sh; then
 | 
			
		||||
    cp "$APP_DIR"/bin/start.sh "$INSTALL_DIR"
 | 
			
		||||
  else
 | 
			
		||||
    cat <<EOF >"$INSTALL_DIR"/start.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -a
 | 
			
		||||
. "$INSTALL_DIR"/.env
 | 
			
		||||
set +a
 | 
			
		||||
 | 
			
		||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x "$INSTALL_DIR"/start.sh
 | 
			
		||||
  fi
 | 
			
		||||
  rm -rf "${APP_DIR:?}"/*
 | 
			
		||||
  mkdir -p "$ML_DIR"
 | 
			
		||||
  rm -rf "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
 | 
			
		||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} web and microservices"
 | 
			
		||||
  cd "$SRC_DIR"/server
 | 
			
		||||
@@ -114,6 +128,10 @@ function update_script() {
 | 
			
		||||
  $STD npm ci
 | 
			
		||||
  $STD npm run build
 | 
			
		||||
  $STD npm prune --omit=dev --omit=optional
 | 
			
		||||
  cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
 | 
			
		||||
  cp package.json "$APP_DIR"/bin
 | 
			
		||||
  mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
 | 
			
		||||
  sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
			
		||||
  cd "$SRC_DIR"/open-api/typescript-sdk
 | 
			
		||||
  $STD npm ci
 | 
			
		||||
  $STD npm run build
 | 
			
		||||
@@ -121,7 +139,6 @@ function update_script() {
 | 
			
		||||
  $STD npm ci
 | 
			
		||||
  $STD npm run build
 | 
			
		||||
  cd "$SRC_DIR"
 | 
			
		||||
  cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,bin/start.sh} "$APP_DIR"/
 | 
			
		||||
  cp -a web/build "$APP_DIR"/www
 | 
			
		||||
  cp LICENSE "$APP_DIR"
 | 
			
		||||
  cd "$APP_DIR"
 | 
			
		||||
@@ -151,8 +168,8 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
 | 
			
		||||
  cd "$APP_DIR"
 | 
			
		||||
  grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
 | 
			
		||||
  grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
 | 
			
		||||
  grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
 | 
			
		||||
  grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
 | 
			
		||||
  sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
 | 
			
		||||
  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
 | 
			
		||||
  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
 | 
			
		||||
@@ -214,6 +231,7 @@ function compile_libjxl() {
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
    sed -i "s/libjxl: .*$/libjxl: $LIBJXL_REVISION/" ~/.immich_library_revisions
 | 
			
		||||
    msg_ok "Recompiled libjxl"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
@@ -248,6 +266,7 @@ function compile_libheif() {
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/build
 | 
			
		||||
    sed -i "s/libheif: .*$/libheif: $LIBHEIF_REVISION/" ~/.immich_library_revisions
 | 
			
		||||
    msg_ok "Recompiled libheif"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
@@ -269,6 +288,7 @@ function compile_libraw() {
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    sed -i "s/libraw: .*$/libraw: $LIBRAW_REVISION/" ~/.immich_library_revisions
 | 
			
		||||
    msg_ok "Recompiled libraw"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
@@ -288,6 +308,7 @@ function compile_imagemagick() {
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    sed -i "s/imagemagick: .*$/imagemagick: $IMAGEMAGICK_REVISION/" ~/.immich_library_revisions
 | 
			
		||||
    msg_ok "Recompiled ImageMagick"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
@@ -308,6 +329,7 @@ function compile_libvips() {
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/build
 | 
			
		||||
    sed -i "s/libvips: .*$/libvips: $LIBVIPS_REVISION/" ~/.immich_library_revisions
 | 
			
		||||
    msg_ok "Recompiled libvips"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,16 +27,17 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f ~/.lubelogger ]] || [[ "${RELEASE}" != "$(cat ~/.lubelogger)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop lubelogger
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip" -o $(basename "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip")
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mkdir -p /tmp/lubeloggerData/data
 | 
			
		||||
    cp /opt/lubelogger/appsettings.json /tmp/lubeloggerData/appsettings.json
 | 
			
		||||
    cp -r /opt/lubelogger/data/ /tmp/lubeloggerData/
 | 
			
		||||
@@ -50,20 +51,23 @@ function update_script() {
 | 
			
		||||
    [[ -e /opt/lubelogger/wwwroot/temp ]] && cp -r /opt/lubelogger/wwwroot/temp /tmp/lubeloggerData/data/
 | 
			
		||||
    [[ -e /opt/lubelogger/log ]] && cp -r /opt/lubelogger/log /tmp/lubeloggerData/
 | 
			
		||||
    rm -rf /opt/lubelogger
 | 
			
		||||
    $STD unzip LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip -d lubelogger
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "lubelogger" "hargata/lubelog" "prebuild" "latest" "/opt/lubelogger" "LubeLogger*linux_x64.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring LubeLogger"
 | 
			
		||||
    chmod 700 /opt/lubelogger/CarCareTracker
 | 
			
		||||
    cp -rf /tmp/lubeloggerData/* /opt/lubelogger/
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured LubeLogger"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start lubelogger
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
    rm -rf /tmp/lubeloggerData
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
@@ -27,16 +27,17 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f ~/.magicmirror ]] || [[ "${RELEASE}" != "$(cat ~/.magicmirror)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop magicmirror
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get upgrade -y
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    rm -rf /opt/magicmirror-backup
 | 
			
		||||
    mkdir /opt/magicmirror-backup
 | 
			
		||||
    cp /opt/magicmirror/config/config.js /opt/magicmirror-backup
 | 
			
		||||
@@ -44,27 +45,24 @@ function update_script() {
 | 
			
		||||
      cp /opt/magicmirror/css/custom.css /opt/magicmirror-backup
 | 
			
		||||
    fi
 | 
			
		||||
    cp -r /opt/magicmirror/modules /opt/magicmirror-backup
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
curl -fsSL "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    rm -rf /opt/magicmirror
 | 
			
		||||
    mv MagicMirror-${RELEASE} /opt/magicmirror
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "magicmirror" "MagicMirrorOrg/MagicMirror" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring MagicMirror"
 | 
			
		||||
    cd /opt/magicmirror
 | 
			
		||||
    sed -i -E 's/("postinstall": )".*"/\1""/; s/("prepare": )".*"/\1""/' package.json
 | 
			
		||||
    $STD npm run install-mm
 | 
			
		||||
    cp /opt/magicmirror-backup/config.js /opt/magicmirror/config/
 | 
			
		||||
    if [[ -f /opt/magicmirror-backup/custom.css ]]; then
 | 
			
		||||
      cp /opt/magicmirror-backup/custom.css /opt/magicmirror/css/
 | 
			
		||||
    fi
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured MagicMirror"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start magicmirror
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f $temp_file
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
@@ -79,4 +77,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,39 +28,33 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/mmdl_version.txt)" ]] || [[ ! -f /opt/mmdl_version.txt ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.mmdl)" ]] || [[ ! -f ~/.mmdl ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop mmdl
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
    msg_ok "Stopped service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    cp /opt/mmdl/.env /opt/mmdl.env
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    curl -fsSLO "https://github.com/intri-in/manage-my-damn-life-nextjs/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
    rm -r /opt/mmdl
 | 
			
		||||
    unzip -q v"$RELEASE".zip
 | 
			
		||||
    mv manage-my-damn-life-nextjs-"$RELEASE"/ /opt/mmdl
 | 
			
		||||
    mv /opt/mmdl.env /opt/mmdl/.env
 | 
			
		||||
    fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP}"
 | 
			
		||||
    cd /opt/mmdl
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run migrate
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start mmdl
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Started service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f ~/v"$RELEASE".zip
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    # Last Action
 | 
			
		||||
    echo "$RELEASE" >/opt/mmdl_version.txt
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,15 +20,34 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/mediamtx/ ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_error "Currently we don't provide an update function for this ${APP}."
 | 
			
		||||
    exit
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/mediamtx/ ]]; then
 | 
			
		||||
      msg_error "No ${APP} Installation Found!"
 | 
			
		||||
      exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/bluenviron/mediamtx/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.mediamtx)" ]] || [[ ! -f ~/.mediamtx ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop mediamtx
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_amd64.tar.gz"
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start mediamtx
 | 
			
		||||
    msg_ok "Service started"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -36,4 +55,4 @@ build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
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}"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ function update_script() {
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/Meilisearch_version.txt ]]; then
 | 
			
		||||
  if [[ ! -d /opt/meilisearch ]]; then
 | 
			
		||||
    msg_error "No Meilisearch Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
@@ -38,13 +38,7 @@ function update_script() {
 | 
			
		||||
    systemctl stop meilisearch
 | 
			
		||||
    msg_ok "Stopped Meilisearch"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Meilisearch"
 | 
			
		||||
    tmp_file=$(mktemp)
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
 | 
			
		||||
    $STD dpkg -i $tmp_file
 | 
			
		||||
    echo "$RELEASE" >/opt/meilisearch_version.txt
 | 
			
		||||
    msg_ok "Updated Meilisearch"
 | 
			
		||||
    fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch"
 | 
			
		||||
    systemctl start meilisearch
 | 
			
		||||
@@ -53,7 +47,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "2" ]; then
 | 
			
		||||
    if [[ ! -f /opt/Meilisearch-ui_version.txt ]]; then
 | 
			
		||||
    if [[ ! -d /opt/meilisearch-ui ]]; then
 | 
			
		||||
      msg_error "No Meilisearch-UI Installation Found!"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
@@ -61,22 +55,16 @@ function update_script() {
 | 
			
		||||
    systemctl stop meilisearch-ui
 | 
			
		||||
    msg_ok "Stopped Meilisearch-UI"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Meilisearch-UI"
 | 
			
		||||
    tmp_file=$(mktemp)
 | 
			
		||||
    tmp_dir=$(mktemp -d)
 | 
			
		||||
    RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
 | 
			
		||||
    rm -rf /opt/meilisearch-ui
 | 
			
		||||
    mkdir -p /opt/meilisearch-ui
 | 
			
		||||
    curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
 | 
			
		||||
    $STD unzip "$tmp_file" -d "$tmp_dir"
 | 
			
		||||
    mv "$tmp_dir"/*/* /opt/meilisearch-ui/
 | 
			
		||||
    fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring Meilisearch-UI"
 | 
			
		||||
    cd /opt/meilisearch-ui
 | 
			
		||||
    sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
 | 
			
		||||
    mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt
 | 
			
		||||
    msg_ok "Updated Meilisearch-UI"
 | 
			
		||||
    msg_ok "Configured Meilisearch-UI"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch-UI"
 | 
			
		||||
    systemctl start meilisearch-ui
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.nodebb)" ]] || [[ ! -f ~/.nodebb ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop nodebb
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
@@ -40,13 +40,14 @@ function update_script() {
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/nodebb
 | 
			
		||||
    $STD ./nodebb upgrade
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    echo "${RELEASE}" > ~/.nodebb
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start nodebb
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully\n"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
@@ -60,4 +61,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -30,26 +30,18 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/oauth2-proxy/oauth2-proxy/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.oauth2-proxy ]] || [[ "${RELEASE}" != "$(cat ~/.oauth2-proxy)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP} services"
 | 
			
		||||
    systemctl stop oauth2-proxy
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
    msg_ok "Stopped ${APP} service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    rm -f /opt/oauth2-proxy/oauth2-proxy
 | 
			
		||||
    curl -fsSL "https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v${RELEASE}/oauth2-proxy-v${RELEASE}.linux-amd64.tar.gz" -o /opt/oauth2-proxy.tar.gz
 | 
			
		||||
    tar -xzf /opt/oauth2-proxy.tar.gz
 | 
			
		||||
    mv /opt/oauth2-proxy-v${RELEASE}.linux-amd64/oauth2-proxy /opt/oauth2-proxy
 | 
			
		||||
    fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP} service"
 | 
			
		||||
    systemctl start oauth2-proxy
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
    msg_ok "Started ${APP} service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f "/opt/oauth2-proxy.tar.gz"
 | 
			
		||||
    rm -rf "/opt/oauth2-proxy-v${RELEASE}.linux-amd64"
 | 
			
		||||
    $STD apt-get -y autoremove
 | 
			
		||||
    $STD apt-get -y autoclean
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated successfully!\n"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -27,36 +27,32 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.outline ]] || [[ "${RELEASE}" != "$(cat ~/.outline)" ]]; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop outline
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    msg_info "Creating backup"
 | 
			
		||||
    cp /opt/outline/.env /opt
 | 
			
		||||
    rm -rf /opt/outline
 | 
			
		||||
    curl -fsSL "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar zxf "$temp_file"
 | 
			
		||||
    mv outline-"${RELEASE}" /opt/outline
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt/outline
 | 
			
		||||
    export NODE_ENV=development
 | 
			
		||||
    export NODE_OPTIONS="--max-old-space-size=3584"
 | 
			
		||||
    $STD yarn install --frozen-lockfile
 | 
			
		||||
    $STD yarn build
 | 
			
		||||
    mv /opt/.env /opt/outline
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start outline
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "$temp_file"
 | 
			
		||||
    rm -rf "$HOME"/outline-"${RELEASE}"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,20 +27,35 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
  systemctl stop overseerr
 | 
			
		||||
  cd /opt/overseerr
 | 
			
		||||
  output=$(git pull)
 | 
			
		||||
  $STD git pull
 | 
			
		||||
  if echo "$output" | grep -q "Already up to date."; then
 | 
			
		||||
    msg_ok " $APP is already up to date."
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sct/overseerr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f ~/.overseerr ]] || [[ "${RELEASE}" != "$(cat ~/.overseerr)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP} service"
 | 
			
		||||
    systemctl stop overseerr
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating backup"
 | 
			
		||||
    mv /opt/overseerr/config /opt/config_backup
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"
 | 
			
		||||
    rm -rf /opt/overseerr/config
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP} (Patience)"
 | 
			
		||||
    cd /opt/overseerr
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn build
 | 
			
		||||
    mv /opt/config_backup /opt/overseerr/config
 | 
			
		||||
    msg_ok "Configured ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP} service"
 | 
			
		||||
    systemctl start overseerr
 | 
			
		||||
    exit
 | 
			
		||||
    msg_ok "Started ${APP} service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  $STD yarn install
 | 
			
		||||
  $STD yarn build
 | 
			
		||||
  systemctl start overseerr
 | 
			
		||||
  msg_ok "Updated $APP"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -51,4 +66,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,10 +27,23 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ ! -f ~/.owncast ]] || [[ "${RELEASE}" != "$(cat ~/.owncast)" ]]; then
 | 
			
		||||
      msg_info "Stopping ${APP}"
 | 
			
		||||
      systemctl stop owncast
 | 
			
		||||
      msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
      fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-64bit.zip"
 | 
			
		||||
      
 | 
			
		||||
      msg_info "Starting ${APP}"
 | 
			
		||||
      systemctl start owncast
 | 
			
		||||
      msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
      msg_ok "Updated Successfully"
 | 
			
		||||
    else
 | 
			
		||||
      msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
			
		||||
    fi
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -41,4 +54,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,34 +28,20 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if dpkg -l | grep -q "openjdk-17-jre"; then
 | 
			
		||||
    $STD apt-get remove -y openjdk-17-jre
 | 
			
		||||
  fi
 | 
			
		||||
  JAVA_VERSION=21 setup_java
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.suwayomi-server 2>/dev/null)" ]] || [[ ! -f ~/.suwayomi-server ]]; then
 | 
			
		||||
    JAVA_VERSION=21 setup_java
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop suwayomi-server
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
 | 
			
		||||
    $STD dpkg -i "$temp_file"
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
    fetch_and_deploy_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start suwayomi-server
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -37,8 +37,11 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
			
		||||
 | 
			
		||||
    if [[ -f /etc/systemd/system/victoriametrics-logs.service ]]; then
 | 
			
		||||
      fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
      fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
			
		||||
    fi
 | 
			
		||||
    chmod +x /opt/victoriametrics/*
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,8 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 6060,
 | 
			
		||||
  "documentation": "https://github.com/adityachandelgit/BookLore",
 | 
			
		||||
  "website": "https://github.com/adityachandelgit/BookLore",
 | 
			
		||||
  "documentation": "https://booklore-app.github.io/booklore-docs/docs/getting-started",
 | 
			
		||||
  "website": "https://github.com/booklore-app/booklore",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/booklore.webp",
 | 
			
		||||
  "config_path": "/opt/booklore_storage/.env",
 | 
			
		||||
  "description": "BookLore is a self-hosted digital library for managing and reading books, offering a beautiful interface and support for metadata management. Built with a modern tech stack, it provides support for importing, organizing, and reading EPUBs and PDFs, while also managing cover images and book metadata.",
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://github.com/bluenviron/mediamtx/blob/main/README.md",
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://owncast.online/docs/",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/suwayomi-server.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/suwayomi-server.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Suwayomi-Server",
 | 
			
		||||
  "slug": "suwayomi-server",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-08-01",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 4567,
 | 
			
		||||
  "documentation": "https://github.com/Suwayomi/Suwayomi-Server/wiki",
 | 
			
		||||
  "website": "https://github.com/Suwayomi/Suwayomi-Server",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/suwayomi.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "A free and open source manga reader server that runs extensions built for Mihon (Tachiyomi).",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/suwayomiserver.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "This application can be conflicting with Kaspersky products. You maybe need to disable Kaspersky in order to use this application.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +1,173 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.27.0",
 | 
			
		||||
    "date": "2025-08-02T23:35:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.4.2",
 | 
			
		||||
    "date": "2025-08-02T22:52:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.21.0",
 | 
			
		||||
    "date": "2025-08-02T18:56:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linuxserver/Heimdall",
 | 
			
		||||
    "version": "v2.7.4",
 | 
			
		||||
    "date": "2025-08-02T16:51:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.24.9",
 | 
			
		||||
    "date": "2025-08-02T16:46:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.8.0",
 | 
			
		||||
    "date": "2025-08-02T16:17:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-core@15.6.8",
 | 
			
		||||
    "date": "2025-08-02T09:44:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inspircd/inspircd",
 | 
			
		||||
    "version": "v4.8.0",
 | 
			
		||||
    "date": "2025-08-02T09:12:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.207.0",
 | 
			
		||||
    "date": "2025-08-02T09:09:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "donaldzou/WGDashboard",
 | 
			
		||||
    "version": "v4.2.5",
 | 
			
		||||
    "date": "2025-08-02T08:58:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v12.0.3",
 | 
			
		||||
    "date": "2025-08-02T08:16:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2219",
 | 
			
		||||
    "date": "2025-08-02T06:00:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocketbase/pocketbase",
 | 
			
		||||
    "version": "v0.29.1",
 | 
			
		||||
    "date": "2025-08-02T05:51:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.2",
 | 
			
		||||
    "date": "2025-08-02T01:12:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.2.0-rc2",
 | 
			
		||||
    "date": "2025-08-01T23:31:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docmost/docmost",
 | 
			
		||||
    "version": "v0.22.2",
 | 
			
		||||
    "date": "2025-08-01T23:27:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v1.12.2rc0",
 | 
			
		||||
    "date": "2025-08-01T21:48:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.31.0",
 | 
			
		||||
    "date": "2025-08-01T19:18:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.21",
 | 
			
		||||
    "date": "2025-07-17T04:46:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.6.0",
 | 
			
		||||
    "date": "2025-08-01T15:42:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.137.1",
 | 
			
		||||
    "date": "2025-07-31T23:19:24Z"
 | 
			
		||||
    "version": "v1.137.3",
 | 
			
		||||
    "date": "2025-08-01T15:06:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.2.0",
 | 
			
		||||
    "date": "2025-08-01T14:49:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.14",
 | 
			
		||||
    "date": "2025-08-01T11:29:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.2-rc.3",
 | 
			
		||||
    "date": "2025-08-01T14:46:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "alexta69/metube",
 | 
			
		||||
    "version": "2025.07.31",
 | 
			
		||||
    "date": "2025-08-01T14:44:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.104.2",
 | 
			
		||||
    "date": "2025-07-31T13:14:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.135.0",
 | 
			
		||||
    "date": "2025-08-01T12:43:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.11",
 | 
			
		||||
    "date": "2025-07-22T12:11:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.0.1",
 | 
			
		||||
    "date": "2025-08-01T07:43:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-arroy-becomes-hannoy-8",
 | 
			
		||||
    "date": "2025-08-01T07:34:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.16",
 | 
			
		||||
    "date": "2025-07-28T22:46:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.23.1",
 | 
			
		||||
    "date": "2025-08-01T04:30:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gristlabs/grist-core",
 | 
			
		||||
@@ -39,16 +204,6 @@
 | 
			
		||||
    "version": "2025.7.4",
 | 
			
		||||
    "date": "2025-07-28T08:15:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.21",
 | 
			
		||||
    "date": "2025-07-17T04:46:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-sharding-split-docs-1",
 | 
			
		||||
    "date": "2025-07-31T15:32:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TryGhost/Ghost-CLI",
 | 
			
		||||
    "version": "v1.28.2",
 | 
			
		||||
@@ -59,16 +214,6 @@
 | 
			
		||||
    "version": "v3.12.8",
 | 
			
		||||
    "date": "2025-07-31T14:00:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-mdx@11.7.3",
 | 
			
		||||
    "date": "2025-07-31T13:53:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.104.2",
 | 
			
		||||
    "date": "2025-07-31T13:14:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "version": "v1.1.1",
 | 
			
		||||
@@ -89,11 +234,6 @@
 | 
			
		||||
    "version": "8.2-int",
 | 
			
		||||
    "date": "2025-07-31T09:01:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2213",
 | 
			
		||||
    "date": "2025-07-31T05:56:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.10.1",
 | 
			
		||||
@@ -104,31 +244,16 @@
 | 
			
		||||
    "version": "v4.102.3",
 | 
			
		||||
    "date": "2025-07-31T03:41:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.23-rc0",
 | 
			
		||||
    "date": "2025-07-31T01:24:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hyperion-project/hyperion.ng",
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gtsteffaniak/filebrowser",
 | 
			
		||||
    "version": "v0.7.18-beta",
 | 
			
		||||
    "date": "2025-07-30T21:26:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.3.2",
 | 
			
		||||
    "date": "2025-07-24T10:14:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-fix-invalid-blacklisttag",
 | 
			
		||||
@@ -159,46 +284,16 @@
 | 
			
		||||
    "version": "v2025-07-30",
 | 
			
		||||
    "date": "2025-07-30T17:13:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.0.0",
 | 
			
		||||
    "date": "2025-07-30T13:50:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v3.3.0",
 | 
			
		||||
    "date": "2025-07-30T13:27:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.134.0",
 | 
			
		||||
    "date": "2025-07-15T13:43:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.2",
 | 
			
		||||
    "date": "2025-07-08T13:52:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.11",
 | 
			
		||||
    "date": "2025-07-22T12:11:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.8",
 | 
			
		||||
    "date": "2025-07-30T11:33:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.16",
 | 
			
		||||
    "date": "2025-07-28T22:46:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.206.0",
 | 
			
		||||
    "date": "2025-07-30T09:39:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dani-garcia/vaultwarden",
 | 
			
		||||
    "version": "1.34.3",
 | 
			
		||||
@@ -216,8 +311,8 @@
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w30-4.13.0",
 | 
			
		||||
    "date": "2025-07-18T12:05:26Z"
 | 
			
		||||
    "version": "coverity-w31-4.13.0",
 | 
			
		||||
    "date": "2025-07-30T08:30:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
@@ -229,11 +324,6 @@
 | 
			
		||||
    "version": "jenkins-2.521",
 | 
			
		||||
    "date": "2025-07-30T03:38:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docmost/docmost",
 | 
			
		||||
    "version": "v0.22.0",
 | 
			
		||||
    "date": "2025-07-30T00:09:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "2025.7.29",
 | 
			
		||||
@@ -249,16 +339,6 @@
 | 
			
		||||
    "version": "v1.86.2",
 | 
			
		||||
    "date": "2025-07-29T19:16:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.24.8",
 | 
			
		||||
    "date": "2025-07-29T17:40:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "caddyserver/xcaddy",
 | 
			
		||||
    "version": "v0.4.5",
 | 
			
		||||
@@ -274,11 +354,6 @@
 | 
			
		||||
    "version": "v2.0.115",
 | 
			
		||||
    "date": "2025-07-29T04:38:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.1.8",
 | 
			
		||||
    "date": "2025-07-28T21:28:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "diced/zipline",
 | 
			
		||||
    "version": "v4.2.1",
 | 
			
		||||
@@ -299,11 +374,6 @@
 | 
			
		||||
    "version": "v0.107.64",
 | 
			
		||||
    "date": "2025-07-28T14:24:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "alexta69/metube",
 | 
			
		||||
    "version": "2025-07-27",
 | 
			
		||||
    "date": "2025-07-28T15:57:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/BookLore",
 | 
			
		||||
    "version": "v0.35.0",
 | 
			
		||||
@@ -314,11 +384,6 @@
 | 
			
		||||
    "version": "7.0.0-alpha.1",
 | 
			
		||||
    "date": "2025-07-28T11:28:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.23.0",
 | 
			
		||||
    "date": "2025-07-28T08:44:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.3.0p35",
 | 
			
		||||
@@ -334,11 +399,6 @@
 | 
			
		||||
    "version": "2025.7.4",
 | 
			
		||||
    "date": "2025-07-28T07:33:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v12.0.2",
 | 
			
		||||
    "date": "2025-07-28T03:34:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "umami-software/umami",
 | 
			
		||||
    "version": "v2.19.0",
 | 
			
		||||
@@ -364,16 +424,6 @@
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2024-08-29T22:32:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.1",
 | 
			
		||||
    "date": "2025-07-25T23:53:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.30.1",
 | 
			
		||||
    "date": "2025-07-25T19:18:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.15.0-rc4",
 | 
			
		||||
@@ -404,11 +454,6 @@
 | 
			
		||||
    "version": "v5.10.0",
 | 
			
		||||
    "date": "2025-07-24T23:33:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linuxserver/Heimdall",
 | 
			
		||||
    "version": "v2.7.3",
 | 
			
		||||
    "date": "2025-07-24T18:07:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docker/compose",
 | 
			
		||||
    "version": "v2.39.1",
 | 
			
		||||
@@ -424,11 +469,6 @@
 | 
			
		||||
    "version": "10.0.19",
 | 
			
		||||
    "date": "2025-07-16T09:45:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.26.3",
 | 
			
		||||
    "date": "2025-07-23T23:16:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "minio/minio",
 | 
			
		||||
    "version": "RELEASE.2025-07-23T15-54-02Z",
 | 
			
		||||
@@ -549,11 +589,6 @@
 | 
			
		||||
    "version": "sdk/v0.26.0",
 | 
			
		||||
    "date": "2025-07-20T13:26:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.2-rc.2",
 | 
			
		||||
    "date": "2025-07-20T07:05:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linkwarden/linkwarden",
 | 
			
		||||
    "version": "v2.11.5",
 | 
			
		||||
@@ -579,11 +614,6 @@
 | 
			
		||||
    "version": "v5.6.0",
 | 
			
		||||
    "date": "2025-07-19T13:34:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocketbase/pocketbase",
 | 
			
		||||
    "version": "v0.29.0",
 | 
			
		||||
    "date": "2025-07-19T08:54:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.1",
 | 
			
		||||
@@ -624,11 +654,6 @@
 | 
			
		||||
    "version": "v2.1.1",
 | 
			
		||||
    "date": "2025-07-15T22:38:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.4.0",
 | 
			
		||||
    "date": "2025-07-15T16:43:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "WordPress/WordPress",
 | 
			
		||||
    "version": "6.8.2",
 | 
			
		||||
@@ -754,11 +779,6 @@
 | 
			
		||||
    "version": "mysql-cluster-9.4.0",
 | 
			
		||||
    "date": "2025-07-09T08:35:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.20.0",
 | 
			
		||||
    "date": "2025-07-08T16:27:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "photoprism/photoprism",
 | 
			
		||||
    "version": "250707-d28b3101e",
 | 
			
		||||
@@ -809,16 +829,6 @@
 | 
			
		||||
    "version": "v4.1.2",
 | 
			
		||||
    "date": "2025-07-03T16:59:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.7.1",
 | 
			
		||||
    "date": "2025-07-03T01:03:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.5.1",
 | 
			
		||||
    "date": "2025-07-02T19:38:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "qbittorrent/qBittorrent",
 | 
			
		||||
    "version": "release-5.1.2",
 | 
			
		||||
@@ -914,11 +924,6 @@
 | 
			
		||||
    "version": "2.0.0-pre3",
 | 
			
		||||
    "date": "2025-06-18T08:01:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "donaldzou/WGDashboard",
 | 
			
		||||
    "version": "v4.2.4",
 | 
			
		||||
    "date": "2025-06-17T05:37:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "webmin/webmin",
 | 
			
		||||
    "version": "2.402",
 | 
			
		||||
@@ -1184,11 +1189,6 @@
 | 
			
		||||
    "version": "1.5.0",
 | 
			
		||||
    "date": "2025-03-30T17:42:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inspircd/inspircd",
 | 
			
		||||
    "version": "v4.7.0",
 | 
			
		||||
    "date": "2025-03-29T03:50:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grocy/grocy",
 | 
			
		||||
    "version": "v4.5.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Included option to install VictoriaLogs.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/adityachandelgit/BookLore
 | 
			
		||||
# Source: https://github.com/booklore-app/BookLore
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "booklore" "adityachandelgit/BookLore"
 | 
			
		||||
fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
 | 
			
		||||
JAVA_VERSION="21" setup_java
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
setup_mariadb
 | 
			
		||||
@@ -59,7 +59,7 @@ msg_ok "Created Environment"
 | 
			
		||||
 | 
			
		||||
msg_info "Building Backend"
 | 
			
		||||
cd /opt/booklore/booklore-api
 | 
			
		||||
APP_VERSION=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
 | 
			
		||||
$STD ./gradlew clean build --no-daemon
 | 
			
		||||
mkdir -p /opt/booklore/dist
 | 
			
		||||
 
 | 
			
		||||
@@ -51,6 +51,7 @@ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z
 | 
			
		||||
  /opt/docmost/.env
 | 
			
		||||
export NODE_OPTIONS="--max-old-space-size=2048"
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
$STD pnpm nx run server:build # Dirty fix https://github.com/community-scripts/ProxmoxVE/issues/6377
 | 
			
		||||
$STD pnpm build
 | 
			
		||||
msg_ok "Configured Docmost"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,8 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  ca-certificates
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
 | 
			
		||||
 
 | 
			
		||||
@@ -283,7 +283,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
 | 
			
		||||
mkdir -p "$INSTALL_DIR"
 | 
			
		||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.137.3" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION} (more patience please)"
 | 
			
		||||
 | 
			
		||||
@@ -292,6 +292,9 @@ $STD npm install -g node-gyp node-pre-gyp
 | 
			
		||||
$STD npm ci
 | 
			
		||||
$STD npm run build
 | 
			
		||||
$STD npm prune --omit=dev --omit=optional
 | 
			
		||||
cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
 | 
			
		||||
cp package.json "$APP_DIR"/bin
 | 
			
		||||
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
			
		||||
cd "$SRC_DIR"/open-api/typescript-sdk
 | 
			
		||||
$STD npm ci
 | 
			
		||||
$STD npm run build
 | 
			
		||||
@@ -299,14 +302,13 @@ cd "$SRC_DIR"/web
 | 
			
		||||
$STD npm ci
 | 
			
		||||
$STD npm run build
 | 
			
		||||
cd "$SRC_DIR"
 | 
			
		||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,bin/start.sh} "$APP_DIR"/
 | 
			
		||||
cp -a web/build "$APP_DIR"/www
 | 
			
		||||
cp LICENSE "$APP_DIR"
 | 
			
		||||
cd "$APP_DIR"
 | 
			
		||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
			
		||||
$STD npm install sharp
 | 
			
		||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
msg_ok "Installed Immich Web Components"
 | 
			
		||||
msg_ok "Installed Immich Server and Web Components"
 | 
			
		||||
 | 
			
		||||
cd "$SRC_DIR"/machine-learning
 | 
			
		||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
 | 
			
		||||
@@ -329,8 +331,8 @@ fi
 | 
			
		||||
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
 | 
			
		||||
 | 
			
		||||
cd "$APP_DIR"
 | 
			
		||||
grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
 | 
			
		||||
grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
 | 
			
		||||
grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
 | 
			
		||||
grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
 | 
			
		||||
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
 | 
			
		||||
ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
 | 
			
		||||
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
 | 
			
		||||
@@ -394,7 +396,16 @@ set +a
 | 
			
		||||
 | 
			
		||||
python3 -m immich_ml
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x "$ML_DIR"/ml_start.sh
 | 
			
		||||
cat <<EOF >"$APP_DIR"/bin/start.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -a
 | 
			
		||||
. "$INSTALL_DIR"/.env
 | 
			
		||||
set +a
 | 
			
		||||
 | 
			
		||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x "$ML_DIR"/ml_start.sh "$APP_DIR"/bin/start.sh
 | 
			
		||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=${APPLICATION} Web Service
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,6 @@ cd assets/
 | 
			
		||||
$STD yarn install
 | 
			
		||||
$STD yarn build
 | 
			
		||||
chown -R www-data:www-data /opt/koillection/public/uploads
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Configured Koillection"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,23 +13,14 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y jq
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
fetch_and_deploy_gh_release "lubelogger" "hargata/lubelog" "prebuild" "latest" "/opt/lubelogger" "LubeLogger*linux_x64.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing LubeLogger"
 | 
			
		||||
cd /opt
 | 
			
		||||
mkdir -p /opt/lubelogger
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
 | 
			
		||||
msg_info "Configuring LubeLogger"
 | 
			
		||||
cd /opt/lubelogger
 | 
			
		||||
curl -fsSL "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip" -o "LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip"
 | 
			
		||||
$STD unzip LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
chmod 700 /opt/lubelogger/CarCareTracker
 | 
			
		||||
cp /opt/lubelogger/appsettings.json /opt/lubelogger/appsettings_bak.json
 | 
			
		||||
jq '.Kestrel = {"Endpoints": {"Http": {"Url": "http://0.0.0.0:5000"}}}' /opt/lubelogger/appsettings_bak.json >/opt/lubelogger/appsettings.json
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed LubeLogger"
 | 
			
		||||
msg_ok "Configured LubeLogger"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/lubelogger.service
 | 
			
		||||
@@ -51,7 +42,7 @@ Restart=on-failure
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl enable --now -q lubelogger.service
 | 
			
		||||
systemctl enable -q --now lubelogger
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
@@ -59,7 +50,6 @@ customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/lubelogger/appsettings_bak.json
 | 
			
		||||
rm -rf /opt/lubelogger/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,14 +14,11 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "magicmirror" "MagicMirrorOrg/MagicMirror" "tarball"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup MagicMirror"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
			
		||||
tar -xzf "$temp_file"
 | 
			
		||||
mv MagicMirror-${RELEASE} /opt/magicmirror
 | 
			
		||||
msg_info "Configuring MagicMirror"
 | 
			
		||||
cd /opt/magicmirror
 | 
			
		||||
sed -i -E 's/("postinstall": )".*"/\1""/; s/("prepare": )".*"/\1""/' package.json
 | 
			
		||||
$STD npm run install-mm
 | 
			
		||||
cat <<EOF >/opt/magicmirror/config/config.js
 | 
			
		||||
let config = {
 | 
			
		||||
@@ -112,8 +109,7 @@ let config = {
 | 
			
		||||
/*************** DO NOT EDIT THE LINE BELOW ***************/
 | 
			
		||||
if (typeof module !== "undefined") {module.exports = config;}
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Setup MagicMirror"
 | 
			
		||||
msg_ok "Configured MagicMirror"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/magicmirror.service
 | 
			
		||||
@@ -133,14 +129,13 @@ ExecStart=/usr/bin/npm run server
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable --now magicmirror
 | 
			
		||||
systemctl enable -q --now magicmirror
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf $temp_file
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -31,13 +31,10 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
 | 
			
		||||
} >>~/mmdl.creds
 | 
			
		||||
msg_ok "Set up Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION}"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSLO "https://github.com/intri-in/manage-my-damn-life-nextjs/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
unzip -q v"$RELEASE".zip
 | 
			
		||||
mv manage-my-damn-life-nextjs-"$RELEASE"/ /opt/mmdl
 | 
			
		||||
cp /opt/mmdl/sample.env.local /opt/mmdl/.env
 | 
			
		||||
fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring ${APPLICATION}"
 | 
			
		||||
cp /opt/mmdl/sample.env.local /opt/mmdl/.env
 | 
			
		||||
sed -i -e 's|db|localhost|' \
 | 
			
		||||
  -e "s|myuser|${DB_USER}|" \
 | 
			
		||||
  -e "s|mypassword|${DB_PASS}|" \
 | 
			
		||||
@@ -46,15 +43,13 @@ sed -i -e 's|db|localhost|' \
 | 
			
		||||
  -e "s|sample_install_mmdm|${DB_NAME}|" \
 | 
			
		||||
  -e "s|=PASSWORD|=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9' | head -c40)|" \
 | 
			
		||||
  /opt/mmdl/.env
 | 
			
		||||
 | 
			
		||||
cd /opt/mmdl
 | 
			
		||||
export NEXT_TELEMETRY_DISABLE=1
 | 
			
		||||
export CI="true"
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run migrate
 | 
			
		||||
$STD npm run build
 | 
			
		||||
echo "${RELEASE}" >/opt/mmdl_version.txt
 | 
			
		||||
msg_ok "Installed ${APPLICATION}"
 | 
			
		||||
msg_ok "Configured ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/mmdl.service
 | 
			
		||||
@@ -78,7 +73,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f ~/v${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -17,14 +17,7 @@ msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y ffmpeg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing MediaMTX"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bluenviron/mediamtx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
mkdir -p /opt/mediamtx
 | 
			
		||||
cd /opt/mediamtx
 | 
			
		||||
curl -fsSL "https://github.com/bluenviron/mediamtx/releases/download/${RELEASE}/mediamtx_${RELEASE}_linux_amd64.tar.gz" -o "mediamtx_${RELEASE}_linux_amd64.tar.gz"
 | 
			
		||||
tar xzf mediamtx_${RELEASE}_linux_amd64.tar.gz
 | 
			
		||||
rm -rf mediamtx_${RELEASE}_linux_amd64.tar.gz
 | 
			
		||||
msg_ok "Installed MediaMTX"
 | 
			
		||||
fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/mediamtx.service
 | 
			
		||||
 
 | 
			
		||||
@@ -13,11 +13,10 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Setup ${APPLICATION}"
 | 
			
		||||
tmp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
 | 
			
		||||
$STD dpkg -i $tmp_file
 | 
			
		||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring ${APPLICATION}"
 | 
			
		||||
cd /opt/meilisearch
 | 
			
		||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
 | 
			
		||||
MASTER_KEY=$(openssl rand -base64 12)
 | 
			
		||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
 | 
			
		||||
@@ -30,21 +29,14 @@ sed -i \
 | 
			
		||||
  -e 's|^# no_analytics = true|no_analytics = true|' \
 | 
			
		||||
  -e 's|^http_addr =.*|http_addr = "0.0.0.0:7700"|' \
 | 
			
		||||
  /etc/meilisearch.toml
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Setup ${APPLICATION}"
 | 
			
		||||
msg_ok "Configured ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Do you want add meilisearch-ui? [y/n]: " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
 | 
			
		||||
  fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
 | 
			
		||||
 | 
			
		||||
  msg_info "Setup ${APPLICATION}-ui"
 | 
			
		||||
  tmp_file=$(mktemp)
 | 
			
		||||
  tmp_dir=$(mktemp -d)
 | 
			
		||||
  mkdir -p /opt/meilisearch-ui
 | 
			
		||||
  RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o "$tmp_file"
 | 
			
		||||
  $STD unzip "$tmp_file" -d "$tmp_dir"
 | 
			
		||||
  mv "$tmp_dir"/*/* /opt/meilisearch-ui/
 | 
			
		||||
  msg_info "Configuring ${APPLICATION}-ui"
 | 
			
		||||
  cd /opt/meilisearch-ui
 | 
			
		||||
  sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
 | 
			
		||||
  $STD pnpm install
 | 
			
		||||
@@ -53,11 +45,10 @@ VITE_SINGLETON_MODE=true
 | 
			
		||||
VITE_SINGLETON_HOST=http://${LOCAL_IP}:7700
 | 
			
		||||
VITE_SINGLETON_API_KEY=${MASTER_KEY}
 | 
			
		||||
EOF
 | 
			
		||||
  echo "${RELEASE_UI}" >/opt/${APPLICATION}-ui_version.txt
 | 
			
		||||
  msg_ok "Setup ${APPLICATION}-ui"
 | 
			
		||||
  msg_ok "Configured ${APPLICATION}-ui"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Services"
 | 
			
		||||
msg_info "Creating service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/meilisearch.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Meilisearch
 | 
			
		||||
@@ -94,8 +85,7 @@ WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
  systemctl enable -q --now meilisearch-ui
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_ok "Set up Services"
 | 
			
		||||
msg_ok "Service created"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
setup_mongodb
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
 | 
			
		||||
msg_info "Configure MongoDB"
 | 
			
		||||
msg_info "Configuring MongoDB"
 | 
			
		||||
MONGO_ADMIN_USER="admin"
 | 
			
		||||
MONGO_ADMIN_PWD="$(openssl rand -base64 18 | cut -c1-13)"
 | 
			
		||||
NODEBB_USER="nodebb"
 | 
			
		||||
@@ -63,14 +63,11 @@ sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
 | 
			
		||||
sed -i '/security:/d' /etc/mongod.conf
 | 
			
		||||
bash -c 'echo -e "\nsecurity:\n  authorization: enabled" >> /etc/mongod.conf'
 | 
			
		||||
systemctl restart mongod
 | 
			
		||||
msg_ok "MongoDB successfully configurated"
 | 
			
		||||
msg_ok "MongoDB configured"
 | 
			
		||||
 | 
			
		||||
msg_info "Install NodeBB"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/NodeBB/NodeBB/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
 | 
			
		||||
$STD unzip v${RELEASE}.zip
 | 
			
		||||
mv NodeBB-${RELEASE} /opt/nodebb
 | 
			
		||||
fetch_and_deploy_gh_release "nodebb" "NodeBB/NodeBB" "tarball"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring NodeBB"
 | 
			
		||||
cd /opt/nodebb
 | 
			
		||||
touch pidfile
 | 
			
		||||
expect <<EOF >/dev/null 2>&1
 | 
			
		||||
@@ -107,8 +104,7 @@ expect "Confirm Password" {
 | 
			
		||||
}
 | 
			
		||||
expect eof
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed NodeBB"
 | 
			
		||||
msg_ok "Configured NodeBB"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/nodebb.service
 | 
			
		||||
@@ -136,7 +132,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -R /opt/v${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,20 +13,8 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  jq
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup OAuth2-Proxy"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/oauth2-proxy/oauth2-proxy/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
mkdir -p /opt/oauth2-proxy
 | 
			
		||||
curl -fsSL "https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v${RELEASE}/oauth2-proxy-v${RELEASE}.linux-amd64.tar.gz" -o /opt/oauth2-proxy.tar.gz
 | 
			
		||||
tar -xzf /opt/oauth2-proxy.tar.gz -C /opt
 | 
			
		||||
mv /opt/oauth2-proxy-v${RELEASE}.linux-amd64/oauth2-proxy /opt/oauth2-proxy
 | 
			
		||||
fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-amd64.tar.gz"
 | 
			
		||||
touch /opt/oauth2-proxy/config.toml
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Setup OAuth2-Proxy"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/oauth2-proxy.service
 | 
			
		||||
@@ -51,8 +39,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "/opt/oauth2-proxy.tar.gz"
 | 
			
		||||
rm -rf "/opt/oauth2-proxy-v${RELEASE}.linux-amd64"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -40,14 +40,11 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
 | 
			
		||||
} >>~/outline.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Outline (Patience)"
 | 
			
		||||
fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Outline (Patience)"
 | 
			
		||||
SECRET_KEY="$(openssl rand -hex 32)"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
tar zxf $temp_file
 | 
			
		||||
mv outline-${RELEASE} /opt/outline
 | 
			
		||||
cd /opt/outline
 | 
			
		||||
cp .env.sample .env
 | 
			
		||||
export NODE_ENV=development
 | 
			
		||||
@@ -62,8 +59,7 @@ export NODE_OPTIONS="--max-old-space-size=3584"
 | 
			
		||||
$STD yarn build
 | 
			
		||||
sed -i 's/NODE_ENV=development/NODE_ENV=production/g' /opt/outline/.env
 | 
			
		||||
export NODE_ENV=production
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Setup Outline"
 | 
			
		||||
msg_ok "Configured Outline"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/outline.service
 | 
			
		||||
@@ -89,7 +85,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf $temp_file
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,19 +14,17 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  git \
 | 
			
		||||
  ca-certificates
 | 
			
		||||
$STD apt-get install -y ca-certificates
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Overseerr (Patience)"
 | 
			
		||||
git clone -q https://github.com/sct/overseerr.git /opt/overseerr
 | 
			
		||||
msg_info "Configuring Overseerr (Patience)"
 | 
			
		||||
cd /opt/overseerr
 | 
			
		||||
$STD yarn install
 | 
			
		||||
$STD yarn build
 | 
			
		||||
msg_ok "Installed Overseerr"
 | 
			
		||||
msg_ok "Configured Overseerr"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/overseerr.service
 | 
			
		||||
 
 | 
			
		||||
@@ -17,13 +17,7 @@ msg_info "Installing Dependencies (Patience)"
 | 
			
		||||
$STD apt-get install -y ffmpeg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Owncast"
 | 
			
		||||
mkdir /opt/owncast
 | 
			
		||||
cd /opt/owncast
 | 
			
		||||
curl -fsSL "$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep download | grep linux-64bit | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep download | grep linux-64bit | cut -d\" -f4)")
 | 
			
		||||
$STD unzip owncast*.zip
 | 
			
		||||
rm owncast*.zip
 | 
			
		||||
msg_ok "Installed Owncast"
 | 
			
		||||
fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-64bit.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/owncast.service
 | 
			
		||||
 
 | 
			
		||||
@@ -18,14 +18,7 @@ $STD apt-get install -y libc++-dev
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
JAVA_VERSION=21 setup_java
 | 
			
		||||
 | 
			
		||||
msg_info "Settting up Suwayomi-Server"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
 | 
			
		||||
$STD dpkg -i "$temp_file"
 | 
			
		||||
echo "${RELEASE}" >/opt/suwayomi-server_version.txt
 | 
			
		||||
msg_ok "Done setting up Suwayomi-Server"
 | 
			
		||||
fetch_and_deploy_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server" "binary"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/suwayomi-server.service
 | 
			
		||||
@@ -47,7 +40,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -15,8 +15,13 @@ update_os
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Would you like to add VictoriaLogs? <y/N> " prompt
 | 
			
		||||
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
  fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Setup VictoriaMetrics"
 | 
			
		||||
mkdir -p /opt/victoriametrics/data
 | 
			
		||||
@@ -38,8 +43,10 @@ ExecStart=/opt/victoriametrics/victoria-metrics-prod --storageDataPath="/opt/vic
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now victoriametrics
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/victoriametrics-logs.service
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  cat <<EOF >/etc/systemd/system/victoriametrics-logs.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=VictoriaMetrics Service
 | 
			
		||||
 | 
			
		||||
@@ -53,15 +60,14 @@ ExecStart=/opt/victoriametrics/victoria-logs-prod
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now victoriametrics
 | 
			
		||||
systemctl enable -q --now victoriametrics-logs
 | 
			
		||||
  systemctl enable -q --now victoriametrics-logs
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf $temp_dir
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -1286,6 +1286,10 @@ EOF
 | 
			
		||||
        msg_ok "Network in LXC is reachable"
 | 
			
		||||
        break
 | 
			
		||||
      fi
 | 
			
		||||
      if pct exec "$CTID" -- curl -fsSIL --max-time 10 deb.debian.org >/dev/null 2>&1; then
 | 
			
		||||
        msg_ok "Network in LXC is reachable"
 | 
			
		||||
        break
 | 
			
		||||
      fi
 | 
			
		||||
      if [ "$i" -lt 10 ]; then
 | 
			
		||||
        msg_warn "No network yet in LXC (try $i/10) – waiting..."
 | 
			
		||||
        sleep 3
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user