mirror of
https://github.com/community-scripts/ProxmoxVE
synced 2025-01-10 19:05:09 +00:00
Compare commits
33 Commits
a988bfa3e6
...
055167e955
Author | SHA1 | Date | |
---|---|---|---|
|
055167e955 | ||
|
2c24952cd2 | ||
|
9d2ba6739b | ||
|
3a9d55abf4 | ||
|
8a9e162e9b | ||
|
0b85f26a4e | ||
|
14e185af85 | ||
|
5170056078 | ||
|
9a7dcef25a | ||
|
045ba81533 | ||
|
4985fda206 | ||
|
d8ad4545ad | ||
|
179defdd88 | ||
|
da071d800b | ||
|
6653b92972 | ||
|
bfd6b58406 | ||
|
189dbf67b6 | ||
|
b2ba72a906 | ||
|
0ce45140c7 | ||
|
c6efe42eee | ||
|
5c1954c85d | ||
|
e592b80716 | ||
|
8dd43ddb81 | ||
|
eb8ebfe7e4 | ||
|
d56d8dd369 | ||
|
5af9dd9e45 | ||
|
ec1e5b3a4a | ||
|
37f4a841a6 | ||
|
02401aa35d | ||
|
2646ea6317 | ||
|
6b183c9e4e | ||
|
84e5fafd0d | ||
|
24a7149794 |
@ -14,6 +14,7 @@ jobs:
|
|||||||
name: Check changed files
|
name: Check changed files
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
|
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@ -60,6 +61,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
|
|
||||||
shfmt_output=$(shfmt -d ${{ steps.changed-files.outputs.files }})
|
shfmt_output=$(shfmt -d ${{ steps.changed-files.outputs.files }})
|
||||||
if [[ $? -eq 0 ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
exit 0
|
exit 0
|
||||||
@ -102,6 +104,7 @@ jobs:
|
|||||||
|
|
||||||
const existingComment = comments.find(
|
const existingComment = comments.find(
|
||||||
(comment) => comment.user.login === "github-actions[bot]",
|
(comment) => comment.user.login === "github-actions[bot]",
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (existingComment) {
|
if (existingComment) {
|
@ -16,6 +16,11 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Debug event payload
|
||||||
|
run: |
|
||||||
|
echo "Event name: ${{ github.event_name }}"
|
||||||
|
echo "Payload: $(cat $GITHUB_EVENT_PATH)"
|
||||||
|
|
||||||
- name: Get pull request information
|
- name: Get pull request information
|
||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
@ -31,13 +36,13 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Ensure the full history is fetched for accurate diffing
|
fetch-depth: 0
|
||||||
ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }}
|
ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }}
|
||||||
|
|
||||||
- name: Get changed files
|
- name: Get changed files
|
||||||
id: changed-files
|
id: changed-files
|
||||||
run: |
|
run: |
|
||||||
if ${{ github.event_name == 'pull_request_target' }}; then
|
if [ "${{ github.event_name }}" == "pull_request_target" ]; then
|
||||||
echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
|
echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
|
echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
|
||||||
@ -170,12 +175,12 @@ jobs:
|
|||||||
script: |
|
script: |
|
||||||
const result = '${{ job.status }}' === 'success' ? 'success' : 'failure';
|
const result = '${{ job.status }}' === 'success' ? 'success' : 'failure';
|
||||||
const nonCompliantFiles = {
|
const nonCompliantFiles = {
|
||||||
'Invalid build.func source': "${{ steps.build-func.outputs.files }}",
|
'Invalid build.func source': "${{ steps.build-func.outputs.files || '' }}",
|
||||||
'Not executable': "${{ steps.check-executable.outputs.files }}",
|
'Not executable': "${{ steps.check-executable.outputs.files || '' }}",
|
||||||
'Copyright header line missing or invalid': "${{ steps.check-copyright.outputs.files }}",
|
'Copyright header line missing or invalid': "${{ steps.check-copyright.outputs.files || '' }}",
|
||||||
'Author header line missing or invalid': "${{ steps.check-author.outputs.files }}",
|
'Author header line missing or invalid': "${{ steps.check-author.outputs.files || '' }}",
|
||||||
'License header line missing or invalid': "${{ steps.check-license.outputs.files }}",
|
'License header line missing or invalid': "${{ steps.check-license.outputs.files || '' }}",
|
||||||
'Source header line missing or invalid': "${{ steps.check-source.outputs.files }}"
|
'Source header line missing or invalid': "${{ steps.check-source.outputs.files || '' }}"
|
||||||
};
|
};
|
||||||
|
|
||||||
const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null;
|
const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null;
|
||||||
@ -186,7 +191,11 @@ jobs:
|
|||||||
newCommentBody += ':x: We found issues in the following changed files:\n\n';
|
newCommentBody += ':x: We found issues in the following changed files:\n\n';
|
||||||
for (const [check, files] of Object.entries(nonCompliantFiles)) {
|
for (const [check, files] of Object.entries(nonCompliantFiles)) {
|
||||||
if (files) {
|
if (files) {
|
||||||
newCommentBody += `**${check}:**\n${files.trim().split(' ').map(file => `- ${file}`).join('\n')}\n\n`;
|
newCommentBody += `**${check}:**\n`;
|
||||||
|
files.trim().split(' ').forEach(file => {
|
||||||
|
newCommentBody += `- ${file}: ${check}\n`;
|
||||||
|
});
|
||||||
|
newCommentBody += `\n`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -201,15 +210,14 @@ jobs:
|
|||||||
issue_number: issueNumber
|
issue_number: issueNumber
|
||||||
});
|
});
|
||||||
|
|
||||||
const existingComment = comments.find(comment => comment.user.login === 'github-actions[bot]');
|
const existingComment = comments.find(comment =>
|
||||||
|
comment.body.includes(`<!-- ${commentIdentifier}-start -->`) &&
|
||||||
|
comment.user.login === 'github-actions[bot]'
|
||||||
|
);
|
||||||
|
|
||||||
if (existingComment) {
|
if (existingComment) {
|
||||||
if (existingComment.body.includes(commentIdentifier)) {
|
const re = new RegExp(String.raw`<!-- ${commentIdentifier}-start -->[\\s\\S]*?<!-- ${commentIdentifier}-end -->`, "m");
|
||||||
const re = new RegExp(String.raw`<!-- ${commentIdentifier}-start -->[\s\S]*?<!-- ${commentIdentifier}-end -->`, "");
|
|
||||||
newCommentBody = existingComment.body.replace(re, newCommentBody);
|
newCommentBody = existingComment.body.replace(re, newCommentBody);
|
||||||
} else {
|
|
||||||
newCommentBody = existingComment.body + '\n\n---\n\n' + newCommentBody;
|
|
||||||
}
|
|
||||||
|
|
||||||
await github.rest.issues.updateComment({
|
await github.rest.issues.updateComment({
|
||||||
...context.repo,
|
...context.repo,
|
14
CHANGELOG.md
14
CHANGELOG.md
@ -20,8 +20,22 @@ Do not break established syntax in this file, as it is automatically updated by
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Removal calibre-server (no Headless Support) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1362](https://github.com/community-scripts/ProxmoxVE/pull/1362))
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Prometheus Alertmanager [@andygrunwald](https://github.com/andygrunwald) ([#1272](https://github.com/community-scripts/ProxmoxVE/pull/1272))
|
||||||
|
- New script: ps5-mqtt [@liecno](https://github.com/liecno) ([#1198](https://github.com/community-scripts/ProxmoxVE/pull/1198))
|
||||||
|
- New Script: calibre-server [@ThisIsJeron](https://github.com/ThisIsJeron) ([#960](https://github.com/community-scripts/ProxmoxVE/pull/960))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Stirling-PDF > LibreOffice/unoconv Integration Issues [@m6urns](https://github.com/m6urns) ([#1322](https://github.com/community-scripts/ProxmoxVE/pull/1322))
|
||||||
|
- Update calibre-server-install.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1359](https://github.com/community-scripts/ProxmoxVE/pull/1359))
|
||||||
|
- Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334))
|
||||||
|
- Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254))
|
||||||
- Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341))
|
- Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341))
|
||||||
|
|
||||||
### 🧰 Maintenance
|
### 🧰 Maintenance
|
||||||
|
@ -32,13 +32,26 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! command -v jq >/dev/null 2>&1; then
|
||||||
|
echo "Installing jq..."
|
||||||
|
apt-get install -y jq >/dev/null 2>&1
|
||||||
|
echo "Installed jq..."
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
systemctl stop actualbudget.service
|
systemctl stop actualbudget
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
|
||||||
|
TEMPD="$(mktemp -d)"
|
||||||
|
cd "${TEMPD}"
|
||||||
|
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
|
||||||
|
mv /opt/actualbudget /opt/actualbudget_bak
|
||||||
|
mv actualbudget-actual-server-*/* /opt/actualbudget/
|
||||||
cd /opt/actualbudget
|
cd /opt/actualbudget
|
||||||
git pull &>/dev/null
|
|
||||||
yarn install &>/dev/null
|
yarn install &>/dev/null
|
||||||
systemctl start actualbudget.service
|
systemctl start actualbudget
|
||||||
msg_ok "Successfully Updated ${APP}"
|
msg_ok "Successfully Updated ${APP} to ${RELEASE}"
|
||||||
|
rm -rf "${TEMPD}"
|
||||||
|
rm -rf /opt/actualbudget_bak
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,19 +40,20 @@ function update_script() {
|
|||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
cp /opt/adventurelog/backend/server/.env /opt/server.env
|
mv /opt/adventurelog/ /opt/adventurelog-backup/
|
||||||
cp /opt/adventurelog/frontend/.env /opt/frontend.env
|
wget -qO /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
|
||||||
wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
|
unzip -q /opt/v${RELEASE}.zip
|
||||||
unzip -q v${RELEASE}.zip
|
mv /opt/AdventureLog-${RELEASE} /opt/adventurelog
|
||||||
mv AdventureLog-${RELEASE} /opt/adventurelog
|
|
||||||
mv /opt/server.env /opt/adventurelog/backend/server/.env
|
mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
||||||
|
mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
||||||
cd /opt/adventurelog/backend/server
|
cd /opt/adventurelog/backend/server
|
||||||
pip install --upgrade pip &>/dev/null
|
pip install --upgrade pip &>/dev/null
|
||||||
pip install -r requirements.txt &>/dev/null
|
pip install -r requirements.txt &>/dev/null
|
||||||
python3 manage.py collectstatic --noinput &>/dev/null
|
python3 manage.py collectstatic --noinput &>/dev/null
|
||||||
python3 manage.py migrate &>/dev/null
|
python3 manage.py migrate &>/dev/null
|
||||||
|
|
||||||
mv /opt/frontend.env /opt/adventurelog/frontend/.env
|
mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
||||||
cd /opt/adventurelog/frontend
|
cd /opt/adventurelog/frontend
|
||||||
pnpm install &>/dev/null
|
pnpm install &>/dev/null
|
||||||
pnpm run build &>/dev/null
|
pnpm run build &>/dev/null
|
||||||
@ -65,7 +66,8 @@ function update_script() {
|
|||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf v${RELEASE}.zip
|
rm -rf /opt/v${RELEASE}.zip
|
||||||
|
rm -rf /opt/adventurelog-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
|
68
ct/prometheus-alertmanager.sh
Executable file
68
ct/prometheus-alertmanager.sh
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Andy Grunwald (andygrunwald)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://prometheus.io/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Prometheus-Alertmanager"
|
||||||
|
var_tags="monitoring;alerting"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="2"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/systemd/system/prometheus-alertmanager.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop prometheus-alertmanager
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz
|
||||||
|
tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz
|
||||||
|
cd alertmanager-${RELEASE}.linux-amd64
|
||||||
|
cp -rf alertmanager amtool /usr/local/bin/
|
||||||
|
rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start prometheus-alertmanager
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
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 "${TAB}${GATEWAY}${BGN}http://${IP}:9093${CL}"
|
76
ct/ps5-mqtt.sh
Normal file
76
ct/ps5-mqtt.sh
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: liecno
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/FunkeyFlo/ps5-mqtt/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="PS5-MQTT"
|
||||||
|
var_tags="smarthome;automation"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="512"
|
||||||
|
var_disk="3"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/ps5-mqtt ]]; then
|
||||||
|
msg_error "No ${APP} installation found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
||||||
|
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping service"
|
||||||
|
systemctl stop ps5-mqtt
|
||||||
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
|
msg_info "Updating PS5-MQTT to ${RELEASE}"
|
||||||
|
wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz
|
||||||
|
rm -rf /opt/ps5-mqtt
|
||||||
|
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
||||||
|
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
||||||
|
rm /tmp/${RELEASE}.tar.gz
|
||||||
|
echo ${RELEASE} > /opt/ps5-mqtt_version.txt
|
||||||
|
msg_ok "Updated PS5-MQTT"
|
||||||
|
|
||||||
|
msg_info "Building new PS5-MQTT version"
|
||||||
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
|
npm install &>/dev/null
|
||||||
|
npm run build &>/dev/null
|
||||||
|
msg_ok "Built new PS5-MQTT version"
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
|
systemctl start ps5-mqtt
|
||||||
|
msg_ok "Started service"
|
||||||
|
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 "${TAB}${GATEWAY}${BGN}http://${IP}:8645${CL}"
|
@ -35,8 +35,10 @@ $STD apt-get install -y nodejs
|
|||||||
$STD npm install --global yarn
|
$STD npm install --global yarn
|
||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
msg_info "Installing Actual Budget"
|
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
|
||||||
$STD git clone https://github.com/actualbudget/actual-server.git /opt/actualbudget
|
msg_info "Installing Actual Budget $RELEASE"
|
||||||
|
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
|
||||||
|
mv actualbudget-actual-server-* /opt/actualbudget
|
||||||
mkdir -p /opt/actualbudget/server-files
|
mkdir -p /opt/actualbudget/server-files
|
||||||
chown -R root:root /opt/actualbudget/server-files
|
chown -R root:root /opt/actualbudget/server-files
|
||||||
chmod 755 /opt/actualbudget/server-files
|
chmod 755 /opt/actualbudget/server-files
|
||||||
|
64
install/prometheus-alertmanager-install.sh
Executable file
64
install/prometheus-alertmanager-install.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Andy Grunwald (andygrunwald)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://prometheus.io/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Prometheus Alertmanager"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
mkdir -p /etc/alertmanager
|
||||||
|
mkdir -p /var/lib/alertmanager
|
||||||
|
wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz
|
||||||
|
tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz
|
||||||
|
mv alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/
|
||||||
|
mv alertmanager-${RELEASE}.linux-amd64/alertmanager.yml /etc/alertmanager/alertmanager.yml
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Prometheus Alertmanager"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/prometheus-alertmanager.service
|
||||||
|
echo "[Unit]
|
||||||
|
Description=Prometheus Alertmanager
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Restart=always
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/alertmanager \
|
||||||
|
--config.file=/etc/alertmanager/alertmanager.yml \
|
||||||
|
--storage.path=/var/lib/alertmanager/ \
|
||||||
|
--web.listen-address=0.0.0.0:9093
|
||||||
|
ExecReload=/bin/kill -HUP \$MAINPID
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target"
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now prometheus-alertmanager
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz
|
||||||
|
msg_ok "Cleaned"
|
111
install/ps5-mqtt-install.sh
Normal file
111
install/ps5-mqtt-install.sh
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: liecno
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/FunkeyFlo/ps5-mqtt/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
jq \
|
||||||
|
ca-certificates \
|
||||||
|
gnupg
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Node.js Repository"
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
|
msg_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
|
msg_info "Installing Node.js"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
$STD npm i -g playactor
|
||||||
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
|
|
||||||
|
msg_info "Installing PS5-MQTT"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
||||||
|
wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz
|
||||||
|
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
||||||
|
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
||||||
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
echo ${RELEASE} > /opt/ps5-mqtt_version.txt
|
||||||
|
msg_ok "Installed PS5-MQTT"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
mkdir -p /opt/.config/ps5-mqtt/
|
||||||
|
mkdir -p /opt/.config/ps5-mqtt/playactor
|
||||||
|
cat <<EOF > /opt/.config/ps5-mqtt/config.json
|
||||||
|
{
|
||||||
|
"mqtt": {
|
||||||
|
"host": "",
|
||||||
|
"port": "",
|
||||||
|
"user": "",
|
||||||
|
"pass": "",
|
||||||
|
"discovery_topic": "homeassistant"
|
||||||
|
},
|
||||||
|
|
||||||
|
"device_check_interval": 5000,
|
||||||
|
"device_discovery_interval": 60000,
|
||||||
|
"device_discovery_broadcast_address": "",
|
||||||
|
|
||||||
|
"include_ps4_devices": false,
|
||||||
|
|
||||||
|
"psn_accounts": [
|
||||||
|
{
|
||||||
|
"username": "",
|
||||||
|
"npsso":""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
"account_check_interval": 5000,
|
||||||
|
|
||||||
|
"credentialsStoragePath": "/opt/.config/ps5-mqtt/credentials.json",
|
||||||
|
"frontendPort": "8645"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
|
||||||
|
[Unit]
|
||||||
|
Description=PS5-MQTT Daemon
|
||||||
|
After=syslog.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/ps5-mqtt/ps5-mqtt
|
||||||
|
Environment="CONFIG_PATH=/opt/.config/ps5-mqtt/config.json"
|
||||||
|
Environment="DEBUG='@ha:ps5:*'"
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
Type=simple
|
||||||
|
ExecStart=node server/dist/index.js
|
||||||
|
KillMode=process
|
||||||
|
SyslogIdentifier=ps5-mqtt
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now ps5-mqtt
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
rm /tmp/${RELEASE}.tar.gz
|
||||||
|
msg_ok "Cleaned"
|
@ -36,7 +36,11 @@ msg_info "Installing LibreOffice Components"
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
libreoffice-writer \
|
libreoffice-writer \
|
||||||
libreoffice-calc \
|
libreoffice-calc \
|
||||||
libreoffice-impress
|
libreoffice-impress \
|
||||||
|
libreoffice-core \
|
||||||
|
libreoffice-common \
|
||||||
|
libreoffice-base-core \
|
||||||
|
python3-uno
|
||||||
msg_ok "Installed LibreOffice Components"
|
msg_ok "Installed LibreOffice Components"
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
msg_info "Installing Python Dependencies"
|
||||||
@ -75,8 +79,8 @@ msg_ok "Installed Language Packs"
|
|||||||
|
|
||||||
msg_info "Installing Stirling-PDF (Additional Patience)"
|
msg_info "Installing Stirling-PDF (Additional Patience)"
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz
|
wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz
|
||||||
tar -xzf v$RELEASE.tar.gz
|
tar -xzf v${RELEASE}.tar.gz
|
||||||
cd Stirling-PDF-$RELEASE
|
cd Stirling-PDF-$RELEASE
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
$STD ./gradlew build
|
$STD ./gradlew build
|
||||||
@ -86,37 +90,66 @@ mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
|
|||||||
mv scripts /opt/Stirling-PDF/
|
mv scripts /opt/Stirling-PDF/
|
||||||
ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
||||||
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
|
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
|
||||||
msg_ok "Installed Stirling-PDF v$RELEASE"
|
msg_ok "Installed Stirling-PDF"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/stirlingpdf.service
|
# Create LibreOffice listener service
|
||||||
|
cat <<EOF >/etc/systemd/system/libreoffice-listener.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Stirling-PDF service
|
Description=LibreOffice Headless Listener Service
|
||||||
After=syslog.target network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
SuccessExitStatus=143
|
Type=simple
|
||||||
|
|
||||||
User=root
|
User=root
|
||||||
Group=root
|
Group=root
|
||||||
|
ExecStart=/usr/lib/libreoffice/program/soffice --headless --invisible --nodefault --nofirststartwizard --nolockcheck --nologo --accept="socket,host=127.0.0.1,port=2002;urp;StarOffice.ComponentContext"
|
||||||
Type=simple
|
Restart=always
|
||||||
EnvironmentFile=/opt/Stirling-PDF/.env
|
|
||||||
WorkingDirectory=/opt/Stirling-PDF
|
|
||||||
ExecStart=/usr/bin/java -jar Stirling-PDF.jar
|
|
||||||
ExecStop=/bin/kill -15 %n
|
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now stirlingpdf.service
|
|
||||||
|
# Set up environment variables
|
||||||
|
cat <<EOF >/opt/Stirling-PDF/.env
|
||||||
|
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/libreoffice/program
|
||||||
|
UNO_PATH=/usr/lib/libreoffice/program
|
||||||
|
PYTHONPATH=/usr/lib/python3/dist-packages:/usr/lib/libreoffice/program
|
||||||
|
LD_LIBRARY_PATH=/usr/lib/libreoffice/program
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/stirlingpdf.service
|
||||||
|
[Unit]
|
||||||
|
Description=Stirling-PDF service
|
||||||
|
After=syslog.target network.target libreoffice-listener.service
|
||||||
|
Requires=libreoffice-listener.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
SuccessExitStatus=143
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
Group=root
|
||||||
|
EnvironmentFile=/opt/Stirling-PDF/.env
|
||||||
|
WorkingDirectory=/opt/Stirling-PDF
|
||||||
|
ExecStart=/usr/bin/java -jar Stirling-PDF.jar
|
||||||
|
ExecStop=/bin/kill -15 %n
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Enable and start services
|
||||||
|
systemctl enable -q --now libreoffice-listener
|
||||||
|
systemctl enable -q --now stirlingpdf
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf v$RELEASE.tar.gz /zulu-repo_1.0.0-3_all.deb
|
rm -rf v${RELEASE}.tar.gz /zulu-repo_1.0.0-3_all.deb
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
34
json/prometheus-alertmanager.json
Normal file
34
json/prometheus-alertmanager.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Prometheus Alertmanager",
|
||||||
|
"slug": "prometheus-alertmanager",
|
||||||
|
"categories": [
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-09",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9093,
|
||||||
|
"documentation": "https://prometheus.io/docs/alerting/latest/overview/",
|
||||||
|
"website": "https://prometheus.io/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/prometheus.svg",
|
||||||
|
"description": "Alerting with Prometheus is separated into two parts. Alerting rules in Prometheus servers send alerts to an Alertmanager. The Alertmanager then manages those alerts, including silencing, inhibition, aggregation and sending out notifications via methods such as email, on-call notification systems, and chat platforms.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/prometheus-alertmanager.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
39
json/ps5-mqtt.json
Normal file
39
json/ps5-mqtt.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "PS5-MQTT",
|
||||||
|
"slug": "ps5-mqtt",
|
||||||
|
"categories": [
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-09",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8645,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://github.com/FunkeyFlo/",
|
||||||
|
"logo": "https://github.com/FunkeyFlo/ps5-mqtt/blob/main/add-ons/ps5-mqtt/logo.png?raw=true",
|
||||||
|
"description": "Integrate your Sony Playstation 5 devices with Home Assistant using MQTT.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/ps5-mqtt.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 3,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "After installation, the MQTT endpoint must be configured. The configuration file is located within the LXC container at: `/opt/.config/ps5-mqtt/config.json`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -256,3 +256,23 @@ EOF
|
|||||||
echo "bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
|
echo "bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
|
||||||
chmod +x /usr/bin/update
|
chmod +x /usr/bin/update
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function downloads the latest release of a GitHub repository
|
||||||
|
github_download_latest_release() {
|
||||||
|
local user="$1"
|
||||||
|
local repo="$2"
|
||||||
|
local output_file="$3"
|
||||||
|
local tarball_url=$($STD wget -qLO - "https://api.github.com/repos/$user/$repo/releases/latest" | grep '"tarball_url":' | cut -d '"' -f 4)
|
||||||
|
$STD wget -qLO "$output_file" "$tarball_url"
|
||||||
|
}
|
||||||
|
|
||||||
|
# This function extracts a GitHub release tarball into a target directory
|
||||||
|
github_extract_latest_release() {
|
||||||
|
local user="$1"
|
||||||
|
local repo="$2"
|
||||||
|
local output_directory="$3"
|
||||||
|
mkdir -p "$output_directory"
|
||||||
|
github_download_latest_release "$user" "$repo" "/tmp/$repo.tar.gz"
|
||||||
|
tar -xzf "/tmp/$repo.tar.gz" -C "$output_directory" --strip-components 1
|
||||||
|
rm "/tmp/$repo.tar.gz"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user