mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			2025-07-09
			...
			2025-07-10
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6fcca2bfdb | ||
| 
						 | 
					295b419fbc | ||
| 
						 | 
					b9ac02e74f | ||
| 
						 | 
					66d2f96b16 | ||
| 
						 | 
					1a66ca2683 | ||
| 
						 | 
					b865be5e45 | ||
| 
						 | 
					edb8ee5980 | ||
| 
						 | 
					d30c0718da | ||
| 
						 | 
					90b6712453 | ||
| 
						 | 
					3140438b2f | ||
| 
						 | 
					bb00b9f545 | ||
| 
						 | 
					12b9e163bc | ||
| 
						 | 
					ee182fe867 | 
							
								
								
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,23 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-07-11
 | 
			
		||||
 | 
			
		||||
## 2025-07-10
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Refactor: Habitica [@MickLesk](https://github.com/MickLesk) ([#5911](https://github.com/community-scripts/ProxmoxVE/pull/5911))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - core: fix breaking re-download of lxc containers  [@MickLesk](https://github.com/MickLesk) ([#5906](https://github.com/community-scripts/ProxmoxVE/pull/5906))
 | 
			
		||||
    - PLANKA: Fix paths to application directory [@tremor021](https://github.com/tremor021) ([#5900](https://github.com/community-scripts/ProxmoxVE/pull/5900))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: EMQX + Update-Function + Improved NodeJS Crawling [@MickLesk](https://github.com/MickLesk) ([#5907](https://github.com/community-scripts/ProxmoxVE/pull/5907))
 | 
			
		||||
 | 
			
		||||
## 2025-07-09
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								ct/emqx.sh
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								ct/emqx.sh
									
									
									
									
									
								
							@@ -20,18 +20,39 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
    exit
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1)
 | 
			
		||||
  if [[ "$RELEASE" != "$(cat ~/.emqx 2>/dev/null)" ]] || [[ ! -f ~/.emqx ]]; then
 | 
			
		||||
    msg_info "Stopping EMQX"
 | 
			
		||||
    systemctl stop emqx
 | 
			
		||||
    msg_ok "Stopped EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Downloading EMQX v${RELEASE}"
 | 
			
		||||
    DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
    curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
    msg_ok "Downloaded EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Installing EMQX"
 | 
			
		||||
    $STD apt-get install -y "$DEB_FILE"
 | 
			
		||||
    msg_ok "Installed EMQX v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting EMQX"
 | 
			
		||||
    systemctl start emqx
 | 
			
		||||
    echo "$RELEASE" >~/.emqx
 | 
			
		||||
    msg_ok "Started EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f "$DEB_FILE"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. EMQX is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +62,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:18083${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:18083${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,48 +20,61 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
    if [[ ! -d "/opt/habitica" ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop habitica-mongodb
 | 
			
		||||
        systemctl stop habitica
 | 
			
		||||
        systemctl stop habitica-client
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
        tar zxf $temp_file
 | 
			
		||||
        cp -rf habitica-${RELEASE}/* /opt/habitica
 | 
			
		||||
        cd /opt/habitica
 | 
			
		||||
        $STD npm i
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start habitica-mongodb
 | 
			
		||||
        systemctl start habitica
 | 
			
		||||
        systemctl start habitica-client
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f $temp_file
 | 
			
		||||
        rm -rf ~/habitica-${RELEASE}
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
  if [[ ! -d "/opt/habitica" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.habitica 2>/dev/null)" ]] || [[ ! -f ~/.habitica ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop habitica-mongodb
 | 
			
		||||
    systemctl stop habitica
 | 
			
		||||
    systemctl stop habitica-client
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Save configuration"
 | 
			
		||||
    if [[ -f /opt/habitica/config.json ]]; then
 | 
			
		||||
      cp /opt/habitica/config.json ~/config.json
 | 
			
		||||
      msg_ok "Saved configuration"
 | 
			
		||||
    else
 | 
			
		||||
      msg_warn "No configuration file found, skipping save"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /opt/habitica
 | 
			
		||||
    $STD npm i
 | 
			
		||||
    $STD npm run postinstall
 | 
			
		||||
    $STD npm run client:build
 | 
			
		||||
    $STD gulp build:prod
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring configuration"
 | 
			
		||||
    if [[ -f ~/config.json ]]; then
 | 
			
		||||
      cp ~/config.json /opt/habitica/config.json
 | 
			
		||||
      msg_ok "Restored configuration"
 | 
			
		||||
    else
 | 
			
		||||
      msg_warn "No configuration file found to restore"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start habitica-mongodb
 | 
			
		||||
    systemctl start habitica
 | 
			
		||||
    systemctl start habitica-client
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -71,4 +84,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								ct/planka.sh
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								ct/planka.sh
									
									
									
									
									
								
							@@ -40,20 +40,20 @@ function update_script() {
 | 
			
		||||
    mkdir -p /opt/planka-backup/user-avatars
 | 
			
		||||
    mkdir -p /opt/planka-backup/background-images
 | 
			
		||||
    mkdir -p /opt/planka-backup/attachments
 | 
			
		||||
    mv /opt/planka/planka/.env /opt/planka-backup
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/
 | 
			
		||||
    mv /opt/planka/.env /opt/planka-backup
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/public/favicons/* /opt/planka-backup/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/public/background-images/* /opt/planka-backup/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/private/attachments/* /opt/planka-backup/attachments/
 | 
			
		||||
    rm -rf /opt/planka
 | 
			
		||||
    fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
 | 
			
		||||
    cd /opt/planka/planka
 | 
			
		||||
    cd /opt/planka
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    mv /opt/planka-backup/.env /opt/planka/planka/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/
 | 
			
		||||
    mv /opt/planka-backup/.env /opt/planka/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/public/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/public/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/public/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								frontend/public/json/emqx.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/emqx.json
									
									
									
										generated
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 18083,
 | 
			
		||||
  "documentation": "https://docs.emqx.com/en/emqx/latest/",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								frontend/public/json/habitica.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/habitica.json
									
									
									
										generated
									
									
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://github.com/HabitRPG/habitica/wiki",
 | 
			
		||||
  "website": "https://habitica.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/habitica.webp",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										140
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										140
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							@@ -1,4 +1,74 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.518",
 | 
			
		||||
    "date": "2025-07-08T13:52:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v3.41.1",
 | 
			
		||||
    "date": "2025-07-10T17:10:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "LibreTranslate/LibreTranslate",
 | 
			
		||||
    "version": "v1.7.2",
 | 
			
		||||
    "date": "2025-07-10T19:29:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "binwiederhier/ntfy",
 | 
			
		||||
    "version": "v2.13.0",
 | 
			
		||||
    "date": "2025-07-10T19:27:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.9.6",
 | 
			
		||||
    "date": "2025-07-08T01:26:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.23.4",
 | 
			
		||||
    "date": "2025-07-10T18:13:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r6.0.25",
 | 
			
		||||
    "date": "2025-07-10T16:59:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v11.0.3",
 | 
			
		||||
    "date": "2025-07-10T13:12:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.10",
 | 
			
		||||
    "date": "2025-07-10T12:04:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "5.26.9",
 | 
			
		||||
    "date": "2025-07-10T10:04:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-incremental-vector-store-3",
 | 
			
		||||
    "date": "2025-07-07T10:27:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "preview-v0.1",
 | 
			
		||||
    "date": "2025-06-27T14:35:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2140",
 | 
			
		||||
    "date": "2025-07-10T05:54:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.20",
 | 
			
		||||
    "date": "2025-07-02T04:03:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.0",
 | 
			
		||||
@@ -29,11 +99,6 @@
 | 
			
		||||
    "version": "v1.13.6",
 | 
			
		||||
    "date": "2025-07-09T17:23:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.23.3",
 | 
			
		||||
    "date": "2025-07-09T16:39:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hargata/lubelog",
 | 
			
		||||
    "version": "v1.4.9",
 | 
			
		||||
@@ -74,11 +139,6 @@
 | 
			
		||||
    "version": "v0.107.63",
 | 
			
		||||
    "date": "2025-06-26T14:34:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.9",
 | 
			
		||||
    "date": "2025-06-17T11:54:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.102.0",
 | 
			
		||||
@@ -99,11 +159,6 @@
 | 
			
		||||
    "version": "2025.6.3",
 | 
			
		||||
    "date": "2025-07-03T01:07:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2135",
 | 
			
		||||
    "date": "2025-07-09T05:58:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
@@ -129,11 +184,6 @@
 | 
			
		||||
    "version": "v0.35.0",
 | 
			
		||||
    "date": "2025-05-21T18:00:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v3.40.1",
 | 
			
		||||
    "date": "2025-07-08T21:06:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.1.18",
 | 
			
		||||
@@ -149,11 +199,6 @@
 | 
			
		||||
    "version": "v5.20.0",
 | 
			
		||||
    "date": "2025-07-08T16:27:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.518",
 | 
			
		||||
    "date": "2025-07-08T13:52:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.2",
 | 
			
		||||
@@ -164,11 +209,6 @@
 | 
			
		||||
    "version": "coverity-w28-4.13.0",
 | 
			
		||||
    "date": "2025-07-08T11:25:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "preview-v0.1",
 | 
			
		||||
    "date": "2025-06-27T14:35:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docker/compose",
 | 
			
		||||
    "version": "v2.38.2",
 | 
			
		||||
@@ -179,16 +219,6 @@
 | 
			
		||||
    "version": "v2.4.0p7",
 | 
			
		||||
    "date": "2025-07-08T05:51:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.9.6",
 | 
			
		||||
    "date": "2025-07-08T01:26:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.0.12-rc0",
 | 
			
		||||
    "date": "2025-07-07T23:35:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.35",
 | 
			
		||||
@@ -214,11 +244,6 @@
 | 
			
		||||
    "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",
 | 
			
		||||
@@ -239,11 +264,6 @@
 | 
			
		||||
    "version": "v1.5.2",
 | 
			
		||||
    "date": "2025-05-11T16:40:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.20",
 | 
			
		||||
    "date": "2025-07-02T04:03:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "slskd/slskd",
 | 
			
		||||
    "version": "0.23.1",
 | 
			
		||||
@@ -619,11 +639,6 @@
 | 
			
		||||
    "version": "v0.21.0",
 | 
			
		||||
    "date": "2025-06-19T11:54:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "2025.05.1",
 | 
			
		||||
    "date": "2025-06-19T11:28:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus-pve/prometheus-pve-exporter",
 | 
			
		||||
    "version": "v3.5.5",
 | 
			
		||||
@@ -654,11 +669,6 @@
 | 
			
		||||
    "version": "v5.6.0",
 | 
			
		||||
    "date": "2025-06-18T12:19:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v11.0.2",
 | 
			
		||||
    "date": "2025-06-18T09:38:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "silverbulletmd/silverbullet",
 | 
			
		||||
    "version": "2.0.0-pre3",
 | 
			
		||||
@@ -849,11 +859,6 @@
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2024-08-29T22:32:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "binwiederhier/ntfy",
 | 
			
		||||
    "version": "v2.12.0",
 | 
			
		||||
    "date": "2025-05-30T00:26:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "release-argus/Argus",
 | 
			
		||||
    "version": "0.26.3",
 | 
			
		||||
@@ -1099,11 +1104,6 @@
 | 
			
		||||
    "version": "v1.34.0",
 | 
			
		||||
    "date": "2025-03-26T08:48:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "LibreTranslate/LibreTranslate",
 | 
			
		||||
    "version": "v1.6.5",
 | 
			
		||||
    "date": "2025-03-25T20:27:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nextcloud/nextcloudpi",
 | 
			
		||||
    "version": "v1.55.4",
 | 
			
		||||
 
 | 
			
		||||
@@ -14,22 +14,38 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apt-transport-https \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  lsb-release
 | 
			
		||||
$STD apt-get install -y ca-certificates
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Fetching latest EMQX Enterprise version"
 | 
			
		||||
LATEST_VERSION=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1)
 | 
			
		||||
if [[ -z "$LATEST_VERSION" ]]; then
 | 
			
		||||
  msg_error "Failed to determine latest EMQX version"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Latest version: v$LATEST_VERSION"
 | 
			
		||||
 | 
			
		||||
DOWNLOAD_URL="https://www.emqx.com/en/downloads/enterprise/v$LATEST_VERSION/emqx-enterprise-${LATEST_VERSION}-debian12-amd64.deb"
 | 
			
		||||
DEB_FILE="/tmp/emqx-enterprise-${LATEST_VERSION}-debian12-amd64.deb"
 | 
			
		||||
 | 
			
		||||
msg_info "Downloading EMQX v$LATEST_VERSION"
 | 
			
		||||
$STD curl -fsSL -o "$DEB_FILE" "$DOWNLOAD_URL"
 | 
			
		||||
msg_ok "Downloaded EMQX"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing EMQX"
 | 
			
		||||
curl -fsSL https://packagecloud.io/emqx/emqx/gpgkey | gpg --dearmor -o /usr/share/keyrings/emqx-archive-keyring.gpg
 | 
			
		||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/emqx-archive-keyring.gpg] https://packagecloud.io/emqx/emqx/debian/ bookworm main" >/etc/apt/sources.list.d/emqx.list
 | 
			
		||||
$STD apt-get install -y emqx
 | 
			
		||||
$STD apt-get install -y "$DEB_FILE"
 | 
			
		||||
echo "$LATEST_VERSION" >~/.emqx
 | 
			
		||||
msg_ok "Installed EMQX"
 | 
			
		||||
 | 
			
		||||
msg_info "Starting EMQX service"
 | 
			
		||||
$STD systemctl enable -q --now emqx
 | 
			
		||||
msg_ok "Enabled EMQX service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$DEB_FILE"
 | 
			
		||||
$STD apt-get autoremove
 | 
			
		||||
$STD apt-get autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -22,18 +22,16 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1
 | 
			
		||||
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" setup_nodejs
 | 
			
		||||
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup ${APPLICATION}"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
tar zxf $temp_file
 | 
			
		||||
mv habitica-${RELEASE}/ /opt/habitica
 | 
			
		||||
cd /opt/habitica
 | 
			
		||||
$STD npm i
 | 
			
		||||
$STD npm run postinstall
 | 
			
		||||
$STD npm run client:build
 | 
			
		||||
$STD gulp build:prod
 | 
			
		||||
cp config.json.example config.json
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Setup ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
@@ -91,7 +89,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"
 | 
			
		||||
 
 | 
			
		||||
@@ -45,12 +45,12 @@ fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/o
 | 
			
		||||
msg_info "Configuring PLANKA"
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
SECRET_KEY=$(openssl rand -hex 64)
 | 
			
		||||
cd /opt/planka/planka
 | 
			
		||||
cd /opt/planka
 | 
			
		||||
$STD npm install
 | 
			
		||||
cp .env.sample .env
 | 
			
		||||
sed -i "s#http://localhost:1337#http://$LOCAL_IP:1337#g" /opt/planka/planka/.env
 | 
			
		||||
sed -i "s#postgres@localhost#planka:$DB_PASS@localhost#g" /opt/planka/planka/.env
 | 
			
		||||
sed -i "s#notsecretkey#$SECRET_KEY#g" /opt/planka/planka/.env
 | 
			
		||||
sed -i "s#http://localhost:1337#http://$LOCAL_IP:1337#g" /opt/planka/.env
 | 
			
		||||
sed -i "s#postgres@localhost#planka:$DB_PASS@localhost#g" /opt/planka/.env
 | 
			
		||||
sed -i "s#notsecretkey#$SECRET_KEY#g" /opt/planka/.env
 | 
			
		||||
$STD npm run db:init
 | 
			
		||||
msg_ok "Configured PLANKA"
 | 
			
		||||
 | 
			
		||||
@@ -84,7 +84,7 @@ Description=planka Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/planka/planka
 | 
			
		||||
WorkingDirectory=/opt/planka
 | 
			
		||||
ExecStart=/usr/bin/npm start --prod
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -253,7 +253,7 @@ fi
 | 
			
		||||
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
 | 
			
		||||
 | 
			
		||||
msg_info "Updating LXC Template List"
 | 
			
		||||
if ! timeout 15 pveam update >/dev/null 2>&1; then
 | 
			
		||||
if ! pveam update >/dev/null 2>&1; then
 | 
			
		||||
  TEMPLATE_FALLBACK=$(pveam list "$TEMPLATE_STORAGE" | awk "/$TEMPLATE_SEARCH/ {print \$2}" | sort -t - -k 2 -V | tail -n1)
 | 
			
		||||
  if [[ -z "$TEMPLATE_FALLBACK" ]]; then
 | 
			
		||||
    msg_error "Failed to update LXC template list and no local template matching '$TEMPLATE_SEARCH' found."
 | 
			
		||||
@@ -284,7 +284,7 @@ if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLAT
 | 
			
		||||
  for attempt in {1..3}; do
 | 
			
		||||
    msg_info "Attempt $attempt: Downloading LXC template..."
 | 
			
		||||
 | 
			
		||||
    if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
 | 
			
		||||
    if pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
 | 
			
		||||
      msg_ok "Template download successful."
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
@@ -54,9 +54,14 @@ function setup_nodejs() {
 | 
			
		||||
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION}.x nodistro main" \
 | 
			
		||||
      >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
 | 
			
		||||
    sleep 2
 | 
			
		||||
    if ! apt-get update >/dev/null 2>&1; then
 | 
			
		||||
      msg_error "Failed to update APT repositories after adding NodeSource"
 | 
			
		||||
      exit 1
 | 
			
		||||
      msg_warn "APT update failed – retrying in 5s"
 | 
			
		||||
      sleep 5
 | 
			
		||||
      if ! apt-get update >/dev/null 2>&1; then
 | 
			
		||||
        msg_error "Failed to update APT repositories after adding NodeSource"
 | 
			
		||||
        exit 1
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! apt-get install -y nodejs >/dev/null 2>&1; then
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user