mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-07-08 06:57:37 +00:00
Compare commits
24 Commits
CrazyWolf1
...
github-act
Author | SHA1 | Date | |
---|---|---|---|
e0505ec8c3 | |||
396e0c6523 | |||
1530e52108 | |||
451f6aff8e | |||
046acc75db | |||
f40218aa07 | |||
c5e831dadc | |||
16786a8304 | |||
fc728bcca7 | |||
5516aa493d | |||
54f2f98193 | |||
137a41f67c | |||
26365561dc | |||
9dc0fc80b9 | |||
722f7e14d7 | |||
b2a8a9bd00 | |||
12bd6754ab | |||
74166f97f9 | |||
b2bccd9501 | |||
c567b75aa7 | |||
2d77790b64 | |||
37d466103d | |||
d59aa0527a | |||
9ddf10f82e |
10
CHANGELOG.md
10
CHANGELOG.md
@ -10,9 +10,11 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
> [!NOTE]
|
## 2025-07-08
|
||||||
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.
|
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819))
|
||||||
|
|
||||||
## 2025-07-07
|
## 2025-07-07
|
||||||
|
|
||||||
@ -20,6 +22,9 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 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))
|
- 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
|
- #### ✨ New Features
|
||||||
@ -30,6 +35,7 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
|
|
||||||
- #### 🔧 Refactor
|
- #### 🔧 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: 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))
|
- 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))
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#">
|
<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>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,48 +27,35 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
|
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"
|
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||||
$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"
|
|
||||||
fi
|
fi
|
||||||
export NODE_OPTIONS="--max_old_space_size=4096"
|
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) }')
|
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}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop docmost
|
systemctl stop docmost
|
||||||
msg_ok "${APP} Stopped"
|
msg_ok "${APP} Stopped"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Backing up data"
|
||||||
cp /opt/docmost/.env /opt/
|
cp /opt/docmost/.env /opt/
|
||||||
cp -r /opt/docmost/data /opt/
|
cp -r /opt/docmost/data /opt/
|
||||||
rm -rf /opt/docmost
|
rm -rf /opt/docmost
|
||||||
temp_file=$(mktemp)
|
msg_ok "Data backed up"
|
||||||
curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar -xzf "$temp_file"
|
fetch_and_deploy_gh_release "docmost" "docmost/docmost"
|
||||||
mv docmost-${RELEASE} /opt/docmost
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
cd /opt/docmost
|
cd /opt/docmost
|
||||||
mv /opt/.env /opt/docmost/.env
|
mv /opt/.env /opt/docmost/.env
|
||||||
mv /opt/data /opt/docmost/data
|
mv /opt/data /opt/docmost/data
|
||||||
$STD pnpm install --force
|
$STD pnpm install --force
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start docmost
|
systemctl start docmost
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -f ${temp_file}
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
@ -40,6 +40,7 @@ function update_script() {
|
|||||||
msg_info "Updating Ollama to ${RELEASE}"
|
msg_info "Updating Ollama to ${RELEASE}"
|
||||||
rm -rf /usr/local/lib/ollama
|
rm -rf /usr/local/lib/ollama
|
||||||
rm -rf /usr/local/bin/ollama
|
rm -rf /usr/local/bin/ollama
|
||||||
|
mkdir -p /usr/local/lib/ollama
|
||||||
tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
|
tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
|
||||||
ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
|
ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
|
||||||
echo "${RELEASE}" >/opt/Ollama_version.txt
|
echo "${RELEASE}" >/opt/Ollama_version.txt
|
||||||
|
@ -58,6 +58,7 @@ function update_script() {
|
|||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
||||||
fi
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
@ -38,10 +38,12 @@ function update_script() {
|
|||||||
tar -xzf v$RELEASE.tar.gz
|
tar -xzf v$RELEASE.tar.gz
|
||||||
cd Stirling-PDF-$RELEASE
|
cd Stirling-PDF-$RELEASE
|
||||||
chmod +x ./gradlew
|
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
|
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 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 ~
|
cd ~
|
||||||
rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
|
rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
|
||||||
ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
||||||
|
6
frontend/public/json/add-iptag.json
generated
6
frontend/public/json/add-iptag.json
generated
@ -37,12 +37,16 @@
|
|||||||
"type": "info"
|
"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"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
|
"text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
|
||||||
"type": "warning"
|
"type": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "You can execute the ip tool manually with `iptag-run`",
|
||||||
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
7
frontend/public/json/docmost.json
generated
7
frontend/public/json/docmost.json
generated
@ -31,5 +31,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Use `cat ~/docmost.creds` to see database credentials.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
220
frontend/public/json/versions.json
generated
220
frontend/public/json/versions.json
generated
@ -1,4 +1,109 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"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",
|
"name": "pelican-dev/panel",
|
||||||
"version": "v1.0.0-beta22",
|
"version": "v1.0.0-beta22",
|
||||||
@ -29,26 +134,6 @@
|
|||||||
"version": "v1.30.0",
|
"version": "v1.30.0",
|
||||||
"date": "2025-07-01T11:29:11Z"
|
"date": "2025-07-01T11:29:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "traccar/traccar",
|
|
||||||
"version": "v6.8.0",
|
|
||||||
"date": "2025-07-06T18:19:05Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "firefly-iii/firefly-iii",
|
|
||||||
"version": "v6.2.20",
|
|
||||||
"date": "2025-07-02T04:03:37Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "msgbyte/tianji",
|
|
||||||
"version": "v1.23.0",
|
|
||||||
"date": "2025-07-06T16:01:58Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "TandoorRecipes/recipes",
|
|
||||||
"version": "1.5.35",
|
|
||||||
"date": "2025-06-22T08:30:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Part-DB/Part-DB-server",
|
"name": "Part-DB/Part-DB-server",
|
||||||
"version": "v1.17.2",
|
"version": "v1.17.2",
|
||||||
@ -59,11 +144,6 @@
|
|||||||
"version": "8.0.3",
|
"version": "8.0.3",
|
||||||
"date": "2025-07-06T12:19:24Z"
|
"date": "2025-07-06T12:19:24Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.22.2123",
|
|
||||||
"date": "2025-07-06T06:01:32Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "fallenbagel/jellyseerr",
|
"name": "fallenbagel/jellyseerr",
|
||||||
"version": "preview-OIDC",
|
"version": "preview-OIDC",
|
||||||
@ -74,16 +154,6 @@
|
|||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"date": "2025-06-14T17:45:06Z"
|
"date": "2025-06-14T17:45:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "steveiliop56/tinyauth",
|
|
||||||
"version": "v3.4.1",
|
|
||||||
"date": "2025-06-11T07:53:44Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "slskd/slskd",
|
|
||||||
"version": "0.23.0",
|
|
||||||
"date": "2025-07-06T00:02:35Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Kareadita/Kavita",
|
"name": "Kareadita/Kavita",
|
||||||
"version": "v0.8.7",
|
"version": "v0.8.7",
|
||||||
@ -114,11 +184,6 @@
|
|||||||
"version": "v11.11.4",
|
"version": "v11.11.4",
|
||||||
"date": "2025-07-05T09:23:25Z"
|
"date": "2025-07-05T09:23:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Paymenter/Paymenter",
|
|
||||||
"version": "v1.2.0",
|
|
||||||
"date": "2025-07-05T08:58:05Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "linkwarden/linkwarden",
|
"name": "linkwarden/linkwarden",
|
||||||
"version": "v2.11.3",
|
"version": "v2.11.3",
|
||||||
@ -144,6 +209,11 @@
|
|||||||
"version": "v1.6.2",
|
"version": "v1.6.2",
|
||||||
"date": "2025-07-04T15:21:18Z"
|
"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",
|
"name": "kimai/kimai",
|
||||||
"version": "2.37.0",
|
"version": "2.37.0",
|
||||||
@ -159,21 +229,6 @@
|
|||||||
"version": "6.3.1",
|
"version": "6.3.1",
|
||||||
"date": "2025-07-04T11:20:48Z"
|
"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": "outline/outline",
|
"name": "outline/outline",
|
||||||
"version": "v0.85.0",
|
"version": "v0.85.0",
|
||||||
@ -204,11 +259,6 @@
|
|||||||
"version": "310.5",
|
"version": "310.5",
|
||||||
"date": "2025-07-03T14:05:25Z"
|
"date": "2025-07-03T14:05:25Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "n8n-io/n8n",
|
|
||||||
"version": "n8n@1.100.0",
|
|
||||||
"date": "2025-06-23T12:48:35Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Dolibarr/dolibarr",
|
"name": "Dolibarr/dolibarr",
|
||||||
"version": "18.0.7",
|
"version": "18.0.7",
|
||||||
@ -234,11 +284,6 @@
|
|||||||
"version": "v1.12.2-rc.0",
|
"version": "v1.12.2-rc.0",
|
||||||
"date": "2025-07-03T00:31:22Z"
|
"date": "2025-07-03T00:31:22Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "emqx/emqx",
|
|
||||||
"version": "v5.8.7",
|
|
||||||
"date": "2025-07-02T21:54:54Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "hargata/lubelog",
|
"name": "hargata/lubelog",
|
||||||
"version": "v1.4.8",
|
"version": "v1.4.8",
|
||||||
@ -414,11 +459,6 @@
|
|||||||
"version": "flowise@3.0.3",
|
"version": "flowise@3.0.3",
|
||||||
"date": "2025-06-27T09:53:57Z"
|
"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",
|
"name": "netbox-community/netbox",
|
||||||
"version": "v4.3.3",
|
"version": "v4.3.3",
|
||||||
@ -439,11 +479,6 @@
|
|||||||
"version": "v3.5.0-rc1",
|
"version": "v3.5.0-rc1",
|
||||||
"date": "2025-06-26T15:08:43Z"
|
"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",
|
"name": "AdguardTeam/AdGuardHome",
|
||||||
"version": "v0.107.63",
|
"version": "v0.107.63",
|
||||||
@ -474,11 +509,6 @@
|
|||||||
"version": "v1.18.4",
|
"version": "v1.18.4",
|
||||||
"date": "2025-06-25T00:06:56Z"
|
"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",
|
"name": "evcc-io/evcc",
|
||||||
"version": "0.204.5",
|
"version": "0.204.5",
|
||||||
@ -499,11 +529,6 @@
|
|||||||
"version": "RELEASE.2025-06-13T11-33-47Z",
|
"version": "RELEASE.2025-06-13T11-33-47Z",
|
||||||
"date": "2025-06-23T20:58:42Z"
|
"date": "2025-06-23T20:58:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
|
||||||
"version": "pmm-6401-v1.120.0",
|
|
||||||
"date": "2025-06-23T15:12:12Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "gotson/komga",
|
"name": "gotson/komga",
|
||||||
"version": "1.22.0",
|
"version": "1.22.0",
|
||||||
@ -604,11 +629,6 @@
|
|||||||
"version": "v5.6.0",
|
"version": "v5.6.0",
|
||||||
"date": "2025-06-18T12:19:54Z"
|
"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",
|
"name": "forgejo/forgejo",
|
||||||
"version": "v11.0.2",
|
"version": "v11.0.2",
|
||||||
@ -629,21 +649,11 @@
|
|||||||
"version": "v2.1.5",
|
"version": "v2.1.5",
|
||||||
"date": "2025-06-17T18:04:11Z"
|
"date": "2025-06-17T18:04:11Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "BookStackApp/BookStack",
|
|
||||||
"version": "v25.05.1",
|
|
||||||
"date": "2025-06-17T14:38:04Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "crowdsecurity/crowdsec",
|
"name": "crowdsecurity/crowdsec",
|
||||||
"version": "v1.6.9",
|
"version": "v1.6.9",
|
||||||
"date": "2025-06-17T11:54:50Z"
|
"date": "2025-06-17T11:54:50Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.2",
|
|
||||||
"date": "2025-05-11T16:40:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "donaldzou/WGDashboard",
|
"name": "donaldzou/WGDashboard",
|
||||||
"version": "v4.2.4",
|
"version": "v4.2.4",
|
||||||
@ -884,11 +894,6 @@
|
|||||||
"version": "0.5",
|
"version": "0.5",
|
||||||
"date": "2025-05-21T20:19:14Z"
|
"date": "2025-05-21T20:19:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Stirling-Tools/Stirling-PDF",
|
|
||||||
"version": "v0.46.2",
|
|
||||||
"date": "2025-05-20T11:21:04Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "sbondCo/Watcharr",
|
"name": "sbondCo/Watcharr",
|
||||||
"version": "v2.1.0",
|
"version": "v2.1.0",
|
||||||
@ -989,11 +994,6 @@
|
|||||||
"version": "v2.6.3",
|
"version": "v2.6.3",
|
||||||
"date": "2025-04-27T09:05:42Z"
|
"date": "2025-04-27T09:05:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "photoprism/photoprism",
|
|
||||||
"version": "250426-27ec7a128",
|
|
||||||
"date": "2025-04-26T11:51:39Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "TechnitiumSoftware/DnsServer",
|
"name": "TechnitiumSoftware/DnsServer",
|
||||||
"version": "v13.6.0",
|
"version": "v13.6.0",
|
||||||
|
@ -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
|
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
|
||||||
chmod +x /opt/tinyauth/tinyauth
|
chmod +x /opt/tinyauth/tinyauth
|
||||||
|
|
||||||
PASSWORD=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
|
PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
|
||||||
USER=$(htpasswd -Bbn "tinyauth" "${PASSWORD}")
|
USER=$(htpasswd -Bbn "tinyauth" "${PASS}")
|
||||||
|
|
||||||
cat <<EOF > /opt/tinyauth/credentials.txt
|
cat <<EOF >/opt/tinyauth/credentials.txt
|
||||||
Tinyauth Credentials
|
Tinyauth Credentials
|
||||||
Username: tinyauth
|
Username: tinyauth
|
||||||
Password: ${PASSWORD}
|
Password: ${PASS}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/tinyauth_version.txt
|
echo "${RELEASE}" >/opt/tinyauth_version.txt
|
||||||
|
@ -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
|
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
|
PG_VERSION="16" setup_postgresql
|
||||||
|
fetch_and_deploy_gh_release "docmost" "docmost/docmost"
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL"
|
msg_info "Setting up PostgreSQL"
|
||||||
DB_NAME="docmost_db"
|
DB_NAME="docmost_db"
|
||||||
@ -40,12 +41,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
|||||||
} >>~/docmost.creds
|
} >>~/docmost.creds
|
||||||
msg_ok "Set up PostgreSQL"
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
msg_info "Installing Docmost (Patience)"
|
msg_info "Configuring 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
|
|
||||||
cd /opt/docmost
|
cd /opt/docmost
|
||||||
mv .env.example .env
|
mv .env.example .env
|
||||||
mkdir data
|
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"
|
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||||
$STD pnpm install
|
$STD pnpm install
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
msg_ok "Configured Docmost"
|
||||||
msg_ok "Installed Docmost"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/docmost.service
|
cat <<EOF >/etc/systemd/system/docmost.service
|
||||||
@ -81,7 +76,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$temp_file"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
@ -80,11 +80,13 @@ curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${
|
|||||||
tar -xzf v${RELEASE}.tar.gz
|
tar -xzf v${RELEASE}.tar.gz
|
||||||
cd Stirling-PDF-$RELEASE
|
cd Stirling-PDF-$RELEASE
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
$STD ./gradlew build
|
$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
|
||||||
mkdir -p /opt/Stirling-PDF
|
mkdir -p /opt/Stirling-PDF
|
||||||
touch /opt/Stirling-PDF/.env
|
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 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 /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
||||||
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
|
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
|
||||||
msg_ok "Installed Stirling-PDF"
|
msg_ok "Installed Stirling-PDF"
|
||||||
|
@ -434,6 +434,7 @@ function setup_php() {
|
|||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local MODULE_LIST="php${PHP_VERSION}"
|
||||||
for pkg in $MODULE_LIST; do
|
for pkg in $MODULE_LIST; do
|
||||||
if ! apt-cache show "$pkg" >/dev/null 2>&1; then
|
if ! apt-cache show "$pkg" >/dev/null 2>&1; then
|
||||||
msg_error "Package not found: $pkg"
|
msg_error "Package not found: $pkg"
|
||||||
@ -441,7 +442,7 @@ function setup_php() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
local MODULE_LIST="php${PHP_VERSION}"
|
|
||||||
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
|
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
|
||||||
for mod in "${MODULES[@]}"; do
|
for mod in "${MODULES[@]}"; do
|
||||||
MODULE_LIST+=" php${PHP_VERSION}-${mod}"
|
MODULE_LIST+=" php${PHP_VERSION}-${mod}"
|
||||||
@ -955,9 +956,24 @@ function fetch_and_deploy_gh_release() {
|
|||||||
if ! command -v unzip &>/dev/null; then
|
if ! command -v unzip &>/dev/null; then
|
||||||
$STD apt-get install -y unzip
|
$STD apt-get install -y unzip
|
||||||
fi
|
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
|
elif [[ "$filename" == *.tar.* ]]; then
|
||||||
if tar -tf "$tmpdir/$filename" | grep -qE '^([^/]+/){2}'; then
|
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"
|
tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
|
||||||
else
|
else
|
||||||
tar -xf "$tmpdir/$filename" -C "$target"
|
tar -xf "$tmpdir/$filename" -C "$target"
|
||||||
|
@ -162,6 +162,21 @@ update_installation() {
|
|||||||
generate_service >/lib/systemd/system/iptag.service
|
generate_service >/lib/systemd/system/iptag.service
|
||||||
msg_ok "Updated service file"
|
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"
|
msg_info "Restarting service"
|
||||||
systemctl daemon-reload &>/dev/null
|
systemctl daemon-reload &>/dev/null
|
||||||
systemctl enable -q --now iptag.service &>/dev/null
|
systemctl enable -q --now iptag.service &>/dev/null
|
||||||
@ -194,18 +209,19 @@ LXC_STATUS_CHECK_INTERVAL=300
|
|||||||
FORCE_UPDATE_INTERVAL=7200
|
FORCE_UPDATE_INTERVAL=7200
|
||||||
|
|
||||||
# Performance optimizations
|
# Performance optimizations
|
||||||
VM_IP_CACHE_TTL=120
|
VM_IP_CACHE_TTL=300
|
||||||
MAX_PARALLEL_VM_CHECKS=5
|
MAX_PARALLEL_VM_CHECKS=1
|
||||||
|
|
||||||
# LXC performance optimizations
|
# LXC performance optimizations
|
||||||
LXC_IP_CACHE_TTL=0
|
LXC_IP_CACHE_TTL=300
|
||||||
MAX_PARALLEL_LXC_CHECKS=7
|
MAX_PARALLEL_LXC_CHECKS=2
|
||||||
|
|
||||||
# Extreme LXC optimizations
|
# Extreme LXC optimizations
|
||||||
LXC_BATCH_SIZE=20
|
LXC_BATCH_SIZE=3
|
||||||
LXC_STATUS_CACHE_TTL=30
|
LXC_STATUS_CACHE_TTL=300
|
||||||
LXC_AGGRESSIVE_CACHING=true
|
LXC_AGGRESSIVE_CACHING=true
|
||||||
LXC_SKIP_SLOW_METHODS=true
|
LXC_SKIP_SLOW_METHODS=true
|
||||||
|
LXC_ALLOW_FORCED_COMMANDS=false
|
||||||
|
|
||||||
# Debug settings (set to true to enable debugging)
|
# Debug settings (set to true to enable debugging)
|
||||||
DEBUG=false
|
DEBUG=false
|
||||||
@ -222,8 +238,8 @@ After=network.target
|
|||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=/opt/iptag/iptag
|
ExecStart=/opt/iptag/iptag
|
||||||
Restart=always
|
Restart=on-failure
|
||||||
RestartSec=1
|
RestartSec=10
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
@ -576,7 +592,9 @@ update_tags() {
|
|||||||
|
|
||||||
if [[ "$type" == "lxc" ]]; then
|
if [[ "$type" == "lxc" ]]; then
|
||||||
current_ips_full=$(get_lxc_ips "${vmid}")
|
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
|
else
|
||||||
current_ips_full=$(get_vm_ips "${vmid}")
|
current_ips_full=$(get_vm_ips "${vmid}")
|
||||||
local vm_config="/etc/pve/qemu-server/${vmid}.conf"
|
local vm_config="/etc/pve/qemu-server/${vmid}.conf"
|
||||||
@ -790,6 +808,9 @@ check() {
|
|||||||
local current_time changes_detected=false
|
local current_time changes_detected=false
|
||||||
current_time=$(date +%s)
|
current_time=$(date +%s)
|
||||||
|
|
||||||
|
local update_lxc=false
|
||||||
|
local update_vm=false
|
||||||
|
|
||||||
# Periodic cache cleanup (every 10 minutes)
|
# Periodic cache cleanup (every 10 minutes)
|
||||||
local time_since_last_cleanup=$((current_time - ${last_cleanup_time:-0}))
|
local time_since_last_cleanup=$((current_time - ${last_cleanup_time:-0}))
|
||||||
if [[ $time_since_last_cleanup -ge 600 ]]; then
|
if [[ $time_since_last_cleanup -ge 600 ]]; then
|
||||||
@ -801,60 +822,56 @@ check() {
|
|||||||
# Check LXC status
|
# Check LXC status
|
||||||
local time_since_last_lxc_check=$((current_time - last_lxc_status_check_time))
|
local time_since_last_lxc_check=$((current_time - last_lxc_status_check_time))
|
||||||
if [[ "${LXC_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \
|
if [[ "${LXC_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \
|
||||||
[[ "${time_since_last_lxc_check}" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then
|
[[ "$time_since_last_lxc_check" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then
|
||||||
last_lxc_status_check_time=${current_time}
|
last_lxc_status_check_time=$current_time
|
||||||
if check_status_changed "lxc"; then
|
if check_status_changed "lxc"; then
|
||||||
changes_detected=true
|
update_lxc=true
|
||||||
log_warning "LXC status changes detected, updating tags"
|
log_warning "LXC status changes detected"
|
||||||
update_all_tags "lxc"
|
|
||||||
last_update_lxc_time=${current_time}
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check VM status
|
# Check VM status
|
||||||
local time_since_last_vm_check=$((current_time - last_vm_status_check_time))
|
local time_since_last_vm_check=$((current_time - last_vm_status_check_time))
|
||||||
if [[ "${VM_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \
|
if [[ "${VM_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \
|
||||||
[[ "${time_since_last_vm_check}" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then
|
[[ "$time_since_last_vm_check" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then
|
||||||
last_vm_status_check_time=${current_time}
|
last_vm_status_check_time=$current_time
|
||||||
if check_status_changed "vm"; then
|
if check_status_changed "vm"; then
|
||||||
changes_detected=true
|
update_vm=true
|
||||||
log_warning "VM status changes detected, updating tags"
|
log_warning "VM status changes detected"
|
||||||
update_all_tags "vm"
|
|
||||||
last_update_vm_time=${current_time}
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check network interface changes
|
# Check network interface changes
|
||||||
local time_since_last_fw_check=$((current_time - last_fw_net_interface_check_time))
|
local time_since_last_fw_check=$((current_time - last_fw_net_interface_check_time))
|
||||||
if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" -gt 0 ]] && \
|
if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" -gt 0 ]] && \
|
||||||
[[ "${time_since_last_fw_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then
|
[[ "$time_since_last_fw_check" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then
|
||||||
last_fw_net_interface_check_time=${current_time}
|
last_fw_net_interface_check_time=$current_time
|
||||||
if check_status_changed "fw"; then
|
if check_status_changed "fw"; then
|
||||||
changes_detected=true
|
update_lxc=true
|
||||||
log_warning "Network interface changes detected, updating all tags"
|
update_vm=true
|
||||||
update_all_tags "lxc"
|
log_warning "Network interface changes detected"
|
||||||
update_all_tags "vm"
|
|
||||||
last_update_lxc_time=${current_time}
|
|
||||||
last_update_vm_time=${current_time}
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Force update if needed
|
# Force update if interval exceeded
|
||||||
for type in "lxc" "vm"; do
|
for type in "lxc" "vm"; do
|
||||||
local last_update_var="last_update_${type}_time"
|
local last_update_var="last_update_${type}_time"
|
||||||
local time_since_last_update=$((current_time - ${!last_update_var}))
|
local time_since_last_update=$((current_time - ${!last_update_var}))
|
||||||
if [[ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then
|
if [[ $time_since_last_update -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then
|
||||||
changes_detected=true
|
|
||||||
local minutes=$((${FORCE_UPDATE_INTERVAL:-1800} / 60))
|
|
||||||
if [[ "$type" == "lxc" ]]; 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
|
else
|
||||||
log_info "Scheduled VM update (every ${minutes} minutes)"
|
update_vm=true
|
||||||
|
log_info "Scheduled VM update (every $((FORCE_UPDATE_INTERVAL / 60)) minutes)"
|
||||||
fi
|
fi
|
||||||
update_all_tags "$type"
|
|
||||||
eval "${last_update_var}=${current_time}"
|
eval "${last_update_var}=${current_time}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Final execution
|
||||||
|
$update_lxc && update_all_tags "lxc"
|
||||||
|
$update_vm && update_all_tags "vm"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Initialize time variables
|
# 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} Tag format: ${WHITE}${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}${NC}"
|
||||||
echo -e "${BLUE}ℹ${NC} Allowed CIDRs: ${WHITE}${CIDR_LIST[*]}${NC}"
|
echo -e "${BLUE}ℹ${NC} Allowed CIDRs: ${WHITE}${CIDR_LIST[*]}${NC}"
|
||||||
echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||||
|
|
||||||
|
if [[ "$FORCE_SINGLE_RUN" == "true" ]]; then
|
||||||
check
|
check
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
check
|
||||||
|
sleep "${LOOP_INTERVAL:-300}"
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Cache cleanup function
|
# Cache cleanup function
|
||||||
cleanup_vm_cache() {
|
cleanup_vm_cache() {
|
||||||
local cache_dir="/tmp"
|
local cache_dir="/tmp"
|
||||||
@ -997,7 +1024,7 @@ process_vms_parallel() {
|
|||||||
# Parallel LXC processing function
|
# Parallel LXC processing function
|
||||||
process_lxc_parallel() {
|
process_lxc_parallel() {
|
||||||
local lxc_list=("$@")
|
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 batch_size=${LXC_BATCH_SIZE:-20}
|
||||||
local job_count=0
|
local job_count=0
|
||||||
local pids=()
|
local pids=()
|
||||||
@ -1173,7 +1200,7 @@ get_lxc_ips() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Fallback: always do lxc-attach/pct exec with timeout if nothing found
|
# 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)"
|
debug_log "lxc $vmid: trying fallback lxc-attach (forced)"
|
||||||
local attach_ip=""
|
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)
|
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"
|
method_used="lxc_attach_forced"
|
||||||
fi
|
fi
|
||||||
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)"
|
debug_log "lxc $vmid: trying fallback pct exec (forced)"
|
||||||
local pct_ip=""
|
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)
|
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
|
systemctl restart iptag.service &>/dev/null
|
||||||
msg_ok "Service restarted with CPU optimizations"
|
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=""
|
SPINNER_PID=""
|
||||||
echo -e "\n${APP} installation completed successfully! ${CL}\n"
|
echo -e "\n${APP} installation completed successfully! ${CL}\n"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user