mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			79 Commits
		
	
	
		
			2025-09-10
			...
			2025-09-16
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					acd9bb1357 | ||
| 
						 | 
					e2e2459bfd | ||
| 
						 | 
					caeba37a2e | ||
| 
						 | 
					44a8c70437 | ||
| 
						 | 
					1860f4b2ee | ||
| 
						 | 
					bf0bac1523 | ||
| 
						 | 
					b6bfe9a4b6 | ||
| 
						 | 
					634386ea50 | ||
| 
						 | 
					020c8a76c1 | ||
| 
						 | 
					8f738e2d26 | ||
| 
						 | 
					e5e7547eca | ||
| 
						 | 
					a383aa5679 | ||
| 
						 | 
					ce68253564 | ||
| 
						 | 
					65e561dcbe | ||
| 
						 | 
					dffb291a4f | ||
| 
						 | 
					f3bcb3211c | ||
| 
						 | 
					7c22fe5f46 | ||
| 
						 | 
					600e739005 | ||
| 
						 | 
					31be78878f | ||
| 
						 | 
					e47d62d575 | ||
| 
						 | 
					ec58d6c622 | ||
| 
						 | 
					bac2b6eade | ||
| 
						 | 
					bb289203c6 | ||
| 
						 | 
					fe97056d19 | ||
| 
						 | 
					65ba9192d9 | ||
| 
						 | 
					8a096b9e6e | ||
| 
						 | 
					1c6efa528b | ||
| 
						 | 
					89c3410f6f | ||
| 
						 | 
					34b1d70762 | ||
| 
						 | 
					1860847153 | ||
| 
						 | 
					58905bf94d | ||
| 
						 | 
					7d1788a079 | ||
| 
						 | 
					83e04257d9 | ||
| 
						 | 
					11c33e34d2 | ||
| 
						 | 
					52df77cab5 | ||
| 
						 | 
					17f6264a03 | ||
| 
						 | 
					9463b0b808 | ||
| 
						 | 
					eba83f3848 | ||
| 
						 | 
					e3f6ea73c3 | ||
| 
						 | 
					06247e742c | ||
| 
						 | 
					4606782d6b | ||
| 
						 | 
					a988acf2d5 | ||
| 
						 | 
					5f44007372 | ||
| 
						 | 
					8b87272e38 | ||
| 
						 | 
					ceccf08f69 | ||
| 
						 | 
					5a80cd7e02 | ||
| 
						 | 
					d617a49766 | ||
| 
						 | 
					7c0d79c115 | ||
| 
						 | 
					0d4a508543 | ||
| 
						 | 
					f979dd2277 | ||
| 
						 | 
					87de220511 | ||
| 
						 | 
					481e70b0aa | ||
| 
						 | 
					6c3a16e579 | ||
| 
						 | 
					394f91c994 | ||
| 
						 | 
					63a268d6c5 | ||
| 
						 | 
					9ee6e23a59 | ||
| 
						 | 
					eceb1cd53c | ||
| 
						 | 
					719c55655d | ||
| 
						 | 
					aeb15c7ea1 | ||
| 
						 | 
					0c7a366782 | ||
| 
						 | 
					93a3a572d4 | ||
| 
						 | 
					8b2645a529 | ||
| 
						 | 
					b72e132699 | ||
| 
						 | 
					f4df8e2ccc | ||
| 
						 | 
					f03f004226 | ||
| 
						 | 
					b13c840bda | ||
| 
						 | 
					ce90647bda | ||
| 
						 | 
					164e487090 | ||
| 
						 | 
					a4660adedd | ||
| 
						 | 
					9352eec854 | ||
| 
						 | 
					4478f8f6e0 | ||
| 
						 | 
					d69cbcd941 | ||
| 
						 | 
					affcfd06cf | ||
| 
						 | 
					b94b088c19 | ||
| 
						 | 
					5385382a88 | ||
| 
						 | 
					d06ad37a22 | ||
| 
						 | 
					72c7d4199b | ||
| 
						 | 
					2e75ced83f | ||
| 
						 | 
					9a28ce0263 | 
							
								
								
									
										90
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,98 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-09-17
 | 
			
		||||
 | 
			
		||||
## 2025-09-16
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Improve OpenWrt VM boot and readiness check [@MickLesk](https://github.com/MickLesk) ([#7669](https://github.com/community-scripts/ProxmoxVE/pull/7669))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - hortusfox: fix update check [@MickLesk](https://github.com/MickLesk) ([#7667](https://github.com/community-scripts/ProxmoxVE/pull/7667))
 | 
			
		||||
 | 
			
		||||
## 2025-09-15
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - SigNoz ([#7648](https://github.com/community-scripts/ProxmoxVE/pull/7648))
 | 
			
		||||
- Scraparr ([#7644](https://github.com/community-scripts/ProxmoxVE/pull/7644))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - vm: move pv installation into ensure_pv function [@MickLesk](https://github.com/MickLesk) ([#7642](https://github.com/community-scripts/ProxmoxVE/pull/7642))
 | 
			
		||||
    - Cloudflare-DDNS: Fix the IP6_PROVIDER variable [@hugodantas](https://github.com/hugodantas) ([#7660](https://github.com/community-scripts/ProxmoxVE/pull/7660))
 | 
			
		||||
    - Wikijs: Bump Node.js version to 22 [@MickLesk](https://github.com/MickLesk) ([#7643](https://github.com/community-scripts/ProxmoxVE/pull/7643))
 | 
			
		||||
 | 
			
		||||
## 2025-09-14
 | 
			
		||||
 | 
			
		||||
## 2025-09-13
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Palmr: hotfix #7622 [@vhsdream](https://github.com/vhsdream) ([#7625](https://github.com/community-scripts/ProxmoxVE/pull/7625))
 | 
			
		||||
    - ollama: fix: ccurl continue on interrupts [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7620](https://github.com/community-scripts/ProxmoxVE/pull/7620))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - pdm: refactor for beta version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7619](https://github.com/community-scripts/ProxmoxVE/pull/7619))
 | 
			
		||||
    - Immich: bump to v1.142.0 [@vhsdream](https://github.com/vhsdream) ([#7594](https://github.com/community-scripts/ProxmoxVE/pull/7594))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - fix: tagline grammar [@jonathanwuki](https://github.com/jonathanwuki) ([#7621](https://github.com/community-scripts/ProxmoxVE/pull/7621))
 | 
			
		||||
- fix: grammar/capitalization for links and taglines [@jonathanwuki](https://github.com/jonathanwuki) ([#7609](https://github.com/community-scripts/ProxmoxVE/pull/7609))
 | 
			
		||||
 | 
			
		||||
## 2025-09-12
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Stylus ([#7588](https://github.com/community-scripts/ProxmoxVE/pull/7588))
 | 
			
		||||
- UHF ([#7589](https://github.com/community-scripts/ProxmoxVE/pull/7589))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Tweak: post-pve-install: create folder if Not exist  [@JVKeller](https://github.com/JVKeller) ([#7598](https://github.com/community-scripts/ProxmoxVE/pull/7598))
 | 
			
		||||
    - Update openwebui.sh [@webmogul1](https://github.com/webmogul1) ([#7582](https://github.com/community-scripts/ProxmoxVE/pull/7582))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - [core]: add fallback if mariadb upstream unreachable [@MickLesk](https://github.com/MickLesk) ([#7599](https://github.com/community-scripts/ProxmoxVE/pull/7599))
 | 
			
		||||
    - ESPHome: Increase default disk size [@tremor021](https://github.com/tremor021) ([#7600](https://github.com/community-scripts/ProxmoxVE/pull/7600))
 | 
			
		||||
 | 
			
		||||
## 2025-09-11
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - telegraf ([#7576](https://github.com/community-scripts/ProxmoxVE/pull/7576))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - [core] Sort tools.func functions alphabeticaly [@tremor021](https://github.com/tremor021) ([#7569](https://github.com/community-scripts/ProxmoxVE/pull/7569))
 | 
			
		||||
- mobile subscription nag fix [@dvino](https://github.com/dvino) ([#7567](https://github.com/community-scripts/ProxmoxVE/pull/7567))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - alpine-install: switch to using GitHub to fetch tools when using GitHub [@burritosoftware](https://github.com/burritosoftware) ([#7566](https://github.com/community-scripts/ProxmoxVE/pull/7566))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Add margin-bottom to Most Viewed Scripts header to unifi UI [@BramSuurdje](https://github.com/BramSuurdje) ([#7572](https://github.com/community-scripts/ProxmoxVE/pull/7572))
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Fix frontend url [@r1cebank](https://github.com/r1cebank) ([#7578](https://github.com/community-scripts/ProxmoxVE/pull/7578))
 | 
			
		||||
 | 
			
		||||
## 2025-09-10
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="ESPHome"
 | 
			
		||||
var_tags="${var_tags:-automation}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/scraparr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/scraparr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   _____                                      
 | 
			
		||||
  / ___/______________ _____  ____ ___________
 | 
			
		||||
  \__ \/ ___/ ___/ __ `/ __ \/ __ `/ ___/ ___/
 | 
			
		||||
 ___/ / /__/ /  / /_/ / /_/ / /_/ / /  / /    
 | 
			
		||||
/____/\___/_/   \__,_/ .___/\__,_/_/  /_/     
 | 
			
		||||
                    /_/                       
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/signoz
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/signoz
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   _____ _       _   __         
 | 
			
		||||
  / ___/(_)___ _/ | / /___  ____
 | 
			
		||||
  \__ \/ / __ `/  |/ / __ \/_  /
 | 
			
		||||
 ___/ / / /_/ / /|  / /_/ / / /_
 | 
			
		||||
/____/_/\__, /_/ |_/\____/ /___/
 | 
			
		||||
       /____/                   
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/stylus
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/stylus
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   _____ __        __          
 | 
			
		||||
  / ___// /___  __/ /_  _______
 | 
			
		||||
  \__ \/ __/ / / / / / / / ___/
 | 
			
		||||
 ___/ / /_/ /_/ / / /_/ (__  ) 
 | 
			
		||||
/____/\__/\__, /_/\__,_/____/  
 | 
			
		||||
         /____/                
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/telegraf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/telegraf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   __       __                      ____
 | 
			
		||||
  / /____  / /__  ____ __________ _/ __/
 | 
			
		||||
 / __/ _ \/ / _ \/ __ `/ ___/ __ `/ /_  
 | 
			
		||||
/ /_/  __/ /  __/ /_/ / /  / /_/ / __/  
 | 
			
		||||
\__/\___/_/\___/\__, /_/   \__,_/_/     
 | 
			
		||||
               /____/                   
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/uhf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/uhf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   __  ____  ________
 | 
			
		||||
  / / / / / / / ____/
 | 
			
		||||
 / / / / /_/ / /_    
 | 
			
		||||
/ /_/ / __  / __/    
 | 
			
		||||
\____/_/ /_/_/       
 | 
			
		||||
                     
 | 
			
		||||
@@ -27,7 +27,7 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "danielbrendel" "hortusfox-web"; then
 | 
			
		||||
  if check_for_gh_release "hortusfox" "danielbrendel/hortusfox-web"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -61,7 +61,7 @@ function update_script() {
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE="1.141.1"
 | 
			
		||||
  RELEASE="1.142.0"
 | 
			
		||||
  if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop immich-web
 | 
			
		||||
@@ -160,15 +160,14 @@ EOF
 | 
			
		||||
    cd "$SRC_DIR"/machine-learning
 | 
			
		||||
    mkdir -p "$ML_DIR"
 | 
			
		||||
    export VIRTUAL_ENV="${ML_DIR}"/ml-venv
 | 
			
		||||
    $STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
 | 
			
		||||
    if [[ -f ~/.openvino ]]; then
 | 
			
		||||
      msg_info "Updating HW-accelerated machine-learning"
 | 
			
		||||
      /usr/local/bin/uv -q sync --extra openvino --no-cache --active
 | 
			
		||||
      $STD /usr/local/bin/uv sync --extra openvino --no-cache --active
 | 
			
		||||
      patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
 | 
			
		||||
      msg_ok "Updated HW-accelerated machine-learning"
 | 
			
		||||
    else
 | 
			
		||||
      msg_info "Updating machine-learning"
 | 
			
		||||
      /usr/local/bin/uv -q sync --extra cpu --no-cache --active
 | 
			
		||||
      $STD /usr/local/bin/uv sync --extra cpu --no-cache --active
 | 
			
		||||
      msg_ok "Updated machine-learning"
 | 
			
		||||
    fi
 | 
			
		||||
    cd "$SRC_DIR"
 | 
			
		||||
@@ -208,7 +207,7 @@ function compile_libjxl() {
 | 
			
		||||
  JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
 | 
			
		||||
  # : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
 | 
			
		||||
  : "${LIBJXL_REVISION:=794a5dcf0d54f9f0b20d288a12e87afb91d20dfc}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
  if [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libjxl"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
 | 
			
		||||
@@ -289,7 +288,7 @@ function compile_libraw() {
 | 
			
		||||
  local update
 | 
			
		||||
  # : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
 | 
			
		||||
  : "${LIBRAW_REVISION:=09bea31181b43e97959ee5452d91e5bc66365f1f}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
  if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libraw"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
 | 
			
		||||
@@ -311,7 +310,7 @@ function compile_imagemagick() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
  # : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
 | 
			
		||||
  : "${IMAGEMAGICK_REVISION:=8289a3388a085ad5ae81aa6812f21554bdfd54f2}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
  if [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling ImageMagick"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
 | 
			
		||||
@@ -332,7 +331,7 @@ function compile_libvips() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
  # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
			
		||||
  : "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
  if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libvips"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ function update_script() {
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    TMP_TAR=$(mktemp --suffix=.tgz)
 | 
			
		||||
    curl -fL# -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
 | 
			
		||||
    curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
 | 
			
		||||
    msg_info "Updating Ollama to ${RELEASE}"
 | 
			
		||||
    rm -rf /usr/local/lib/ollama
 | 
			
		||||
    rm -rf /usr/local/bin/ollama
 | 
			
		||||
 
 | 
			
		||||
@@ -33,11 +33,17 @@ function update_script() {
 | 
			
		||||
    OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
    if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
 | 
			
		||||
      msg_info "Stopping Service"
 | 
			
		||||
      systemctl stop ollama
 | 
			
		||||
      msg_ok "Stopped Service"
 | 
			
		||||
      curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
      rm -rf /usr/lib/ollama
 | 
			
		||||
      rm -rf /usr/bin/ollama
 | 
			
		||||
      curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
      tar -C /usr -xzf ollama-linux-amd64.tgz
 | 
			
		||||
      rm -rf ollama-linux-amd64.tgz
 | 
			
		||||
      msg_info "Starting Service"
 | 
			
		||||
      systemctl start ollama
 | 
			
		||||
      msg_info "Started Service"
 | 
			
		||||
      msg_ok "Ollama updated to version $RELEASE"
 | 
			
		||||
    else
 | 
			
		||||
      msg_ok "Ollama is already up to date."
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ function update_script() {
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    cp /opt/palmr/apps/server/.env /opt/palmr.env
 | 
			
		||||
    rm -rf /opt/palmr
 | 
			
		||||
    fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
 | 
			
		||||
 | 
			
		||||
    PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,16 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if grep -q 'Debian GNU/Linux 12' /etc/os-release && [ -f /etc/apt/sources.list.d/proxmox-release-bookworm.list ] && [ -f /etc/apt/sources.list.d/pdm-test.list ]; then
 | 
			
		||||
        msg_info "Updating outdated outdated source formats"
 | 
			
		||||
        echo "deb [signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test" > /etc/apt/sources.list.d/pdm-test.list
 | 
			
		||||
        curl -fsSL https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -o /usr/share/keyrings/proxmox-archive-keyring.gpg
 | 
			
		||||
        rm -f /etc/apt/keyrings/proxmox-release-bookworm.gpg /etc/apt/sources.list.d/proxmox-release-bookworm.list
 | 
			
		||||
        $STD apt-get update
 | 
			
		||||
        msg_ok "Updated old sources"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
@@ -41,4 +51,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}https://${IP}:8443${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								ct/scraparr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ct/scraparr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: JasonGreenC
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/thecfu/scraparr
 | 
			
		||||
 | 
			
		||||
APP="Scraparr"
 | 
			
		||||
var_tags="${var_tags:-arr;monitoring}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/scraparr/ ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "scraparr" "thecfu/scraparr"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop scraparr
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    fetch_and_deploy_gh_release "scrappar" "thecfu/scraparr" "tarball" "latest" "/opt/scraparr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Scraparr"
 | 
			
		||||
    cd /opt/scraparr
 | 
			
		||||
    $STD uv venv /opt/scraparr/.venv
 | 
			
		||||
    $STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
 | 
			
		||||
    $STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
 | 
			
		||||
    $STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
 | 
			
		||||
    chmod -R 755 /opt/scraparr
 | 
			
		||||
    msg_ok "Updated Scraparr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start scraparr
 | 
			
		||||
    msg_ok "Services Started"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7100${CL}"
 | 
			
		||||
							
								
								
									
										63
									
								
								ct/signoz.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ct/signoz.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://signoz.io/
 | 
			
		||||
 | 
			
		||||
APP="SigNoz"
 | 
			
		||||
var_tags="${var_tags:-notes}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-20}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/signoz ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "signoz" "SigNoz/signoz"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop signoz
 | 
			
		||||
    systemctl stop signoz-otel-collector
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_amd64.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_amd64.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/signoz-schema-migrator/bin
 | 
			
		||||
    $STD ./signoz-schema-migrator sync --dsn="tcp://localhost:9000?password=" --replication=true  --up=
 | 
			
		||||
    $STD ./signoz-schema-migrator async --dsn="tcp://localhost:9000?password=" --replication=true  --up=
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start signoz-otel-collector
 | 
			
		||||
    systemctl start signoz
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
							
								
								
									
										54
									
								
								ct/stylus.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								ct/stylus.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: luismco
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mmastrac/stylus
 | 
			
		||||
 | 
			
		||||
APP="Stylus"
 | 
			
		||||
var_tags="${var_tags:-network}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
var_fuse="${var_fuse:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/stylus ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "stylus" "mmastrac/stylus"; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop stylus
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "stylus" "mmastrac/stylus" "singlefile" "latest" "/usr/bin/" "*_linux_amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start stylus
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
 | 
			
		||||
							
								
								
									
										52
									
								
								ct/telegraf.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								ct/telegraf.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/influxdata/telegraf
 | 
			
		||||
 | 
			
		||||
APP="telegraf"
 | 
			
		||||
var_tags="${var_tags:-collector;metrics}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /etc/telegraf/telegraf.conf ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping $APP"
 | 
			
		||||
  systemctl stop telegraf
 | 
			
		||||
  msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get upgrade telegraf -y
 | 
			
		||||
  msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting $APP"
 | 
			
		||||
  systemctl start telegraf
 | 
			
		||||
  msg_ok "Started $APP"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
							
								
								
									
										63
									
								
								ct/uhf.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ct/uhf.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: zackwithak13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://www.uhfapp.com/server
 | 
			
		||||
 | 
			
		||||
APP="UHF"
 | 
			
		||||
var_tags="${var_tags:-media}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/uhf-server ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "uhf-server" "swapplications/uhf-server-dist"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop uhf-server
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-x64-*.zip"
 | 
			
		||||
    fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-x64-*.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start uhf-server
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    $STD apt-get -y autoremove
 | 
			
		||||
    $STD apt-get -y autoclean
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7568${CL}"
 | 
			
		||||
@@ -27,7 +27,7 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="yarn@latest,node-gyp" setup_nodejs
 | 
			
		||||
  if check_for_gh_release "wikijs" "requarks/wiki"; then
 | 
			
		||||
    msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
 | 
			
		||||
    SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "OpenWrt",
 | 
			
		||||
  "slug": "openwrt",
 | 
			
		||||
  "slug": "openwrt-vm",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4,
 | 
			
		||||
    2
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "vm/openwrt.sh",
 | 
			
		||||
      "script": "vm/openwrt-vm.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 256,
 | 
			
		||||
@@ -17,7 +17,7 @@
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/resilio-sync.sh",
 | 
			
		||||
      "script": "ct/resiliosync.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/scraparr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/scraparr.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Scraparr",
 | 
			
		||||
  "slug": "scraparr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    14
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-15",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 7100,
 | 
			
		||||
  "documentation": "https://github.com/thecfu/scraparr/blob/main/README.md",
 | 
			
		||||
  "website": "https://github.com/thecfu/scraparr",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/scraparr-dark.svg",
 | 
			
		||||
  "config_path": "/scraparr/config/config.yaml",
 | 
			
		||||
  "description": "Scraparr is a Prometheus exporter for the *arr suite (Sonarr, Radarr, Lidarr, etc.). It provides metrics that can be scraped by Prometheus to monitor and visualize the health and performance of your *arr applications.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/scraparr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Edit config file then restart the scraparr service: `systemctl restart scraparr`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/signoz.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/signoz.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "SigNoz",
 | 
			
		||||
  "slug": "signoz",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-15",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://signoz.io/docs/introduction/",
 | 
			
		||||
  "config_path": "/opt/signoz/conf/systemd.env",
 | 
			
		||||
  "website": "https://signoz.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/signoz.webp",
 | 
			
		||||
  "description": "SigNoz is an open-source Datadog or New Relic alternative. Get APM, logs, traces, metrics, exceptions, & alerts in a single tool.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/signoz.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The first user you register will be the admin user.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/stylus.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/stylus.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Stylus",
 | 
			
		||||
  "slug": "stylus",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-12",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8000,
 | 
			
		||||
  "documentation": "https://mmastrac.github.io/stylus/",
 | 
			
		||||
  "website": "https://github.com/mmastrac/stylus",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stylus.webp",
 | 
			
		||||
  "config_path": "/opt/stylus/config.yaml",
 | 
			
		||||
  "description": "Stylus (style + status) is a lightweight status page for infrastructure and networks. Configure a set of bash scripts that test the various parts of your infrastructure, set up visualizations with minimal configuration, and Stylus will generate you a dashboard for your system.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/stylus.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/telegraf.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/telegraf.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Telegraf",
 | 
			
		||||
  "slug": "telegraf",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-11",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://docs.influxdata.com/telegraf/v1/",
 | 
			
		||||
  "config_path": "/etc/telegraf/telegraf.conf",
 | 
			
		||||
  "website": "https://github.com/influxdata/telegraf",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/telegraf.webp",
 | 
			
		||||
  "description": "Telegraf collects and sends time series data from databases, systems, and IoT sensors. It has no external dependencies, is easy to install, and requires minimal memory.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/telegraf.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Make sure to configure an output for the telegraf config and start the service with `systemctl start telegraf`.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/uhf.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/uhf.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "UHF Server",
 | 
			
		||||
  "slug": "uhf",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-12",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 7568,
 | 
			
		||||
  "documentation": "https://www.uhfapp.com/server",
 | 
			
		||||
  "website": "https://www.uhfapp.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/uhf.webp",
 | 
			
		||||
  "config_path": "/etc/uhf-server/",
 | 
			
		||||
  "description": "UHF Server is a powerful companion app that lets you seamlessly schedule and record your favorite shows from the UHF app.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/uhf.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -17,7 +17,7 @@ const inter = Inter({ subsets: ["latin"] });
 | 
			
		||||
export const metadata: Metadata = {
 | 
			
		||||
  title: "Proxmox VE Helper-Scripts",
 | 
			
		||||
  description:
 | 
			
		||||
    "The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.",
 | 
			
		||||
    "The official website for the Proxmox VE Helper-Scripts (Community) repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
 | 
			
		||||
  applicationName: "Proxmox VE Helper-Scripts",
 | 
			
		||||
  generator: "Next.js",
 | 
			
		||||
  referrer: "origin-when-cross-origin",
 | 
			
		||||
@@ -57,7 +57,7 @@ export const metadata: Metadata = {
 | 
			
		||||
  openGraph: {
 | 
			
		||||
    title: "Proxmox VE Helper-Scripts",
 | 
			
		||||
    description:
 | 
			
		||||
      "The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.",
 | 
			
		||||
      "The official website for the Proxmox VE Helper-Scripts (Community) repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
 | 
			
		||||
    url: `https://community-scripts.github.io/${basePath}/`,
 | 
			
		||||
    siteName: "Proxmox VE Helper-Scripts",
 | 
			
		||||
    images: [
 | 
			
		||||
@@ -76,7 +76,7 @@ export const metadata: Metadata = {
 | 
			
		||||
    title: "Proxmox VE Helper-Scripts",
 | 
			
		||||
    creator: "@BramSuurdje",
 | 
			
		||||
    description:
 | 
			
		||||
      "The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.",
 | 
			
		||||
      "The official website for the Proxmox VE Helper-Scripts (Community) repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
 | 
			
		||||
    images: [`https://community-scripts.github.io/${basePath}/defaultimg.png`],
 | 
			
		||||
  },
 | 
			
		||||
  manifest: "/manifest.webmanifest",
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ export default function manifest(): MetadataRoute.Manifest {
 | 
			
		||||
    name: "Proxmox VE Helper-Scripts",
 | 
			
		||||
    short_name: "Proxmox VE Helper-Scripts",
 | 
			
		||||
    description:
 | 
			
		||||
      "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.",
 | 
			
		||||
      "A redesigned front-end for the Proxmox VE Helper-Scripts repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
 | 
			
		||||
    theme_color: "#030712",
 | 
			
		||||
    background_color: "#030712",
 | 
			
		||||
    display: "standalone",
 | 
			
		||||
 
 | 
			
		||||
@@ -113,8 +113,8 @@ export default function Page() {
 | 
			
		||||
                <p>
 | 
			
		||||
                  With 300+ scripts to help you manage your
 | 
			
		||||
                  {" "}
 | 
			
		||||
                  <b>Proxmox VE environment</b>
 | 
			
		||||
                  . Whether you're a seasoned
 | 
			
		||||
                  <b>Proxmox VE</b>
 | 
			
		||||
                  , whether you're a seasoned
 | 
			
		||||
                  user or a newcomer, we've got you covered.
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -143,7 +143,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
 | 
			
		||||
    <div className="">
 | 
			
		||||
      {mostViewedScripts.length > 0 && (
 | 
			
		||||
        <>
 | 
			
		||||
          <h2 className="text-lg font-semibold">Most Viewed Scripts</h2>
 | 
			
		||||
          <h2 className="text-lg font-semibold mb-1">Most Viewed Scripts</h2>
 | 
			
		||||
        </>
 | 
			
		||||
      )}
 | 
			
		||||
      <div className="min-w flex w-full flex-row flex-wrap gap-4">
 | 
			
		||||
 
 | 
			
		||||
@@ -10,9 +10,9 @@ export const basePath = process.env.BASE_PATH || "";
 | 
			
		||||
export const navbarLinks = [
 | 
			
		||||
  {
 | 
			
		||||
    href: `https://github.com/community-scripts/${basePath}`,
 | 
			
		||||
    event: "Github",
 | 
			
		||||
    event: "GitHub",
 | 
			
		||||
    icon: <FaGithub className="h-4 w-4" />,
 | 
			
		||||
    text: "Github",
 | 
			
		||||
    text: "GitHub",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    href: `https://discord.gg/2wvnMDgdnU`,
 | 
			
		||||
@@ -22,9 +22,9 @@ export const navbarLinks = [
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    href: `https://github.com/community-scripts/${basePath}/blob/main/CHANGELOG.md`,
 | 
			
		||||
    event: "Change Log",
 | 
			
		||||
    event: "Changelog",
 | 
			
		||||
    icon: <Scroll className="h-4 w-4" />,
 | 
			
		||||
    text: "Change Log",
 | 
			
		||||
    text: "Changelog",
 | 
			
		||||
    mobileHidden: true,
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ while true; do
 | 
			
		||||
  read -rp "${TAB3}Enable IPv6 support? (y/n): " answer
 | 
			
		||||
  case "$answer" in
 | 
			
		||||
  [Yy]*)
 | 
			
		||||
    var_cf_ip6_provider="auto"
 | 
			
		||||
    var_cf_ip6_provider="cloudflare.trace"
 | 
			
		||||
    break
 | 
			
		||||
    ;;
 | 
			
		||||
  [Nn]*)
 | 
			
		||||
 
 | 
			
		||||
@@ -155,7 +155,6 @@ msg_ok "Packages from Testing Repo Installed"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
 | 
			
		||||
 | 
			
		||||
msg_info "Compiling Custom Photo-processing Library (extreme patience)"
 | 
			
		||||
LD_LIBRARY_PATH=/usr/local/lib
 | 
			
		||||
export LD_RUN_PATH=/usr/local/lib
 | 
			
		||||
STAGING_DIR=/opt/staging
 | 
			
		||||
@@ -165,6 +164,7 @@ SOURCE_DIR=${STAGING_DIR}/image-source
 | 
			
		||||
$STD git clone -b main "$BASE_REPO" "$BASE_DIR"
 | 
			
		||||
mkdir -p "$SOURCE_DIR"
 | 
			
		||||
 | 
			
		||||
msg_info "(1/5) Compiling libjxl"
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
SOURCE=${SOURCE_DIR}/libjxl
 | 
			
		||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
 | 
			
		||||
@@ -203,7 +203,9 @@ ldconfig /usr/local/lib
 | 
			
		||||
$STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
msg_ok "(1/5) Compiled libjxl"
 | 
			
		||||
 | 
			
		||||
msg_info "(2/5) Compiling libheif"
 | 
			
		||||
SOURCE=${SOURCE_DIR}/libheif
 | 
			
		||||
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
 | 
			
		||||
: "${LIBHEIF_REVISION:=35dad50a9145332a7bfdf1ff6aef6801fb613d68}"
 | 
			
		||||
@@ -227,7 +229,9 @@ ldconfig /usr/local/lib
 | 
			
		||||
$STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
rm -rf "$SOURCE"/build
 | 
			
		||||
msg_ok "(2/5) Compiled libheif"
 | 
			
		||||
 | 
			
		||||
msg_info "(3/5) Compiling libraw"
 | 
			
		||||
SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
# : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
 | 
			
		||||
: "${LIBRAW_REVISION:=09bea31181b43e97959ee5452d91e5bc66365f1f}"
 | 
			
		||||
@@ -241,7 +245,9 @@ $STD make install
 | 
			
		||||
ldconfig /usr/local/lib
 | 
			
		||||
$STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
msg_ok "(3/5) Compiled libraw"
 | 
			
		||||
 | 
			
		||||
msg_info "(4/5) Compiling imagemagick"
 | 
			
		||||
SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
# : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
 | 
			
		||||
: "${IMAGEMAGICK_REVISION:=8289a3388a085ad5ae81aa6812f21554bdfd54f2}"
 | 
			
		||||
@@ -254,7 +260,9 @@ $STD make install
 | 
			
		||||
ldconfig /usr/local/lib
 | 
			
		||||
$STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
msg_ok "(4/5) Compiled imagemagick"
 | 
			
		||||
 | 
			
		||||
msg_info "(5/5) Compiling libvips"
 | 
			
		||||
SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
@@ -267,6 +275,7 @@ $STD ninja install
 | 
			
		||||
ldconfig /usr/local/lib
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
rm -rf "$SOURCE"/build
 | 
			
		||||
msg_ok "(5/5) Compiled libvips"
 | 
			
		||||
{
 | 
			
		||||
  echo "imagemagick: $IMAGEMAGICK_REVISION"
 | 
			
		||||
  echo "libheif: $LIBHEIF_REVISION"
 | 
			
		||||
@@ -274,7 +283,7 @@ rm -rf "$SOURCE"/build
 | 
			
		||||
  echo "libraw: $LIBRAW_REVISION"
 | 
			
		||||
  echo "libvips: $LIBVIPS_REVISION"
 | 
			
		||||
} >~/.immich_library_revisions
 | 
			
		||||
msg_ok "Custom Photo-processing Library Compiled"
 | 
			
		||||
msg_ok "Custom Photo-processing Libraries Compiled Successfully"
 | 
			
		||||
 | 
			
		||||
INSTALL_DIR="/opt/${APPLICATION}"
 | 
			
		||||
UPLOAD_DIR="${INSTALL_DIR}/upload"
 | 
			
		||||
@@ -285,9 +294,9 @@ GEO_DIR="${INSTALL_DIR}/geodata"
 | 
			
		||||
mkdir -p "$INSTALL_DIR"
 | 
			
		||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.141.1" "$SRC_DIR"
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.142.0" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION} (more patience please)"
 | 
			
		||||
msg_info "Installing ${APPLICATION} (patience)"
 | 
			
		||||
 | 
			
		||||
cd "$SRC_DIR"/server
 | 
			
		||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
 | 
			
		||||
@@ -319,15 +328,14 @@ msg_ok "Installed Immich Server and Web Components"
 | 
			
		||||
cd "$SRC_DIR"/machine-learning
 | 
			
		||||
mkdir -p "$ML_DIR"
 | 
			
		||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
 | 
			
		||||
$STD uv venv "$VIRTUAL_ENV"
 | 
			
		||||
if [[ -f ~/.openvino ]]; then
 | 
			
		||||
  msg_info "Installing HW-accelerated machine-learning"
 | 
			
		||||
  uv -q sync --extra openvino --no-cache --active
 | 
			
		||||
  $STD uv sync --extra openvino --no-cache --active
 | 
			
		||||
  patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
 | 
			
		||||
  msg_ok "Installed HW-accelerated machine-learning"
 | 
			
		||||
else
 | 
			
		||||
  msg_info "Installing machine-learning"
 | 
			
		||||
  uv -q sync --extra cpu --no-cache --active
 | 
			
		||||
  $STD uv sync --extra cpu --no-cache --active
 | 
			
		||||
  msg_ok "Installed machine-learning"
 | 
			
		||||
fi
 | 
			
		||||
cd "$SRC_DIR"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ mkdir -p $OLLAMA_INSTALL_DIR
 | 
			
		||||
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
 | 
			
		||||
TMP_TAR="/tmp/ollama.tgz"
 | 
			
		||||
echo -e "\n"
 | 
			
		||||
if curl -fL# -o "$TMP_TAR" "$OLLAMA_URL"; then
 | 
			
		||||
if curl -fL# -C - -o "$TMP_TAR" "$OLLAMA_URL"; then
 | 
			
		||||
  if tar -xzf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
 | 
			
		||||
    ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
 | 
			
		||||
    echo "${RELEASE}" >/opt/Ollama_version.txt
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,14 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Proxmox Datacenter Manager"
 | 
			
		||||
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg | gpg --dearmor -o /etc/apt/keyrings/proxmox-release-bookworm.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/proxmox-release-bookworm.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test  " >/etc/apt/sources.list.d/proxmox-release-bookworm.list
 | 
			
		||||
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -o /usr/share/keyrings/proxmox-archive-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test  " >/etc/apt/sources.list.d/pdm-test.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  proxmox-datacenter-manager \
 | 
			
		||||
  proxmox-datacenter-manager-ui
 | 
			
		||||
DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
$STD apt-get -o Dpkg::Options::="--force-confdef" \
 | 
			
		||||
        -o Dpkg::Options::="--force-confold" \
 | 
			
		||||
        install -y proxmox-datacenter-manager \
 | 
			
		||||
        proxmox-datacenter-manager-ui
 | 
			
		||||
msg_ok "Installed Proxmox Datacenter Manager"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								install/scraparr-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								install/scraparr-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: JasonGreenC
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/thecfu/scraparr
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
fetch_and_deploy_gh_release "scrappar" "thecfu/scraparr" "tarball" "latest" "/opt/scraparr"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Scraparr"
 | 
			
		||||
cd /opt/scraparr
 | 
			
		||||
$STD uv venv /opt/scraparr/.venv
 | 
			
		||||
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
 | 
			
		||||
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
 | 
			
		||||
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
 | 
			
		||||
chmod -R 755 /opt/scraparr
 | 
			
		||||
mkdir -p /scraparr/config
 | 
			
		||||
mv /opt/scraparr/config.yaml /scraparr/config/config.yaml
 | 
			
		||||
chmod -R 755 /scraparr
 | 
			
		||||
msg_ok "Installed Scraparr"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/scraparr.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Scraparr
 | 
			
		||||
Wants=network-online.target
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/scraparr/src
 | 
			
		||||
ExecStart=/opt/scraparr/.venv/bin/python -m scraparr.scraparr
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now scraparr
 | 
			
		||||
msg_ok "Configured Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										262
									
								
								install/signoz-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										262
									
								
								install/signoz-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,262 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://signoz.io/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apt-transport-https \
 | 
			
		||||
  ca-certificates
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
JAVA_VERSION="21" setup_java
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up ClickHouse"
 | 
			
		||||
curl -fsSL "https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key" | gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg arch=amd64] https://packages.clickhouse.com/deb stable main" >/etc/apt/sources.list.d/clickhouse.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
$STD apt-get install -y clickhouse-server clickhouse-client
 | 
			
		||||
msg_ok "Setup ClickHouse"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Zookeeper"
 | 
			
		||||
curl -fsSL "https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz" -o "$HOME/zookeeper.tar.gz"
 | 
			
		||||
tar -xzf "$HOME/zookeeper.tar.gz" -C "$HOME"
 | 
			
		||||
mkdir -p /opt/zookeeper
 | 
			
		||||
mkdir -p /var/lib/zookeeper
 | 
			
		||||
mkdir -p /var/log/zookeeper
 | 
			
		||||
cp -r ~/apache-zookeeper-3.8.4-bin/* /opt/zookeeper
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/zookeeper/conf/zoo.cfg
 | 
			
		||||
tickTime=2000
 | 
			
		||||
dataDir=/var/lib/zookeeper
 | 
			
		||||
clientPort=2181
 | 
			
		||||
admin.serverPort=3181
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/zookeeper/conf/zoo.env
 | 
			
		||||
ZOO_LOG_DIR=/var/log/zookeeper
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/zookeeper.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Zookeeper
 | 
			
		||||
Documentation=http://zookeeper.apache.org
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
EnvironmentFile=/opt/zookeeper/conf/zoo.env
 | 
			
		||||
Type=forking
 | 
			
		||||
WorkingDirectory=/opt/zookeeper
 | 
			
		||||
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
 | 
			
		||||
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
 | 
			
		||||
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
 | 
			
		||||
TimeoutSec=30
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now zookeeper
 | 
			
		||||
msg_ok "Setup Zookeeper"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring ClickHouse"
 | 
			
		||||
cat <<EOF >/etc/clickhouse-server/config.d/cluster.xml
 | 
			
		||||
<clickhouse replace="true">
 | 
			
		||||
    <distributed_ddl>
 | 
			
		||||
        <path>/clickhouse/task_queue/ddl</path>
 | 
			
		||||
    </distributed_ddl>
 | 
			
		||||
    <remote_servers>
 | 
			
		||||
        <cluster>
 | 
			
		||||
            <shard>
 | 
			
		||||
                <replica>
 | 
			
		||||
                    <host>127.0.0.1</host>
 | 
			
		||||
                    <port>9000</port>
 | 
			
		||||
                </replica>
 | 
			
		||||
            </shard>
 | 
			
		||||
        </cluster>
 | 
			
		||||
    </remote_servers>
 | 
			
		||||
    <zookeeper>
 | 
			
		||||
        <node>
 | 
			
		||||
            <host>127.0.0.1</host>
 | 
			
		||||
            <port>2181</port>
 | 
			
		||||
        </node>
 | 
			
		||||
    </zookeeper>
 | 
			
		||||
    <macros>
 | 
			
		||||
        <shard>01</shard>
 | 
			
		||||
        <replica>01</replica>
 | 
			
		||||
    </macros>
 | 
			
		||||
</clickhouse>
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now clickhouse-server
 | 
			
		||||
msg_ok "Configured ClickHouse"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Running ClickHouse migrations"
 | 
			
		||||
cd /opt/signoz-schema-migrator/bin
 | 
			
		||||
$STD ./signoz-schema-migrator sync --dsn="tcp://localhost:9000?password=" --replication=true  --up=
 | 
			
		||||
$STD ./signoz-schema-migrator async --dsn="tcp://localhost:9000?password=" --replication=true  --up=
 | 
			
		||||
msg_ok "ClickHouse Migrations Completed"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up SigNoz"
 | 
			
		||||
mkdir -p /var/lib/signoz
 | 
			
		||||
cat <<EOF >/opt/signoz/conf/systemd.env
 | 
			
		||||
SIGNOZ_INSTRUMENTATION_LOGS_LEVEL=info
 | 
			
		||||
INVITE_EMAIL_TEMPLATE=/opt/signoz/templates/invitation_email_template.html
 | 
			
		||||
SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
 | 
			
		||||
SIGNOZ_WEB_ENABLED=true
 | 
			
		||||
SIGNOZ_WEB_DIRECTORY=/opt/signoz/web
 | 
			
		||||
SIGNOZ_JWT_SECRET=secret
 | 
			
		||||
SIGNOZ_ALERTMANAGER_PROVIDER=signoz
 | 
			
		||||
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse
 | 
			
		||||
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://localhost:9000?password=
 | 
			
		||||
DOT_METRICS_ENABLED=true
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/signoz.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=SigNoz
 | 
			
		||||
Documentation=https://signoz.io/docs
 | 
			
		||||
After=clickhouse-server.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
KillMode=mixed
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
WorkingDirectory=/opt/signoz
 | 
			
		||||
EnvironmentFile=/opt/signoz/conf/systemd.env
 | 
			
		||||
ExecStart=/opt/signoz/bin/signoz server
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now signoz
 | 
			
		||||
msg_ok "Setup Signoz"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up SigNoz OTel Collector"
 | 
			
		||||
mkdir -p /var/lib/signoz-otel-collector
 | 
			
		||||
cat <<EOF >/opt/signoz-otel-collector/conf/config.yaml
 | 
			
		||||
receivers:
 | 
			
		||||
  otlp:
 | 
			
		||||
    protocols:
 | 
			
		||||
      grpc:
 | 
			
		||||
        endpoint: 0.0.0.0:4317
 | 
			
		||||
        max_recv_msg_size_mib: 16
 | 
			
		||||
      http:
 | 
			
		||||
        endpoint: 0.0.0.0:4318
 | 
			
		||||
  jaeger:
 | 
			
		||||
    protocols:
 | 
			
		||||
      grpc:
 | 
			
		||||
        endpoint: 0.0.0.0:14250
 | 
			
		||||
      thrift_http:
 | 
			
		||||
        endpoint: 0.0.0.0:14268
 | 
			
		||||
  httplogreceiver/heroku:
 | 
			
		||||
    endpoint: 0.0.0.0:8081
 | 
			
		||||
    source: heroku
 | 
			
		||||
  httplogreceiver/json:
 | 
			
		||||
    endpoint: 0.0.0.0:8082
 | 
			
		||||
    source: json
 | 
			
		||||
processors:
 | 
			
		||||
  batch:
 | 
			
		||||
    send_batch_size: 50000
 | 
			
		||||
    timeout: 1s
 | 
			
		||||
  signozspanmetrics/delta:
 | 
			
		||||
    metrics_exporter: signozclickhousemetrics
 | 
			
		||||
    latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s]
 | 
			
		||||
    dimensions_cache_size: 100000
 | 
			
		||||
    dimensions:
 | 
			
		||||
      - name: service.namespace
 | 
			
		||||
        default: default
 | 
			
		||||
      - name: deployment.environment
 | 
			
		||||
        default: default
 | 
			
		||||
      - name: signoz.collector.id
 | 
			
		||||
    aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
 | 
			
		||||
extensions:
 | 
			
		||||
  health_check:
 | 
			
		||||
    endpoint: 0.0.0.0:13133
 | 
			
		||||
  zpages:
 | 
			
		||||
    endpoint: localhost:55679
 | 
			
		||||
  pprof:
 | 
			
		||||
    endpoint: localhost:1777
 | 
			
		||||
exporters:
 | 
			
		||||
  clickhousetraces:
 | 
			
		||||
    datasource: tcp://localhost:9000/signoz_traces?password=
 | 
			
		||||
    use_new_schema: true
 | 
			
		||||
  signozclickhousemetrics:
 | 
			
		||||
    dsn: tcp://localhost:9000/signoz_metrics?password=
 | 
			
		||||
    timeout: 45s
 | 
			
		||||
  clickhouselogsexporter:
 | 
			
		||||
    dsn: tcp://localhost:9000/signoz_logs?password=
 | 
			
		||||
    timeout: 10s
 | 
			
		||||
    use_new_schema: true
 | 
			
		||||
  metadataexporter:
 | 
			
		||||
    dsn: tcp://localhost:9000/signoz_metadata?password=
 | 
			
		||||
    timeout: 10s
 | 
			
		||||
    tenant_id: default
 | 
			
		||||
    cache:
 | 
			
		||||
      provider: in_memory
 | 
			
		||||
service:
 | 
			
		||||
  telemetry:
 | 
			
		||||
    logs:
 | 
			
		||||
      encoding: json
 | 
			
		||||
  extensions: [health_check, zpages, pprof]
 | 
			
		||||
  pipelines:
 | 
			
		||||
    traces:
 | 
			
		||||
      receivers: [otlp, jaeger]
 | 
			
		||||
      processors: [signozspanmetrics/delta, batch]
 | 
			
		||||
      exporters: [clickhousetraces, metadataexporter]
 | 
			
		||||
    metrics:
 | 
			
		||||
      receivers: [otlp]
 | 
			
		||||
      processors: [batch]
 | 
			
		||||
      exporters: [metadataexporter, signozclickhousemetrics]
 | 
			
		||||
    logs:
 | 
			
		||||
      receivers: [otlp, httplogreceiver/heroku, httplogreceiver/json]
 | 
			
		||||
      processors: [batch]
 | 
			
		||||
      exporters: [clickhouselogsexporter, metadataexporter]
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/signoz-otel-collector/conf/opamp.yaml
 | 
			
		||||
server_endpoint: ws://127.0.0.1:4320/v1/opamp
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/signoz-otel-collector.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=SigNoz OTel Collector
 | 
			
		||||
Documentation=https://signoz.io/docs
 | 
			
		||||
After=clickhouse-server.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
KillMode=mixed
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
WorkingDirectory=/opt/signoz-otel-collector
 | 
			
		||||
ExecStart=/opt/signoz-otel-collector/bin/signoz-otel-collector --config=/opt/signoz-otel-collector/conf/config.yaml --manager-config=/opt/signoz-otel-collector/conf/opamp.yaml --copy-path=/var/lib/signoz-otel-collector/config.yaml
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now signoz-otel-collector
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf ~/zookeeper.tar.gz
 | 
			
		||||
rm -rf ~/apache-zookeeper-3.8.4-bin
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										46
									
								
								install/stylus-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								install/stylus-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: luismco
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mmastrac/stylus
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "stylus" "mmastrac/stylus" "singlefile" "latest" "/usr/bin/" "*_linux_amd64"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Stylus"
 | 
			
		||||
$STD stylus init /opt/stylus/
 | 
			
		||||
msg_ok "Configured Stylus"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/stylus.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Stylus Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=stylus run /opt/stylus/
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=5
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now stylus
 | 
			
		||||
msg_ok "Created service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned up"
 | 
			
		||||
							
								
								
									
										39
									
								
								install/telegraf-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								install/telegraf-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/influxdata/telegraf
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Adding Telegraf key and repository"
 | 
			
		||||
curl -fsSL -O https://repos.influxdata.com/influxdata-archive.key
 | 
			
		||||
gpg --show-keys --with-fingerprint --with-colons ./influxdata-archive.key 2>&1 \
 | 
			
		||||
| grep -q '^fpr:\+24C975CBA61A024EE1B631787C3D57159FC2F927:$' \
 | 
			
		||||
&& cat influxdata-archive.key \
 | 
			
		||||
| gpg --dearmor \
 | 
			
		||||
| tee /etc/apt/keyrings/influxdata-archive.gpg > /dev/null \
 | 
			
		||||
&& echo 'deb [signed-by=/etc/apt/keyrings/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main' \
 | 
			
		||||
| tee /etc/apt/sources.list.d/influxdata.list > /dev/null
 | 
			
		||||
msg_ok "Added Telegraf Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Telegraf"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install telegraf -y
 | 
			
		||||
msg_ok "Installed Telegraf"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
rm /influxdata-archive.key
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										58
									
								
								install/uhf-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								install/uhf-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: zackwithak13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://www.uhfapp.com/server
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y ffmpeg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting Up UHF Server Environment"
 | 
			
		||||
mkdir -p /etc/uhf-server
 | 
			
		||||
mkdir -p /var/lib/uhf-server/data
 | 
			
		||||
mkdir -p /var/lib/uhf-server/recordings
 | 
			
		||||
cat <<EOF >/etc/uhf-server/.env
 | 
			
		||||
API_HOST=0.0.0.0
 | 
			
		||||
API_PORT=7568
 | 
			
		||||
RECORDINGS_DIR=/var/lib/uhf-server/recordings
 | 
			
		||||
DB_PATH=/var/lib/uhf-server/data/db.json
 | 
			
		||||
LOG_LEVEL=INFO
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Set Up UHF Server Environment"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-x64-*.zip"
 | 
			
		||||
fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-x64-*.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/uhf-server.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=UHF Server service
 | 
			
		||||
After=syslog.target network-online.target
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/uhf-server
 | 
			
		||||
EnvironmentFile=/etc/uhf-server/.env
 | 
			
		||||
ExecStart=/opt/uhf-server/uhf-server
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now uhf-server
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -18,7 +18,7 @@ $STD apt-get install -y \
 | 
			
		||||
  git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" NODE_MODULE="yarn@latest,node-gyp" setup_nodejs
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="yarn@latest,node-gyp" setup_nodejs
 | 
			
		||||
PG_VERSION="17" setup_postgresql
 | 
			
		||||
fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -82,7 +82,7 @@ network_check() {
 | 
			
		||||
update_os() {
 | 
			
		||||
  msg_info "Updating Container OS"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/tools.func)
 | 
			
		||||
  source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
 | 
			
		||||
  msg_ok "Updated Container OS"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2800
									
								
								misc/tools.func
									
									
									
									
									
								
							
							
						
						
									
										2800
									
								
								misc/tools.func
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -515,6 +515,7 @@ post_routines_common() {
 | 
			
		||||
    whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
 | 
			
		||||
    msg_info "Disabling subscription nag"
 | 
			
		||||
    # Create external script, this is needed because DPkg::Post-Invoke is fidly with quote interpretation
 | 
			
		||||
    mkdir -p /usr/local/bin
 | 
			
		||||
    cat >/usr/local/bin/pve-remove-nag.sh <<'EOF'
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
WEB_JS=/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
 | 
			
		||||
@@ -530,14 +531,26 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
 | 
			
		||||
    printf "%s\n" \
 | 
			
		||||
      "$MARKER" \
 | 
			
		||||
      "<script>" \
 | 
			
		||||
      "  function watchAndRemoveDialog() {" \
 | 
			
		||||
      "    const observer = new MutationObserver(() => {" \
 | 
			
		||||
      "      const dialog = document.querySelector('dialog[aria-label=\"No valid subscription\"]');" \
 | 
			
		||||
      "      if (dialog) { dialog.remove(); console.log('Removed dialog: No valid subscription'); observer.disconnect(); }" \
 | 
			
		||||
      "  function removeSubscriptionElements() {" \
 | 
			
		||||
      "    const dialogs = document.querySelectorAll('dialog.pwt-outer-dialog');" \
 | 
			
		||||
      "    dialogs.forEach(dialog => {" \
 | 
			
		||||
      "      const closeButton = dialog.querySelector('.fa-close');" \
 | 
			
		||||
      "      const exclamationIcon = dialog.querySelector('.fa-exclamation-triangle');" \
 | 
			
		||||
      "      const continueButton = dialog.querySelector('button');" \
 | 
			
		||||
      "      if (closeButton && exclamationIcon && continueButton) { dialog.remove(); console.log('Removed subscription dialog'); }" \
 | 
			
		||||
      "    });" \
 | 
			
		||||
      "    const cards = document.querySelectorAll('.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center');" \
 | 
			
		||||
      "    cards.forEach(card => {" \
 | 
			
		||||
      "      const hasInteractiveElements = card.querySelector('button, input, a');" \
 | 
			
		||||
      "      const hasComplexStructure = card.querySelector('.pwt-grid, .pwt-flex, .pwt-button');" \
 | 
			
		||||
      "      if (!hasInteractiveElements && !hasComplexStructure) { card.remove(); console.log('Removed subscription card'); }" \
 | 
			
		||||
      "    });" \
 | 
			
		||||
      "    observer.observe(document.body, { childList: true, subtree: true });" \
 | 
			
		||||
      "  }" \
 | 
			
		||||
      "  setTimeout(watchAndRemoveDialog, 100);" \
 | 
			
		||||
      "  const observer = new MutationObserver(removeSubscriptionElements);" \
 | 
			
		||||
      "  observer.observe(document.body, { childList: true, subtree: true });" \
 | 
			
		||||
      "  removeSubscriptionElements();" \
 | 
			
		||||
      "  setInterval(removeSubscriptionElements, 300);" \
 | 
			
		||||
      "  setTimeout(() => {observer.disconnect();}, 10000);" \
 | 
			
		||||
      "</script>" \
 | 
			
		||||
      "" >> "$MOBILE_TPL"
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -205,6 +205,15 @@ function exit-script() {
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function ensure_pv() {
 | 
			
		||||
  if ! command -v pv &>/dev/null; then
 | 
			
		||||
    msg_info "Installing required package: pv"
 | 
			
		||||
    apt-get update -qq &>/dev/null
 | 
			
		||||
    apt-get install -y pv &>/dev/null
 | 
			
		||||
    msg_ok "Installed pv"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  BRANCH="$stable"
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
@@ -448,8 +457,8 @@ check_root
 | 
			
		||||
arch_check
 | 
			
		||||
pve_check
 | 
			
		||||
ssh_check
 | 
			
		||||
ensure_pv
 | 
			
		||||
start_script
 | 
			
		||||
 | 
			
		||||
post_to_api_vm
 | 
			
		||||
 | 
			
		||||
msg_info "Validating Storage"
 | 
			
		||||
@@ -505,10 +514,6 @@ else
 | 
			
		||||
  msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if ! command -v pv &>/dev/null; then
 | 
			
		||||
  apt-get update -qq &>/dev/null && apt-get install -y pv &>/dev/null
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_info "Creating Home Assistant OS VM shell"
 | 
			
		||||
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
 | 
			
		||||
 
 | 
			
		||||
@@ -22,13 +22,13 @@ function header_info {
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
echo -e "\n Loading..."
 | 
			
		||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
 | 
			
		||||
METHOD=""
 | 
			
		||||
NSAPP="openwrt-vm"
 | 
			
		||||
var_os="openwrt"
 | 
			
		||||
var_version=" "
 | 
			
		||||
DISK_SIZE="0.5G"
 | 
			
		||||
DISK_SIZE="1G"
 | 
			
		||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
 | 
			
		||||
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
 | 
			
		||||
 | 
			
		||||
@@ -40,10 +40,31 @@ BGN=$(echo "\033[4;92m")
 | 
			
		||||
GN=$(echo "\033[1;92m")
 | 
			
		||||
DGN=$(echo "\033[32m")
 | 
			
		||||
CL=$(echo "\033[m")
 | 
			
		||||
 | 
			
		||||
BOLD=$(echo "\033[1m")
 | 
			
		||||
BFR="\\r\\033[K"
 | 
			
		||||
HOLD="-"
 | 
			
		||||
CM="${GN}✓${CL}"
 | 
			
		||||
CROSS="${RD}✗${CL}"
 | 
			
		||||
HOLD=" "
 | 
			
		||||
TAB="  "
 | 
			
		||||
 | 
			
		||||
CM="${TAB}✔️${TAB}${CL}"
 | 
			
		||||
CROSS="${TAB}✖️${TAB}${CL}"
 | 
			
		||||
INFO="${TAB}💡${TAB}${CL}"
 | 
			
		||||
OS="${TAB}🖥️${TAB}${CL}"
 | 
			
		||||
CONTAINERTYPE="${TAB}📦${TAB}${CL}"
 | 
			
		||||
DISKSIZE="${TAB}💾${TAB}${CL}"
 | 
			
		||||
CPUCORE="${TAB}🧠${TAB}${CL}"
 | 
			
		||||
RAMSIZE="${TAB}🛠️${TAB}${CL}"
 | 
			
		||||
CONTAINERID="${TAB}🆔${TAB}${CL}"
 | 
			
		||||
HOSTNAME="${TAB}🏠${TAB}${CL}"
 | 
			
		||||
BRIDGE="${TAB}🌉${TAB}${CL}"
 | 
			
		||||
GATEWAY="${TAB}🌐${TAB}${CL}"
 | 
			
		||||
DEFAULT="${TAB}⚙️${TAB}${CL}"
 | 
			
		||||
MACADDRESS="${TAB}🔗${TAB}${CL}"
 | 
			
		||||
VLANTAG="${TAB}🏷️${TAB}${CL}"
 | 
			
		||||
CREATING="${TAB}🚀${TAB}${CL}"
 | 
			
		||||
ADVANCED="${TAB}🧩${TAB}${CL}"
 | 
			
		||||
CLOUD="${TAB}☁️${TAB}${CL}"
 | 
			
		||||
 | 
			
		||||
set -Eeo pipefail
 | 
			
		||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
 | 
			
		||||
trap cleanup EXIT
 | 
			
		||||
@@ -248,35 +269,30 @@ function exit-script() {
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
  HN=openwrt
 | 
			
		||||
  HN="openwrt"
 | 
			
		||||
  CORE_COUNT="1"
 | 
			
		||||
  RAM_SIZE="256"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  LAN_BRG="vmbr0"
 | 
			
		||||
  MAC=$GEN_MAC
 | 
			
		||||
  LAN_MAC=$GEN_MAC_LAN
 | 
			
		||||
  LAN_BRG="vmbr0"
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  LAN_VLAN=",tag=999"
 | 
			
		||||
  LAN_IP_ADDR="192.168.1.1"
 | 
			
		||||
  LAN_NETMASK="255.255.255.0"
 | 
			
		||||
  LAN_VLAN=",tag=999"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  START_VM="yes"
 | 
			
		||||
  METHOD="default"
 | 
			
		||||
  echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
 | 
			
		||||
  echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
 | 
			
		||||
  echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using WAN Bridge: ${BGN}${BRG}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using WAN VLAN: ${BGN}Default${CL}"
 | 
			
		||||
  echo -e "${DGN}Using WAN MAC Address: ${BGN}${MAC}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using LAN MAC Address: ${BGN}${LAN_MAC}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using LAN Bridge: ${BGN}${LAN_BRG}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using LAN VLAN: ${BGN}999${CL}"
 | 
			
		||||
  echo -e "${DGN}Using LAN IP Address: ${BGN}${LAN_IP_ADDR}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using LAN NETMASK: ${BGN}${LAN_NETMASK}${CL}"
 | 
			
		||||
  echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
 | 
			
		||||
  echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
 | 
			
		||||
  echo -e "${BL}Creating a OpenWrt VM using the above default settings${CL}"
 | 
			
		||||
  DISK_SIZE="1G"
 | 
			
		||||
  echo -e "${CONTAINERID}${BOLD}${DGN}VMID: ${BGN}${VMID}${CL}"
 | 
			
		||||
  echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
 | 
			
		||||
  echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
 | 
			
		||||
  echo -e "${RAMSIZE}${BOLD}${DGN}RAM: ${BGN}${RAM_SIZE}${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
 | 
			
		||||
  echo -e "${BRIDGE}${BOLD}${DGN}WAN Bridge: ${BGN}${BRG}${CL}"
 | 
			
		||||
  echo -e "${BRIDGE}${BOLD}${DGN}LAN Bridge: ${BGN}${LAN_BRG}${CL}"
 | 
			
		||||
  echo -e "${MACADDRESS}${BOLD}${DGN}WAN MAC: ${BGN}${MAC}${CL}"
 | 
			
		||||
  echo -e "${MACADDRESS}${BOLD}${DGN}LAN MAC: ${BGN}${LAN_MAC}${CL}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function advanced_settings() {
 | 
			
		||||
@@ -328,6 +344,17 @@ function advanced_settings() {
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
 | 
			
		||||
    --inputbox "Set Disk Size in GiB (e.g., 1, 2, 4)" 8 58 "1" \
 | 
			
		||||
    --title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
 | 
			
		||||
      DISK_SIZE="${DISK_SIZE}G"
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
 | 
			
		||||
  else
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN Bridge" 8 58 vmbr0 --title "WAN BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z $BRG ]; then
 | 
			
		||||
      BRG="vmbr0"
 | 
			
		||||
@@ -491,47 +518,39 @@ response=$(curl -fsSL https://openwrt.org)
 | 
			
		||||
stableversion=$(echo "$response" | sed -n 's/.*Current stable release - OpenWrt \([0-9.]\+\).*/\1/p' | head -n 1)
 | 
			
		||||
URL="https://downloads.openwrt.org/releases/$stableversion/targets/x86/64/openwrt-$stableversion-x86-64-generic-ext4-combined.img.gz"
 | 
			
		||||
 | 
			
		||||
sleep 2
 | 
			
		||||
msg_ok "${CL}${BL}${URL}${CL}"
 | 
			
		||||
curl -f#SL -o "$(basename "$URL")" "$URL"
 | 
			
		||||
echo -en "\e[1A\e[0K"
 | 
			
		||||
FILE=$(basename $URL)
 | 
			
		||||
FILE=$(basename "$URL")
 | 
			
		||||
msg_ok "Downloaded ${CL}${BL}$FILE${CL}"
 | 
			
		||||
gunzip -f $FILE >/dev/null 2>/dev/null || true
 | 
			
		||||
NEWFILE="${FILE%.*}"
 | 
			
		||||
FILE="$NEWFILE"
 | 
			
		||||
mv $FILE ${FILE%.*}
 | 
			
		||||
qemu-img resize -f raw ${FILE%.*} 512M >/dev/null 2>/dev/null
 | 
			
		||||
msg_ok "Extracted & Resized OpenWrt Disk Image ${CL}${BL}$FILE${CL}"
 | 
			
		||||
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
 | 
			
		||||
case $STORAGE_TYPE in
 | 
			
		||||
nfs | dir)
 | 
			
		||||
  DISK_EXT=".qcow2"
 | 
			
		||||
  DISK_REF="$VMID/"
 | 
			
		||||
  DISK_IMPORT="-format qcow2"
 | 
			
		||||
  ;;
 | 
			
		||||
btrfs)
 | 
			
		||||
  DISK_EXT=".raw"
 | 
			
		||||
  DISK_REF="$VMID/"
 | 
			
		||||
  DISK_IMPORT="-format raw"
 | 
			
		||||
  ;;
 | 
			
		||||
esac
 | 
			
		||||
for i in {0,1}; do
 | 
			
		||||
  disk="DISK$i"
 | 
			
		||||
  eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
 | 
			
		||||
  eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
gunzip -f "$FILE" >/dev/null 2>&1 || true
 | 
			
		||||
FILE="${FILE%.*}"
 | 
			
		||||
msg_ok "Extracted OpenWrt Disk Image ${CL}${BL}$FILE${CL}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating OpenWrt VM"
 | 
			
		||||
qm create $VMID -cores $CORE_COUNT -memory $RAM_SIZE -name $HN \
 | 
			
		||||
qm create "$VMID" -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" \
 | 
			
		||||
  -onboot 1 -ostype l26 -scsihw virtio-scsi-pci --tablet 0
 | 
			
		||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
 | 
			
		||||
qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
 | 
			
		||||
qm set $VMID \
 | 
			
		||||
  -efidisk0 ${DISK0_REF},efitype=4m,size=4M \
 | 
			
		||||
  -scsi0 ${DISK1_REF},size=512M \
 | 
			
		||||
pvesm alloc "$STORAGE" "$VMID" "vm-$VMID-disk-0" 4M >/dev/null
 | 
			
		||||
 | 
			
		||||
IMPORT_OUT="$(qm importdisk "$VMID" "$FILE" "$STORAGE" --format raw 2>&1 || true)"
 | 
			
		||||
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p")"
 | 
			
		||||
 | 
			
		||||
if [[ -z "$DISK_REF" ]]; then
 | 
			
		||||
  DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$1 ~ ("vm-"id"-disk-") {print $1}' | sort | tail -n1)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -z "$DISK_REF" ]]; then
 | 
			
		||||
  msg_error "Unable to determine imported disk reference."
 | 
			
		||||
  echo "$IMPORT_OUT"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
qm set "$VMID" \
 | 
			
		||||
  -efidisk0 "${STORAGE}:0,efitype=4m,size=4M" \
 | 
			
		||||
  -scsi0 "${DISK_REF},size=${DISK_SIZE}" \
 | 
			
		||||
  -boot order=scsi0 \
 | 
			
		||||
  -tags community-script >/dev/null
 | 
			
		||||
msg_ok "Attached disk (${DISK_SIZE})"
 | 
			
		||||
 | 
			
		||||
DESCRIPTION=$(
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
@@ -569,37 +588,59 @@ msg_ok "Created OpenWrt VM ${CL}${BL}(${HN})"
 | 
			
		||||
msg_info "OpenWrt is being started in order to configure the network interfaces."
 | 
			
		||||
qm start $VMID
 | 
			
		||||
sleep 15
 | 
			
		||||
msg_info "Waiting for OpenWrt to boot..."
 | 
			
		||||
for i in {1..30}; do
 | 
			
		||||
  if qm status "$VMID" | grep -q "running"; then
 | 
			
		||||
    sleep 5
 | 
			
		||||
    msg_ok "OpenWrt is running"
 | 
			
		||||
    break
 | 
			
		||||
  fi
 | 
			
		||||
  sleep 1
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
msg_ok "Network interfaces are being configured as OpenWrt initiates."
 | 
			
		||||
send_line_to_vm ""
 | 
			
		||||
send_line_to_vm "uci delete network.@device[0]"
 | 
			
		||||
send_line_to_vm "uci set network.wan=interface"
 | 
			
		||||
send_line_to_vm "uci set network.wan.device=eth1"
 | 
			
		||||
send_line_to_vm "uci set network.wan.proto=dhcp"
 | 
			
		||||
send_line_to_vm "uci delete network.lan"
 | 
			
		||||
send_line_to_vm "uci set network.lan=interface"
 | 
			
		||||
send_line_to_vm "uci set network.lan.device=eth0"
 | 
			
		||||
send_line_to_vm "uci set network.lan.proto=static"
 | 
			
		||||
send_line_to_vm "uci set network.lan.ipaddr=${LAN_IP_ADDR}"
 | 
			
		||||
send_line_to_vm "uci set network.lan.netmask=${LAN_NETMASK}"
 | 
			
		||||
send_line_to_vm "uci commit"
 | 
			
		||||
send_line_to_vm "halt"
 | 
			
		||||
msg_ok "Network interfaces have been successfully configured."
 | 
			
		||||
until qm status $VMID | grep -q "stopped"; do
 | 
			
		||||
 | 
			
		||||
if qm status "$VMID" | grep -q "running"; then
 | 
			
		||||
  send_line_to_vm ""
 | 
			
		||||
  send_line_to_vm "uci delete network.@device[0]"
 | 
			
		||||
  send_line_to_vm "uci set network.wan=interface"
 | 
			
		||||
  send_line_to_vm "uci set network.wan.device=eth1"
 | 
			
		||||
  send_line_to_vm "uci set network.wan.proto=dhcp"
 | 
			
		||||
  send_line_to_vm "uci delete network.lan"
 | 
			
		||||
  send_line_to_vm "uci set network.lan=interface"
 | 
			
		||||
  send_line_to_vm "uci set network.lan.device=eth0"
 | 
			
		||||
  send_line_to_vm "uci set network.lan.proto=static"
 | 
			
		||||
  send_line_to_vm "uci set network.lan.ipaddr=${LAN_IP_ADDR}"
 | 
			
		||||
  send_line_to_vm "uci set network.lan.netmask=${LAN_NETMASK}"
 | 
			
		||||
  send_line_to_vm "uci commit"
 | 
			
		||||
  send_line_to_vm "halt"
 | 
			
		||||
  msg_ok "Network interfaces configured in OpenWrt"
 | 
			
		||||
else
 | 
			
		||||
  msg_error "VM is not running"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Waiting for OpenWrt to shut down..."
 | 
			
		||||
until qm status "$VMID" | grep -q "stopped"; do
 | 
			
		||||
  sleep 2
 | 
			
		||||
done
 | 
			
		||||
msg_info "Bridge interfaces are being added."
 | 
			
		||||
qm set $VMID \
 | 
			
		||||
  -net0 virtio,bridge=${LAN_BRG},macaddr=${LAN_MAC}${LAN_VLAN}${MTU} \
 | 
			
		||||
  -net1 virtio,bridge=${BRG},macaddr=${MAC}${VLAN}${MTU} >/dev/null 2>/dev/null
 | 
			
		||||
msg_ok "Bridge interfaces have been successfully added."
 | 
			
		||||
if [ "$START_VM" == "yes" ]; then
 | 
			
		||||
msg_ok "OpenWrt has shut down"
 | 
			
		||||
 | 
			
		||||
msg_info "Adding bridge interfaces on Proxmox side"
 | 
			
		||||
qm set "$VMID" \
 | 
			
		||||
  -net0 virtio,bridge="${LAN_BRG}",macaddr="${LAN_MAC}${LAN_VLAN}${MTU}" \
 | 
			
		||||
  -net1 virtio,bridge="${BRG}",macaddr="${MAC}${VLAN}${MTU}" >/dev/null
 | 
			
		||||
msg_ok "Bridge interfaces added"
 | 
			
		||||
 | 
			
		||||
if [ "$START_VM" = "yes" ]; then
 | 
			
		||||
  msg_info "Starting OpenWrt VM"
 | 
			
		||||
  qm start $VMID
 | 
			
		||||
  qm start "$VMID"
 | 
			
		||||
  msg_ok "Started OpenWrt VM"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
VLAN_FINISH=""
 | 
			
		||||
if [ "$VLAN" == "" ] && [ "$VLAN2" != "999" ]; then
 | 
			
		||||
if [ -z "$VLAN" ] && [ "$VLAN2" != "999" ]; then
 | 
			
		||||
  VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
 | 
			
		||||
fi
 | 
			
		||||
post_update_to_api "done" "none"
 | 
			
		||||
msg_ok "Completed Successfully!\n${VLAN_FINISH}"
 | 
			
		||||
msg_ok "Completed Successfully!${VLAN_FINISH:+\n$VLAN_FINISH}"
 | 
			
		||||
@@ -201,6 +201,15 @@ function exit-script() {
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function ensure_pv() {
 | 
			
		||||
  if ! command -v pv &>/dev/null; then
 | 
			
		||||
    msg_info "Installing required package: pv"
 | 
			
		||||
    apt-get update -qq &>/dev/null
 | 
			
		||||
    apt-get install -y pv &>/dev/null
 | 
			
		||||
    msg_ok "Installed pv"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
  MACHINE="q35"
 | 
			
		||||
@@ -432,6 +441,7 @@ check_root
 | 
			
		||||
arch_check
 | 
			
		||||
pve_check
 | 
			
		||||
ssh_check
 | 
			
		||||
ensure_pv
 | 
			
		||||
start_script
 | 
			
		||||
 | 
			
		||||
msg_info "Validating Storage"
 | 
			
		||||
@@ -472,10 +482,6 @@ else
 | 
			
		||||
  msg_ok "Using cached Umbrel OS image"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if ! command -v pv &>/dev/null; then
 | 
			
		||||
  apt-get update -qq &>/dev/null && apt-get install -y pv &>/dev/null
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set -o pipefail
 | 
			
		||||
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
 | 
			
		||||
  -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user