Compare commits

...

27 Commits

Author SHA1 Message Date
d19130d8f1 Update CHANGELOG.md (#6169)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / test-json-files (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Sync to Gitea / sync (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-23 00:14:23 +00:00
b36f982fc2 Update versions.json (#6168)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-23 02:14:04 +02:00
d67fa6cf38 Update CHANGELOG.md (#6166)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Sync to Gitea / sync (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 18:49:25 +00:00
4201ab58ab Update CHANGELOG.md (#6163)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 17:09:39 +00:00
0f3b95b3ff Fixed the previous fix on anti-nag hook, propagated fixed to other ProxMox products and fixed 8.0 compatibility (#6162) 2025-07-22 19:09:14 +02:00
feea82e0ba Add GitHub Actions workflow to validate JSON files in the frontend directory (#6152)
* Add GitHub Actions workflow to validate JSON files in the frontend directory

* test new github workflow by invalidating script

* Revalidate json script to also test workflow

* Refactor GitHub Actions workflow to validate JSON files using Python.

* test github workflow

* Update description in apache-tomcat.json for clarity and consistency.

* Consolidate JSON validation workflow: Migrate test-jsons.yml functionality into frontend-cicd.yml, enhancing CI process by validating JSON files in the public directory with Python.

* test to see if workflow fails

* test to see if workflow passes

* testing

* testing to see if workflow runs and works

* test again

* testing to see if it works
2025-07-22 16:00:10 +02:00
0e0c954f0c Update CHANGELOG.md (#6161)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Sync to Gitea / sync (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:57:17 +00:00
6b74f6247f Update CHANGELOG.md (#6160)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:56:51 +00:00
4159ba3970 Update date in json (#6159)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:56:45 +00:00
a53daa3559 Salt (#6116)
* 'Add new script'

* curl

* hdd

* logo

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-22 15:56:22 +02:00
4b3233d6a8 qf: php 2025-07-22 15:55:56 +02:00
ff51b1e5dc Update CHANGELOG.md (#6157)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:53:04 +00:00
TJ
1aab127bdf Update tools.func - typo (#6156)
This was triggered when running the Gitea install script
2025-07-22 15:52:41 +02:00
baf7dff759 Update CHANGELOG.md (#6153)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:03:00 +00:00
b4ec04a54f Bump form-data from 4.0.3 to 4.0.4 in /frontend (#6150)
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-22 15:02:33 +02:00
2ee8269684 Update CHANGELOG.md (#6151)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 12:47:13 +00:00
84860a9893 [core]: Improved LXC Container Startup Handling (#6142)
* [core]: Improved LXC Container Startup Handling

* Update build.func

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-07-22 14:46:50 +02:00
ebb7da43c1 Update tools.func 2025-07-22 14:18:34 +02:00
44c584dced Update versions.json (#6149)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 14:05:29 +02:00
2bede5256f Update CHANGELOG.md (#6145)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 11:14:28 +00:00
2848cf6d6b [core]: tools.func: increase setup_php function (#6141)
* tools.func: increase setup_php function

* better verbose output
2025-07-22 13:14:09 +02:00
bce076161e Update CHANGELOG.md (#6144)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 10:18:15 +00:00
040a15aa3e Update CHANGELOG.md (#6143)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 10:17:58 +00:00
5c0cffce6f gitea-mirror: add: migration to 3.0 (#6138) 2025-07-22 12:17:53 +02:00
d552fb86c1 LinkStack (#6137)
* 'Add new script'

* Update linkstack.sh

* Update linkstack.json

* Update linkstack.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-22 12:17:35 +02:00
42af89dd2d Update CHANGELOG.md (#6140)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 08:38:15 +00:00
003fc3c080 fix(nginxproxymanager.sh): Set the version number before build. (#6139)
Signed-off-by: JMarcosHP <jehuherrerap@hotmail.com>
2025-07-22 10:37:54 +02:00
19 changed files with 670 additions and 219 deletions

81
.github/workflows/frontend-cicd.yml generated vendored
View File

@ -24,12 +24,87 @@ concurrency:
cancel-in-progress: false cancel-in-progress: false
jobs: jobs:
build: test-json-files:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults: defaults:
run: run:
working-directory: frontend # Set default working directory for all run steps working-directory: frontend
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Test JSON files
run: |
python3 << 'EOF'
import json
import glob
import os
import sys
def test_json_files():
# Change to the correct directory
json_dir = "public/json"
if not os.path.exists(json_dir):
print(f"❌ Directory not found: {json_dir}")
return False
# Find all JSON files
pattern = os.path.join(json_dir, "*.json")
json_files = glob.glob(pattern)
if not json_files:
print(f"⚠️ No JSON files found in {json_dir}")
return True
print(f"Testing {len(json_files)} JSON files for valid syntax...")
invalid_files = []
for file_path in json_files:
try:
with open(file_path, 'r', encoding='utf-8') as f:
json.load(f)
print(f"✅ Valid JSON: {file_path}")
except json.JSONDecodeError as e:
print(f"❌ Invalid JSON syntax in: {file_path}")
print(f" Error: {e}")
invalid_files.append(file_path)
except Exception as e:
print(f"⚠️ Error reading: {file_path}")
print(f" Error: {e}")
invalid_files.append(file_path)
print("\n=== JSON Validation Summary ===")
print(f"Total files tested: {len(json_files)}")
print(f"Valid files: {len(json_files) - len(invalid_files)}")
print(f"Invalid files: {len(invalid_files)}")
if invalid_files:
print("\n❌ Found invalid JSON file(s):")
for file_path in invalid_files:
print(f" - {file_path}")
return False
else:
print("\n✅ All JSON files have valid syntax!")
return True
if __name__ == "__main__":
success = test_json_files()
sys.exit(0 if success else 1)
EOF
build:
if: github.repository == 'community-scripts/ProxmoxVE'
needs: test-json-files
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4

View File

@ -10,14 +10,40 @@
> [!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.
## 2025-07-23
## 2025-07-22 ## 2025-07-22
### 🆕 New Scripts
- Salt ([#6116](https://github.com/community-scripts/ProxmoxVE/pull/6116))
- LinkStack ([#6137](https://github.com/community-scripts/ProxmoxVE/pull/6137))
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- tools.func - fix typo for target_file [@tjcomserv](https://github.com/tjcomserv) ([#6156](https://github.com/community-scripts/ProxmoxVE/pull/6156))
- fix(nginxproxymanager.sh): Set the version number before build. [@JMarcosHP](https://github.com/JMarcosHP) ([#6139](https://github.com/community-scripts/ProxmoxVE/pull/6139))
- #### ✨ New Features - #### ✨ New Features
- Fixed the previous fix of the anti-nag hook and propagated fixes everywhere [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6162](https://github.com/community-scripts/ProxmoxVE/pull/6162))
- [core]: Improved LXC Container Startup Handling [@MickLesk](https://github.com/MickLesk) ([#6142](https://github.com/community-scripts/ProxmoxVE/pull/6142))
- wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133)) - wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133))
- #### 💥 Breaking Changes
- gitea-mirror: add: migration to 3.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6138](https://github.com/community-scripts/ProxmoxVE/pull/6138))
- #### 🔧 Refactor
- [core]: tools.func: increase setup_php function [@MickLesk](https://github.com/MickLesk) ([#6141](https://github.com/community-scripts/ProxmoxVE/pull/6141))
### 🌐 Website
- Bump form-data from 4.0.3 to 4.0.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#6150](https://github.com/community-scripts/ProxmoxVE/pull/6150))
## 2025-07-21 ## 2025-07-21
### 🆕 New Scripts ### 🆕 New Scripts

View File

@ -28,6 +28,26 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
if [[ $APP_VERSION =~ ^2\. ]]; then
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno
then
exit 0
fi
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno
then
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
exit 0
fi
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
rm -rf /opt/gitea-mirror
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/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 if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then

6
ct/headers/linkstack Normal file
View File

@ -0,0 +1,6 @@
__ _ __ _____ __ __
/ / (_)___ / /__/ ___// /_____ ______/ /__
/ / / / __ \/ //_/\__ \/ __/ __ `/ ___/ //_/
/ /___/ / / / / ,< ___/ / /_/ /_/ / /__/ ,<
/_____/_/_/ /_/_/|_|/____/\__/\__,_/\___/_/|_|

6
ct/headers/salt Normal file
View File

@ -0,0 +1,6 @@
_____ ____
/ ___/____ _/ / /_
\__ \/ __ `/ / __/
___/ / /_/ / / /_
/____/\__,_/_/\__/

43
ct/linkstack.sh Normal file
View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://linkstack.org/
APP="LinkStack"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f ~/.linkstack ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
msg_warn "LinkStack should be updated via the user interface."
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -46,6 +46,8 @@ function update_script() {
msg_info "Building Frontend" msg_info "Building Frontend"
( (
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
cd ./frontend || exit cd ./frontend || exit
$STD pnpm install $STD pnpm install
$STD pnpm upgrade $STD pnpm upgrade
@ -72,8 +74,6 @@ function update_script() {
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
ln -sf /usr/local/openresty/nginx/ /etc/nginx ln -sf /usr/local/openresty/nginx/ /etc/nginx
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf") NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do for NGINX_CONF in $NGINX_CONFS; do

50
ct/salt.sh Normal file
View File

@ -0,0 +1,50 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/saltstack/salt
APP="Salt"
var_tags="${var_tags:-automations}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/salt ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
$STD apt-get update
$STD apt-get upgrade -y
echo "${RELEASE}" >/~.salt
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_ok "${APP} is already up to date (${RELEASE})"
fi
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@ -7749,9 +7749,9 @@
} }
}, },
"node_modules/form-data": { "node_modules/form-data": {
"version": "4.0.3", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

View File

@ -0,0 +1,44 @@
{
"name": "LinkStack",
"slug": "linkstack",
"categories": [
9
],
"date_created": "2025-07-22",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/var/www/html/linkstack/.env",
"interface_port": 80,
"documentation": "https://docs.linkstack.org/",
"website": "https://linkstack.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linkstack.webp",
"description": "LinkStack is an open-source, self-hosted alternative to Linktree, allowing users to create a customizable profile page to share multiple links, hosted on their own server.",
"install_methods": [
{
"type": "default",
"script": "ct/linkstack.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "LinkStack can be updated via the user interface.",
"type": "info"
},
{
"text": "Complete setup via the web interface at http://<container-ip>/. Check installation logs: `cat ~/linkstack-install.log`",
"type": "info"
}
]
}

View File

@ -0,0 +1,35 @@
{
"name": "Salt",
"slug": "salt",
"categories": [
19
],
"date_created": "2025-07-22",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/salt/.env",
"interface_port": 3000,
"documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/",
"website": "https://saltproject.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp",
"description": "SaltStack Salt is a software for automating the management and configuration of IT infrastructure and applications. It is an event-driven automation tool and framework used to deploy, configure, and manage complex IT systems. Its primary functions include configuration management, where it ensures consistent configurations and manages operating system deployment and software installation. It also automates and orchestrates routine IT processes and can create self-aware, self-healing systems.",
"install_methods": [
{
"type": "default",
"script": "ct/salt.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 3,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -1,4 +1,134 @@
[ [
{
"name": "raydak-labs/configarr",
"version": "v1.13.7",
"date": "2025-07-22T20:41:45Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.1",
"date": "2025-07-22T20:10:08Z"
},
{
"name": "esphome/esphome",
"version": "2025.7.3",
"date": "2025-07-22T20:09:49Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.42.0",
"date": "2025-07-14T22:07:28Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.6",
"date": "2025-07-22T17:14:21Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.16.0-beta4",
"date": "2025-07-22T15:56:46Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "21.0.2",
"date": "2025-07-22T16:58:05Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.84",
"date": "2025-07-22T16:35:18Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.520",
"date": "2025-07-22T15:13:15Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.2",
"date": "2025-07-22T15:00:08Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.3",
"date": "2025-07-22T14:39:54Z"
},
{
"name": "element-hq/synapse",
"version": "v1.134.0",
"date": "2025-07-15T13:43:39Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.4.4",
"date": "2025-07-22T13:08:15Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.6",
"date": "2025-07-22T12:22:34Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-arroy-becomes-hannoy-0",
"date": "2025-07-21T20:38:21Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.102.4",
"date": "2025-07-17T11:27:58Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.6",
"date": "2025-07-17T11:16:34Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.3",
"date": "2025-07-22T08:30:59Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p35-rc1",
"date": "2025-07-22T07:29:21Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.11",
"date": "2025-07-22T07:05:26Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.18",
"date": "2025-07-22T06:18:08Z"
},
{
"name": "adityachandelgit/BookLore",
"version": "v0.34.1",
"date": "2025-07-22T05:57:50Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2182",
"date": "2025-07-22T05:55:20Z"
},
{
"name": "lazy-media/Reactive-Resume",
"version": "v1.2.2",
"date": "2025-07-22T03:12:54Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{ {
"name": "MediaBrowser/Emby.Releases", "name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2", "version": "4.9.1.2",
@ -24,11 +154,6 @@
"version": "v1.64.0", "version": "v1.64.0",
"date": "2025-07-21T20:56:33Z" "date": "2025-07-21T20:56:33Z"
}, },
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p8",
"date": "2025-07-21T19:25:40Z"
},
{ {
"name": "mongodb/mongo", "name": "mongodb/mongo",
"version": "r8.2.0-rc0", "version": "r8.2.0-rc0",
@ -39,21 +164,11 @@
"version": "v2.7.2", "version": "v2.7.2",
"date": "2025-07-21T18:19:05Z" "date": "2025-07-21T18:19:05Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.24.5",
"date": "2025-07-21T17:04:25Z"
},
{ {
"name": "HabitRPG/habitica", "name": "HabitRPG/habitica",
"version": "v5.37.2", "version": "v5.37.2",
"date": "2025-07-21T14:08:35Z" "date": "2025-07-21T14:08:35Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.102.4",
"date": "2025-07-17T11:27:58Z"
},
{ {
"name": "tobychui/zoraxy", "name": "tobychui/zoraxy",
"version": "v3.2.5r2", "version": "v3.2.5r2",
@ -74,16 +189,6 @@
"version": "pmm-6401-v1.122.0", "version": "pmm-6401-v1.122.0",
"date": "2025-07-21T10:40:07Z" "date": "2025-07-21T10:40:07Z"
}, },
{
"name": "zabbix/zabbix",
"version": "7.0.17rc2",
"date": "2025-07-21T10:37:33Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.1",
"date": "2025-07-21T09:13:14Z"
},
{ {
"name": "homarr-labs/homarr", "name": "homarr-labs/homarr",
"version": "v1.30.0", "version": "v1.30.0",
@ -99,41 +204,16 @@
"version": "5.0.0", "version": "5.0.0",
"date": "2025-07-21T07:16:58Z" "date": "2025-07-21T07:16:58Z"
}, },
{
"name": "mattermost/mattermost",
"version": "preview-v0.1",
"date": "2025-06-27T14:35:47Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2178",
"date": "2025-07-21T05:53:32Z"
},
{ {
"name": "pocket-id/pocket-id", "name": "pocket-id/pocket-id",
"version": "v1.6.4", "version": "v1.6.4",
"date": "2025-07-21T05:53:30Z" "date": "2025-07-21T05:53:30Z"
}, },
{
"name": "lazy-media/Reactive-Resume",
"version": "1.2.1",
"date": "2025-07-21T03:40:58Z"
},
{ {
"name": "firefly-iii/firefly-iii", "name": "firefly-iii/firefly-iii",
"version": "v6.2.21", "version": "v6.2.21",
"date": "2025-07-17T04:46:25Z" "date": "2025-07-17T04:46:25Z"
}, },
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "21.0.2",
"date": "2025-07-20T17:02:07Z"
},
{ {
"name": "fuma-nama/fumadocs", "name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.1.4", "version": "fumadocs-openapi@9.1.4",
@ -154,11 +234,6 @@
"version": "2025.7.19", "version": "2025.7.19",
"date": "2025-07-20T09:44:35Z" "date": "2025-07-20T09:44:35Z"
}, },
{
"name": "semaphoreui/semaphore",
"version": "v2.16.0-beta1",
"date": "2025-07-20T09:43:36Z"
},
{ {
"name": "documenso/documenso", "name": "documenso/documenso",
"version": "v1.12.2-rc.2", "version": "v1.12.2-rc.2",
@ -174,16 +249,6 @@
"version": "v2.11.5", "version": "v2.11.5",
"date": "2025-07-20T03:14:42Z" "date": "2025-07-20T03:14:42Z"
}, },
{
"name": "adityachandelgit/BookLore",
"version": "v0.34.0",
"date": "2025-07-19T22:17:45Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.5",
"date": "2025-07-19T21:50:47Z"
},
{ {
"name": "pelican-dev/panel", "name": "pelican-dev/panel",
"version": "v1.0.0-beta23", "version": "v1.0.0-beta23",
@ -219,11 +284,6 @@
"version": "v1.2.4", "version": "v1.2.4",
"date": "2025-07-19T07:42:25Z" "date": "2025-07-19T07:42:25Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.7.2",
"date": "2025-07-19T00:05:00Z"
},
{ {
"name": "minio/minio", "name": "minio/minio",
"version": "RELEASE.2025-07-18T21-56-31Z", "version": "RELEASE.2025-07-18T21-56-31Z",
@ -234,16 +294,6 @@
"version": "v5.9.4", "version": "v5.9.4",
"date": "2025-07-18T21:50:31Z" "date": "2025-07-18T21:50:31Z"
}, },
{
"name": "rcourtman/Pulse",
"version": "v3.42.0",
"date": "2025-07-14T22:07:28Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.6",
"date": "2025-07-17T11:16:34Z"
},
{ {
"name": "theonedev/onedev", "name": "theonedev/onedev",
"version": "v12.0.1", "version": "v12.0.1",
@ -264,11 +314,6 @@
"version": "e6.0.0-M1.202507-rc.1", "version": "e6.0.0-M1.202507-rc.1",
"date": "2025-07-18T07:48:52Z" "date": "2025-07-18T07:48:52Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "prototype-chat-completions-with-filters-0",
"date": "2025-07-16T08:54:57Z"
},
{ {
"name": "ollama/ollama", "name": "ollama/ollama",
"version": "v0.9.7-rc1", "version": "v0.9.7-rc1",
@ -294,11 +339,6 @@
"version": "v12.0.2+security-01", "version": "v12.0.2+security-01",
"date": "2025-07-17T19:13:19Z" "date": "2025-07-17T19:13:19Z"
}, },
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.83",
"date": "2025-07-17T17:48:01Z"
},
{ {
"name": "wavelog/wavelog", "name": "wavelog/wavelog",
"version": "2.0.7", "version": "2.0.7",
@ -374,16 +414,6 @@
"version": "6.8.2", "version": "6.8.2",
"date": "2025-07-15T15:14:16Z" "date": "2025-07-15T15:14:16Z"
}, },
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.519",
"date": "2025-07-15T14:43:59Z"
},
{
"name": "element-hq/synapse",
"version": "v1.134.0",
"date": "2025-07-15T13:43:39Z"
},
{ {
"name": "dgtlmoon/changedetection.io", "name": "dgtlmoon/changedetection.io",
"version": "0.50.7", "version": "0.50.7",
@ -424,11 +454,6 @@
"version": "v3.5.0", "version": "v3.5.0",
"date": "2025-07-14T16:54:21Z" "date": "2025-07-14T16:54:21Z"
}, },
{
"name": "home-assistant/core",
"version": "2025.7.2",
"date": "2025-07-14T11:29:58Z"
},
{ {
"name": "homebridge/homebridge", "name": "homebridge/homebridge",
"version": "v1.11.0", "version": "v1.11.0",
@ -514,11 +539,6 @@
"version": "v2.13.0", "version": "v2.13.0",
"date": "2025-07-10T19:27:54Z" "date": "2025-07-10T19:27:54Z"
}, },
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.10",
"date": "2025-07-10T12:04:30Z"
},
{ {
"name": "NginxProxyManager/nginx-proxy-manager", "name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.12.6", "version": "v2.12.6",
@ -534,11 +554,6 @@
"version": "4.5.2", "version": "4.5.2",
"date": "2025-07-09T19:08:28Z" "date": "2025-07-09T19:08:28Z"
}, },
{
"name": "raydak-labs/configarr",
"version": "v1.13.6",
"date": "2025-07-09T17:23:01Z"
},
{ {
"name": "hargata/lubelog", "name": "hargata/lubelog",
"version": "v1.4.9", "version": "v1.4.9",
@ -569,6 +584,11 @@
"version": "342", "version": "342",
"date": "2025-07-09T08:48:21Z" "date": "2025-07-09T08:48:21Z"
}, },
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-9.4.0",
"date": "2025-07-09T08:35:30Z"
},
{ {
"name": "Prowlarr/Prowlarr", "name": "Prowlarr/Prowlarr",
"version": "v1.37.0.5076", "version": "v1.37.0.5076",
@ -749,11 +769,6 @@
"version": "v1.3.8", "version": "v1.3.8",
"date": "2025-06-29T07:41:53Z" "date": "2025-06-29T07:41:53Z"
}, },
{
"name": "goauthentik/authentik",
"version": "version/2025.6.3",
"date": "2025-06-27T14:01:06Z"
},
{ {
"name": "tailscale/tailscale", "name": "tailscale/tailscale",
"version": "v1.84.3", "version": "v1.84.3",
@ -1099,11 +1114,6 @@
"version": "v2.0.1727", "version": "v2.0.1727",
"date": "2025-04-21T17:53:05Z" "date": "2025-04-21T17:53:05Z"
}, },
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.0",
"date": "2025-04-21T17:44:40Z"
},
{ {
"name": "caddyserver/caddy", "name": "caddyserver/caddy",
"version": "v2.10.0", "version": "v2.10.0",
@ -1149,11 +1159,6 @@
"version": "v2.2.0", "version": "v2.2.0",
"date": "2025-03-31T21:31:48Z" "date": "2025-03-31T21:31:48Z"
}, },
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-9.3.0",
"date": "2025-03-31T07:42:45Z"
},
{ {
"name": "louislam/dockge", "name": "louislam/dockge",
"version": "1.5.0", "version": "1.5.0",
@ -1289,11 +1294,6 @@
"version": "v0.5.7", "version": "v0.5.7",
"date": "2025-01-17T15:57:17Z" "date": "2025-01-17T15:57:17Z"
}, },
{
"name": "PCJones/UmlautAdaptarr",
"version": "0.7.2",
"date": "2025-01-13T22:17:18Z"
},
{ {
"name": "go-vikunja/vikunja", "name": "go-vikunja/vikunja",
"version": "v0.24.6", "version": "v0.24.6",

View File

@ -0,0 +1,48 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://linkstack.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
fetch_and_deploy_gh_release "linkstack" "linkstackorg/linkstack" "prebuild" "latest" "/var/www/html/linkstack" "linkstack.zip"
msg_info "Configuring LinkStack"
$STD a2enmod rewrite
chown -R www-data:www-data /var/www/html/linkstack
chmod -R 755 /var/www/html/linkstack
cat <<EOF >/etc/apache2/sites-available/linkstack.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/linkstack
ErrorLog /var/log/apache2/linkstack-error.log
CustomLog /var/log/apache2/linkstack-access.log combined
<Directory /var/www/html/linkstack/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
$STD a2dissite 000-default.conf
$STD a2ensite linkstack.conf
$STD systemctl restart apache2
msg_ok "Configured LinkStack"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

44
install/salt-install.sh Normal file
View File

@ -0,0 +1,44 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/saltstack/salt
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y jq
msg_ok "Installed Dependencies"
msg_info "Setup Salt Repo"
mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
$STD apt-get update
msg_ok "Setup Salt Repo"
msg_info "Installing Salt"
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
Package: salt-*
Pin: version ${RELEASE}
Pin-Priority: 1001
EOF
$STD apt-get install -y salt-master
echo "${RELEASE}" >/~.salt
msg_ok "Installed Salt"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -1201,7 +1201,52 @@ EOF
# This starts the container and executes <app>-install.sh # This starts the container and executes <app>-install.sh
msg_info "Starting LXC Container" msg_info "Starting LXC Container"
pct start "$CTID" pct start "$CTID"
msg_ok "Started LXC Container"
# wait for status 'running'
for i in {1..10}; do
if pct status "$CTID" | grep -q "status: running"; then
msg_ok "Started LXC Container"
break
fi
sleep 1
if [ "$i" -eq 10 ]; then
msg_error "LXC Container did not reach running state"
exit 1
fi
done
if [ "$var_os" != "alpine" ]; then
msg_info "Waiting for network in LXC container"
for i in {1..10}; do
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
msg_ok "Network in LXC is reachable"
break
fi
if [ "$i" -lt 10 ]; then
msg_warn "No network yet in LXC (try $i/10) waiting..."
sleep 3
else
msg_error "No network in LXC after waiting."
read -r -p "Set fallback DNS (1.1.1.1/8.8.8.8)? [y/N]: " choice
case "$choice" in
[yY]*)
pct set "$CTID" --nameserver 1.1.1.1
pct set "$CTID" --nameserver 8.8.8.8
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
msg_ok "Network reachable after DNS fallback"
else
msg_error "Still no network/DNS in LXC! Aborting customization."
exit 1
fi
;;
*)
msg_error "Aborted by user no DNS fallback set."
exit 1
;;
esac
fi
done
fi
msg_info "Customizing LXC Container" msg_info "Customizing LXC Container"
: "${tz:=Etc/UTC}" : "${tz:=Etc/UTC}"
@ -1211,7 +1256,7 @@ EOF
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
EOF' EOF'
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses >/dev/null" pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq >/dev/null"
else else
sleep 3 sleep 3
pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen" pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen"
@ -1229,7 +1274,7 @@ EOF'
msg_warn "Skipping timezone setup zone '$tz' not found in container" msg_warn "Skipping timezone setup zone '$tz' not found in container"
fi fi
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null" pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 jq >/dev/null"
fi fi
msg_ok "Customized LXC Container" msg_ok "Customized LXC Container"

View File

@ -396,9 +396,10 @@ function setup_php() {
COMBINED_MODULES="${DEFAULT_MODULES}" COMBINED_MODULES="${DEFAULT_MODULES}"
fi fi
# Deduplicate modules # Deduplicate
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -) COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
# Get current PHP-CLI version
local CURRENT_PHP="" local CURRENT_PHP=""
if command -v php >/dev/null 2>&1; then if command -v php >/dev/null 2>&1; then
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2) CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
@ -420,53 +421,44 @@ function setup_php() {
$STD apt-get update $STD apt-get update
fi fi
# Build module list
local MODULE_LIST="php${PHP_VERSION}" 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" IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
for mod in "${MODULES[@]}"; do for mod in "${MODULES[@]}"; do
MODULE_LIST+=" php${PHP_VERSION}-${mod}" if apt-cache show "php${PHP_VERSION}-${mod}" >/dev/null 2>&1; then
MODULE_LIST+=" php${PHP_VERSION}-${mod}"
else
msg_warn "PHP-Module ${mod} for PHP ${PHP_VERSION} not found skipping"
fi
done done
if [[ "$PHP_FPM" == "YES" ]]; then if [[ "$PHP_FPM" == "YES" ]]; then
MODULE_LIST+=" php${PHP_VERSION}-fpm" MODULE_LIST+=" php${PHP_VERSION}-fpm"
fi fi
# install apache2 with PHP support if requested
if [[ "$PHP_APACHE" == "YES" ]]; then if [[ "$PHP_APACHE" == "YES" ]]; then
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION} if ! dpkg -l | grep -q "libapache2-mod-php${PHP_VERSION}"; then
$STD systemctl restart apache2 || true msg_info "Installing Apache with PHP${PHP_VERSION} support"
fi $STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
else
if [[ "$PHP_APACHE" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then msg_info "Apache with PHP${PHP_VERSION} already installed skipping install"
if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then
$STD a2dismod php${CURRENT_PHP} || true
fi fi
$STD a2enmod php${PHP_VERSION}
$STD systemctl restart apache2 || true
fi
if [[ "$PHP_FPM" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
$STD systemctl stop php${CURRENT_PHP}-fpm || true
$STD systemctl disable php${CURRENT_PHP}-fpm || true
fi fi
# setup / update PHP modules
$STD apt-get install -y $MODULE_LIST $STD apt-get install -y $MODULE_LIST
msg_ok "Setup PHP $PHP_VERSION" msg_ok "Setup PHP $PHP_VERSION"
if [[ "$PHP_FPM" == "YES" ]]; then # optional stop old PHP-FPM service
$STD systemctl enable php${PHP_VERSION}-fpm if [[ "$PHP_FPM" == "YES" && -n "$CURRENT_PHP" && "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
$STD systemctl restart php${PHP_VERSION}-fpm $STD systemctl stop php"${CURRENT_PHP}"-fpm || true
$STD systemctl disable php"${CURRENT_PHP}"-fpm || true
fi fi
# Patch all relevant php.ini files # Patch all relevant php.ini files
local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini") local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini")
[[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini") [[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini")
[[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini") [[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini")
for ini in "${PHP_INI_PATHS[@]}"; do for ini in "${PHP_INI_PATHS[@]}"; do
if [[ -f "$ini" ]]; then if [[ -f "$ini" ]]; then
$STD msg_info "Patching $ini" $STD msg_info "Patching $ini"
@ -477,8 +469,29 @@ function setup_php() {
$STD msg_ok "Patched $ini" $STD msg_ok "Patched $ini"
fi fi
done done
}
# patch Apache configuration if needed
if [[ "$PHP_APACHE" == "YES" ]]; then
for mod in $(ls /etc/apache2/mods-enabled/ 2>/dev/null | grep -E '^php[0-9]\.[0-9]\.conf$' | sed 's/\.conf//'); do
if [[ "$mod" != "php${PHP_VERSION}" ]]; then
$STD a2dismod "$mod" || true
fi
done
$STD a2enmod mpm_prefork
$STD a2enmod "php${PHP_VERSION}"
$STD systemctl restart apache2 || true
fi
# enable and restart PHP-FPM if requested
if [[ "$PHP_FPM" == "YES" ]]; then
if systemctl list-unit-files | grep -q "php${PHP_VERSION}-fpm.service"; then
$STD systemctl enable php${PHP_VERSION}-fpm
$STD systemctl restart php${PHP_VERSION}-fpm
else
msg_warn "FPM requested but service php${PHP_VERSION}-fpm not found"
fi
fi
}
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Installs or updates Composer globally. # Installs or updates Composer globally.
# #

View File

@ -113,24 +113,22 @@ EOF
;; ;;
esac esac
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ "yes" " " \
"yes" " " \ "no" " " 3>&2 2>&1 1>&3)
"no" " " 3>&2 2>&1 1>&3) case $CHOICE in
case $CHOICE in yes)
yes) whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 msg_info "Disabling subscription nag"
msg_info "Disabling subscription nag" echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script msg_ok "Disabled subscription nag (Delete browser cache)"
apt --reinstall install proxmox-widget-toolkit &>/dev/null ;;
msg_ok "Disabled subscription nag (Delete browser cache)" no)
;; whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
no) msg_error "Selected no to Disabling subscription nag"
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 ;;
msg_error "Selected no to Disabling subscription nag" esac
;; apt --reinstall install proxmox-widget-toolkit &>/dev/null
esac
fi
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
"yes" " " \ "yes" " " \

View File

@ -9,10 +9,10 @@ header_info() {
cat <<"EOF" cat <<"EOF"
____ __ _________ ____ __ ____ __ ____ ____ __ _________ ____ __ ____ __ ____
/ __ \/ |/ / ____/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / / / __ \/ |/ / ____/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / /
/ /_/ / /|_/ / / __ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / / / /_/ / /|_/ / / __ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
/ ____/ / / / /_/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / / / ____/ / / / /_/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
/_/ /_/ /_/\____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/ /_/ /_/ /_/\____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
EOF EOF
} }
@ -112,27 +112,25 @@ EOF
;; ;;
esac esac
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ "yes" " " \
"yes" " " \ "no" " " 3>&2 2>&1 1>&3)
"no" " " 3>&2 2>&1 1>&3) case $CHOICE in
case $CHOICE in yes)
yes) whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 msg_info "Disabling subscription nag"
msg_info "Disabling subscription nag" # Normal GUI (proxmox-widget-toolkit)
# Normal GUI: echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script # JS library used when accessing via mobile device browser
# JS-Library used when accessing via mobile device browser echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; then echo 'Removing subscription nag from mobile UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script-pmgmanagerlib-mobile
echo "DPkg::Post-Invoke { \"dpkg -V pmg-gui | grep -q '/pmgmanagerlib-mobile\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from Mobile UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; }; fi\"; };" >>/etc/apt/apt.conf.d/no-nag-script msg_ok "Disabled subscription nag (Delete browser cache)"
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null ;;
msg_ok "Disabled subscription nag (Delete browser cache)" no)
;; whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
no) msg_error "Selected no to disabling subscription nag"
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 ;;
msg_error "Selected no to disabling subscription nag" esac
;; apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
esac
fi
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \
"yes" " " \ "yes" " " \

View File

@ -140,7 +140,7 @@ EOF
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit 2>/dev/null && [ -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && echo 'Removing subscription nag from UI...' && sed -i '/data\.status/{s/\!/=/;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js\"; };" >/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
msg_ok "Disabled subscription nag (Delete browser cache)" msg_ok "Disabled subscription nag (Delete browser cache)"
;; ;;
no) no)