mirror of
https://github.com/community-scripts/ProxmoxVE
synced 2025-01-10 19:05:09 +00:00
Compare commits
16 Commits
812d80cb7f
...
141d120ed3
Author | SHA1 | Date | |
---|---|---|---|
|
141d120ed3 | ||
|
189dbf67b6 | ||
|
b2ba72a906 | ||
|
0ce45140c7 | ||
|
c6efe42eee | ||
|
5c1954c85d | ||
|
e592b80716 | ||
|
8dd43ddb81 | ||
|
eb8ebfe7e4 | ||
|
d56d8dd369 | ||
|
5af9dd9e45 | ||
|
ec1e5b3a4a | ||
|
37f4a841a6 | ||
|
02401aa35d | ||
|
2646ea6317 | ||
|
6b183c9e4e |
@ -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,16 +36,16 @@ 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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Check build.func line
|
- name: Check build.func line
|
||||||
@ -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,
|
@ -20,8 +20,16 @@ Do not break established syntax in this file, as it is automatically updated by
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
### ✨ 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
|
||||||
|
|
||||||
|
- Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254))
|
||||||
|
- Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334))
|
||||||
- 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
|
||||||
|
@ -34,11 +34,16 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
systemctl stop actualbudget.service
|
systemctl stop actualbudget.service
|
||||||
|
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 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.service
|
||||||
msg_ok "Successfully Updated ${APP}"
|
msg_ok "Successfully Updated ${APP} to ${RELEASE}"
|
||||||
|
rm -rf "${TEMPD}"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,4 +54,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5006${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5006${CL}"
|
||||||
|
@ -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
|
||||||
@ -81,4 +83,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
63
ct/calibre-server.sh
Normal file
63
ct/calibre-server.sh
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#!/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: thisisjeron
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://calibre-ebook.com
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Calibre-Server"
|
||||||
|
var_tags="eBook"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="4"
|
||||||
|
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/calibre-server.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop calibre-server
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} Packages"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_ok "Packages updated"
|
||||||
|
|
||||||
|
msg_info "Updating Calibre (latest)"
|
||||||
|
bash -c "$(curl -fsSL https://download.calibre-ebook.com/linux-installer.sh)"
|
||||||
|
msg_ok "Updated Calibre"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start calibre-server
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
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}:8180${CL}"
|
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="256"
|
||||||
|
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
|
||||||
|
60
install/calibre-server-install.sh
Normal file
60
install/calibre-server-install.sh
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024
|
||||||
|
# Author: thisisjeron
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
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 \
|
||||||
|
sudo \
|
||||||
|
curl \
|
||||||
|
mc \
|
||||||
|
imagemagick \
|
||||||
|
xvfb \
|
||||||
|
libxcomposite1 \
|
||||||
|
libegl1
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Calibre"
|
||||||
|
$STD bash -c "$(curl -fsSL https://download.calibre-ebook.com/linux-installer.sh)"
|
||||||
|
useradd -c "Calibre Server" -d /opt/calibre -s /bin/bash -m calibre
|
||||||
|
mkdir -p /opt/calibre/calibre-library
|
||||||
|
chown -R calibre:calibre /opt/calibre
|
||||||
|
msg_ok "Installed Calibre"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/calibre-server.service
|
||||||
|
[Unit]
|
||||||
|
Description=Calibre Content Server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=calibre
|
||||||
|
Group=calibre
|
||||||
|
ExecStart=/opt/calibre/calibre-server --port=8180 --enable-local-write /opt/calibre/calibre-library
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now calibre-server.service
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
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"
|
43
json/calibre-server.json
Normal file
43
json/calibre-server.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Calibre-Server",
|
||||||
|
"slug": "calibre-server",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-01-09",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8180,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://calibre-ebook.com",
|
||||||
|
"logo": "https://calibre-ebook.com/resources/icons/calibre_icon.png",
|
||||||
|
"description": "Calibre content server is used to manage and serve eBooks over the network.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/calibre-server.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "By default, the Calibre Server runs on port 8180 with no username/password.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Use 'calibredb add' from the calibre user or run 'xvfb-run calibredb add ...' if you need to add books while the server is running.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
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": 265,
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user