mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-06-16 20:41:19 +02:00
Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7c0896f80f | |||
| 4d4e1d7654 | |||
| 6b25e35ecf | |||
| 6c23883d94 | |||
| e08719ac3f | |||
| 0683d4942c | |||
| b0896dbdeb | |||
| f1ee2a2b91 | |||
| 691ce33090 | |||
| 5f5881c757 | |||
| af7e83300f | |||
| 29c25a0ab8 | |||
| e60c1f31c2 | |||
| f13782704e | |||
| 7ee47be436 | |||
| 868b256603 | |||
| 16bd4f473b | |||
| 77eb109927 | |||
| 55703ab0ec | |||
| 3c42589ff0 | |||
| 0d271f55a6 | |||
| 6762208d66 | |||
| dee66b996e | |||
| 4b20b8dab5 | |||
| a2f987f07b | |||
| 96d828f379 | |||
| 293d4b73a1 | |||
| cfb84ae12d | |||
| f37bf50a47 | |||
| 4a09cac506 | |||
| 5831cc246a | |||
| bcea631c30 | |||
| d9e6e6ea3d |
+1
@@ -28,6 +28,7 @@ jobs:
|
|||||||
const allowedBots = [
|
const allowedBots = [
|
||||||
"push-app-to-main[bot]",
|
"push-app-to-main[bot]",
|
||||||
"push-app-to-main",
|
"push-app-to-main",
|
||||||
|
"community-scripts-pr-app"
|
||||||
];
|
];
|
||||||
|
|
||||||
if (allowedBots.includes(author)) {
|
if (allowedBots.includes(author)) {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ jobs:
|
|||||||
BEFORE="${{ github.event.before }}"
|
BEFORE="${{ github.event.before }}"
|
||||||
AFTER="${{ github.event.after }}"
|
AFTER="${{ github.event.after }}"
|
||||||
slugs=""
|
slugs=""
|
||||||
|
ct_slugs=""
|
||||||
|
|
||||||
# Deleted JSON files: get slug from previous commit
|
# Deleted JSON files: get slug from previous commit
|
||||||
deleted_json=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- json/ | grep '\.json$' || true)
|
deleted_json=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- json/ | grep '\.json$' || true)
|
||||||
@@ -37,6 +38,14 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Deleted script files: derive slug from path
|
# Deleted script files: derive slug from path
|
||||||
|
deleted_ct=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- ct/ | grep '\.sh$' || true)
|
||||||
|
for f in $deleted_ct; do
|
||||||
|
[[ -z "$f" ]] && continue
|
||||||
|
base="${f##*/}"
|
||||||
|
base="${base%.sh}"
|
||||||
|
[[ -n "$base" ]] && ct_slugs="$ct_slugs $base"
|
||||||
|
done
|
||||||
|
|
||||||
deleted_sh=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- ct/ install/ tools/ turnkey/ vm/ | grep '\.sh$' || true)
|
deleted_sh=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- ct/ install/ tools/ turnkey/ vm/ | grep '\.sh$' || true)
|
||||||
for f in $deleted_sh; do
|
for f in $deleted_sh; do
|
||||||
[[ -z "$f" ]] && continue
|
[[ -z "$f" ]] && continue
|
||||||
@@ -51,14 +60,17 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
||||||
|
ct_slugs=$(echo $ct_slugs | xargs -n1 2>/dev/null | sort -u | tr '\n' ' ')
|
||||||
if [[ -z "$slugs" ]]; then
|
if [[ -z "$slugs" ]]; then
|
||||||
echo "No deleted JSON or script files to mark as deleted in PocketBase."
|
echo "No deleted JSON or script files to mark as deleted in PocketBase."
|
||||||
echo "count=0" >> "$GITHUB_OUTPUT"
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
echo "$slugs" > slugs_to_delete.txt
|
echo "$slugs" > slugs_to_delete.txt
|
||||||
|
echo "$ct_slugs" > ct_slugs_to_stub.txt
|
||||||
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
||||||
echo "Slugs to mark as deleted: $slugs"
|
echo "Slugs to mark as deleted: $slugs"
|
||||||
|
[[ -n "$ct_slugs" ]] && echo "CT stubs to generate: $ct_slugs"
|
||||||
|
|
||||||
- name: Mark as deleted in PocketBase
|
- name: Mark as deleted in PocketBase
|
||||||
if: steps.slugs.outputs.count != '0'
|
if: steps.slugs.outputs.count != '0'
|
||||||
@@ -159,3 +171,134 @@ jobs:
|
|||||||
})().catch(e => { console.error(e); process.exit(1); });
|
})().catch(e => { console.error(e); process.exit(1); });
|
||||||
ENDSCRIPT
|
ENDSCRIPT
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
- name: Generate CT stubs for deleted scripts
|
||||||
|
if: steps.slugs.outputs.count != '0'
|
||||||
|
env:
|
||||||
|
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
||||||
|
POCKETBASE_COLLECTION: ${{ secrets.POCKETBASE_COLLECTION }}
|
||||||
|
POCKETBASE_ADMIN_EMAIL: ${{ secrets.POCKETBASE_ADMIN_EMAIL }}
|
||||||
|
POCKETBASE_ADMIN_PASSWORD: ${{ secrets.POCKETBASE_ADMIN_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
if [[ ! -s ct_slugs_to_stub.txt ]]; then
|
||||||
|
echo "No deleted ct/*.sh files; skipping stub generation."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
node << 'ENDSCRIPT'
|
||||||
|
(async function() {
|
||||||
|
const fs = require('fs');
|
||||||
|
const https = require('https');
|
||||||
|
const http = require('http');
|
||||||
|
const path = require('path');
|
||||||
|
const url = require('url');
|
||||||
|
|
||||||
|
function request(fullUrl, opts, redirectCount) {
|
||||||
|
redirectCount = redirectCount || 0;
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const u = url.parse(fullUrl);
|
||||||
|
const isHttps = u.protocol === 'https:';
|
||||||
|
const body = opts.body;
|
||||||
|
const options = {
|
||||||
|
hostname: u.hostname,
|
||||||
|
port: u.port || (isHttps ? 443 : 80),
|
||||||
|
path: u.path,
|
||||||
|
method: opts.method || 'GET',
|
||||||
|
headers: opts.headers || {}
|
||||||
|
};
|
||||||
|
if (body) options.headers['Content-Length'] = Buffer.byteLength(body);
|
||||||
|
const lib = isHttps ? https : http;
|
||||||
|
const req = lib.request(options, function(res) {
|
||||||
|
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
||||||
|
if (redirectCount >= 5) return reject(new Error('Too many redirects from ' + fullUrl));
|
||||||
|
const redirectUrl = url.resolve(fullUrl, res.headers.location);
|
||||||
|
res.resume();
|
||||||
|
resolve(request(redirectUrl, opts, redirectCount + 1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let data = '';
|
||||||
|
res.on('data', function(chunk) { data += chunk; });
|
||||||
|
res.on('end', function() {
|
||||||
|
resolve({ ok: res.statusCode >= 200 && res.statusCode < 300, statusCode: res.statusCode, body: data });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
req.on('error', reject);
|
||||||
|
if (body) req.write(body);
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
||||||
|
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
||||||
|
const coll = process.env.POCKETBASE_COLLECTION;
|
||||||
|
const ctSlugs = fs.readFileSync('ct_slugs_to_stub.txt', 'utf8').trim().split(/\s+/).filter(Boolean);
|
||||||
|
if (!ctSlugs.length) {
|
||||||
|
console.log('No ct slugs to process.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const authRes = await request(apiBase + '/collections/users/auth-with-password', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
identity: process.env.POCKETBASE_ADMIN_EMAIL,
|
||||||
|
password: process.env.POCKETBASE_ADMIN_PASSWORD
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if (!authRes.ok) throw new Error('Auth failed: ' + authRes.body);
|
||||||
|
const token = JSON.parse(authRes.body).token;
|
||||||
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
|
|
||||||
|
for (const slug of ctSlugs) {
|
||||||
|
const filter = "(slug='" + slug + "')";
|
||||||
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1&fields=slug,name,deleted_message', {
|
||||||
|
headers: { 'Authorization': token }
|
||||||
|
});
|
||||||
|
if (!listRes.ok) {
|
||||||
|
console.warn('Failed to fetch record for slug "' + slug + '"');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const list = JSON.parse(listRes.body);
|
||||||
|
const rec = list.items && list.items[0];
|
||||||
|
const appName = (rec && rec.name) ? rec.name : slug;
|
||||||
|
const deletedMessage = (rec && rec.deleted_message && rec.deleted_message.trim())
|
||||||
|
? rec.deleted_message.trim()
|
||||||
|
: 'This script was removed and cannot be installed or updated.';
|
||||||
|
|
||||||
|
const stubPath = path.join('ct', slug + '.sh');
|
||||||
|
const content =
|
||||||
|
`#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
APP="${appName.replace(/"/g, '\\"')}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
|
||||||
|
msg_error "This script is no longer available in community-scripts."
|
||||||
|
msg_error "${deletedMessage.replace(/"/g, '\\"')}"
|
||||||
|
msg_warn "More info: https://community-scripts.org/scripts/${slug}"
|
||||||
|
exit 1
|
||||||
|
`;
|
||||||
|
fs.writeFileSync(stubPath, content);
|
||||||
|
console.log('Generated stub: ' + stubPath);
|
||||||
|
}
|
||||||
|
})().catch(e => { console.error(e); process.exit(1); });
|
||||||
|
ENDSCRIPT
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Commit generated stubs
|
||||||
|
if: steps.slugs.outputs.count != '0'
|
||||||
|
run: |
|
||||||
|
if git diff --quiet -- ct; then
|
||||||
|
echo "No generated ct stubs to commit."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git config user.name "github-actions[bot]"
|
||||||
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
|
git add ct/*.sh
|
||||||
|
git commit -m "chore: add deleted script stubs"
|
||||||
|
git push
|
||||||
|
shell: bash
|
||||||
|
|||||||
@@ -483,8 +483,59 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-06-16
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Feishin ([#15130](https://github.com/community-scripts/ProxmoxVE/pull/15130))
|
||||||
|
- Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131))
|
||||||
|
- Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140))
|
||||||
|
- Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141))
|
||||||
|
- fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137))
|
||||||
|
|
||||||
|
## 2026-06-15
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Watcharr: Clean install on update [@tremor021](https://github.com/tremor021) ([#15119](https://github.com/community-scripts/ProxmoxVE/pull/15119))
|
||||||
|
- Vaultwarden: extend version check for VaultWarden update [@MickLesk](https://github.com/MickLesk) ([#15105](https://github.com/community-scripts/ProxmoxVE/pull/15105))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- degoog: add curl-impersonate to script [@MickLesk](https://github.com/MickLesk) ([#15117](https://github.com/community-scripts/ProxmoxVE/pull/15117))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: extend mesa-vulkan-drivers and vulkan-tools to installation for ARC GPU's [@MickLesk](https://github.com/MickLesk) ([#15106](https://github.com/community-scripts/ProxmoxVE/pull/15106))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: improve mirror selection and error handling [@MickLesk](https://github.com/MickLesk) ([#15108](https://github.com/community-scripts/ProxmoxVE/pull/15108))
|
||||||
|
- core: implement gateway validation for DHCP and static networks [@MickLesk](https://github.com/MickLesk) ([#15107](https://github.com/community-scripts/ProxmoxVE/pull/15107))
|
||||||
|
|
||||||
## 2026-06-14
|
## 2026-06-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Iinvoiceninja: fix nginx setup assets port [@MickLesk](https://github.com/MickLesk) ([#15090](https://github.com/community-scripts/ProxmoxVE/pull/15090))
|
||||||
|
- CheckMK: remove stale backup site before creating new backup during update [@MickLesk](https://github.com/MickLesk) ([#15088](https://github.com/community-scripts/ProxmoxVE/pull/15088))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Implement backup functions for scripts C-D [@tremor021](https://github.com/tremor021) ([#15096](https://github.com/community-scripts/ProxmoxVE/pull/15096))
|
||||||
|
|
||||||
## 2026-06-13
|
## 2026-06-13
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
APP="BookLore"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
|
||||||
|
msg_error "This script is no longer available in community-scripts."
|
||||||
|
msg_error "The Booklore or the Grimmory Fork will for now not return to community-scripts. Due to the unstable nature of these projects we decided to remove them and will decide at later point if they come back, which will most likley not happen. Plese do not create Issues for this."
|
||||||
|
msg_warn "More info: https://community-scripts.org/scripts/booklore"
|
||||||
|
exit 1
|
||||||
+3
-9
@@ -35,10 +35,8 @@ function update_script() {
|
|||||||
systemctl stop calibre-web
|
systemctl stop calibre-web
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/calibre-web/app.db \
|
||||||
cp -r /opt/calibre-web/app.db /opt/app.db_backup
|
/opt/calibre-web/data
|
||||||
cp -r /opt/calibre-web/data /opt/data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Calibre-Web" "janeczku/calibre-web" "prebuild" "latest" "/opt/calibre-web" "calibre-web*.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Calibre-Web" "janeczku/calibre-web" "prebuild" "latest" "/opt/calibre-web" "calibre-web*.tar.gz"
|
||||||
setup_uv
|
setup_uv
|
||||||
@@ -50,11 +48,7 @@ function update_script() {
|
|||||||
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
|
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
cp /opt/app.db_backup /opt/calibre-web/app.db 2>/dev/null
|
|
||||||
cp -r /opt/data_backup /opt/calibre-web/data 2>/dev/null
|
|
||||||
rm -rf /opt/app.db_backup /opt/data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start calibre-web
|
systemctl start calibre-web
|
||||||
|
|||||||
+2
-7
@@ -35,16 +35,11 @@ function update_script() {
|
|||||||
systemctl stop certimate
|
systemctl stop certimate
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/certimate/pb_data
|
||||||
cp -r /opt/certimate/pb_data /opt/certimate_pb_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "certimate" "certimate-go/certimate" "prebuild" "latest" "/opt/certimate" "certimate_*_linux_amd64.zip"
|
fetch_and_deploy_gh_release "certimate" "certimate-go/certimate" "prebuild" "latest" "/opt/certimate" "certimate_*_linux_amd64.zip"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
cp -r /opt/certimate_pb_data_backup/. /opt/certimate/pb_data
|
|
||||||
rm -rf /opt/certimate_pb_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start certimate
|
systemctl start certimate
|
||||||
|
|||||||
+3
-8
@@ -35,10 +35,8 @@ function update_script() {
|
|||||||
systemctl stop checkmate-server checkmate-client nginx
|
systemctl stop checkmate-server checkmate-client nginx
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/checkmate/server/.env \
|
||||||
cp /opt/checkmate/server/.env /opt/checkmate_server.env.bak
|
/opt/checkmate/client/.env.local
|
||||||
[ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
|
||||||
|
|
||||||
@@ -56,10 +54,7 @@ function update_script() {
|
|||||||
VITE_APP_API_BASE_URL="/api/v1" UPTIME_APP_API_BASE_URL="/api/v1" VITE_APP_LOG_LEVEL="warn" $STD npm run build
|
VITE_APP_API_BASE_URL="/api/v1" UPTIME_APP_API_BASE_URL="/api/v1" VITE_APP_LOG_LEVEL="warn" $STD npm run build
|
||||||
msg_ok "Updated Checkmate Client"
|
msg_ok "Updated Checkmate Client"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
mv /opt/checkmate_server.env.bak /opt/checkmate/server/.env
|
|
||||||
[ -f /opt/checkmate_client.env.local.bak ] && mv /opt/checkmate_client.env.local.bak /opt/checkmate/client/.env.local
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start checkmate-server checkmate-client nginx
|
systemctl start checkmate-server checkmate-client nginx
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ function update_script() {
|
|||||||
RELEASE="${RELEASE%%+*}"
|
RELEASE="${RELEASE%%+*}"
|
||||||
msg_info "Updating checkmk"
|
msg_info "Updating checkmk"
|
||||||
$STD omd stop monitoring
|
$STD omd stop monitoring
|
||||||
|
$STD omd -f rm monitoringbackup 2>/dev/null || true
|
||||||
$STD omd cp monitoring monitoringbackup
|
$STD omd cp monitoring monitoringbackup
|
||||||
curl_download "/opt/checkmk.deb" "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb"
|
curl_download "/opt/checkmk.deb" "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb"
|
||||||
$STD apt install -y /opt/checkmk.deb
|
$STD apt install -y /opt/checkmk.deb
|
||||||
|
|||||||
+2
-7
@@ -33,16 +33,11 @@ function update_script() {
|
|||||||
systemctl stop cleanuparr
|
systemctl stop cleanuparr
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up config"
|
create_backup /opt/cleanuparr/config
|
||||||
cp -r /opt/cleanuparr/config /opt/cleanuparr_config_backup
|
|
||||||
msg_ok "Backed up config"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
|
||||||
|
|
||||||
msg_info "Restoring config"
|
restore_backup
|
||||||
[[ -d /opt/cleanuparr/config ]] && rm -rf /opt/cleanuparr/config
|
|
||||||
mv /opt/cleanuparr_config_backup /opt/cleanuparr/config
|
|
||||||
msg_ok "Restored config"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start cleanuparr
|
systemctl start cleanuparr
|
||||||
|
|||||||
+2
-11
@@ -36,20 +36,11 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
ensure_dependencies rsync
|
ensure_dependencies rsync
|
||||||
|
create_backup /opt/commafeed/data
|
||||||
if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
|
|
||||||
msg_info "Backing up existing data"
|
|
||||||
mv /opt/commafeed/data /opt/data.bak
|
|
||||||
msg_ok "Backed up existing data"
|
|
||||||
fi
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
|
||||||
|
|
||||||
if [ -d /opt/data.bak ] && [ "$(ls -A /opt/data.bak)" ]; then
|
restore_backup
|
||||||
msg_info "Restoring data"
|
|
||||||
mv /opt/data.bak /opt/commafeed/data
|
|
||||||
msg_ok "Restored data"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start commafeed
|
systemctl start commafeed
|
||||||
|
|||||||
+6
-4
@@ -33,11 +33,13 @@ function update_script() {
|
|||||||
systemctl stop configarr-task.timer
|
systemctl stop configarr-task.timer
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
mkdir -p /opt/backup/
|
create_backup /opt/configarr/config.yml \
|
||||||
mv /opt/configarr/{config.yml,secrets.yml,.env} /opt/backup/
|
/opt/configarr/secrets.yml \
|
||||||
|
/opt/configarr/.env
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-x64.tar.xz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-x64.tar.xz"
|
||||||
mv /opt/backup/{config.yml,secrets.yml,.env} /opt/configarr/
|
|
||||||
rm -rf /opt/backup
|
restore_backup
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start configarr-task.timer
|
systemctl start configarr-task.timer
|
||||||
|
|||||||
+4
-9
@@ -36,19 +36,14 @@ function update_script() {
|
|||||||
|
|
||||||
ensure_dependencies libreoffice-writer
|
ensure_dependencies libreoffice-writer
|
||||||
|
|
||||||
msg_info "Move data-Folder"
|
create_backup /opt/convertx/data
|
||||||
if [[ -d /opt/convertx/data ]]; then
|
|
||||||
mv /opt/convertx/data /opt/data
|
|
||||||
fi
|
|
||||||
msg_ok "Moved data-Folder"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx"
|
fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
msg_info "Updating ConvertX"
|
msg_info "Updating ConvertX"
|
||||||
if [[ -d /opt/data ]]; then
|
cd /opt/convertx
|
||||||
mv /opt/data /opt/convertx/data
|
|
||||||
fi
|
|
||||||
cd /opt/convertx
|
|
||||||
$STD bun install
|
$STD bun install
|
||||||
msg_ok "Updated ConvertX"
|
msg_ok "Updated ConvertX"
|
||||||
|
|
||||||
|
|||||||
+7
-13
@@ -30,20 +30,17 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//')
|
RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//')
|
||||||
if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/crafty-controller_version.txt)" ]]; then
|
if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ ${RELEASE} != "$(cat /opt/crafty-controller_version.txt)" ]]; then
|
||||||
|
|
||||||
msg_info "Stopping Crafty-Controller"
|
msg_info "Stopping Crafty-Controller"
|
||||||
systemctl stop crafty-controller
|
systemctl stop crafty-controller
|
||||||
msg_ok "Stopped Crafty-Controller"
|
msg_ok "Stopped Crafty-Controller"
|
||||||
|
|
||||||
msg_info "Creating Backup of config"
|
create_backup /opt/crafty-controller/crafty/crafty-4/app/config/version.json \
|
||||||
cp -a /opt/crafty-controller/crafty/crafty-4/app/config/. /opt/crafty-controller/backup
|
/opt/crafty-controller/crafty/crafty-4/app/config/credits.json \
|
||||||
rm /opt/crafty-controller/backup/version.json
|
/opt/crafty-controller/crafty/crafty-4/app/config/logging.json \
|
||||||
rm /opt/crafty-controller/backup/credits.json
|
/opt/crafty-controller/crafty/crafty-4/app/config/default.json.example \
|
||||||
rm /opt/crafty-controller/backup/logging.json
|
/opt/crafty-controller/crafty/crafty-4/app/config/motd_format.json
|
||||||
rm /opt/crafty-controller/backup/default.json.example
|
|
||||||
rm /opt/crafty-controller/backup/motd_format.json
|
|
||||||
msg_ok "Backup Created"
|
|
||||||
|
|
||||||
msg_info "Updating Crafty-Controller to v${RELEASE}"
|
msg_info "Updating Crafty-Controller to v${RELEASE}"
|
||||||
curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o $(basename "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip")
|
curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o $(basename "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip")
|
||||||
@@ -58,11 +55,8 @@ function update_script() {
|
|||||||
echo "${RELEASE}" >"/opt/crafty-controller_version.txt"
|
echo "${RELEASE}" >"/opt/crafty-controller_version.txt"
|
||||||
msg_ok "Updated Crafty-Controller to v${RELEASE}"
|
msg_ok "Updated Crafty-Controller to v${RELEASE}"
|
||||||
|
|
||||||
msg_info "Restoring Backup of config"
|
restore_backup
|
||||||
cp -a /opt/crafty-controller/backup/. /opt/crafty-controller/crafty/crafty-4/app/config
|
|
||||||
rm -rf /opt/crafty-controller/backup
|
|
||||||
chown -R crafty:crafty /opt/crafty-controller/
|
chown -R crafty:crafty /opt/crafty-controller/
|
||||||
msg_ok "Backup Restored"
|
|
||||||
|
|
||||||
msg_info "Starting Crafty-Controller"
|
msg_info "Starting Crafty-Controller"
|
||||||
systemctl start crafty-controller
|
systemctl start crafty-controller
|
||||||
|
|||||||
+9
-12
@@ -34,21 +34,18 @@ function update_script() {
|
|||||||
systemctl stop cryptpad
|
systemctl stop cryptpad
|
||||||
msg_info "Stopped Service"
|
msg_info "Stopped Service"
|
||||||
|
|
||||||
msg_info "Creating backup"
|
create_backup /opt/cryptpad/config/config.js \
|
||||||
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
|
/opt/cryptpad/blob \
|
||||||
for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do
|
/opt/cryptpad/block \
|
||||||
[ -d "/opt/cryptpad/${dir}" ] && mv "/opt/cryptpad/${dir}" "/tmp/cryptpad_${dir//\//_}"
|
/opt/cryptpad/customize \
|
||||||
done
|
/opt/cryptpad/data \
|
||||||
msg_ok "Created backup"
|
/opt/cryptpad/datastore \
|
||||||
|
/opt/cryptpad/www/common/onlyoffice/dist \
|
||||||
|
/opt/cryptpad/onlyoffice-conf
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
restore_backup
|
||||||
mv /opt/config.js /opt/cryptpad/config/
|
|
||||||
for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do
|
|
||||||
[ -d "/tmp/cryptpad_${dir//\//_}" ] && mv "/tmp/cryptpad_${dir//\//_}" "/opt/cryptpad/${dir}"
|
|
||||||
done
|
|
||||||
msg_ok "Restored backup"
|
|
||||||
|
|
||||||
msg_info "Updating CryptPad"
|
msg_info "Updating CryptPad"
|
||||||
cd /opt/cryptpad
|
cd /opt/cryptpad
|
||||||
|
|||||||
+2
-8
@@ -35,17 +35,11 @@ function update_script() {
|
|||||||
systemctl stop dagu
|
systemctl stop dagu
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/dagu/data
|
||||||
cp -r /opt/dagu/data /opt/dagu_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
|
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
mkdir -p /opt/dagu/data
|
|
||||||
cp -r /opt/dagu_data_backup/. /opt/dagu/data
|
|
||||||
rm -rf /opt/dagu_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start dagu
|
systemctl start dagu
|
||||||
|
|||||||
+2
-8
@@ -36,10 +36,7 @@ function update_script() {
|
|||||||
systemctl stop dashy
|
systemctl stop dashy
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up user-data"
|
create_backup /opt/dashy/user-data
|
||||||
rm -rf /opt/dashy_user_data_backup
|
|
||||||
cp -r /opt/dashy/user-data /opt/dashy_user_data_backup
|
|
||||||
msg_ok "Backed up user-data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
|
||||||
|
|
||||||
@@ -48,10 +45,7 @@ function update_script() {
|
|||||||
$STD yarn install --ignore-engines --network-timeout 300000
|
$STD yarn install --ignore-engines --network-timeout 300000
|
||||||
msg_ok "Updated Dashy"
|
msg_ok "Updated Dashy"
|
||||||
|
|
||||||
msg_info "Restoring user-data"
|
restore_backup
|
||||||
cp -r /opt/dashy_user_data_backup/. /opt/dashy/user-data/
|
|
||||||
rm -rf /opt/dashy_user_data_backup
|
|
||||||
msg_ok "Restored user-data"
|
|
||||||
|
|
||||||
msg_info "Starting Dashy"
|
msg_info "Starting Dashy"
|
||||||
systemctl start dashy
|
systemctl start dashy
|
||||||
|
|||||||
+2
-11
@@ -35,12 +35,7 @@ function update_script() {
|
|||||||
$STD systemctl stop databasus
|
$STD systemctl stop databasus
|
||||||
msg_ok "Stopped Databasus"
|
msg_ok "Stopped Databasus"
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
create_backup /opt/databasus/.env
|
||||||
[[ ! -f /.env && -f /opt/databasus/.env ]] && cp /opt/databasus/.env /.env
|
|
||||||
chmod 600 /.env
|
|
||||||
cp /.env /opt/databasus.env.bak
|
|
||||||
chmod 600 /opt/databasus.env.bak
|
|
||||||
msg_ok "Backed up Configuration"
|
|
||||||
|
|
||||||
msg_info "Ensuring Database Clients"
|
msg_info "Ensuring Database Clients"
|
||||||
# Create PostgreSQL version symlinks for compatibility
|
# Create PostgreSQL version symlinks for compatibility
|
||||||
@@ -87,11 +82,7 @@ function update_script() {
|
|||||||
chown -R postgres:postgres /opt/databasus
|
chown -R postgres:postgres /opt/databasus
|
||||||
msg_ok "Updated Databasus"
|
msg_ok "Updated Databasus"
|
||||||
|
|
||||||
msg_info "Restoring Configuration"
|
restore_backup
|
||||||
cp /opt/databasus.env.bak /.env
|
|
||||||
rm -f /opt/databasus.env.bak
|
|
||||||
chmod 600 /.env
|
|
||||||
msg_ok "Restored Configuration"
|
|
||||||
|
|
||||||
if ! grep -q "EnvironmentFile=/.env" /etc/systemd/system/databasus.service; then
|
if ! grep -q "EnvironmentFile=/.env" /etc/systemd/system/databasus.service; then
|
||||||
msg_info "Updating Service"
|
msg_info "Updating Service"
|
||||||
|
|||||||
+4
-11
@@ -37,11 +37,9 @@ function update_script() {
|
|||||||
systemctl stop dawarich-web dawarich-worker
|
systemctl stop dawarich-web dawarich-worker
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/dawarich/app/storage \
|
||||||
cp -r /opt/dawarich/app/storage /opt/dawarich_storage_backup 2>/dev/null || true
|
/opt/dawarich/app/config/master.key \
|
||||||
cp /opt/dawarich/app/config/master.key /opt/dawarich_master.key 2>/dev/null || true
|
/opt/dawarich/app/config/credentials.yml.enc
|
||||||
cp /opt/dawarich/app/config/credentials.yml.enc /opt/dawarich_credentials.yml.enc 2>/dev/null || true
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dawarich" "Freika/dawarich" "tarball" "latest" "/opt/dawarich/app"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dawarich" "Freika/dawarich" "tarball" "latest" "/opt/dawarich/app"
|
||||||
|
|
||||||
@@ -85,12 +83,7 @@ function update_script() {
|
|||||||
$STD bundle exec rake data:migrate
|
$STD bundle exec rake data:migrate
|
||||||
msg_ok "Ran Migrations"
|
msg_ok "Ran Migrations"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
cp -r /opt/dawarich_storage_backup/. /opt/dawarich/app/storage/ 2>/dev/null || true
|
|
||||||
cp /opt/dawarich_master.key /opt/dawarich/app/config/master.key 2>/dev/null || true
|
|
||||||
cp /opt/dawarich_credentials.yml.enc /opt/dawarich/app/config/credentials.yml.enc 2>/dev/null || true
|
|
||||||
rm -rf /opt/dawarich_storage_backup /opt/dawarich_master.key /opt/dawarich_credentials.yml.enc
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start dawarich-web dawarich-worker
|
systemctl start dawarich-web dawarich-worker
|
||||||
|
|||||||
+2
-7
@@ -33,16 +33,11 @@ function update_script() {
|
|||||||
systemctl stop ddns-updater
|
systemctl stop ddns-updater
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/ddns-updater/data
|
||||||
cp -r /opt/ddns-updater/data /opt/ddns-updater_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ddns-updater" "qdm12/ddns-updater" "singlefile" "latest" "/opt/ddns-updater" "ddns-updater_*_linux_amd64"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ddns-updater" "qdm12/ddns-updater" "singlefile" "latest" "/opt/ddns-updater" "ddns-updater_*_linux_amd64"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
cp -r /opt/ddns-updater_data_backup/. /opt/ddns-updater/data/
|
|
||||||
rm -rf /opt/ddns-updater_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start ddns-updater
|
systemctl start ddns-updater
|
||||||
|
|||||||
+4
-7
@@ -35,10 +35,8 @@ function update_script() {
|
|||||||
systemctl stop degoog
|
systemctl stop degoog
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Configuration & Data"
|
create_backup /opt/degoog/.env \
|
||||||
[[ -f /opt/degoog/.env ]] && cp /opt/degoog/.env /opt/degoog.env.bak
|
/opt/degoog/data
|
||||||
[[ -d /opt/degoog/data ]] && mv /opt/degoog/data /opt/degoog_data_backup
|
|
||||||
msg_ok "Backed up Configuration & Data"
|
|
||||||
|
|
||||||
if ! command -v bun >/dev/null 2>&1; then
|
if ! command -v bun >/dev/null 2>&1; then
|
||||||
msg_info "Installing Bun"
|
msg_info "Installing Bun"
|
||||||
@@ -54,10 +52,9 @@ function update_script() {
|
|||||||
msg_ok "Updated Valkey"
|
msg_ok "Updated Valkey"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz"
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "curl-impersonate" "lexiforest/curl-impersonate" "prebuild" "latest" "/usr/local/bin" "curl-impersonate-v*.$(uname -m)-linux-gnu.tar.gz"
|
||||||
|
|
||||||
msg_info "Restoring Configuration & Data"
|
restore_backup
|
||||||
[[ -f /opt/degoog.env.bak ]] && mv /opt/degoog.env.bak /opt/degoog/.env
|
|
||||||
[[ -d /opt/degoog_data_backup ]] && mv /opt/degoog_data_backup /opt/degoog/data
|
|
||||||
|
|
||||||
if [[ -f /opt/degoog/.env ]]; then
|
if [[ -f /opt/degoog/.env ]]; then
|
||||||
grep -q "^DEGOOG_VALKEY_URL=" /opt/degoog/.env && sed -i "s|^DEGOOG_VALKEY_URL=.*|DEGOOG_VALKEY_URL=redis://valkey:6379|" /opt/degoog/.env || echo "DEGOOG_VALKEY_URL=redis://valkey:6379" >>/opt/degoog/.env
|
grep -q "^DEGOOG_VALKEY_URL=" /opt/degoog/.env && sed -i "s|^DEGOOG_VALKEY_URL=.*|DEGOOG_VALKEY_URL=redis://valkey:6379|" /opt/degoog/.env || echo "DEGOOG_VALKEY_URL=redis://valkey:6379" >>/opt/degoog/.env
|
||||||
|
|||||||
+2
-9
@@ -37,19 +37,12 @@ function update_script() {
|
|||||||
systemctl stop discopanel
|
systemctl stop discopanel
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
create_backup /opt/discopanel/data/discopanel.db
|
||||||
mkdir -p /opt/discopanel_backup_temp
|
|
||||||
cp /opt/discopanel/data/discopanel.db /opt/discopanel_backup_temp/discopanel.db
|
|
||||||
msg_ok "Created Backup"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "prebuild" "latest" "/opt/discopanel" "discopanel-linux-amd64.tar.gz"
|
fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "prebuild" "latest" "/opt/discopanel" "discopanel-linux-amd64.tar.gz"
|
||||||
ln -sf /opt/discopanel/discopanel-linux-amd64 /opt/discopanel/discopanel
|
ln -sf /opt/discopanel/discopanel-linux-amd64 /opt/discopanel/discopanel
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
mkdir -p /opt/discopanel/data
|
|
||||||
mv /opt/discopanel_backup_temp/discopanel.db /opt/discopanel/data/discopanel.db
|
|
||||||
rm -rf /opt/discopanel_backup_temp
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start discopanel
|
systemctl start discopanel
|
||||||
|
|||||||
+5
-11
@@ -37,25 +37,19 @@ function update_script() {
|
|||||||
systemctl stop docmost
|
systemctl stop docmost
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up data"
|
create_backup /opt/docmost/.env \
|
||||||
cp /opt/docmost/.env /opt/
|
/opt/docmost/data
|
||||||
cp -r /opt/docmost/data /opt/
|
|
||||||
rm -rf /opt/docmost
|
|
||||||
msg_ok "Data backed up"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
restore_backup
|
||||||
cd /opt/docmost
|
|
||||||
mv /opt/.env /opt/docmost/.env
|
|
||||||
mv /opt/data /opt/docmost/data
|
|
||||||
|
|
||||||
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
|
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
|
||||||
# included in GitHub tarballs. The community NoopAuditService exists but
|
# included in GitHub tarballs. The community NoopAuditService exists but
|
||||||
# is only exported by CoreModule – child modules such as UserModule cannot
|
# is only exported by CoreModule – child modules such as UserModule cannot
|
||||||
# resolve it. Making CoreModule @Global() exposes the token app-wide.
|
# resolve it. Making CoreModule @Global() exposes the token app-wide.
|
||||||
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
|
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] &&
|
||||||
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
|
! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
|
||||||
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
|
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
|
||||||
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
|
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
|
||||||
fi
|
fi
|
||||||
|
|||||||
+4
-9
@@ -35,24 +35,19 @@ function update_script() {
|
|||||||
systemctl stop docuseal docuseal-sidekiq
|
systemctl stop docuseal docuseal-sidekiq
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/docuseal/.env \
|
||||||
cp /opt/docuseal/.env /opt/docuseal.env.bak
|
/opt/docuseal/data
|
||||||
[[ -d /opt/docuseal/data ]] && mv /opt/docuseal/data /opt/docuseal_data.bak
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "docuseal" "docusealco/docuseal" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "docuseal" "docusealco/docuseal" "tarball"
|
||||||
|
|
||||||
local required_ruby current_ruby
|
local required_ruby current_ruby
|
||||||
required_ruby=$(grep -m1 '^ruby ' /opt/docuseal/Gemfile | grep -oP '[0-9]+\.[0-9]+\.[0-9]+')
|
required_ruby=$(grep -m1 '^ruby ' /opt/docuseal/Gemfile | grep -oP '[0-9]+\.[0-9]+\.[0-9]+')
|
||||||
current_ruby=$(PATH="/root/.rbenv/bin:/root/.rbenv/shims:${PATH}" rbenv global 2>/dev/null || true)
|
current_ruby=$(PATH="/root/.rbenv/bin:/root/.rbenv/shims:${PATH}" rbenv global 2>/dev/null || true)
|
||||||
if [[ -n "$required_ruby" && "$required_ruby" != "$current_ruby" ]]; then
|
if [[ -n $required_ruby && $required_ruby != "$current_ruby" ]]; then
|
||||||
RUBY_VERSION="${required_ruby}" RUBY_INSTALL_RAILS="false" HOME=/root setup_ruby
|
RUBY_VERSION="${required_ruby}" RUBY_INSTALL_RAILS="false" HOME=/root setup_ruby
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
mv /opt/docuseal.env.bak /opt/docuseal/.env
|
|
||||||
[[ -d /opt/docuseal_data.bak ]] && mv /opt/docuseal_data.bak /opt/docuseal/data
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Building Application"
|
msg_info "Building Application"
|
||||||
cd /opt/docuseal
|
cd /opt/docuseal
|
||||||
|
|||||||
@@ -43,9 +43,7 @@ function update_script() {
|
|||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_info "Service stopped"
|
msg_info "Service stopped"
|
||||||
|
|
||||||
msg_info "Creating backup"
|
create_backup /opt/domain-monitor/.env
|
||||||
mv /opt/domain-monitor/.env /opt
|
|
||||||
msg_ok "Created backup"
|
|
||||||
|
|
||||||
setup_composer
|
setup_composer
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip"
|
||||||
@@ -56,9 +54,7 @@ function update_script() {
|
|||||||
chown -R www-data:www-data /opt/domain-monitor
|
chown -R www-data:www-data /opt/domain-monitor
|
||||||
msg_ok "Updated Domain Monitor"
|
msg_ok "Updated Domain Monitor"
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
restore_backup
|
||||||
mv /opt/.env /opt/domain-monitor
|
|
||||||
msg_ok "Restored backup"
|
|
||||||
|
|
||||||
msg_info "Restarting Services"
|
msg_info "Restarting Services"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
|
|||||||
+3
-7
@@ -35,18 +35,14 @@ function update_script() {
|
|||||||
systemctl stop donetick
|
systemctl stop donetick
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing Up Configurations"
|
create_backup /opt/donetick/config/selfhosted.yaml \
|
||||||
mv /opt/donetick/config/selfhosted.yaml /opt/donetick/donetick.db /opt
|
/opt/donetick/donetick.db
|
||||||
msg_ok "Backed Up Configurations"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz"
|
||||||
|
|
||||||
msg_info "Restoring Configurations"
|
restore_backup
|
||||||
mv /opt/selfhosted.yaml /opt/donetick/config
|
|
||||||
grep -q 'http://localhost"$' /opt/donetick/config/selfhosted.yaml || sed -i '/https:\/\/localhost"$/a\ - "http://localhost"' /opt/donetick/config/selfhosted.yaml
|
grep -q 'http://localhost"$' /opt/donetick/config/selfhosted.yaml || sed -i '/https:\/\/localhost"$/a\ - "http://localhost"' /opt/donetick/config/selfhosted.yaml
|
||||||
grep -q 'capacitor://localhost' /opt/donetick/config/selfhosted.yaml || sed -i '/http:\/\/localhost"$/a\ - "capacitor://localhost"' /opt/donetick/config/selfhosted.yaml
|
grep -q 'capacitor://localhost' /opt/donetick/config/selfhosted.yaml || sed -i '/http:\/\/localhost"$/a\ - "capacitor://localhost"' /opt/donetick/config/selfhosted.yaml
|
||||||
mv /opt/donetick.db /opt/donetick
|
|
||||||
msg_ok "Restored Configurations"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start donetick
|
systemctl start donetick
|
||||||
|
|||||||
+4
-10
@@ -35,19 +35,13 @@ function update_script() {
|
|||||||
systemctl stop dynacat
|
systemctl stop dynacat
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
create_backup /opt/dynacat/config \
|
||||||
cp -r /opt/dynacat/config /opt/dynacat_config_backup
|
/opt/dynacat/assets \
|
||||||
cp -r /opt/dynacat/assets /opt/dynacat_assets_backup
|
/opt/dynacat/data
|
||||||
cp -r /opt/dynacat/data /opt/dynacat_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dynacat" "Panonim/dynacat" "prebuild" "latest" "/opt/dynacat" "dynacat-linux-amd64.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dynacat" "Panonim/dynacat" "prebuild" "latest" "/opt/dynacat" "dynacat-linux-amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
restore_backup
|
||||||
cp -r /opt/dynacat_config_backup/. /opt/dynacat/config
|
|
||||||
cp -r /opt/dynacat_assets_backup/. /opt/dynacat/assets
|
|
||||||
cp -r /opt/dynacat_data_backup/. /opt/dynacat/data
|
|
||||||
rm -rf /opt/dynacat_config_backup /opt/dynacat_assets_backup /opt/dynacat_data_backup
|
|
||||||
chmod +x /opt/dynacat/dynacat
|
chmod +x /opt/dynacat/dynacat
|
||||||
msg_ok "Restored Data"
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/jeffvli/feishin
|
||||||
|
|
||||||
|
APP="Feishin"
|
||||||
|
var_tags="${var_tags:-music;player;streaming}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/feishin ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "feishin" "jeffvli/feishin"; then
|
||||||
|
create_backup /opt/feishin/.env
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball"
|
||||||
|
|
||||||
|
msg_info "Rebuilding Feishin Web"
|
||||||
|
cd /opt/feishin
|
||||||
|
#PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json)
|
||||||
|
$STD corepack enable
|
||||||
|
$STD corepack prepare "pnpm@10" --activate
|
||||||
|
$STD pnpm install
|
||||||
|
$STD pnpm run build:web
|
||||||
|
msg_ok "Rebuilt Feishin Web"
|
||||||
|
|
||||||
|
restore_backup
|
||||||
|
|
||||||
|
msg_info "Publishing Web Assets"
|
||||||
|
rm -rf /usr/share/nginx/html
|
||||||
|
mkdir -p /usr/share/nginx/html
|
||||||
|
cp -r /opt/feishin/out/web/. /usr/share/nginx/html/
|
||||||
|
|
||||||
|
set -a
|
||||||
|
source /opt/feishin/.env
|
||||||
|
set +a
|
||||||
|
|
||||||
|
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
||||||
|
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
||||||
|
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
systemctl restart nginx
|
||||||
|
msg_ok "Published Web Assets"
|
||||||
|
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9180${CL}"
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ __
|
||||||
|
/ __ )____ ____ / /__/ / ____ ________
|
||||||
|
/ __ / __ \/ __ \/ //_/ / / __ \/ ___/ _ \
|
||||||
|
/ /_/ / /_/ / /_/ / ,< / /___/ /_/ / / / __/
|
||||||
|
/_____/\____/\____/_/|_/_____/\____/_/ \___/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
______ _ __ _
|
||||||
|
/ ____/__ (_)____/ /_ (_)___
|
||||||
|
/ /_ / _ \/ / ___/ __ \/ / __ \
|
||||||
|
/ __/ / __/ (__ ) / / / / / / /
|
||||||
|
/_/ \___/_/____/_/ /_/_/_/ /_/
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ _ _
|
||||||
|
/ //_/(_) __(_) __
|
||||||
|
/ ,< / / | /| / / / |/_/
|
||||||
|
/ /| |/ /| |/ |/ / /> <
|
||||||
|
/_/ |_/_/ |__/|__/_/_/|_|
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
__ _ __ __ __ __ ___
|
||||||
|
/ / (_) /____ / / / / / |/ /
|
||||||
|
/ / / / __/ _ \/ / / / / /|_/ /
|
||||||
|
/ /___/ / /_/ __/ /___/ /___/ / / /
|
||||||
|
/_____/_/\__/\___/_____/_____/_/ /_/
|
||||||
|
|
||||||
+8
-2
@@ -52,8 +52,14 @@ function update_script() {
|
|||||||
msg_info "Updating Application"
|
msg_info "Updating Application"
|
||||||
cd /opt/invoiceshelf
|
cd /opt/invoiceshelf
|
||||||
$STD composer install --no-dev --optimize-autoloader
|
$STD composer install --no-dev --optimize-autoloader
|
||||||
$STD yarn install
|
if command -v corepack >/dev/null 2>&1; then
|
||||||
$STD yarn build
|
$STD corepack enable
|
||||||
|
$STD corepack yarn install
|
||||||
|
$STD corepack yarn build
|
||||||
|
else
|
||||||
|
$STD yarn install
|
||||||
|
$STD yarn build
|
||||||
|
fi
|
||||||
$STD php artisan migrate --force
|
$STD php artisan migrate --force
|
||||||
$STD php artisan optimize:clear
|
$STD php artisan optimize:clear
|
||||||
chown -R www-data:www-data /opt/invoiceshelf
|
chown -R www-data:www-data /opt/invoiceshelf
|
||||||
|
|||||||
+75
@@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/kiwix/kiwix-tools
|
||||||
|
|
||||||
|
APP="Kiwix"
|
||||||
|
var_tags="${var_tags:-documentation;offline}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-ubuntu}"
|
||||||
|
var_version="${var_version:-24.04}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if ! dpkg -s kiwix-tools &>/dev/null; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT=$(dpkg-query -W -f='${Version}' kiwix-tools 2>/dev/null)
|
||||||
|
|
||||||
|
msg_info "Updating Package Index"
|
||||||
|
$STD apt update
|
||||||
|
msg_ok "Updated Package Index"
|
||||||
|
|
||||||
|
CANDIDATE=$(apt-cache policy kiwix-tools | awk '/Candidate:/{print $2}')
|
||||||
|
if [[ -z "$CANDIDATE" || "$CANDIDATE" == "(none)" ]]; then
|
||||||
|
msg_error "No Candidate Version Found for kiwix-tools"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$CURRENT" == "$CANDIDATE" ]]; then
|
||||||
|
echo "${CURRENT}" >/root/.kiwix
|
||||||
|
msg_ok "Already on latest version: ${CURRENT}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop kiwix-serve
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating Kiwix-Tools"
|
||||||
|
$STD apt install -y --only-upgrade kiwix-tools
|
||||||
|
RELEASE=$(dpkg-query -W -f='${Version}' kiwix-tools 2>/dev/null)
|
||||||
|
echo "${RELEASE}" >/root/.kiwix
|
||||||
|
msg_ok "Updated Kiwix-Tools"
|
||||||
|
msg_ok "Updated successfully from ${CURRENT} to ${RELEASE}!"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start kiwix-serve
|
||||||
|
msg_ok "Started Service"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
APP="LiteLLM"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
|
||||||
|
msg_error "This script is no longer available in community-scripts."
|
||||||
|
msg_error "This script was removed and cannot be installed or updated."
|
||||||
|
msg_warn "More info: https://community-scripts.org/scripts/litellm"
|
||||||
|
exit 1
|
||||||
+4
-69
@@ -1,80 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/minio/minio
|
|
||||||
|
|
||||||
APP="MinIO"
|
APP="MinIO"
|
||||||
var_tags="${var_tags:-object-storage}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-5}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_arm64="${var_arm64:-no}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
color
|
color
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
msg_error "This script is no longer available in community-scripts."
|
||||||
header_info
|
msg_error "Repository is archived. Minio is gone"
|
||||||
check_container_storage
|
msg_warn "More info: https://community-scripts.org/scripts/minio"
|
||||||
check_container_resources
|
exit 1
|
||||||
if [[ ! -f /usr/local/bin/minio ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
FEATURE_RICH_VERSION="2025-04-22T22-12-26Z"
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
|
|
||||||
CURRENT_VERSION=""
|
|
||||||
[[ -f /opt/${APP}_version.txt ]] && CURRENT_VERSION=$(cat /opt/${APP}_version.txt)
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
|
|
||||||
|
|
||||||
if [[ "${CURRENT_VERSION}" == "${FEATURE_RICH_VERSION}" && "${RELEASE}" != "${FEATURE_RICH_VERSION}" ]]; then
|
|
||||||
echo
|
|
||||||
echo "You are currently running the last feature-rich community version: ${FEATURE_RICH_VERSION}"
|
|
||||||
echo "WARNING: Updating to the latest version will REMOVE most management features from the Console UI."
|
|
||||||
echo "Do you still want to upgrade to the latest version? [y/N]: "
|
|
||||||
read -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
msg_ok "No update performed. Staying on the feature-rich version."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${CURRENT_VERSION}" != "${RELEASE}" ]]; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop minio
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
|
||||||
mv /usr/local/bin/minio /usr/local/bin/minio_bak
|
|
||||||
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o /usr/local/bin/minio
|
|
||||||
chmod +x /usr/local/bin/minio
|
|
||||||
rm -f /usr/local/bin/minio_bak
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start minio
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
|
||||||
echo -e "${GATEWAY}${BGN}http://${IP}:9000${CL}"
|
|
||||||
|
|||||||
+3
-2
@@ -48,13 +48,14 @@ function update_script() {
|
|||||||
msg_info "Rebuilding Storyteller"
|
msg_info "Rebuilding Storyteller"
|
||||||
cd /opt/storyteller
|
cd /opt/storyteller
|
||||||
export NODE_OPTIONS="--max-old-space-size=4096"
|
export NODE_OPTIONS="--max-old-space-size=4096"
|
||||||
$STD yarn install --network-timeout 600000
|
$STD corepack enable
|
||||||
|
$STD corepack yarn install --network-timeout 600000
|
||||||
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
|
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
|
||||||
export CI=1
|
export CI=1
|
||||||
export NODE_ENV=production
|
export NODE_ENV=production
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
||||||
$STD yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
|
$STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
|
||||||
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
|
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
|
||||||
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
|
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
|
||||||
if [[ -d /opt/storyteller/web/public ]]; then
|
if [[ -d /opt/storyteller/web/public ]]; then
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ function update_script() {
|
|||||||
"2" "Set Admin Token")
|
"2" "Set Admin Token")
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
|
INSTALLED_VERSION="$(/opt/vaultwarden/bin/vaultwarden --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1)"
|
||||||
|
if [[ -n "$INSTALLED_VERSION" ]] &&
|
||||||
|
! grep -qxF "$INSTALLED_VERSION" "$HOME/.vaultwarden" 2>/dev/null; then
|
||||||
|
printf '%s\n' "$INSTALLED_VERSION" >"$HOME/.vaultwarden"
|
||||||
|
fi
|
||||||
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop vaultwarden
|
systemctl stop vaultwarden
|
||||||
|
|||||||
+3
-3
@@ -34,9 +34,9 @@ function update_script() {
|
|||||||
systemctl stop watcharr
|
systemctl stop watcharr
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
rm -f /opt/watcharr/server/watcharr
|
create_backup /opt/watcharr/server/data
|
||||||
rm -rf /opt/watcharr/server/ui
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
|
||||||
fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
|
restore_backup
|
||||||
|
|
||||||
msg_info "Updating Watcharr"
|
msg_info "Updating Watcharr"
|
||||||
cd /opt/watcharr
|
cd /opt/watcharr
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ ln -sf /root/.bun/bin/bun /usr/local/bin/bun
|
|||||||
ln -sf /root/.bun/bin/bunx /usr/local/bin/bunx
|
ln -sf /root/.bun/bin/bunx /usr/local/bin/bunx
|
||||||
msg_ok "Installed Bun"
|
msg_ok "Installed Bun"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "curl-impersonate" "lexiforest/curl-impersonate" "prebuild" "latest" "/usr/local/bin" "curl-impersonate-v*.$(uname -m)-linux-gnu.tar.gz"
|
||||||
fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz"
|
fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz"
|
||||||
|
|
||||||
msg_info "Setting up degoog"
|
msg_info "Setting up degoog"
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/jeffvli/feishin
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
nginx \
|
||||||
|
gettext-base
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building Feishin Web"
|
||||||
|
cd /opt/feishin
|
||||||
|
#PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json)
|
||||||
|
$STD corepack enable
|
||||||
|
$STD corepack prepare "pnpm@10" --activate
|
||||||
|
$STD pnpm install
|
||||||
|
$STD pnpm run build:web
|
||||||
|
msg_ok "Built Feishin Web"
|
||||||
|
|
||||||
|
msg_info "Configuring Environment"
|
||||||
|
cat <<EOF >/opt/feishin/.env
|
||||||
|
SERVER_NAME=jellyfin
|
||||||
|
SERVER_LOCK=false
|
||||||
|
SERVER_TYPE=jellyfin
|
||||||
|
SERVER_URL=http://localhost:8096
|
||||||
|
REMOTE_URL=
|
||||||
|
LEGACY_AUTHENTICATION=false
|
||||||
|
ANALYTICS_DISABLED=false
|
||||||
|
PUBLIC_PATH=/
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Environment"
|
||||||
|
|
||||||
|
msg_info "Publishing Web Assets"
|
||||||
|
rm -rf /usr/share/nginx/html
|
||||||
|
mkdir -p /usr/share/nginx/html
|
||||||
|
cp -r /opt/feishin/out/web/. /usr/share/nginx/html/
|
||||||
|
|
||||||
|
set -a
|
||||||
|
source /opt/feishin/.env
|
||||||
|
set +a
|
||||||
|
|
||||||
|
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
||||||
|
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
||||||
|
|
||||||
|
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
systemctl enable -q --now nginx
|
||||||
|
systemctl reload nginx
|
||||||
|
msg_ok "Published Web Assets"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -133,6 +133,8 @@ server {
|
|||||||
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
|
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
|
||||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
|
fastcgi_param HTTP_X_FORWARDED_HOST $http_host;
|
||||||
|
fastcgi_param HTTP_X_FORWARDED_PROTO $scheme;
|
||||||
fastcgi_read_timeout 300;
|
fastcgi_read_timeout 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,8 +39,14 @@ sed -i "s|^DB_USERNAME=.*|DB_USERNAME=${PG_DB_USER}|" .env
|
|||||||
sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env
|
sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env
|
||||||
COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction
|
COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||||
$STD php artisan key:generate
|
$STD php artisan key:generate
|
||||||
$STD yarn install
|
if command -v corepack >/dev/null 2>&1; then
|
||||||
$STD yarn build
|
$STD corepack enable
|
||||||
|
$STD corepack yarn install
|
||||||
|
$STD corepack yarn build
|
||||||
|
else
|
||||||
|
$STD yarn install
|
||||||
|
$STD yarn build
|
||||||
|
fi
|
||||||
mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache
|
mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache
|
||||||
chown -R www-data:www-data /opt/invoiceshelf
|
chown -R www-data:www-data /opt/invoiceshelf
|
||||||
chmod -R 775 storage bootstrap/cache
|
chmod -R 775 storage bootstrap/cache
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ) | tewalds
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/kiwix/kiwix-tools
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y software-properties-common
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Adding Kiwix PPA"
|
||||||
|
add-apt-repository -y ppa:kiwixteam/release >>"$(get_active_logfile)" 2>&1
|
||||||
|
$STD apt update
|
||||||
|
msg_ok "Added Kiwix PPA"
|
||||||
|
|
||||||
|
msg_info "Installing Kiwix-Tools"
|
||||||
|
$STD apt install -y kiwix-tools
|
||||||
|
RELEASE=$(dpkg -s kiwix-tools 2>/dev/null | awk '/^Version:/{print $2}')
|
||||||
|
mkdir -p /data
|
||||||
|
echo "${RELEASE}" >/root/.kiwix
|
||||||
|
msg_ok "Installed Kiwix-Tools"
|
||||||
|
|
||||||
|
msg_info "Downloading Kiwix Test Archive"
|
||||||
|
ZIM_BASE_URL="https://download.kiwix.org/zim/wikipedia"
|
||||||
|
ZIM_FILE="$(CURL_TIMEOUT=60 CURL_CONNECT_TO=15 curl_with_retry "${ZIM_BASE_URL}/" "-" |
|
||||||
|
grep -oE 'href="speedtest_en_blob_[0-9]{4}-[0-9]{2}\.zim"' |
|
||||||
|
sed -E 's/^href="|"$//g' |
|
||||||
|
sort -V |
|
||||||
|
tail -n 1)" || true
|
||||||
|
|
||||||
|
if [[ -z "${ZIM_FILE}" ]]; then
|
||||||
|
msg_warn "No Kiwix speedtest ZIM archive found - skipping optional download"
|
||||||
|
else
|
||||||
|
ZIM_URL="${ZIM_BASE_URL}/${ZIM_FILE}"
|
||||||
|
ZIM_TEMP="/data/.${ZIM_FILE}.tmp"
|
||||||
|
ZIM_TARGET="/data/${ZIM_FILE}"
|
||||||
|
if ! CURL_TIMEOUT=120 CURL_CONNECT_TO=15 curl_with_retry "${ZIM_URL}" "${ZIM_TEMP}"; then
|
||||||
|
rm -f "${ZIM_TEMP}"
|
||||||
|
msg_warn "Failed to download Kiwix ZIM archive - skipping optional download"
|
||||||
|
ZIM_FILE=""
|
||||||
|
elif [[ ! -s "${ZIM_TEMP}" ]]; then
|
||||||
|
rm -f "${ZIM_TEMP}"
|
||||||
|
msg_warn "Downloaded Kiwix ZIM archive is empty - skipping optional download"
|
||||||
|
ZIM_FILE=""
|
||||||
|
else
|
||||||
|
mv "${ZIM_TEMP}" "${ZIM_TARGET}"
|
||||||
|
msg_ok "Downloaded Kiwix Test Archive (${ZIM_FILE})"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<'EOF' >/etc/systemd/system/kiwix-serve.service
|
||||||
|
[Unit]
|
||||||
|
Description=Kiwix ZIM Server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/bin/sh -c 'exec /usr/bin/kiwix-serve --port 8080 /data/*.zim'
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now kiwix-serve
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/minio/minio
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
FEATURE_RICH_VERSION="2025-04-22T22-12-26Z"
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "MinIO recently removed many management features from the Console UI."
|
|
||||||
echo "The last feature-complete version is: $FEATURE_RICH_VERSION"
|
|
||||||
echo "Latest versions require the paid edition for full UI functionality."
|
|
||||||
echo
|
|
||||||
echo "Choose which version to install:"
|
|
||||||
echo " [N] Feature-rich community version ($FEATURE_RICH_VERSION) [Recommended]"
|
|
||||||
echo " [Y] Latest version (may lack UI features)"
|
|
||||||
echo
|
|
||||||
read -p "Install latest MinIO version? [y/N]: " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
USE_LATEST=true
|
|
||||||
else
|
|
||||||
USE_LATEST=false
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Setting up MinIO"
|
|
||||||
if [[ "$USE_LATEST" == "true" ]]; then
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}')
|
|
||||||
DOWNLOAD_URL="https://dl.min.io/server/minio/release/linux-amd64/minio"
|
|
||||||
else
|
|
||||||
RELEASE="$FEATURE_RICH_VERSION"
|
|
||||||
DOWNLOAD_URL="https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.${FEATURE_RICH_VERSION}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
curl -fsSL "$DOWNLOAD_URL" -o /usr/local/bin/minio
|
|
||||||
chmod +x /usr/local/bin/minio
|
|
||||||
useradd -r minio-user -s /sbin/nologin
|
|
||||||
mkdir -p /home/minio-user
|
|
||||||
chown minio-user:minio-user /home/minio-user
|
|
||||||
mkdir -p /data
|
|
||||||
chown minio-user:minio-user /data
|
|
||||||
|
|
||||||
MINIO_ADMIN_USER="minioadmin"
|
|
||||||
MINIO_ADMIN_PASSWORD="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
|
||||||
|
|
||||||
cat <<EOF >/etc/default/minio
|
|
||||||
MINIO_ROOT_USER=${MINIO_ADMIN_USER}
|
|
||||||
MINIO_ROOT_PASSWORD=${MINIO_ADMIN_PASSWORD}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
{
|
|
||||||
echo ""
|
|
||||||
echo "MinIO Credentials"
|
|
||||||
echo "MinIO Admin User: $MINIO_ADMIN_USER"
|
|
||||||
echo "MinIO Admin Password: $MINIO_ADMIN_PASSWORD"
|
|
||||||
} >>~/minio.creds
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION,,}_version.txt
|
|
||||||
msg_ok "Setup MinIO"
|
|
||||||
|
|
||||||
msg_info "Creating service"
|
|
||||||
cat <<EOF >/etc/systemd/system/minio.service
|
|
||||||
[Unit]
|
|
||||||
Description=MinIO
|
|
||||||
Documentation=https://docs.min.io
|
|
||||||
Wants=network-online.target
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=minio-user
|
|
||||||
Group=minio-user
|
|
||||||
EnvironmentFile=-/etc/default/minio
|
|
||||||
ExecStart=/usr/local/bin/minio server --console-address ":9001" /data
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
LimitNOFILE=65536
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl enable -q --now minio
|
|
||||||
msg_ok "Service created"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
@@ -17,7 +17,7 @@ msg_info "Installing OpenObserve"
|
|||||||
mkdir -p /opt/openobserve/data
|
mkdir -p /opt/openobserve/data
|
||||||
RELEASE=$(get_latest_github_release "openobserve/openobserve")
|
RELEASE=$(get_latest_github_release "openobserve/openobserve")
|
||||||
tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve
|
tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve
|
||||||
ROOT_PASS=$(openssl rand -base64 18 | cut -c1-13)
|
ROOT_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c9)Aa1!"
|
||||||
|
|
||||||
cat <<EOF >/opt/openobserve/data/.env
|
cat <<EOF >/opt/openobserve/data/.env
|
||||||
ZO_ROOT_USER_EMAIL = "admin@example.com"
|
ZO_ROOT_USER_EMAIL = "admin@example.com"
|
||||||
|
|||||||
@@ -32,7 +32,8 @@ fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "ta
|
|||||||
|
|
||||||
msg_info "Setting up Storyteller"
|
msg_info "Setting up Storyteller"
|
||||||
cd /opt/storyteller
|
cd /opt/storyteller
|
||||||
$STD yarn install --network-timeout 600000
|
$STD corepack enable
|
||||||
|
$STD corepack yarn install --network-timeout 600000
|
||||||
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
|
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
|
||||||
STORYTELLER_SECRET_KEY=$(openssl rand -base64 32)
|
STORYTELLER_SECRET_KEY=$(openssl rand -base64 32)
|
||||||
cat <<EOF >/opt/storyteller/.env
|
cat <<EOF >/opt/storyteller/.env
|
||||||
@@ -58,7 +59,7 @@ export CI=1
|
|||||||
export NODE_ENV=production
|
export NODE_ENV=production
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
||||||
$STD yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
|
$STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
|
||||||
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
|
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
|
||||||
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
|
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
|
||||||
if [[ -d /opt/storyteller/web/public ]]; then
|
if [[ -d /opt/storyteller/web/public ]]; then
|
||||||
|
|||||||
+85
-4
@@ -979,6 +979,20 @@ base_settings() {
|
|||||||
|
|
||||||
IPV6_METHOD=${var_ipv6_method:-"none"}
|
IPV6_METHOD=${var_ipv6_method:-"none"}
|
||||||
GATE=${var_gateway:-""}
|
GATE=${var_gateway:-""}
|
||||||
|
|
||||||
|
# Guard against invalid gateway combinations from defaults/app vars:
|
||||||
|
# - DHCP must not force a static gateway
|
||||||
|
# - Static IPv4 must use a gateway in the same subnet
|
||||||
|
if [[ "$NET" == "dhcp" && -n "$GATE" ]]; then
|
||||||
|
msg_warn "Ignoring var_gateway '$GATE' because var_net is 'dhcp'"
|
||||||
|
GATE=""
|
||||||
|
elif [[ "$NET" != "dhcp" && -n "$GATE" ]]; then
|
||||||
|
if ! validate_gateway_in_subnet "$NET" "$GATE"; then
|
||||||
|
msg_warn "Ignoring var_gateway '$GATE' because it is not in subnet of var_net '$NET'"
|
||||||
|
GATE=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
APT_CACHER=${var_apt_cacher:-""}
|
APT_CACHER=${var_apt_cacher:-""}
|
||||||
APT_CACHER_IP=${var_apt_cacher_ip:-""}
|
APT_CACHER_IP=${var_apt_cacher_ip:-""}
|
||||||
|
|
||||||
@@ -3631,6 +3645,53 @@ run_addon_updates() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
runtime_script_status_guard() {
|
||||||
|
local script_slug="${SCRIPT_SLUG:-${NSAPP:-}}"
|
||||||
|
script_slug="$(echo "$script_slug" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')"
|
||||||
|
[[ -z "$script_slug" ]] && return 0
|
||||||
|
|
||||||
|
local api_url="https://db.community-scripts.org/api/collections/script_scripts/records?filter=(slug='${script_slug}')&perPage=1&fields=slug,is_disabled,is_deleted,disable_message,deleted_message"
|
||||||
|
local response
|
||||||
|
if ! response=$(curl -fsSL --connect-timeout 2 --max-time 3 "$api_url" 2>/dev/null); then
|
||||||
|
msg_warn "Script status check is unavailable. Continuing without status verification."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v jq >/dev/null 2>&1; then
|
||||||
|
msg_warn "Missing jq for script status check. Continuing without status verification."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local has_record is_deleted is_disabled deleted_message disable_message info_url
|
||||||
|
has_record=$(printf '%s' "$response" | jq -r '.items | length')
|
||||||
|
[[ "$has_record" == "0" ]] && return 0
|
||||||
|
|
||||||
|
is_deleted=$(printf '%s' "$response" | jq -r '.items[0].is_deleted // false')
|
||||||
|
is_disabled=$(printf '%s' "$response" | jq -r '.items[0].is_disabled // false')
|
||||||
|
deleted_message=$(printf '%s' "$response" | jq -r '.items[0].deleted_message // ""')
|
||||||
|
disable_message=$(printf '%s' "$response" | jq -r '.items[0].disable_message // ""')
|
||||||
|
info_url="https://community-scripts.org/scripts/${script_slug}"
|
||||||
|
|
||||||
|
if [[ "$is_deleted" == "true" ]]; then
|
||||||
|
msg_error "This script is no longer available in community-scripts."
|
||||||
|
[[ -n "$deleted_message" ]] && msg_error "$deleted_message"
|
||||||
|
[[ -z "$deleted_message" ]] && msg_error "This script was removed and cannot be installed or updated."
|
||||||
|
msg_warn "More info: ${info_url}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$is_disabled" == "true" ]]; then
|
||||||
|
msg_error "This script is currently disabled in community-scripts."
|
||||||
|
[[ -n "$disable_message" ]] && msg_error "$disable_message"
|
||||||
|
[[ -z "$disable_message" ]] && msg_error "Updates and installs are temporarily disabled for this script."
|
||||||
|
msg_warn "More info: ${info_url}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# start()
|
# start()
|
||||||
#
|
#
|
||||||
@@ -3639,9 +3700,11 @@ run_addon_updates() {
|
|||||||
# - In silent mode: runs update_script with automatic cleanup
|
# - In silent mode: runs update_script with automatic cleanup
|
||||||
# - Otherwise: shows update/setting menu and runs update_script with cleanup
|
# - Otherwise: shows update/setting menu and runs update_script with cleanup
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||||
if command -v pveversion >/dev/null 2>&1; then
|
if command -v pveversion >/dev/null 2>&1; then
|
||||||
|
runtime_script_status_guard || return 0
|
||||||
install_script || return 0
|
install_script || return 0
|
||||||
return 0
|
return 0
|
||||||
elif [ ! -z ${PHS_SILENT+x} ] && [[ "${PHS_SILENT}" == "1" ]]; then
|
elif [ ! -z ${PHS_SILENT+x} ] && [[ "${PHS_SILENT}" == "1" ]]; then
|
||||||
@@ -3649,6 +3712,7 @@ start() {
|
|||||||
set_std_mode
|
set_std_mode
|
||||||
ensure_profile_loaded
|
ensure_profile_loaded
|
||||||
get_lxc_ip
|
get_lxc_ip
|
||||||
|
runtime_script_status_guard || return 0
|
||||||
update_script
|
update_script
|
||||||
run_addon_updates
|
run_addon_updates
|
||||||
update_motd_ip
|
update_motd_ip
|
||||||
@@ -3659,6 +3723,7 @@ start() {
|
|||||||
set_std_mode
|
set_std_mode
|
||||||
ensure_profile_loaded
|
ensure_profile_loaded
|
||||||
get_lxc_ip
|
get_lxc_ip
|
||||||
|
runtime_script_status_guard || return 0
|
||||||
update_script
|
update_script
|
||||||
run_addon_updates
|
run_addon_updates
|
||||||
update_motd_ip
|
update_motd_ip
|
||||||
@@ -3688,6 +3753,7 @@ start() {
|
|||||||
esac
|
esac
|
||||||
ensure_profile_loaded
|
ensure_profile_loaded
|
||||||
get_lxc_ip
|
get_lxc_ip
|
||||||
|
runtime_script_status_guard || return 0
|
||||||
update_script
|
update_script
|
||||||
run_addon_updates
|
run_addon_updates
|
||||||
update_motd_ip
|
update_motd_ip
|
||||||
@@ -4379,10 +4445,12 @@ EOF
|
|||||||
pct exec "$CTID" -- bash -c "apt-get update 2>&1 && apt-get install -y ${_base_pkgs} 2>&1" >>"$BUILD_LOG" 2>&1 || {
|
pct exec "$CTID" -- bash -c "apt-get update 2>&1 && apt-get install -y ${_base_pkgs} 2>&1" >>"$BUILD_LOG" 2>&1 || {
|
||||||
local failed_mirror
|
local failed_mirror
|
||||||
failed_mirror=$(pct exec "$CTID" -- bash -c "grep -m1 -oP '(?<=URIs: https?://)[^/]+' /etc/apt/sources.list.d/debian.sources 2>/dev/null || grep -m1 -oP '(?<=deb https?://)[^/]+' /etc/apt/sources.list 2>/dev/null" 2>/dev/null || echo "unknown")
|
failed_mirror=$(pct exec "$CTID" -- bash -c "grep -m1 -oP '(?<=URIs: https?://)[^/]+' /etc/apt/sources.list.d/debian.sources 2>/dev/null || grep -m1 -oP '(?<=deb https?://)[^/]+' /etc/apt/sources.list 2>/dev/null" 2>/dev/null || echo "unknown")
|
||||||
msg_warn "apt-get update failed (${failed_mirror}), trying alternate mirrors..."
|
msg_warn "apt-get update failed (${failed_mirror})."
|
||||||
|
msg_custom "ℹ️" "${YW}" "Probing alternate mirrors (this can take 1-2 minutes on network issues)"
|
||||||
local mirror_exit=0
|
local mirror_exit=0
|
||||||
pct exec "$CTID" -- env APT_BASE="$_base_pkgs" bash -c '
|
pct exec "$CTID" -- env APT_BASE="$_base_pkgs" bash -c '
|
||||||
DISTRO=$(. /etc/os-release 2>/dev/null && echo "$ID" || echo "debian")
|
DISTRO=$(. /etc/os-release 2>/dev/null && echo "$ID" || echo "debian")
|
||||||
|
echo " Mirror fallback for distro: $DISTRO"
|
||||||
|
|
||||||
if [ "$DISTRO" = "ubuntu" ]; then
|
if [ "$DISTRO" = "ubuntu" ]; then
|
||||||
EU_MIRRORS="de.archive.ubuntu.com fr.archive.ubuntu.com se.archive.ubuntu.com nl.archive.ubuntu.com it.archive.ubuntu.com ch.archive.ubuntu.com mirrors.xtom.de"
|
EU_MIRRORS="de.archive.ubuntu.com fr.archive.ubuntu.com se.archive.ubuntu.com nl.archive.ubuntu.com it.archive.ubuntu.com ch.archive.ubuntu.com mirrors.xtom.de"
|
||||||
@@ -4440,15 +4508,21 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Phase 1: Scan global mirrors first (independent of local CDN issues)
|
# Phase 1: Scan global mirrors first (independent of local CDN issues)
|
||||||
|
echo " Phase 1/3: Scanning global mirrors for reachability..."
|
||||||
OTHERS_OK=$(scan_reachable "$OTHERS")
|
OTHERS_OK=$(scan_reachable "$OTHERS")
|
||||||
OTHERS_PICK=$(printf "%s\n" $OTHERS_OK | shuf | head -3 | xargs)
|
OTHERS_PICK=$(printf "%s\n" $OTHERS_OK | shuf | head -3 | xargs)
|
||||||
|
|
||||||
|
if [ -z "$OTHERS_PICK" ]; then
|
||||||
|
echo " No reachable global mirrors found"
|
||||||
|
fi
|
||||||
|
|
||||||
for mirror in $OTHERS_PICK; do
|
for mirror in $OTHERS_PICK; do
|
||||||
echo " Attempting mirror: $mirror"
|
echo " Attempting mirror: $mirror"
|
||||||
try_mirrors "$mirror" && exit 0
|
try_mirrors "$mirror" && exit 0
|
||||||
done
|
done
|
||||||
|
|
||||||
# Phase 2: Try primary mirror
|
# Phase 2: Try primary mirror
|
||||||
|
echo " Phase 2/3: Trying primary mirror..."
|
||||||
if [ "$DISTRO" = "ubuntu" ]; then
|
if [ "$DISTRO" = "ubuntu" ]; then
|
||||||
PRIMARY="archive.ubuntu.com"
|
PRIMARY="archive.ubuntu.com"
|
||||||
else
|
else
|
||||||
@@ -4460,9 +4534,14 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Phase 3: Fall back to regional mirrors
|
# Phase 3: Fall back to regional mirrors
|
||||||
|
echo " Phase 3/3: Scanning regional mirrors..."
|
||||||
REGIONAL_OK=$(scan_reachable "$REGIONAL")
|
REGIONAL_OK=$(scan_reachable "$REGIONAL")
|
||||||
REGIONAL_PICK=$(printf "%s\n" $REGIONAL_OK | shuf | head -3 | xargs)
|
REGIONAL_PICK=$(printf "%s\n" $REGIONAL_OK | shuf | head -3 | xargs)
|
||||||
|
|
||||||
|
if [ -z "$REGIONAL_PICK" ]; then
|
||||||
|
echo " No reachable regional mirrors found"
|
||||||
|
fi
|
||||||
|
|
||||||
for mirror in $REGIONAL_PICK; do
|
for mirror in $REGIONAL_PICK; do
|
||||||
echo " Attempting mirror: $mirror"
|
echo " Attempting mirror: $mirror"
|
||||||
try_mirrors "$mirror" && exit 0
|
try_mirrors "$mirror" && exit 0
|
||||||
@@ -4496,12 +4575,14 @@ EOF
|
|||||||
msg_warn "Mirror '${custom_mirror}' also failed. Try another or type 'skip'."
|
msg_warn "Mirror '${custom_mirror}' also failed. Try another or type 'skip'."
|
||||||
done
|
done
|
||||||
if [[ "$custom_mirror" == "skip" ]]; then
|
if [[ "$custom_mirror" == "skip" ]]; then
|
||||||
msg_error "apt-get base packages installation failed"
|
msg_warn "Mirror selection aborted by user ('skip')"
|
||||||
install_exit_code=1
|
msg_warn "Aborting installation before base package bootstrap"
|
||||||
|
post_update_to_api "aborted" "130" "force"
|
||||||
|
install_exit_code=130
|
||||||
fi
|
fi
|
||||||
elif [[ $mirror_exit -ne 0 ]]; then
|
elif [[ $mirror_exit -ne 0 ]]; then
|
||||||
msg_error "apt-get base packages installation failed"
|
msg_error "apt-get base packages installation failed"
|
||||||
install_exit_code=1
|
install_exit_code=100
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -5267,6 +5267,8 @@ _setup_intel_arc() {
|
|||||||
intel-media-va-driver-non-free \
|
intel-media-va-driver-non-free \
|
||||||
intel-opencl-icd \
|
intel-opencl-icd \
|
||||||
libmfx-gen1.2 \
|
libmfx-gen1.2 \
|
||||||
|
mesa-vulkan-drivers \
|
||||||
|
vulkan-tools \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||||
|
|
||||||
@@ -5301,6 +5303,8 @@ _setup_intel_arc() {
|
|||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
libvpl2 \
|
libvpl2 \
|
||||||
libmfx-gen1.2 \
|
libmfx-gen1.2 \
|
||||||
|
mesa-vulkan-drivers \
|
||||||
|
vulkan-tools \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||||
|
|
||||||
@@ -5324,6 +5328,8 @@ _setup_intel_modern() {
|
|||||||
va-driver-all \
|
va-driver-all \
|
||||||
intel-media-va-driver \
|
intel-media-va-driver \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
|
mesa-vulkan-drivers \
|
||||||
|
vulkan-tools \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel packages failed"
|
||||||
|
|
||||||
@@ -5358,6 +5364,8 @@ _setup_intel_modern() {
|
|||||||
$STD apt -y install \
|
$STD apt -y install \
|
||||||
intel-media-va-driver-non-free \
|
intel-media-va-driver-non-free \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
|
mesa-vulkan-drivers \
|
||||||
|
vulkan-tools \
|
||||||
vainfo \
|
vainfo \
|
||||||
libmfx-gen1.2 \
|
libmfx-gen1.2 \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel packages failed"
|
||||||
|
|||||||
Reference in New Issue
Block a user