Compare commits

...

20 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
5f2163bff4 Update CHANGELOG.md (#2679)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 23:35:46 +01:00
Tobias
9c59bdaea1 Fix: Homarr - Manually correct db-migration wrong-folder (#2676)
* Update homarr-install.sh

* Update homarr.sh
2025-02-26 23:23:03 +01:00
CanbiZ
7f4c116b2c Update zigbee2mqtt-install.sh 2025-02-26 20:08:01 +01:00
community-scripts-pr-app[bot]
ba842a1e49 Update CHANGELOG.md (#2672)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 19:52:10 +01:00
Slaviša Arežina
41f4aebdc7 Fix infinite spinner (#2673) 2025-02-26 19:51:46 +01:00
Slaviša Arežina
c12470ff12 Fix: SABnzbd - Removed few artefacts in the code preventing the update (#2670)
* Fix copy files to folder

* Fix untaring the archive
2025-02-26 19:20:48 +01:00
community-scripts-pr-app[bot]
6722e52c9b Update CHANGELOG.md (#2664)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 18:43:25 +01:00
community-scripts-pr-app[bot]
e68355d880 Update .app files (#2665)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-26 16:21:35 +01:00
Slaviša Arežina
7d29d8a05a New Script: Outline (#2653)
* Added Outline script

* Update outline-install.sh
2025-02-26 16:17:22 +01:00
Michel Roegl-Brunner
e6792790cc Update autolabeler.yml (#2660) 2025-02-26 15:51:30 +02:00
community-scripts-pr-app[bot]
4354079c4e Update CHANGELOG.md (#2659)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 14:45:52 +01:00
community-scripts-pr-app[bot]
a02a9d803e Update CHANGELOG.md (#2652)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 14:39:16 +01:00
Michel Roegl-Brunner
46462a790c [gh] Furhter Impove Changelog Workflow (#2655)
* Impove Workflow

* Impove Workflow
2025-02-26 14:38:35 +01:00
Slaviša Arežina
a971cedde5 Improve application description for website (#2658) 2025-02-26 14:32:16 +01:00
CanbiZ
fda9557811 Kimai: add local.yaml & fix path permissions (#2646)
* Update kimai-install.sh

* Update kimai.sh

* Update kimai.sh
2025-02-26 13:16:11 +01:00
community-scripts-pr-app[bot]
633dbe3e2b Update CHANGELOG.md (#2648)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 09:57:04 +01:00
CanbiZ
981baed9d3 PiHole: Fix Unbound sed for DNS (#2647) 2025-02-26 09:50:13 +01:00
community-scripts-pr-app[bot]
90fc30a228 Update CHANGELOG.md (#2645) 2025-02-26 10:43:30 +02:00
Sven Schneider
0641ec1e2a fix(pocketid): Website and documentation links updated (#2643)
fix: #2639
2025-02-26 09:35:22 +01:00
CanbiZ
82d4ee01d2 Alpine IT-Tools fix typo "unexpected EOF while looking for matching `"' (#2644) 2025-02-26 09:18:00 +01:00
20 changed files with 459 additions and 99 deletions

View File

@@ -1,17 +1,5 @@
{
"breaking change": [
{
"fileStatus": "renamed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"excludeGlobs": []
},
{
"fileStatus": "removed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"excludeGlobs": []
}
],
"new script": [
{
"fileStatus": "added",
@@ -33,10 +21,17 @@
"excludeGlobs": []
}
],
"rename script": [
"maintenance": [
{
"fileStatus": "renamed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"fileStatus": null,
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh", "api/**"],
"excludeGlobs": []
}
],
"core": [
{
"fileStatus": null,
"includeGlobs": ["misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": []
}
],
@@ -47,25 +42,35 @@
"excludeGlobs": []
}
],
"maintenance": [
{
"fileStatus": null,
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": ["misc/api.func"]
}
],
"api": [
"api": [
{
"fileStatus": null,
"includeGlobs": ["api/**", "misc/api.func"],
"excludeGlobs": []
}
],
"github": [
{
"fileStatus": null,
"includeGlobs": [".github/**"],
"excludeGlobs": []
}
],
"json": [
{
"fileStatus": "modified",
"includeGlobs": ["json/**"],
"excludeGlobs": []
}
],
"high risk": [
{
"fileStatus": null,
"includeGlobs": ["misc/build.func", "misc/install.func", "ct/create_lxc.sh"],
"excludeGlobs": []
}
]
}
]
}

View File

@@ -1,16 +1,8 @@
[
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
},
{
"title": "🆕 New Scripts",
"labels": ["new script"]
},
{
"title": "✨ New Features",
"labels": ["feature"]
},
{
"title": "🚀 Updated Scripts",
"labels": ["update script"],
@@ -21,27 +13,85 @@
"notes" : []
},
{
"title": "General Updates",
"labels": ["general"],
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
}
]
},
{
"title": "🌐 Website",
"labels": ["website"]
},
{
"title": "📡 API",
"labels": ["api"]
},
{
"title": "🧰 Maintenance",
"labels": ["maintenance"]
"labels": ["maintenance"],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
},
{
"title": "📡 API",
"labels": ["api"],
"notes" : []
},
{
"title": "💾 Core",
"labels": ["core"],
"notes" : []
},
{
"title": "📂 Github",
"labels": ["github"],
"notes" : []
}
]
},
{
"title": "🌐 Website",
"labels": ["website"],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
},
{
"title": "📝 Script Information",
"labels": ["json"],
"notes" : []
}
]
},
{
"title": "❔ Unlabelled",
"labels": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
}
]

View File

@@ -1,25 +1,25 @@
## ✍️ Description
<!-- Provide a clear and concise description of your changes. -->
## 🔗 Related PR / Discussion / Issue
Link: #
## ✅ Prerequisites
Before this PR can be reviewed, the following must be completed:
- [] **Self-review performed** Code follows established patterns and conventions.
- [] **Testing performed** Changes have been thoroughly tested and verified.
## 🛠️ Type of Change
Select all that apply:
- [] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [] ✨ **New feature** Adds new, non-breaking functionality.
- [] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
- [] 🆕 **New script** A fully functional and tested script or script set.
Select all that apply:
- [] 🆕 **New script** A fully functional and tested script or script set.
- [] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [] ✨ **New feature** Adds new, non-breaking functionality.
- [] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
## 📋 Additional Information (optional)
<!-- Provide extra context, screenshots, or references if needed. -->

View File

@@ -43,26 +43,8 @@ jobs:
});
const prFiles = prListFilesResponse.data;
const templateLabelMappings = {
"🐞 **bug fix**": "bugfix",
"✨ **new feature**": "feature",
"💥 **breaking change**": "breaking change",
"🆕 **new script**": "new script"
};
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
const match = prBody.match(regex);
if (match) {
console.log(`Match: ${match}`);
labelsToAdd.add(label);
}
}
if (labelsToAdd.size === 0) {
labelsToAdd.add("general");
}
// Apply labels based on file changes
for (const [label, rules] of Object.entries(autolabelerConfig)) {
const shouldAddLabel = prFiles.some((prFile) => {
@@ -79,6 +61,21 @@ jobs:
labelsToAdd.add(label);
}
}
const templateLabelMappings = {
"🐞 **Bug fix**": "bugfix",
"✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change",
};
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
const match = prBody.match(regex);
if (match) {
console.log(`Match: ${match}`);
labelsToAdd.add(label);
}
}
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);

View File

@@ -58,10 +58,26 @@ jobs:
const categorizedPRs = changelogConfig.map(obj => ({
...obj,
notes: [],
subCategories: obj.subCategories ?? (obj.labels.includes("update script") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"] },
{ title: "✨ Feature Updates", labels: ["feature"] }
] : [])
subCategories: obj.subCategories ?? (
obj.labels.includes("update script") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] }
] :
obj.labels.includes("maintenance") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "📡 API", labels: ["api"], notes: [] },
{ title: "Github", labels: ["github"], notes: [] }
] :
obj.labels.includes("website") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "Script Information", labels: ["json"], notes: [] }
] : []
)
}));
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
@@ -110,6 +126,7 @@ jobs:
return categorizedPRs;
- name: Update CHANGELOG.md
uses: actions/github-script@v7
with:
@@ -124,7 +141,8 @@ jobs:
console.log(JSON.stringify(categorizedPRs, null, 2));
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
let newReleaseNotes = `## ${today}\n\n`;
for (const { title, notes, subCategories } of categorizedPRs) {
const hasSubcategories = subCategories && subCategories.length > 0;
const hasMainNotes = notes.length > 0;
@@ -133,17 +151,16 @@ jobs:
if (hasMainNotes || hasSubNotes) {
newReleaseNotes += `### ${title}\n\n`;
}
}
if (hasMainNotes) {
newReleaseNotes += `${notes.join("\n")}\n\n`;
}
newReleaseNotes += ` ${notes.join("\n")}\n\n`;
}
if (hasSubcategories) {
for (const { title: subTitle, notes: subNotes } of subCategories) {
if (subNotes && subNotes.length > 0) {
newReleaseNotes += ` #### ${subTitle}\n\n`;
newReleaseNotes += ` ${subNotes.join("\n ")}\n\n`;
newReleaseNotes += ` - #### ${subTitle}\n\n`;
newReleaseNotes += ` ${subNotes.join("\n ")}\n\n`;
}
}
}
@@ -206,4 +223,4 @@ jobs:
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
fi

View File

@@ -17,6 +17,39 @@ All LXC instances created using this repository come pre-installed with Midnight
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
## 2025-02-26
### 🆕 New Scripts
- New Script: Outline [@tremor021](https://github.com/tremor021) ([#2653](https://github.com/community-scripts/ProxmoxVE/pull/2653))
### 🚀 Updated Scripts
- Fix: SABnzbd - Removed few artefacts in the code preventing the update [@tremor021](https://github.com/tremor021) ([#2670](https://github.com/community-scripts/ProxmoxVE/pull/2670))
- #### 🐞 Bug Fixes
- Fix: Homarr - Manually correct db-migration wrong-folder [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2676](https://github.com/community-scripts/ProxmoxVE/pull/2676))
- Kimai: add local.yaml & fix path permissions [@MickLesk](https://github.com/MickLesk) ([#2646](https://github.com/community-scripts/ProxmoxVE/pull/2646))
- PiHole: Fix Unbound sed for DNS [@MickLesk](https://github.com/MickLesk) ([#2647](https://github.com/community-scripts/ProxmoxVE/pull/2647))
- Alpine IT-Tools fix typo "unexpected EOF while looking for matching `"' [@MickLesk](https://github.com/MickLesk) ([#2644](https://github.com/community-scripts/ProxmoxVE/pull/2644))
### 🧰 Maintenance
- #### 📂 Github
- [gh] Furhter Impove Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2655](https://github.com/community-scripts/ProxmoxVE/pull/2655))
### 🌐 Website
- #### 🐞 Bug Fixes
- Website: PocketID Change of website and documentation links [@schneider-de-com](https://github.com/schneider-de-com) ([#2643](https://github.com/community-scripts/ProxmoxVE/pull/2643))
- #### 📝 Script Information
- Fix: Graylog - Improve application description for website [@tremor021](https://github.com/tremor021) ([#2658](https://github.com/community-scripts/ProxmoxVE/pull/2658))
## 2025-02-25
### Changes

View File

@@ -30,7 +30,7 @@ if [ ! -d /usr/share/nginx/html ]; then
fi
RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt" ] || [ ! -f /opt/${APP}_version.txt ]; then
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"

6
ct/headers/outline Normal file
View File

@@ -0,0 +1,6 @@
____ __ ___
/ __ \__ __/ /_/ (_)___ ___
/ / / / / / / __/ / / __ \/ _ \
/ /_/ / /_/ / /_/ / / / / / __/
\____/\__,_/\__/_/_/_/ /_/\___/

View File

@@ -49,6 +49,11 @@ set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &
@@ -97,6 +102,11 @@ set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &

View File

@@ -35,19 +35,22 @@ function update_script() {
msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/kimai/.env /opt/.env
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml /opt/local.yaml
rm -rf /opt/kimai
wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip"
unzip -q ${RELEASE}.zip
mv kimai-${RELEASE} /opt/kimai
mv /opt/.env /opt/kimai/.env
[ -f /opt/local.yaml ] && mv /opt/local.yaml /opt/kimai/config/packages/local.yaml
cd /opt/kimai
$STD composer install --no-dev --optimize-autoloader
$STD bin/console kimai:update
chown -R :www-data .
chmod -R g+r .
chmod -R g+rw var/
sudo chown -R www-data:www-data /opt/kimai
sudo chmod -R 755 /opt/kimai
chmod -R 777 /opt/kimai/var/
chown -R www-data:www-data /opt/kimai
chmod -R 755 /opt/kimai
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
@@ -72,4 +75,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

71
ct/outline.sh Normal file
View File

@@ -0,0 +1,71 @@
#!/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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/outline/outline
APP="Outline"
var_tags="documentation"
var_disk="8"
var_cpu="2"
var_ram="4096"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/outline ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/outline/outline/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 Services"
systemctl stop outline
msg_ok "Services Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
temp_file=$(mktemp)
rm -rf /opt/outline/node_modules
wget -q "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
cp -rf outline-${RELEASE}/* /opt/outline
cd /opt/outline
export NODE_OPTIONS="--max-old-space-size=3584"
$STD yarn install --frozen-lockfile
$STD yarn build
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting Services"
systemctl start outline
msg_ok "Started Services"
msg_info "Cleaning Up"
rm -rf $temp_file
rm -rf $HOME/outline-${RELEASE}
msg_ok "Cleaned"
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}:3000${CL}"

View File

@@ -31,8 +31,8 @@ function update_script() {
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
systemctl stop sabnzbd.service
$STD tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz)
$STD \cp -r SABnzbd-${RELEASE}/* /opt/sabnzbd
tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz)
cp -rf SABnzbd-${RELEASE}/* /opt/sabnzbd
rm -rf SABnzbd-${RELEASE}
cd /opt/sabnzbd
$STD python3 -m pip install -r requirements.txt
@@ -40,7 +40,7 @@ function update_script() {
systemctl start sabnzbd.service
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_info "No update required. ${APP} is already at ${RELEASE}"
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

View File

@@ -92,6 +92,11 @@ set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &

View File

@@ -74,8 +74,9 @@ $STD bin/console kimai:install -n
chown -R :www-data /opt/*
chmod -R g+r /opt/*
chmod -R g+rw /opt/*
sudo chown -R www-data:www-data /opt/*
sudo chmod -R 755 /opt/*
chown -R www-data:www-data /opt/*
chmod -R 755 /opt/*
chmod -R 777 /opt/kimai/var/
$STD expect <<EOF
set timeout -1
log_user 0
@@ -88,6 +89,19 @@ send "helper-scripts.com\r"
expect eof
EOF
$STD composer update --no-interaction
cat <<EOF >/opt/kimai/config/packages/local.yaml
kimai:
timesheet:
rounding:
default:
begin: 15
end: 15
admin_lte:
options:
default_avatar: build/apple-touch-icon.png
EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Kimai"

106
install/outline-install.sh Normal file
View File

@@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/outline/outline
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 \
gnupg \
mkcert \
git \
redis
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"
msg_info "Setting up PostgreSQL Repository"
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
echo "deb https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" >/etc/apt/sources.list.d/pgdg.list
msg_ok "Set up PostgreSQL Repository"
msg_info "Installing Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
$STD npm install -g yarn
msg_ok "Installed Node.js"
msg_info "Install/Set up PostgreSQL Database"
$STD apt-get install -y postgresql-16
DB_NAME="outline"
DB_USER="outline"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
msg_ok "Set up PostgreSQL"
msg_info "Setup Outline (Patience)"
temp_file=$(mktemp)
LOCAL_IP="$(hostname -I | awk '{print $1}')"
RELEASE=$(curl -s https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
wget -q "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
mv outline-${RELEASE} /opt/outline
cd /opt/outline
cp .env.sample .env
sed -i 's/NODE_ENV=production/NODE_ENV=development/g' /opt/outline/.env
sed -i "s/generate_a_new_key/${SECRET_KEY}/g" /opt/outline/.env
sed -i "s/user:pass@postgres/${DB_USER}:${DB_PASS}@localhost/g" /opt/outline/.env
sed -i 's/redis:6379/localhost:6379/g' /opt/outline/.env
sed -i "32s#URL=#URL=http://${LOCAL_IP}#g" /opt/outline/.env
sed -i 's/FORCE_HTTPS=true/FORCE_HTTPS=false/g' /opt/outline/.env
$STD yarn install --frozen-lockfile
export NODE_OPTIONS="--max-old-space-size=3584"
$STD yarn build
sed -i 's/NODE_ENV=development/NODE_ENV=production/g' /opt/outline/.env
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Setup Outline"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/outline.service
[Unit]
Description=Outline Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/outline
ExecStart=/usr/bin/node ./build/server/index.js
Restart=always
EnvironmentFile=/opt/outline/.env
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now outline
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -rf $temp_file
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -141,7 +141,7 @@ server=8.8.8.8
server=8.8.4.4
EOF
sed -i -E "s|^(upstreams =).*|\1 [\"127.0.0.1#5335\", \"8.8.4.4\"]|" /etc/pihole/pihole.toml
sed -i -E 's|^(\s*upstreams =).*|\1 ["127.0.0.1#5335", "8.8.4.4"]|' /etc/pihole/pihole.toml
systemctl enable -q --now unbound
systemctl restart pihole-FTL.service
msg_ok "Installed Unbound"

View File

@@ -50,7 +50,7 @@ mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
cd /opt/zigbee2mqtt/data
mv configuration.example.yaml configuration.yaml
cd /opt/zigbee2mqtt
$STD pnpm install --frozen-lockfile
$STD pnpm install --no-frozen-lockfile
$STD pnpm build
msg_ok "Installed Zigbee2MQTT"

View File

@@ -12,7 +12,7 @@
"documentation": "https://go2docs.graylog.org/current/home.htm",
"website": "https://graylog.org/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/graylog.svg",
"description": "Graylog is a free and open log management platform.",
"description": "Graylog is an open-source log management and analysis platform that centralizes and processes log data from various sources, enabling real-time search, analysis, and alerting for IT infrastructure monitoring and troubleshooting.",
"install_methods": [
{
"type": "default",

43
json/outline.json Normal file
View File

@@ -0,0 +1,43 @@
{
"name": "Outline",
"slug": "outline",
"categories": [
12
],
"date_created": "2025-02-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.getoutline.com/s/hosting/",
"website": "https://www.getoutline.com",
"logo": "https://www.getoutline.com/images/logo.svg",
"description": "The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible. Its time to get your teams knowledge organized.",
"install_methods": [
{
"type": "default",
"script": "ct/outline.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "After installation finishes, application will do a database migration so web UI might be unavailable for a minute or two. Also you need to manually add authentication and/or enable HTTPS.",
"type": "info"
},
{
"text": "Configuration file is at: `/opt/outline/.env`. Modify to suit your environment.",
"type": "info"
}
]
}

View File

@@ -9,8 +9,8 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://stonith404.github.io/pocket-id/introduction",
"website": "https://github.com/stonith404/pocket-id",
"documentation": "https://pocket-id.org/docs/",
"website": "https://github.com/pocket-id/pocket-id",
"logo": "https://raw.githubusercontent.com/pocket-id/pocket-id/refs/heads/main/backend/resources/images/logoDark.svg",
"description": "Pocket ID is a simple OIDC provider that allows users to authenticate with their passkeys to your services.",
"install_methods": [