mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			63 Commits
		
	
	
		
			2025-07-05
			...
			2025-07-07
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					1530e52108 | ||
| 
						 | 
					451f6aff8e | ||
| 
						 | 
					046acc75db | ||
| 
						 | 
					f40218aa07 | ||
| 
						 | 
					c5e831dadc | ||
| 
						 | 
					16786a8304 | ||
| 
						 | 
					fc728bcca7 | ||
| 
						 | 
					5516aa493d | ||
| 
						 | 
					54f2f98193 | ||
| 
						 | 
					137a41f67c | ||
| 
						 | 
					26365561dc | ||
| 
						 | 
					9dc0fc80b9 | ||
| 
						 | 
					722f7e14d7 | ||
| 
						 | 
					b2a8a9bd00 | ||
| 
						 | 
					12bd6754ab | ||
| 
						 | 
					74166f97f9 | ||
| 
						 | 
					b2bccd9501 | ||
| 
						 | 
					c567b75aa7 | ||
| 
						 | 
					2d77790b64 | ||
| 
						 | 
					37d466103d | ||
| 
						 | 
					d59aa0527a | ||
| 
						 | 
					9ddf10f82e | ||
| 
						 | 
					69d2835c73 | ||
| 
						 | 
					59f99a27d2 | ||
| 
						 | 
					372b52f64d | ||
| 
						 | 
					2586c9f385 | ||
| 
						 | 
					5c5d5d52ce | ||
| 
						 | 
					c2a7e990bd | ||
| 
						 | 
					3847442ca5 | ||
| 
						 | 
					6996111473 | ||
| 
						 | 
					3336f6a6f5 | ||
| 
						 | 
					be6a63cd03 | ||
| 
						 | 
					160846e98b | ||
| 
						 | 
					e63128625e | ||
| 
						 | 
					e58ad9237a | ||
| 
						 | 
					2ce64b5004 | ||
| 
						 | 
					9893379eef | ||
| 
						 | 
					9ae95d1eb5 | ||
| 
						 | 
					8a178b6f45 | ||
| 
						 | 
					f0b645c894 | ||
| 
						 | 
					2be5d83a6d | ||
| 
						 | 
					fafb7501c5 | ||
| 
						 | 
					4bac3063da | ||
| 
						 | 
					29d3015314 | ||
| 
						 | 
					4d2fcb2c66 | ||
| 
						 | 
					ca6b1a95dd | ||
| 
						 | 
					14cb9f097d | ||
| 
						 | 
					4d4726ccbe | ||
| 
						 | 
					3ce5893fe3 | ||
| 
						 | 
					993b01fa83 | ||
| 
						 | 
					5c4abb6d1d | ||
| 
						 | 
					06ec9593da | ||
| 
						 | 
					ace106051b | ||
| 
						 | 
					e2396f6667 | ||
| 
						 | 
					067b3c2f02 | ||
| 
						 | 
					73f1c261ab | ||
| 
						 | 
					2cbf0f744f | ||
| 
						 | 
					a6517f4d7e | ||
| 
						 | 
					e492a9b5d9 | ||
| 
						 | 
					5e7eb4ae3a | ||
| 
						 | 
					1a8a34b533 | ||
| 
						 | 
					c38b4c2ef3 | ||
| 
						 | 
					679699e6af | 
							
								
								
									
										27
									
								
								.github/autolabeler-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/autolabeler-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -121,5 +121,32 @@
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "addon": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "tools/addon/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "pve-tool": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "tools/pve/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "vm": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "vm/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -19,7 +19,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: npm install minimatch
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      - name: Label PR based on file changes and PR template
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
@@ -43,51 +43,51 @@ jobs:
 | 
			
		||||
              pull_number: prNumber,
 | 
			
		||||
            });
 | 
			
		||||
            const prFiles = prListFilesResponse.data;
 | 
			
		||||
           
 | 
			
		||||
 | 
			
		||||
          
 | 
			
		||||
            // Apply labels based on file changes
 | 
			
		||||
            for (const [label, rules] of Object.entries(autolabelerConfig)) {
 | 
			
		||||
              const shouldAddLabel = prFiles.some((prFile) => {
 | 
			
		||||
                return rules.some((rule) => {
 | 
			
		||||
                  const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
 | 
			
		||||
                  const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
			
		||||
                  const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
			
		||||
 | 
			
		||||
                  return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
 | 
			
		||||
                });
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
              if (shouldAddLabel) {
 | 
			
		||||
                labelsToAdd.add(label);
 | 
			
		||||
                if (label === "update script") {
 | 
			
		||||
                  for (const prFile of prFiles) {
 | 
			
		||||
                    const filename = prFile.filename;
 | 
			
		||||
                    if (filename.startsWith("vm/")) labelsToAdd.add("vm");
 | 
			
		||||
                    if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
 | 
			
		||||
                    if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            //if two labels or more are added, return
 | 
			
		||||
              if (labelsToAdd.size < 2) {
 | 
			
		||||
                const templateLabelMappings = {
 | 
			
		||||
 | 
			
		||||
            if (labelsToAdd.size < 2) {
 | 
			
		||||
              const templateLabelMappings = {
 | 
			
		||||
                "🐞 **Bug fix**": "bugfix",
 | 
			
		||||
                "✨ **New feature**": "feature",
 | 
			
		||||
                "💥 **Breaking change**": "breaking change",
 | 
			
		||||
                "🆕 **New script**": "new script",
 | 
			
		||||
                "🌍 **Website update**": "website",
 | 
			
		||||
                "🔧 **Refactoring / Code Cleanup**": "refactor",
 | 
			
		||||
                "📝 **Documentation update**": "documentation"
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
 | 
			
		||||
                const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
 | 
			
		||||
                const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
 | 
			
		||||
                const match = prBody.match(regex);              
 | 
			
		||||
                if (match) {
 | 
			
		||||
                  console.log(`Match: ${match}`);
 | 
			
		||||
                const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
 | 
			
		||||
                const regex = new RegExp(`- \[(x|X)\]\s*.*${escapedCheckbox}`, "i");
 | 
			
		||||
                if (regex.test(prBody)) {
 | 
			
		||||
                  labelsToAdd.add(label);
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
 | 
			
		||||
 | 
			
		||||
            if (labelsToAdd.size > 0) {
 | 
			
		||||
              console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);
 | 
			
		||||
              await github.rest.issues.addLabels({
 | 
			
		||||
                owner: context.repo.owner,
 | 
			
		||||
                repo: context.repo.repo,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,12 +10,59 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
 | 
			
		||||
## 2025-07-08
 | 
			
		||||
 | 
			
		||||
## 2025-07-07
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803))
 | 
			
		||||
    - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794))
 | 
			
		||||
    - Fix unbound var in pulse.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5807](https://github.com/community-scripts/ProxmoxVE/pull/5807))
 | 
			
		||||
    - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Refactor: Threadfin (+ updatable) [@MickLesk](https://github.com/MickLesk) ([#5783](https://github.com/community-scripts/ProxmoxVE/pull/5783))
 | 
			
		||||
    - tools.func: better handling when unpacking tarfiles in prebuild mode [@MickLesk](https://github.com/MickLesk) ([#5781](https://github.com/community-scripts/ProxmoxVE/pull/5781))
 | 
			
		||||
    - tools.func: add AVX check for MongoDB [@MickLesk](https://github.com/MickLesk) ([#5780](https://github.com/community-scripts/ProxmoxVE/pull/5780))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806))
 | 
			
		||||
    - Refactor: Baby Buddy [@tremor021](https://github.com/tremor021) ([#5769](https://github.com/community-scripts/ProxmoxVE/pull/5769))
 | 
			
		||||
    - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - PBS: add hint for advanced installs [@MickLesk](https://github.com/MickLesk) ([#5788](https://github.com/community-scripts/ProxmoxVE/pull/5788))
 | 
			
		||||
    - EMQX: Add warning to website [@tremor021](https://github.com/tremor021) ([#5770](https://github.com/community-scripts/ProxmoxVE/pull/5770))
 | 
			
		||||
 | 
			
		||||
## 2025-07-06
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Refactor: Barcodebuddy [@tremor021](https://github.com/tremor021) ([#5735](https://github.com/community-scripts/ProxmoxVE/pull/5735))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix update script for Mafl: ensure directory is removed recursively [@jonalbr](https://github.com/jonalbr) ([#5759](https://github.com/community-scripts/ProxmoxVE/pull/5759))
 | 
			
		||||
    - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746))
 | 
			
		||||
    - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - [Feature] Add option to expose Docker via TCP port (alpine docker) [@oformaniuk](https://github.com/oformaniuk) ([#5716](https://github.com/community-scripts/ProxmoxVE/pull/5716))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Bitmagnet [@tremor021](https://github.com/tremor021) ([#5733](https://github.com/community-scripts/ProxmoxVE/pull/5733))
 | 
			
		||||
    - Refactor: Baikal [@tremor021](https://github.com/tremor021) ([#5736](https://github.com/community-scripts/ProxmoxVE/pull/5736))
 | 
			
		||||
 | 
			
		||||
## 2025-07-05
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<div align="center">
 | 
			
		||||
  <p align="center">
 | 
			
		||||
    <a href="#">
 | 
			
		||||
      <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo.png" height="100px" />
 | 
			
		||||
      <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
 | 
			
		||||
    </a>
 | 
			
		||||
  </p>
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.babybuddy 2>/dev/null)" ]] || [[ ! -f ~/.babybuddy ]]; then
 | 
			
		||||
    setup_uv
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
@@ -42,17 +42,14 @@ function update_script() {
 | 
			
		||||
    find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
 | 
			
		||||
    msg_ok "Cleaned old files"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    cd /opt/babybuddy
 | 
			
		||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
 | 
			
		||||
    mv /tmp/production.py.bak babybuddy/settings/production.py
 | 
			
		||||
    cd /opt/babybuddy
 | 
			
		||||
    source .venv/bin/activate
 | 
			
		||||
    $STD uv pip install -r requirements.txt
 | 
			
		||||
    $STD python manage.py migrate
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Fixing permissions"
 | 
			
		||||
@@ -66,9 +63,6 @@ function update_script() {
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Services Started"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								ct/baikal.sh
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								ct/baikal.sh
									
									
									
									
									
								
							@@ -23,34 +23,35 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/baikal ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.baikal 2>/dev/null)" ]] || [[ ! -f ~/.baikal ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o $(basename "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip")
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mv /opt/baikal /opt/baikal-backup
 | 
			
		||||
    $STD unzip -o "baikal-${RELEASE}.zip"
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring Baikal"
 | 
			
		||||
    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
			
		||||
    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
			
		||||
    chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
    chmod -R 755 /opt/baikal/
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured Baikal"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
			
		||||
    rm -rf /opt/baikal-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,27 +23,28 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/barcodebuddy ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.barcodebuddy 2>/dev/null)" ]] || [[ ! -f ~/.barcodebuddy ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    systemctl stop barcodebuddy
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
 | 
			
		||||
    curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
    $STD unzip "v${RELEASE}.zip"
 | 
			
		||||
    mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP}"
 | 
			
		||||
    cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
 | 
			
		||||
    chown -R www-data:www-data /opt/barcodebuddy/data
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
@@ -51,7 +52,6 @@ function update_script() {
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -r "/opt/v${RELEASE}.zip"
 | 
			
		||||
    rm -r /opt/barcodebuddy-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,12 +28,12 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.bitmagnet 2>/dev/null)" ]] || [[ ! -f ~/.bitmagnet ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop bitmagnet-web
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up database"
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    rm -f /tmp/backup.sql
 | 
			
		||||
    $STD sudo -u postgres pg_dump \
 | 
			
		||||
      --column-inserts \
 | 
			
		||||
@@ -56,31 +56,26 @@ function update_script() {
 | 
			
		||||
      bitmagnet \
 | 
			
		||||
      >/tmp/backup.sql
 | 
			
		||||
    mv /tmp/backup.sql /opt/
 | 
			
		||||
    msg_ok "Database backed up"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
 | 
			
		||||
    [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
 | 
			
		||||
    rm -rf /opt/bitmagnet/*
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
 | 
			
		||||
    msg_ok "Data backed up"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/bitmagnet
 | 
			
		||||
    fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/bitmagnet
 | 
			
		||||
    VREL=v$RELEASE
 | 
			
		||||
    $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
			
		||||
    chmod +x bitmagnet
 | 
			
		||||
    [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
 | 
			
		||||
    [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start bitmagnet-web
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@ function update_script() {
 | 
			
		||||
    msg_ok "Backup finished"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
 | 
			
		||||
    PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring backup"
 | 
			
		||||
    cp /opt/bookstack-backup/.env /opt/bookstack/.env
 | 
			
		||||
 
 | 
			
		||||
@@ -37,8 +37,8 @@ Pin: version ${RELEASE}
 | 
			
		||||
Pin-Priority: 1001
 | 
			
		||||
EOF
 | 
			
		||||
    apt-get update
 | 
			
		||||
    apt-get install -y nginx=1.26.3*
 | 
			
		||||
    apt-get install -y bunkerweb=${RELEASE}
 | 
			
		||||
    apt-mark unhold bunkerweb nginx
 | 
			
		||||
    apt-get install -y --allow-downgrades bunkerweb=${RELEASE}
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,48 +27,35 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
 | 
			
		||||
    msg_info "Installing Node.js 22"
 | 
			
		||||
    $STD apt-get purge -y nodejs
 | 
			
		||||
    rm -f /etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
    rm -f /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
    mkdir -p /etc/apt/keyrings
 | 
			
		||||
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y nodejs
 | 
			
		||||
    $STD npm install -g pnpm@10.4.0
 | 
			
		||||
    msg_ok "Node.js 22 installed"
 | 
			
		||||
    NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
			
		||||
  fi
 | 
			
		||||
  export NODE_OPTIONS="--max_old_space_size=4096"
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.docmost 2>/dev/null)" ]] || [[ ! -f ~/.docmost ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop docmost
 | 
			
		||||
    msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    cp /opt/docmost/.env /opt/
 | 
			
		||||
    cp -r /opt/docmost/data /opt/
 | 
			
		||||
    rm -rf /opt/docmost
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    mv docmost-${RELEASE} /opt/docmost
 | 
			
		||||
    msg_ok "Data backed up"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "docmost" "docmost/docmost"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/docmost
 | 
			
		||||
    mv /opt/.env /opt/docmost/.env
 | 
			
		||||
    mv /opt/data /opt/docmost/data
 | 
			
		||||
    $STD pnpm install --force
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start docmost
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f ${temp_file}
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
			
		||||
# Source: https://github.com/RayLabsHQ/gitea-mirror
 | 
			
		||||
 | 
			
		||||
APP="gitea-mirror"
 | 
			
		||||
var_tags="${var_tags:-mirror;gitea}"
 | 
			
		||||
@@ -28,7 +28,7 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
@@ -48,7 +48,7 @@ function update_script() {
 | 
			
		||||
    msg_ok "Installed Bun"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/gitea-mirror
 | 
			
		||||
    fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
 | 
			
		||||
    fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating and rebuilding ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/gitea-mirror
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Performing backup"
 | 
			
		||||
    mkdir -p /opt/mafl-backup/data
 | 
			
		||||
    mv /opt/mafl/data /opt/mafl-backup/data
 | 
			
		||||
    rm /opt/mafl
 | 
			
		||||
    rm -rf /opt/mafl
 | 
			
		||||
    msg_ok "Backup complete"
 | 
			
		||||
    
 | 
			
		||||
    fetch_and_deploy_gh_release "mafl" "hywax/mafl"
 | 
			
		||||
 
 | 
			
		||||
@@ -86,4 +86,4 @@ msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Configure your reverse proxy to point to:${BGN} ${IP}:1411${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/login/setup${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/setup${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
  exit  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -38,10 +38,12 @@ function update_script() {
 | 
			
		||||
  tar -xzf v$RELEASE.tar.gz
 | 
			
		||||
  cd Stirling-PDF-$RELEASE
 | 
			
		||||
  chmod +x ./gradlew
 | 
			
		||||
  $STD ./gradlew build
 | 
			
		||||
  $STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
 | 
			
		||||
  rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar
 | 
			
		||||
  cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
 | 
			
		||||
  cp -r ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
 | 
			
		||||
  cp -r scripts /opt/Stirling-PDF/
 | 
			
		||||
  cp -r pipeline /opt/Stirling-PDF/
 | 
			
		||||
  cp -r stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
 | 
			
		||||
  cd ~
 | 
			
		||||
  rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
 | 
			
		||||
  ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
			
		||||
 
 | 
			
		||||
@@ -27,12 +27,24 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
  systemctl stop threadfin.service
 | 
			
		||||
  curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin"
 | 
			
		||||
  chmod +x /opt/threadfin/threadfin
 | 
			
		||||
  systemctl start threadfin.service
 | 
			
		||||
  msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop threadfin
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start threadfin
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								frontend/public/json/add-iptag.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								frontend/public/json/add-iptag.json
									
									
									
										generated
									
									
									
								
							@@ -37,12 +37,16 @@
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag.service must be restarted after change.",
 | 
			
		||||
      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag Service must be restarted after change. See here for full documentation: `https://github.com/community-scripts/ProxmoxVE/discussions/5790`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "You can execute the ip tool manually with `iptag-run`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								frontend/public/json/bunkerweb.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								frontend/public/json/bunkerweb.json
									
									
									
										generated
									
									
									
								
							@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								frontend/public/json/dockge.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/dockge.json
									
									
									
										generated
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 5001,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								frontend/public/json/docmost.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								frontend/public/json/docmost.json
									
									
									
										generated
									
									
									
								
							@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Use `cat ~/docmost.creds` to see database credentials.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								frontend/public/json/emqx.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/emqx.json
									
									
									
										generated
									
									
									
								
							@@ -35,6 +35,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								frontend/public/json/gitea-mirror.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/gitea-mirror.json
									
									
									
										generated
									
									
									
								
							@@ -9,9 +9,9 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 4321,
 | 
			
		||||
  "documentation": "https://github.com/arunavo4/gitea-mirror/",
 | 
			
		||||
  "documentation": "https://github.com/RayLabsHQ/gitea-mirror/",
 | 
			
		||||
  "config_path": "/etc/systemd/system/gitea-mirror.service",
 | 
			
		||||
  "website": "https://github.com/arunavo4/gitea-mirror/",
 | 
			
		||||
  "website": "https://github.com/RayLabsHQ/gitea-mirror/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea-mirror.webp",
 | 
			
		||||
  "description": "Gitea Mirror auto-syncs GitHub repos to your self-hosted Gitea, with a sleek Web UI and easy Docker deployment. ",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								frontend/public/json/proxmox-backup-server.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/proxmox-backup-server.json
									
									
									
										generated
									
									
									
								
							@@ -35,6 +35,10 @@
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Set a root password if using autologin. This will be the PBS password. `passwd root`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Advanced Install is only possible without root password and root SSH access, you can configure this after installation.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								frontend/public/json/threadfin.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/threadfin.json
									
									
									
										generated
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-06-12",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 34400,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										310
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										310
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							@@ -1,29 +1,169 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "version": "v1.0.1",
 | 
			
		||||
    "date": "2025-07-07T23:01:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.122-2.1.0.122_canary_2025-07-07",
 | 
			
		||||
    "date": "2025-07-07T17:54:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.23.2",
 | 
			
		||||
    "date": "2025-07-07T16:51:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.35",
 | 
			
		||||
    "date": "2025-06-22T08:30:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.121.0",
 | 
			
		||||
    "date": "2025-07-07T16:16:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.100.0",
 | 
			
		||||
    "date": "2025-06-23T12:48:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "photoprism/photoprism",
 | 
			
		||||
    "version": "250707-d28b3101e",
 | 
			
		||||
    "date": "2025-07-07T15:15:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0p7-rc2",
 | 
			
		||||
    "date": "2025-07-07T15:07:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traccar/traccar",
 | 
			
		||||
    "version": "v6.8.1",
 | 
			
		||||
    "date": "2025-07-07T14:40:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BookStackApp/BookStack",
 | 
			
		||||
    "version": "v25.05.2",
 | 
			
		||||
    "date": "2025-07-07T14:08:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-incremental-vector-store-3",
 | 
			
		||||
    "date": "2025-07-07T10:27:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.2.1",
 | 
			
		||||
    "date": "2025-07-07T10:11:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.2",
 | 
			
		||||
    "date": "2025-07-04T08:21:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.8.0",
 | 
			
		||||
    "date": "2025-07-07T08:37:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.2",
 | 
			
		||||
    "date": "2025-05-11T16:40:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2125",
 | 
			
		||||
    "date": "2025-07-07T05:56:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "preview-v0.1",
 | 
			
		||||
    "date": "2025-06-27T14:35:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.20",
 | 
			
		||||
    "date": "2025-07-02T04:03:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.4.1",
 | 
			
		||||
    "date": "2025-06-11T07:53:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "slskd/slskd",
 | 
			
		||||
    "version": "0.23.1",
 | 
			
		||||
    "date": "2025-07-06T23:57:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta22",
 | 
			
		||||
    "date": "2025-07-06T21:16:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta14",
 | 
			
		||||
    "date": "2025-07-06T21:07:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.6.1",
 | 
			
		||||
    "date": "2025-07-06T20:59:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.1.2",
 | 
			
		||||
    "date": "2025-07-06T20:55:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bluenviron/mediamtx",
 | 
			
		||||
    "version": "v1.13.0",
 | 
			
		||||
    "date": "2025-07-06T19:23:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v1.30.0",
 | 
			
		||||
    "date": "2025-07-01T11:29:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Part-DB/Part-DB-server",
 | 
			
		||||
    "version": "v1.17.2",
 | 
			
		||||
    "date": "2025-07-06T12:21:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.0.3",
 | 
			
		||||
    "date": "2025-07-06T12:19:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-OIDC",
 | 
			
		||||
    "date": "2025-07-06T00:51:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hyperion-project/hyperion.ng",
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kareadita/Kavita",
 | 
			
		||||
    "version": "v0.8.7",
 | 
			
		||||
    "date": "2025-07-05T20:08:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.22.6",
 | 
			
		||||
    "date": "2025-07-05T18:38:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.12.7",
 | 
			
		||||
    "date": "2025-06-18T03:44:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-seerr",
 | 
			
		||||
    "date": "2025-07-05T16:51:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nicolargo/glances",
 | 
			
		||||
    "version": "v4.3.2",
 | 
			
		||||
@@ -44,16 +184,6 @@
 | 
			
		||||
    "version": "v11.11.4",
 | 
			
		||||
    "date": "2025-07-05T09:23:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.2.0",
 | 
			
		||||
    "date": "2025-07-05T08:58:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2120",
 | 
			
		||||
    "date": "2025-07-05T05:58:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linkwarden/linkwarden",
 | 
			
		||||
    "version": "v2.11.3",
 | 
			
		||||
@@ -64,11 +194,6 @@
 | 
			
		||||
    "version": "2025.7.1",
 | 
			
		||||
    "date": "2025-07-04T20:02:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.1.1",
 | 
			
		||||
    "date": "2025-07-04T19:50:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.27.0",
 | 
			
		||||
@@ -84,6 +209,11 @@
 | 
			
		||||
    "version": "v1.6.2",
 | 
			
		||||
    "date": "2025-07-04T15:21:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.0-M1.202507-alpha.1",
 | 
			
		||||
    "date": "2025-07-04T14:58:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "kimai/kimai",
 | 
			
		||||
    "version": "2.37.0",
 | 
			
		||||
@@ -99,31 +229,6 @@
 | 
			
		||||
    "version": "6.3.1",
 | 
			
		||||
    "date": "2025-07-04T11:20:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "preview-v0.1",
 | 
			
		||||
    "date": "2025-06-27T14:35:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.2",
 | 
			
		||||
    "date": "2025-07-04T08:21:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.2.0p44",
 | 
			
		||||
    "date": "2025-07-04T06:44:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.2-rc1-int",
 | 
			
		||||
    "date": "2025-07-02T19:27:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hyperion-project/hyperion.ng",
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.85.0",
 | 
			
		||||
@@ -154,11 +259,6 @@
 | 
			
		||||
    "version": "310.5",
 | 
			
		||||
    "date": "2025-07-03T14:05:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.100.0",
 | 
			
		||||
    "date": "2025-06-23T12:48:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "18.0.7",
 | 
			
		||||
@@ -184,11 +284,6 @@
 | 
			
		||||
    "version": "v1.12.2-rc.0",
 | 
			
		||||
    "date": "2025-07-03T00:31:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "v5.8.7",
 | 
			
		||||
    "date": "2025-07-02T21:54:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hargata/lubelog",
 | 
			
		||||
    "version": "v1.4.8",
 | 
			
		||||
@@ -204,11 +299,6 @@
 | 
			
		||||
    "version": "v0.9.5",
 | 
			
		||||
    "date": "2025-07-02T18:39:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.20",
 | 
			
		||||
    "date": "2025-07-02T04:03:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w27-4.13.0",
 | 
			
		||||
@@ -274,11 +364,6 @@
 | 
			
		||||
    "version": "v1.133.0",
 | 
			
		||||
    "date": "2025-07-01T15:13:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v1.30.0",
 | 
			
		||||
    "date": "2025-07-01T11:29:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v99.99.99",
 | 
			
		||||
@@ -354,11 +439,6 @@
 | 
			
		||||
    "version": "v3.2.4",
 | 
			
		||||
    "date": "2025-06-28T02:47:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.5.0",
 | 
			
		||||
    "date": "2025-06-27T22:04:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.6.3",
 | 
			
		||||
@@ -379,11 +459,6 @@
 | 
			
		||||
    "version": "flowise@3.0.3",
 | 
			
		||||
    "date": "2025-06-27T09:53:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.3.3",
 | 
			
		||||
@@ -404,11 +479,6 @@
 | 
			
		||||
    "version": "v3.5.0-rc1",
 | 
			
		||||
    "date": "2025-06-26T15:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-no-simd-x86-arroy-0",
 | 
			
		||||
    "date": "2025-06-26T14:54:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.63",
 | 
			
		||||
@@ -439,11 +509,6 @@
 | 
			
		||||
    "version": "v1.18.4",
 | 
			
		||||
    "date": "2025-06-25T00:06:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.120-2.1.0.120_canary_2025-06-24",
 | 
			
		||||
    "date": "2025-06-24T22:39:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.204.5",
 | 
			
		||||
@@ -464,11 +529,6 @@
 | 
			
		||||
    "version": "RELEASE.2025-06-13T11-33-47Z",
 | 
			
		||||
    "date": "2025-06-23T20:58:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.120.0",
 | 
			
		||||
    "date": "2025-06-23T15:12:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.22.0",
 | 
			
		||||
@@ -484,11 +544,6 @@
 | 
			
		||||
    "version": "v3.0.7",
 | 
			
		||||
    "date": "2025-06-22T17:49:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.35",
 | 
			
		||||
    "date": "2025-06-22T08:30:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inventree/InvenTree",
 | 
			
		||||
    "version": "0.17.14",
 | 
			
		||||
@@ -574,11 +629,6 @@
 | 
			
		||||
    "version": "v5.6.0",
 | 
			
		||||
    "date": "2025-06-18T12:19:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.7.0",
 | 
			
		||||
    "date": "2025-06-18T11:57:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v11.0.2",
 | 
			
		||||
@@ -599,21 +649,11 @@
 | 
			
		||||
    "version": "v2.1.5",
 | 
			
		||||
    "date": "2025-06-17T18:04:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BookStackApp/BookStack",
 | 
			
		||||
    "version": "v25.05.1",
 | 
			
		||||
    "date": "2025-06-17T14:38:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.9",
 | 
			
		||||
    "date": "2025-06-17T11:54:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.2",
 | 
			
		||||
    "date": "2025-05-11T16:40:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "donaldzou/WGDashboard",
 | 
			
		||||
    "version": "v4.2.4",
 | 
			
		||||
@@ -669,11 +709,6 @@
 | 
			
		||||
    "version": "v5.26.2.10099",
 | 
			
		||||
    "date": "2025-06-11T20:10:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traccar/traccar",
 | 
			
		||||
    "version": "v6.7.3",
 | 
			
		||||
    "date": "2025-06-15T05:46:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.25.1",
 | 
			
		||||
@@ -829,11 +864,6 @@
 | 
			
		||||
    "version": "5.10.0",
 | 
			
		||||
    "date": "2025-05-28T05:48:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bluenviron/mediamtx",
 | 
			
		||||
    "version": "v1.12.3",
 | 
			
		||||
    "date": "2025-05-27T20:43:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dani-garcia/vaultwarden",
 | 
			
		||||
    "version": "1.34.1",
 | 
			
		||||
@@ -864,16 +894,6 @@
 | 
			
		||||
    "version": "0.5",
 | 
			
		||||
    "date": "2025-05-21T20:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "version": "v0.46.2",
 | 
			
		||||
    "date": "2025-05-20T11:21:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Part-DB/Part-DB-server",
 | 
			
		||||
    "version": "v1.17.1",
 | 
			
		||||
    "date": "2025-05-18T21:06:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sbondCo/Watcharr",
 | 
			
		||||
    "version": "v2.1.0",
 | 
			
		||||
@@ -919,16 +939,6 @@
 | 
			
		||||
    "version": "v0.2.3",
 | 
			
		||||
    "date": "2025-05-10T21:14:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta13",
 | 
			
		||||
    "date": "2025-05-09T23:14:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta21",
 | 
			
		||||
    "date": "2025-05-09T23:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "getumbrel/umbrel",
 | 
			
		||||
    "version": "1.4.2",
 | 
			
		||||
@@ -984,11 +994,6 @@
 | 
			
		||||
    "version": "v2.6.3",
 | 
			
		||||
    "date": "2025-04-27T09:05:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "photoprism/photoprism",
 | 
			
		||||
    "version": "250426-27ec7a128",
 | 
			
		||||
    "date": "2025-04-26T11:51:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TechnitiumSoftware/DnsServer",
 | 
			
		||||
    "version": "v13.6.0",
 | 
			
		||||
@@ -1029,11 +1034,6 @@
 | 
			
		||||
    "version": "v0.4.15",
 | 
			
		||||
    "date": "2024-12-19T03:19:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "slskd/slskd",
 | 
			
		||||
    "version": "0.22.5",
 | 
			
		||||
    "date": "2025-04-15T02:52:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Tautulli/Tautulli",
 | 
			
		||||
    "version": "v2.15.2",
 | 
			
		||||
 
 | 
			
		||||
@@ -67,5 +67,14 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
 | 
			
		||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Exposing Docker TCP socket"
 | 
			
		||||
  $STD mkdir -p /etc/docker
 | 
			
		||||
  $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
 | 
			
		||||
  $STD rc-service docker restart
 | 
			
		||||
  msg_ok "Exposed Docker TCP socket at tcp://+:2375"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,13 @@ RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/la
 | 
			
		||||
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
 | 
			
		||||
chmod +x /opt/tinyauth/tinyauth
 | 
			
		||||
 | 
			
		||||
PASSWORD=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
 | 
			
		||||
USER=$(htpasswd -Bbn "tinyauth" "${PASSWORD}")
 | 
			
		||||
PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
 | 
			
		||||
USER=$(htpasswd -Bbn "tinyauth" "${PASS}")
 | 
			
		||||
 | 
			
		||||
cat <<EOF > /opt/tinyauth/credentials.txt
 | 
			
		||||
cat <<EOF >/opt/tinyauth/credentials.txt
 | 
			
		||||
Tinyauth Credentials
 | 
			
		||||
Username: tinyauth
 | 
			
		||||
Password: ${PASSWORD}
 | 
			
		||||
Password: ${PASS}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >/opt/tinyauth_version.txt
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,10 @@ $STD apt-get install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_uv
 | 
			
		||||
fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Babybuddy"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
mkdir -p /opt/{babybuddy,data}
 | 
			
		||||
curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
 | 
			
		||||
mkdir -p /opt/data
 | 
			
		||||
cd /opt/babybuddy
 | 
			
		||||
$STD uv venv .venv
 | 
			
		||||
$STD source .venv/bin/activate
 | 
			
		||||
@@ -102,7 +99,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,13 +14,12 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  libapache2-mod-php \
 | 
			
		||||
  php-{pgsql,dom}
 | 
			
		||||
$STD apt-get install -y apache2
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
PHP_APACHE="YES" PHP_MODULE="pgsql, dom" PHP_VERSION="8.2" setup_php
 | 
			
		||||
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL Database"
 | 
			
		||||
DB_NAME=baikal
 | 
			
		||||
@@ -36,11 +35,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
 | 
			
		||||
} >>~/baikal.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Baikal"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
cd /opt
 | 
			
		||||
curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o "baikal-${RELEASE}.zip"
 | 
			
		||||
$STD unzip "baikal-${RELEASE}.zip"
 | 
			
		||||
msg_info "Configuring Baikal"
 | 
			
		||||
cat <<EOF >/opt/baikal/config/baikal.yaml
 | 
			
		||||
database:
 | 
			
		||||
    backend: pgsql
 | 
			
		||||
@@ -51,7 +46,6 @@ database:
 | 
			
		||||
EOF
 | 
			
		||||
chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
chmod -R 755 /opt/baikal/
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed Baikal"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
@@ -90,7 +84,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -16,20 +16,15 @@ update_os
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  redis \
 | 
			
		||||
  php-{curl,date,json,mbstring,redis,sqlite3,sockets} \
 | 
			
		||||
  libapache2-mod-php
 | 
			
		||||
  redis
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing barcodebuddy"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
cd /opt
 | 
			
		||||
curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
$STD unzip "v${RELEASE}.zip"
 | 
			
		||||
mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
			
		||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php
 | 
			
		||||
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring barcodebuddy"
 | 
			
		||||
chown -R www-data:www-data /opt/barcodebuddy/data
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed barcodebuddy"
 | 
			
		||||
msg_ok "Configured barcodebuddy"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/barcodebuddy.service
 | 
			
		||||
@@ -73,7 +68,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf "/opt/v${RELEASE}.zip"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -22,17 +22,10 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
setup_go
 | 
			
		||||
fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
 | 
			
		||||
msg_info "Installing bitmagnet v${RELEASE}"
 | 
			
		||||
mkdir -p /opt/bitmagnet
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
 | 
			
		||||
cd /opt/bitmagnet
 | 
			
		||||
VREL=v$RELEASE
 | 
			
		||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
			
		||||
chmod +x bitmagnet
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
 | 
			
		||||
@@ -41,8 +34,14 @@ $STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "postgres user password: $POSTGRES_PASSWORD"
 | 
			
		||||
} >>~/postgres.creds
 | 
			
		||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
 | 
			
		||||
msg_ok "Installed bitmagnet v${RELEASE}"
 | 
			
		||||
msg_ok "Database set up"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring bitmagnet v${RELEASE}"
 | 
			
		||||
cd /opt/bitmagnet
 | 
			
		||||
VREL=v$RELEASE
 | 
			
		||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
			
		||||
chmod +x bitmagnet
 | 
			
		||||
msg_ok "Configured bitmagnet v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
 | 
			
		||||
 | 
			
		||||
@@ -72,7 +71,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -15,11 +15,12 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies (Patience)"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apache2
 | 
			
		||||
make
 | 
			
		||||
  apache2 \
 | 
			
		||||
  make
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_MODULE="fpm, ldap, tidy, bz2, mysql" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.2" setup_php
 | 
			
		||||
PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
 | 
			
		||||
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mariadb
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,19 +18,12 @@ $STD apt-get install -y apt-transport-https
 | 
			
		||||
$STD apt-get install -y lsb-release
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Nginx"
 | 
			
		||||
curl -fsSL "https://nginx.org/keys/nginx_signing.key" | gpg --dearmor >/usr/share/keyrings/nginx-archive-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >/etc/apt/sources.list.d/nginx.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nginx=1.26.3*
 | 
			
		||||
msg_ok "Installed Nginx"
 | 
			
		||||
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
msg_info "Installing BunkerWeb v${RELEASE} (Patience)"
 | 
			
		||||
curl -fsSL "https://repo.bunkerweb.io/bunkerity/bunkerweb/gpgkey" | gpg --dearmor >/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg] https://repo.bunkerweb.io/bunkerity/bunkerweb/debian/ bookworm main" >/etc/apt/sources.list.d/bunkerity_bunkerweb.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y bunkerweb=${RELEASE}
 | 
			
		||||
curl -fsSL -o install-bunkerweb.sh https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh
 | 
			
		||||
chmod +x install-bunkerweb.sh
 | 
			
		||||
$STD ./install-bunkerweb.sh --yes
 | 
			
		||||
$STD apt-mark unhold bunkerweb nginx
 | 
			
		||||
cat <<EOF >/etc/apt/preferences.d/bunkerweb
 | 
			
		||||
Package: bunkerweb
 | 
			
		||||
Pin: version ${RELEASE}
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,15 @@ else
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
 | 
			
		||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Exposing Docker TCP socket"
 | 
			
		||||
  $STD mkdir -p /etc/docker
 | 
			
		||||
  $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
 | 
			
		||||
  $STD rc-service docker restart
 | 
			
		||||
  msg_ok "Exposed Docker TCP socket at tcp://+:2375"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
fetch_and_deploy_gh_release "docmost" "docmost/docmost"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
DB_NAME="docmost_db"
 | 
			
		||||
@@ -40,12 +41,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
 | 
			
		||||
} >>~/docmost.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Docmost (Patience)"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
			
		||||
tar -xzf "$temp_file"
 | 
			
		||||
mv docmost-${RELEASE} /opt/docmost
 | 
			
		||||
msg_info "Configuring Docmost (Patience)"
 | 
			
		||||
cd /opt/docmost
 | 
			
		||||
mv .env.example .env
 | 
			
		||||
mkdir data
 | 
			
		||||
@@ -56,8 +52,7 @@ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z
 | 
			
		||||
export NODE_OPTIONS="--max-old-space-size=2048"
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
$STD pnpm build
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Docmost"
 | 
			
		||||
msg_ok "Configured Docmost"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/docmost.service
 | 
			
		||||
@@ -81,7 +76,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
			
		||||
# Source: https://github.com/RayLabsHQ/gitea-mirror
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
@@ -28,7 +28,7 @@ ln -sf /opt/bun/bin/bun /usr/local/bin/bun
 | 
			
		||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
 | 
			
		||||
msg_ok "Installed Bun"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
 | 
			
		||||
fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing gitea-mirror"
 | 
			
		||||
cd /opt/gitea-mirror
 | 
			
		||||
 
 | 
			
		||||
@@ -80,11 +80,13 @@ curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${
 | 
			
		||||
tar -xzf v${RELEASE}.tar.gz
 | 
			
		||||
cd Stirling-PDF-$RELEASE
 | 
			
		||||
chmod +x ./gradlew
 | 
			
		||||
$STD ./gradlew build
 | 
			
		||||
$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
 | 
			
		||||
mkdir -p /opt/Stirling-PDF
 | 
			
		||||
touch /opt/Stirling-PDF/.env
 | 
			
		||||
mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
 | 
			
		||||
mv ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
 | 
			
		||||
mv scripts /opt/Stirling-PDF/
 | 
			
		||||
mv pipeline /opt/Stirling-PDF/
 | 
			
		||||
mv stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
 | 
			
		||||
ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
			
		||||
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
 | 
			
		||||
msg_ok "Installed Stirling-PDF"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,16 +14,12 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y ffmpeg
 | 
			
		||||
$STD apt-get install -y vlc
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  ffmpeg \
 | 
			
		||||
  vlc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Threadfin"
 | 
			
		||||
mkdir -p /opt/threadfin
 | 
			
		||||
curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin"
 | 
			
		||||
chmod +x /opt/threadfin/threadfin
 | 
			
		||||
 | 
			
		||||
msg_ok "Installed Threadfin"
 | 
			
		||||
fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/threadfin.service
 | 
			
		||||
 
 | 
			
		||||
@@ -435,6 +435,14 @@ function setup_php() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  local MODULE_LIST="php${PHP_VERSION}"
 | 
			
		||||
  for pkg in $MODULE_LIST; do
 | 
			
		||||
    if ! apt-cache show "$pkg" >/dev/null 2>&1; then
 | 
			
		||||
      msg_error "Package not found: $pkg"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
 | 
			
		||||
  for mod in "${MODULES[@]}"; do
 | 
			
		||||
    MODULE_LIST+=" php${PHP_VERSION}-${mod}"
 | 
			
		||||
@@ -443,6 +451,10 @@ function setup_php() {
 | 
			
		||||
  if [[ "$PHP_FPM" == "YES" ]]; then
 | 
			
		||||
    MODULE_LIST+=" php${PHP_VERSION}-fpm"
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "$PHP_APACHE" == "YES" ]]; then
 | 
			
		||||
    $STD apt-get install -y apache2
 | 
			
		||||
    $STD systemctl restart apache2 || true
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "$PHP_APACHE" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
 | 
			
		||||
    if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then
 | 
			
		||||
@@ -458,10 +470,6 @@ function setup_php() {
 | 
			
		||||
  $STD apt-get install -y $MODULE_LIST
 | 
			
		||||
  msg_ok "Setup PHP $PHP_VERSION"
 | 
			
		||||
 | 
			
		||||
  if [[ "$PHP_APACHE" == "YES" ]]; then
 | 
			
		||||
    $STD systemctl restart apache2 || true
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "$PHP_FPM" == "YES" ]]; then
 | 
			
		||||
    $STD systemctl enable php${PHP_VERSION}-fpm
 | 
			
		||||
    $STD systemctl restart php${PHP_VERSION}-fpm
 | 
			
		||||
@@ -651,6 +659,15 @@ function setup_mongodb() {
 | 
			
		||||
  DISTRO_ID=$(awk -F= '/^ID=/{ gsub(/"/,"",$2); print $2 }' /etc/os-release)
 | 
			
		||||
  DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{ print $2 }' /etc/os-release)
 | 
			
		||||
 | 
			
		||||
  # Check AVX support
 | 
			
		||||
  if ! grep -qm1 'avx[^ ]*' /proc/cpuinfo; then
 | 
			
		||||
    local major="${MONGO_VERSION%%.*}"
 | 
			
		||||
    if ((major > 5)); then
 | 
			
		||||
      msg_error "MongoDB ${MONGO_VERSION} requires AVX support, which is not available on this system."
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  case "$DISTRO_ID" in
 | 
			
		||||
  ubuntu)
 | 
			
		||||
    MONGO_BASE_URL="https://repo.mongodb.org/apt/ubuntu"
 | 
			
		||||
@@ -759,6 +776,7 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
  local mode="${3:-tarball}" # tarball | binary | prebuild | singlefile
 | 
			
		||||
  local version="${4:-latest}"
 | 
			
		||||
  local target="${5:-/opt/$app}"
 | 
			
		||||
  local asset_pattern="${6:-}"
 | 
			
		||||
 | 
			
		||||
  local app_lc=$(echo "${app,,}" | tr -d ' ')
 | 
			
		||||
  local version_file="$HOME/.${app_lc}"
 | 
			
		||||
@@ -853,9 +871,9 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
    assets=$(echo "$json" | jq -r '.assets[].browser_download_url')
 | 
			
		||||
 | 
			
		||||
    # If explicit filename pattern is provided (param $6), match that first
 | 
			
		||||
    if [[ -n "$6" ]]; then
 | 
			
		||||
    if [[ -n "$asset_pattern" ]]; then
 | 
			
		||||
      for u in $assets; do
 | 
			
		||||
        [[ "$u" =~ $6 || "$u" == *"$6" ]] && url_match="$u" && break
 | 
			
		||||
        [[ "$u" =~ $asset_pattern || "$u" == *"$asset_pattern" ]] && url_match="$u" && break
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
@@ -934,13 +952,32 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mkdir -p "$target"
 | 
			
		||||
    if [[ "$filename" == *.zip ]]; then
 | 
			
		||||
        if [[ "$filename" == *.zip ]]; then
 | 
			
		||||
      if ! command -v unzip &>/dev/null; then
 | 
			
		||||
        $STD apt-get install -y unzip
 | 
			
		||||
      fi
 | 
			
		||||
      $STD unzip "$tmpdir/$filename" -d "$target"
 | 
			
		||||
 | 
			
		||||
      local top_level_entries
 | 
			
		||||
      top_level_entries=$(unzip -l "$tmpdir/$filename" | awk '{print $4}' | grep -v '^$' | cut -d/ -f1 | sort -u)
 | 
			
		||||
 | 
			
		||||
      if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then
 | 
			
		||||
        unzip -q "$tmpdir/$filename" -d "$tmpdir/unzip"
 | 
			
		||||
        shopt -s dotglob nullglob
 | 
			
		||||
        cp -r "$tmpdir/unzip/"* "$target/"
 | 
			
		||||
        shopt -u dotglob nullglob
 | 
			
		||||
      else
 | 
			
		||||
        unzip -q "$tmpdir/$filename" -d "$target"
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
    elif [[ "$filename" == *.tar.* ]]; then
 | 
			
		||||
      tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
 | 
			
		||||
      local top_level_entries
 | 
			
		||||
      top_level_entries=$(tar -tf "$tmpdir/$filename" | cut -d/ -f1 | sort -u)
 | 
			
		||||
 | 
			
		||||
      if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then
 | 
			
		||||
        tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
 | 
			
		||||
      else
 | 
			
		||||
        tar -xf "$tmpdir/$filename" -C "$target"
 | 
			
		||||
      fi
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Unsupported archive format: $filename"
 | 
			
		||||
      rm -rf "$tmpdir"
 | 
			
		||||
 
 | 
			
		||||
@@ -162,6 +162,21 @@ update_installation() {
 | 
			
		||||
  generate_service >/lib/systemd/system/iptag.service
 | 
			
		||||
  msg_ok "Updated service file"
 | 
			
		||||
 | 
			
		||||
  msg_info "Creating manual run command"
 | 
			
		||||
  cat <<'EOF' >/usr/local/bin/iptag-run
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
CONFIG_FILE="/opt/iptag/iptag.conf"
 | 
			
		||||
SCRIPT_FILE="/opt/iptag/iptag"
 | 
			
		||||
if [[ ! -f "$SCRIPT_FILE" ]]; then
 | 
			
		||||
  echo "❌ Main script not found: $SCRIPT_FILE"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
export FORCE_SINGLE_RUN=true
 | 
			
		||||
exec "$SCRIPT_FILE"
 | 
			
		||||
EOF
 | 
			
		||||
  chmod +x /usr/local/bin/iptag-run
 | 
			
		||||
  msg_ok "Created iptag-run executable - You can execute this manually by entering “iptag-run” in the Proxmox host, so the script is executed by hand."
 | 
			
		||||
 | 
			
		||||
  msg_info "Restarting service"
 | 
			
		||||
  systemctl daemon-reload &>/dev/null
 | 
			
		||||
  systemctl enable -q --now iptag.service &>/dev/null
 | 
			
		||||
@@ -194,18 +209,19 @@ LXC_STATUS_CHECK_INTERVAL=300
 | 
			
		||||
FORCE_UPDATE_INTERVAL=7200
 | 
			
		||||
 | 
			
		||||
# Performance optimizations
 | 
			
		||||
VM_IP_CACHE_TTL=120
 | 
			
		||||
MAX_PARALLEL_VM_CHECKS=5
 | 
			
		||||
VM_IP_CACHE_TTL=300
 | 
			
		||||
MAX_PARALLEL_VM_CHECKS=1
 | 
			
		||||
 | 
			
		||||
# LXC performance optimizations  
 | 
			
		||||
LXC_IP_CACHE_TTL=0
 | 
			
		||||
MAX_PARALLEL_LXC_CHECKS=7
 | 
			
		||||
LXC_IP_CACHE_TTL=300
 | 
			
		||||
MAX_PARALLEL_LXC_CHECKS=2
 | 
			
		||||
 | 
			
		||||
# Extreme LXC optimizations
 | 
			
		||||
LXC_BATCH_SIZE=20
 | 
			
		||||
LXC_STATUS_CACHE_TTL=30
 | 
			
		||||
LXC_BATCH_SIZE=3
 | 
			
		||||
LXC_STATUS_CACHE_TTL=300
 | 
			
		||||
LXC_AGGRESSIVE_CACHING=true
 | 
			
		||||
LXC_SKIP_SLOW_METHODS=true
 | 
			
		||||
LXC_ALLOW_FORCED_COMMANDS=false
 | 
			
		||||
 | 
			
		||||
# Debug settings (set to true to enable debugging)
 | 
			
		||||
DEBUG=false
 | 
			
		||||
@@ -222,8 +238,8 @@ After=network.target
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/opt/iptag/iptag
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=1
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
@@ -576,7 +592,9 @@ update_tags() {
 | 
			
		||||
 | 
			
		||||
    if [[ "$type" == "lxc" ]]; then
 | 
			
		||||
        current_ips_full=$(get_lxc_ips "${vmid}")
 | 
			
		||||
        local current_tags_raw=$(pct config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}')
 | 
			
		||||
        while IFS= read -r line; do
 | 
			
		||||
          [[ "$line" == tags:* ]] && current_tags_raw="${line#tags: }" && break
 | 
			
		||||
        done < <(pct config "$vmid" 2>/dev/null)
 | 
			
		||||
    else
 | 
			
		||||
        current_ips_full=$(get_vm_ips "${vmid}")
 | 
			
		||||
        local vm_config="/etc/pve/qemu-server/${vmid}.conf"
 | 
			
		||||
@@ -789,7 +807,10 @@ check_status_changed() {
 | 
			
		||||
check() {
 | 
			
		||||
    local current_time changes_detected=false
 | 
			
		||||
    current_time=$(date +%s)
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    local update_lxc=false
 | 
			
		||||
    local update_vm=false
 | 
			
		||||
 | 
			
		||||
    # Periodic cache cleanup (every 10 minutes)
 | 
			
		||||
    local time_since_last_cleanup=$((current_time - ${last_cleanup_time:-0}))
 | 
			
		||||
    if [[ $time_since_last_cleanup -ge 600 ]]; then
 | 
			
		||||
@@ -801,60 +822,56 @@ check() {
 | 
			
		||||
    # Check LXC status
 | 
			
		||||
    local time_since_last_lxc_check=$((current_time - last_lxc_status_check_time))
 | 
			
		||||
    if [[ "${LXC_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \
 | 
			
		||||
       [[ "${time_since_last_lxc_check}" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then
 | 
			
		||||
        last_lxc_status_check_time=${current_time}
 | 
			
		||||
       [[ "$time_since_last_lxc_check" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then
 | 
			
		||||
        last_lxc_status_check_time=$current_time
 | 
			
		||||
        if check_status_changed "lxc"; then
 | 
			
		||||
            changes_detected=true
 | 
			
		||||
            log_warning "LXC status changes detected, updating tags"
 | 
			
		||||
            update_all_tags "lxc"
 | 
			
		||||
            last_update_lxc_time=${current_time}
 | 
			
		||||
            update_lxc=true
 | 
			
		||||
            log_warning "LXC status changes detected"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Check VM status
 | 
			
		||||
    local time_since_last_vm_check=$((current_time - last_vm_status_check_time))
 | 
			
		||||
    if [[ "${VM_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \
 | 
			
		||||
       [[ "${time_since_last_vm_check}" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then
 | 
			
		||||
        last_vm_status_check_time=${current_time}
 | 
			
		||||
       [[ "$time_since_last_vm_check" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then
 | 
			
		||||
        last_vm_status_check_time=$current_time
 | 
			
		||||
        if check_status_changed "vm"; then
 | 
			
		||||
            changes_detected=true
 | 
			
		||||
            log_warning "VM status changes detected, updating tags"
 | 
			
		||||
            update_all_tags "vm"
 | 
			
		||||
            last_update_vm_time=${current_time}
 | 
			
		||||
            update_vm=true
 | 
			
		||||
            log_warning "VM status changes detected"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Check network interface changes
 | 
			
		||||
    local time_since_last_fw_check=$((current_time - last_fw_net_interface_check_time))
 | 
			
		||||
    if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" -gt 0 ]] && \
 | 
			
		||||
       [[ "${time_since_last_fw_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then
 | 
			
		||||
        last_fw_net_interface_check_time=${current_time}
 | 
			
		||||
       [[ "$time_since_last_fw_check" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then
 | 
			
		||||
        last_fw_net_interface_check_time=$current_time
 | 
			
		||||
        if check_status_changed "fw"; then
 | 
			
		||||
            changes_detected=true
 | 
			
		||||
            log_warning "Network interface changes detected, updating all tags"
 | 
			
		||||
            update_all_tags "lxc"
 | 
			
		||||
            update_all_tags "vm"
 | 
			
		||||
            last_update_lxc_time=${current_time}
 | 
			
		||||
            last_update_vm_time=${current_time}
 | 
			
		||||
            update_lxc=true
 | 
			
		||||
            update_vm=true
 | 
			
		||||
            log_warning "Network interface changes detected"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Force update if needed
 | 
			
		||||
    # Force update if interval exceeded
 | 
			
		||||
    for type in "lxc" "vm"; do
 | 
			
		||||
        local last_update_var="last_update_${type}_time"
 | 
			
		||||
        local time_since_last_update=$((current_time - ${!last_update_var}))
 | 
			
		||||
        if [[ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then
 | 
			
		||||
            changes_detected=true
 | 
			
		||||
            local minutes=$((${FORCE_UPDATE_INTERVAL:-1800} / 60))
 | 
			
		||||
        if [[ $time_since_last_update -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then
 | 
			
		||||
            if [[ "$type" == "lxc" ]]; then
 | 
			
		||||
                log_info "Scheduled LXC update (every ${minutes} minutes)"
 | 
			
		||||
                update_lxc=true
 | 
			
		||||
                log_info "Scheduled LXC update (every $((FORCE_UPDATE_INTERVAL / 60)) minutes)"
 | 
			
		||||
            else
 | 
			
		||||
                log_info "Scheduled VM update (every ${minutes} minutes)"
 | 
			
		||||
                update_vm=true
 | 
			
		||||
                log_info "Scheduled VM update (every $((FORCE_UPDATE_INTERVAL / 60)) minutes)"
 | 
			
		||||
            fi
 | 
			
		||||
            update_all_tags "$type"
 | 
			
		||||
            eval "${last_update_var}=${current_time}"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # Final execution
 | 
			
		||||
    $update_lxc && update_all_tags "lxc"
 | 
			
		||||
    $update_vm && update_all_tags "vm"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Initialize time variables
 | 
			
		||||
@@ -872,9 +889,19 @@ main() {
 | 
			
		||||
    echo -e "${BLUE}ℹ${NC} Tag format: ${WHITE}${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}${NC}"
 | 
			
		||||
    echo -e "${BLUE}ℹ${NC} Allowed CIDRs: ${WHITE}${CIDR_LIST[*]}${NC}"
 | 
			
		||||
    echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
 | 
			
		||||
    check
 | 
			
		||||
 | 
			
		||||
    if [[ "$FORCE_SINGLE_RUN" == "true" ]]; then
 | 
			
		||||
        check
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    while true; do
 | 
			
		||||
        check
 | 
			
		||||
        sleep "${LOOP_INTERVAL:-300}"
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Cache cleanup function
 | 
			
		||||
cleanup_vm_cache() {
 | 
			
		||||
    local cache_dir="/tmp"
 | 
			
		||||
@@ -997,7 +1024,7 @@ process_vms_parallel() {
 | 
			
		||||
# Parallel LXC processing function
 | 
			
		||||
process_lxc_parallel() {
 | 
			
		||||
    local lxc_list=("$@")
 | 
			
		||||
    local max_parallel=${MAX_PARALLEL_LXC_CHECKS:-7}
 | 
			
		||||
    local max_parallel=${MAX_PARALLEL_LXC_CHECKS:-2}
 | 
			
		||||
    local batch_size=${LXC_BATCH_SIZE:-20}
 | 
			
		||||
    local job_count=0
 | 
			
		||||
    local pids=()
 | 
			
		||||
@@ -1173,7 +1200,7 @@ get_lxc_ips() {
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    # Fallback: always do lxc-attach/pct exec with timeout if nothing found
 | 
			
		||||
    if [[ -z "$ips" ]]; then
 | 
			
		||||
    if [[ -z "$ips" && "${LXC_ALLOW_FORCED_COMMANDS:-true}" == "true" ]]; then
 | 
			
		||||
        debug_log "lxc $vmid: trying fallback lxc-attach (forced)"
 | 
			
		||||
        local attach_ip=""
 | 
			
		||||
        attach_ip=$(timeout 7s lxc-attach -n "$vmid" -- ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1)
 | 
			
		||||
@@ -1188,7 +1215,7 @@ get_lxc_ips() {
 | 
			
		||||
            method_used="lxc_attach_forced"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -z "$ips" ]]; then
 | 
			
		||||
    if [[ -z "$ips" && "${LXC_ALLOW_FORCED_COMMANDS:-true}" == "true" ]]; then
 | 
			
		||||
        debug_log "lxc $vmid: trying fallback pct exec (forced)"
 | 
			
		||||
        local pct_ip=""
 | 
			
		||||
        pct_ip=$(timeout 7s pct exec "$vmid" -- ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1)
 | 
			
		||||
@@ -1310,6 +1337,21 @@ msg_info "Restarting Service with optimizations"
 | 
			
		||||
systemctl restart iptag.service &>/dev/null
 | 
			
		||||
msg_ok "Service restarted with CPU optimizations"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating manual run command"
 | 
			
		||||
cat <<'EOF' >/usr/local/bin/iptag-run
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
CONFIG_FILE="/opt/iptag/iptag.conf"
 | 
			
		||||
SCRIPT_FILE="/opt/iptag/iptag"
 | 
			
		||||
if [[ ! -f "$SCRIPT_FILE" ]]; then
 | 
			
		||||
  echo "❌ Main script not found: $SCRIPT_FILE"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
export FORCE_SINGLE_RUN=true
 | 
			
		||||
exec "$SCRIPT_FILE"
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /usr/local/bin/iptag-run
 | 
			
		||||
msg_ok "Created iptag-run executable - You can execute this manually by entering “iptag-run” in the Proxmox host, so the script is executed by hand."
 | 
			
		||||
 | 
			
		||||
SPINNER_PID=""
 | 
			
		||||
echo -e "\n${APP} installation completed successfully! ${CL}\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user