mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 02:42:50 +00:00
Compare commits
173 Commits
2025-02-06
...
2025-02-12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b905f29ef | ||
|
|
f2512b032f | ||
|
|
29d3073539 | ||
|
|
2a91a5d2e9 | ||
|
|
2492497417 | ||
|
|
dc3a0eca69 | ||
|
|
d5714eb749 | ||
|
|
bd90b30300 | ||
|
|
5946079f47 | ||
|
|
72b546e945 | ||
|
|
65f8495a12 | ||
|
|
ab64e7e013 | ||
|
|
80053c1cc3 | ||
|
|
067c962baf | ||
|
|
e5c6953e98 | ||
|
|
03d8d095cc | ||
|
|
22f44d117a | ||
|
|
417d4089d7 | ||
|
|
c892401218 | ||
|
|
3483ea7025 | ||
|
|
9ec1b651cd | ||
|
|
f06b37f180 | ||
|
|
ca01015586 | ||
|
|
362b5cd031 | ||
|
|
64e9eac80f | ||
|
|
e4c2485823 | ||
|
|
a5f77f23e9 | ||
|
|
0f7ff181df | ||
|
|
1788551393 | ||
|
|
1c9d23713d | ||
|
|
3f779e14fa | ||
|
|
58eff8c4cb | ||
|
|
6c495bcafc | ||
|
|
6de6b1542c | ||
|
|
62425bc514 | ||
|
|
8cf1c2969b | ||
|
|
5d56822d1b | ||
|
|
c014bc200e | ||
|
|
56de05a392 | ||
|
|
76ca5181ae | ||
|
|
8181518c24 | ||
|
|
ba636ed25d | ||
|
|
e797cba504 | ||
|
|
ecc294953b | ||
|
|
e9d8b30de0 | ||
|
|
4a42012906 | ||
|
|
37016259e1 | ||
|
|
bf5fc97e1a | ||
|
|
1c89ef3f12 | ||
|
|
b2d022edff | ||
|
|
a5a143111c | ||
|
|
9338fdeebf | ||
|
|
6a486d4d73 | ||
|
|
e55db3cb75 | ||
|
|
b39078af7e | ||
|
|
8e8e631d22 | ||
|
|
a34da2459d | ||
|
|
81a64c2cff | ||
|
|
414a6617f8 | ||
|
|
4af819f449 | ||
|
|
229016ca10 | ||
|
|
51f3f97967 | ||
|
|
c548c3bd88 | ||
|
|
0877e6a2f2 | ||
|
|
133aa1a1f2 | ||
|
|
c32e71cae3 | ||
|
|
a71bdb6f06 | ||
|
|
f6bc82e77a | ||
|
|
5736b6aa5c | ||
|
|
c30b080e44 | ||
|
|
61567a66b0 | ||
|
|
e23137eb63 | ||
|
|
8acf81b937 | ||
|
|
f1683ad39f | ||
|
|
33ee969d91 | ||
|
|
f03471133e | ||
|
|
cdbabcac89 | ||
|
|
0122e70b1d | ||
|
|
a4037c151e | ||
|
|
5d58d6d14f | ||
|
|
8a1446ac4e | ||
|
|
1ce3929d66 | ||
|
|
dd62089b61 | ||
|
|
8cda7e4dd8 | ||
|
|
bc3abdfe91 | ||
|
|
e793dfff3a | ||
|
|
12ec0b46bc | ||
|
|
55fa65e168 | ||
|
|
6de6216bc6 | ||
|
|
1bca424acf | ||
|
|
a51e688388 | ||
|
|
c40fc2b159 | ||
|
|
d859646dac | ||
|
|
a0e0f28c66 | ||
|
|
8595675531 | ||
|
|
70435b9e5a | ||
|
|
1731f5274b | ||
|
|
6a775f6026 | ||
|
|
0b3e63bd3f | ||
|
|
514ff1fbe7 | ||
|
|
85bf9f319b | ||
|
|
dff4e735f0 | ||
|
|
b81b9c574b | ||
|
|
f82eb87476 | ||
|
|
d47bd677da | ||
|
|
2c32b7fa94 | ||
|
|
4d996c95e0 | ||
|
|
90473b7b10 | ||
|
|
e4f756ce73 | ||
|
|
10159e934f | ||
|
|
865e6fd3d7 | ||
|
|
a1dd57ded6 | ||
|
|
1c808b95a8 | ||
|
|
0c024515f1 | ||
|
|
4c7d82f4eb | ||
|
|
e4ee00b403 | ||
|
|
d380fdd0ea | ||
|
|
9756ac639b | ||
|
|
7105f67145 | ||
|
|
35547c4316 | ||
|
|
ccc71a7225 | ||
|
|
c5101d3358 | ||
|
|
5bbf197a8d | ||
|
|
70b5c62c9f | ||
|
|
33ef8aadbe | ||
|
|
e989bbba29 | ||
|
|
3f35900914 | ||
|
|
e5f738b567 | ||
|
|
6fc357ecd0 | ||
|
|
758659a91e | ||
|
|
b05858c6e9 | ||
|
|
a481e89cad | ||
|
|
b9094e306e | ||
|
|
31c8617258 | ||
|
|
f94d727af7 | ||
|
|
054829c4d5 | ||
|
|
d20c92bd4f | ||
|
|
64b9fa090a | ||
|
|
5abc84b776 | ||
|
|
2b0666bcf8 | ||
|
|
2ef6ac2fe4 | ||
|
|
4bb887a390 | ||
|
|
8fd8ca2c50 | ||
|
|
f69d5b5831 | ||
|
|
fead4b76f8 | ||
|
|
800c1065b9 | ||
|
|
782e0a8535 | ||
|
|
5863d81571 | ||
|
|
c15e34143f | ||
|
|
57c3a42a6e | ||
|
|
7c13a7bce0 | ||
|
|
9c23b55bc0 | ||
|
|
5c0811c5ba | ||
|
|
6bc92a0feb | ||
|
|
9f5f5f54a0 | ||
|
|
047ef8e669 | ||
|
|
be572755a9 | ||
|
|
393e1c6481 | ||
|
|
539696e84a | ||
|
|
6ecfc10b8c | ||
|
|
1c7bab33e6 | ||
|
|
b0cdb308bd | ||
|
|
9d61a37945 | ||
|
|
c4bd38cb9e | ||
|
|
2f37355d77 | ||
|
|
59a132fd6b | ||
|
|
9c3bd7dc20 | ||
|
|
d73d312882 | ||
|
|
3361fabfc4 | ||
|
|
030682c754 | ||
|
|
3029e69767 | ||
|
|
7dcc717017 | ||
|
|
9825506ab7 |
10
.github/CONTRIBUTOR_GUIDE/ct/AppName.md
vendored
10
.github/CONTRIBUTOR_GUIDE/ct/AppName.md
vendored
@@ -171,7 +171,7 @@ if [[ ! -d /opt/snipe-it ]]; then
|
|||||||
|
|
||||||
### 3.3 **Check version**
|
### 3.3 **Check version**
|
||||||
|
|
||||||
- Befoer updating, check if a new version exists.
|
- Before updating, check if a new version exists.
|
||||||
- We use the `${APPLICATION}_version.txt` file created in `/opt` during the install to compare new versions against the currently installed version.
|
- We use the `${APPLICATION}_version.txt` file created in `/opt` during the install to compare new versions against the currently installed version.
|
||||||
|
|
||||||
Example with a Github Release:
|
Example with a Github Release:
|
||||||
@@ -241,7 +241,7 @@ Example:
|
|||||||
|
|
||||||
### 3.7 **No update function**
|
### 3.7 **No update function**
|
||||||
|
|
||||||
- In case you can not provide a update function use the following code to provide user feedback.
|
- In case you can not provide an update function use the following code to provide user feedback.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
function update_script() {
|
function update_script() {
|
||||||
@@ -252,7 +252,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_error "Ther is currently no automatic update function for ${APP}."
|
msg_error "There is currently no automatic update function for ${APP}."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -286,6 +286,6 @@ echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|||||||
- [ ] Metadata (author, license) is included at the top.
|
- [ ] Metadata (author, license) is included at the top.
|
||||||
- [ ] Variables follow naming conventions.
|
- [ ] Variables follow naming conventions.
|
||||||
- [ ] Update function exists.
|
- [ ] Update function exists.
|
||||||
- [ ] Update functions checks if app is installed an for new version.
|
- [ ] Update functions checks if app is installed and for new version.
|
||||||
- [ ] Update function up temporary files.
|
- [ ] Update function cleans up temporary files.
|
||||||
- [ ] Script ends with a helpful message for the user to reach the application.
|
- [ ] Script ends with a helpful message for the user to reach the application.
|
||||||
|
|||||||
2
.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
vendored
2
.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
vendored
@@ -46,8 +46,6 @@ function update_script() {
|
|||||||
# Crawling the new version and checking whether an update is required
|
# Crawling the new version and checking whether an update is required
|
||||||
RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
|
RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
|
||||||
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
|
||||||
msg_info "Updating $APP"
|
|
||||||
|
|
||||||
# Stopping Services
|
# Stopping Services
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop [SERVICE_NAME]
|
systemctl stop [SERVICE_NAME]
|
||||||
|
|||||||
@@ -81,6 +81,3 @@ rm -f ${RELEASE}.zip
|
|||||||
$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"
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|||||||
2
.github/CONTRIBUTOR_GUIDE/json/AppName.json
vendored
2
.github/CONTRIBUTOR_GUIDE/json/AppName.json
vendored
@@ -12,7 +12,7 @@
|
|||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": "LINK TO WEBSITE",
|
"website": "LINK TO WEBSITE",
|
||||||
"logo": "LINK TO LOGO",
|
"logo": "LINK TO LOGO",
|
||||||
"description": "Deescription of the app",
|
"description": "Description of the app",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
|
|||||||
@@ -30,8 +30,6 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
||||||
required: true
|
required: true
|
||||||
- label: "This is not a game-related request."
|
|
||||||
required: true
|
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: "Thanks for submitting your request! The team will review it and reach out if we need more information."
|
value: "Thanks for submitting your request! The team will review it and reach out if we need more information."
|
||||||
|
|||||||
11
.github/autolabeler-config.json
vendored
11
.github/autolabeler-config.json
vendored
@@ -23,7 +23,7 @@
|
|||||||
{
|
{
|
||||||
"fileStatus": "modified",
|
"fileStatus": "modified",
|
||||||
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
||||||
"excludeGlobs": ["misc/build.func", "misc/install.func"]
|
"excludeGlobs": ["misc/build.func", "misc/install.func", "misc/api.func"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"delete script": [
|
"delete script": [
|
||||||
@@ -51,13 +51,20 @@
|
|||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
|
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
|
||||||
|
"excludeGlobs": ["misc/api.func"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api": [
|
||||||
|
{
|
||||||
|
"fileStatus": null,
|
||||||
|
"includeGlobs": ["api/**", "misc/api.func"],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"high risk": [
|
"high risk": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["misc/build.func", "misc/install.func"],
|
"includeGlobs": ["misc/build.func", "misc/install.func", "ct/create_lxc.sh"],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
4
.github/changelog-pr-config.json
vendored
4
.github/changelog-pr-config.json
vendored
@@ -23,6 +23,10 @@
|
|||||||
"title": "🧰 Maintenance",
|
"title": "🧰 Maintenance",
|
||||||
"labels": ["maintenance"]
|
"labels": ["maintenance"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "📡 API",
|
||||||
|
"labels": ["api"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "❔ Unlabelled",
|
"title": "❔ Unlabelled",
|
||||||
"labels": []
|
"labels": []
|
||||||
|
|||||||
31
.github/pull_request_template.md
vendored
31
.github/pull_request_template.md
vendored
@@ -1,28 +1,25 @@
|
|||||||
## ✍️ Description
|
## ✍️ Description
|
||||||
|
<!-- Provide a clear and concise description of your changes. -->
|
||||||
|
|
||||||
|
|
||||||
|
## 🔗 Related PR / Discussion / Issue
|
||||||
|
Link: #
|
||||||
|
|
||||||
|
|
||||||
- - -
|
|
||||||
- Related Issue: #
|
|
||||||
- Related PR: #
|
|
||||||
- Related Discussion: #
|
|
||||||
- - -
|
|
||||||
|
|
||||||
|
|
||||||
## ✅ Prerequisites
|
## ✅ Prerequisites
|
||||||
The following steps must be completed for the pull request to be considered:
|
Before this PR can be reviewed, the following must be completed:
|
||||||
- [] Self-review performed (I have reviewed my code to ensure it follows established patterns and conventions.)
|
- [] **Self-review performed** – Code follows established patterns and conventions.
|
||||||
- [] Testing performed (I have thoroughly tested my changes and verified expected functionality.)
|
- [] **Testing performed** – Changes have been thoroughly tested and verified.
|
||||||
|
|
||||||
|
|
||||||
## 🛠️ Type of Change
|
## 🛠️ Type of Change
|
||||||
Please check the relevant options:
|
Select all that apply:
|
||||||
- [] Bug fix (non-breaking change that resolves an issue)
|
- [] 🐞 **Bug fix** – Resolves an issue without breaking functionality.
|
||||||
- [] New feature (non-breaking change that adds functionality)
|
- [] ✨ **New feature** – Adds new, non-breaking functionality.
|
||||||
- [] Breaking change (fix or feature that would cause existing functionality to change unexpectedly)
|
- [] 💥 **Breaking change** – Alters existing functionality in a way that may require updates.
|
||||||
- [] New script (a fully functional and thoroughly tested script or set of scripts)
|
- [] 🆕 **New script** – A fully functional and tested script or script set.
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
## 📋 Additional Information (optional)
|
## 📋 Additional Information (optional)
|
||||||
Provide any extra context or screenshots about the feature or fix here.
|
<!-- Provide extra context, screenshots, or references if needed. -->
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,13 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.APP_ID }}
|
||||||
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
# Step 1: Checkout repository
|
# Step 1: Checkout repository
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -71,7 +78,7 @@ jobs:
|
|||||||
--base main \
|
--base main \
|
||||||
--label "automated pr"
|
--label "automated pr"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|
||||||
- name: Approve pull request
|
- name: Approve pull request
|
||||||
if: env.changed == 'true'
|
if: env.changed == 'true'
|
||||||
|
|||||||
46
.github/workflows/changelog-pr.yml
vendored
46
.github/workflows/changelog-pr.yml
vendored
@@ -30,15 +30,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Get latest dates in changelog
|
- name: Get latest dates in changelog
|
||||||
run: |
|
run: |
|
||||||
# Extract the latest and second latest dates from changelog
|
# Extrahiere die neuesten zwei Daten aus dem Changelog
|
||||||
DATES=$(grep '^## [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' CHANGELOG.md | head -n 2 | awk '{print $2}')
|
DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
|
||||||
|
|
||||||
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
||||||
SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
|
SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
|
||||||
TODAY=$(date -u +%Y-%m-%d)
|
TODAY=$(date -u +%Y-%m-%d)
|
||||||
|
|
||||||
echo "TODAY=$TODAY" >> $GITHUB_ENV
|
echo "TODAY=$TODAY" >> $GITHUB_ENV
|
||||||
if [ "$LATEST_DATE" == "$TODAY" ]; then
|
if [[ "$LATEST_DATE" == "$TODAY" ]]; then
|
||||||
echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
|
echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
|
echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
|
||||||
@@ -55,7 +55,7 @@ jobs:
|
|||||||
const configPath = path.resolve(process.env.CONFIG_PATH);
|
const configPath = path.resolve(process.env.CONFIG_PATH);
|
||||||
const fileContent = await fs.readFile(configPath, 'utf-8');
|
const fileContent = await fs.readFile(configPath, 'utf-8');
|
||||||
const changelogConfig = JSON.parse(fileContent);
|
const changelogConfig = JSON.parse(fileContent);
|
||||||
const categorizedPRs = changelogConfig.map((obj) => ({ ...obj, notes: [] }));
|
const categorizedPRs = changelogConfig.map(obj => ({ ...obj, notes: [] }));
|
||||||
|
|
||||||
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
|
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
|
||||||
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
||||||
@@ -70,18 +70,16 @@ jobs:
|
|||||||
per_page: 100,
|
per_page: 100,
|
||||||
});
|
});
|
||||||
|
|
||||||
pulls.filter((pr) =>
|
pulls.filter(pr =>
|
||||||
pr.merged_at &&
|
pr.merged_at &&
|
||||||
new Date(pr.merged_at) > latestDateInChangelog &&
|
new Date(pr.merged_at) > latestDateInChangelog &&
|
||||||
!pr.labels.some((label) => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
|
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
|
||||||
).forEach((pr) => {
|
).forEach(pr => {
|
||||||
const prLabels = pr.labels.map((label) => label.name.toLowerCase());
|
const prLabels = pr.labels.map(label => label.name.toLowerCase());
|
||||||
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
||||||
|
|
||||||
for (const { labels, notes } of categorizedPRs) {
|
for (const { labels, notes } of categorizedPRs) {
|
||||||
const prHasCategoryLabel = labels.some((label) => prLabels.includes(label));
|
if (labels.length === 0 || labels.some(label => prLabels.includes(label))) {
|
||||||
const isUnlabelledCategory = labels.length === 0;
|
|
||||||
if (prHasCategoryLabel || isUnlabelledCategory) {
|
|
||||||
notes.push(prNote);
|
notes.push(prNote);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -102,7 +100,7 @@ jobs:
|
|||||||
const changelogPath = path.resolve('CHANGELOG.md');
|
const changelogPath = path.resolve('CHANGELOG.md');
|
||||||
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
||||||
|
|
||||||
let newReleaseNotes = `## ${today}\n\n### Changed\n\n`;
|
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
|
||||||
for (const { title, notes } of categorizedPRs) {
|
for (const { title, notes } of categorizedPRs) {
|
||||||
if (notes.length > 0) {
|
if (notes.length > 0) {
|
||||||
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
|
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
|
||||||
@@ -112,21 +110,21 @@ jobs:
|
|||||||
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
|
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
|
||||||
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
|
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
|
||||||
|
|
||||||
// Replace todays release notes or insert release notes above previous release notes
|
// Ersetze oder füge Release Notes ein
|
||||||
const regex = changelogIncludesTodaysReleaseNotes ?
|
const regex = changelogIncludesTodaysReleaseNotes
|
||||||
new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") :
|
? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs")
|
||||||
new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
|
: new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
|
||||||
|
|
||||||
const newChangelogContent = changelogContent.replace(regex, newReleaseNotes)
|
const newChangelogContent = changelogContent.replace(regex, newReleaseNotes);
|
||||||
await fs.writeFile(changelogPath, newChangelogContent);
|
await fs.writeFile(changelogPath, newChangelogContent);
|
||||||
|
|
||||||
- name: Check if there are any changes
|
- name: Check for changes
|
||||||
id: verify-diff
|
id: verify-diff
|
||||||
run: |
|
run: |
|
||||||
git diff --quiet . || echo "changed=true" >> $GITHUB_OUTPUT
|
git diff --quiet . || echo "changed=true" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Commit and push changes to separate branch
|
- name: Commit and push changes
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name "github-actions[bot]"
|
git config --global user.name "github-actions[bot]"
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
@@ -136,7 +134,7 @@ jobs:
|
|||||||
git push origin $BRANCH_NAME --force
|
git push origin $BRANCH_NAME --force
|
||||||
|
|
||||||
- name: Create pull request if not exists
|
- name: Create pull request if not exists
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
@@ -150,7 +148,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Approve pull request
|
- name: Approve pull request
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
@@ -160,7 +158,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Re-approve pull request after update
|
- name: Re-approve pull request after update
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
139
.github/workflows/script-test.yml
vendored
Normal file
139
.github/workflows/script-test.yml
vendored
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
name: Run Scripts on PVE Node
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- 'install/*.sh'
|
||||||
|
- 'ct/*.sh'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-install-script:
|
||||||
|
runs-on: pvenode
|
||||||
|
steps:
|
||||||
|
- name: Checkout PR branch
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Add Git safe directory
|
||||||
|
run: |
|
||||||
|
git config --global --add safe.directory /__w/ProxmoxVE/ProxmoxVE
|
||||||
|
|
||||||
|
- name: Set up GH_TOKEN
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
echo "GH_TOKEN=${GH_TOKEN}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Get changed files in PR
|
||||||
|
id: changed-files
|
||||||
|
run: |
|
||||||
|
CHANGED_FILES=$(gh pr diff --name-only ${{ github.event.pull_request.number }})
|
||||||
|
CHANGED_FILES=$(echo "$CHANGED_FILES" | tr '\n' ' ')
|
||||||
|
echo "Changed files: $CHANGED_FILES"
|
||||||
|
echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Get scripts
|
||||||
|
id: check-install-script
|
||||||
|
run: |
|
||||||
|
ALL_FILES=()
|
||||||
|
ADDED_FILES=()
|
||||||
|
for FILE in ${{ env.SCRIPT }}; do
|
||||||
|
if [[ $FILE =~ ^install/.*-install\.sh$ ]] || [[ $FILE =~ ^ct/.*\.sh$ ]]; then
|
||||||
|
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
|
||||||
|
if [[ ! " ${ADDED_FILES[@]} " =~ " $STRIPPED_NAME " ]]; then
|
||||||
|
ALL_FILES+=("$FILE")
|
||||||
|
ADDED_FILES+=("$STRIPPED_NAME") # Mark this base file as added (without the path)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
ALL_FILES=$(echo "${ALL_FILES[@]}" | xargs)
|
||||||
|
echo "$ALL_FILES"
|
||||||
|
echo "ALL_FILES=$ALL_FILES" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Run scripts
|
||||||
|
id: run-install
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
set +e
|
||||||
|
#run for each files in /ct
|
||||||
|
for FILE in ${{ env.ALL_FILES }}; do
|
||||||
|
echo "Running: $FILE"
|
||||||
|
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
|
||||||
|
if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
|
||||||
|
CT_SCRIPT="ct/$STRIPPED_NAME.sh"
|
||||||
|
if [[ ! -f $CT_SCRIPT ]]; then
|
||||||
|
echo "No CT script found for $STRIPPED_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Found CT script for $STRIPPED_NAME"
|
||||||
|
chmod +x "$CT_SCRIPT"
|
||||||
|
RUNNING_FILE=$CT_SCRIPT
|
||||||
|
elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then
|
||||||
|
INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh"
|
||||||
|
if [[ ! -f $INSTALL_SCRIPT ]]; then
|
||||||
|
echo "No install script found for $STRIPPED_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Found install script for $STRIPPED_NAME"
|
||||||
|
chmod +x "$INSTALL_SCRIPT"
|
||||||
|
RUNNING_FILE=$FILE
|
||||||
|
fi
|
||||||
|
git checkout origin/main .github/workflows/scripts/app-test/pr-build.func
|
||||||
|
git checkout origin/main .github/workflows/scripts/app-test/pr-install.func
|
||||||
|
git checkout origin/main .github/workflows/scripts/app-test/pr-alpine-install.func
|
||||||
|
git checkout origin/main .github/workflows/scripts/app-test/pr-create-lxc.sh
|
||||||
|
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
|
||||||
|
chmod +x $RUNNING_FILE
|
||||||
|
chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
|
||||||
|
chmod +x .github/workflows/scripts/app-test/pr-install.func
|
||||||
|
chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
|
||||||
|
chmod +x .github/workflows/scripts/app-test/pr-build.func
|
||||||
|
|
||||||
|
ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
|
||||||
|
echo "Finished running $FILE"
|
||||||
|
if [ -n "$ERROR_MSG" ]; then
|
||||||
|
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
|
||||||
|
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
set -e # Restore exit-on-error
|
||||||
|
|
||||||
|
- name: Cleanup PVE Node
|
||||||
|
run: |
|
||||||
|
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}' | awk '{print $1}')
|
||||||
|
|
||||||
|
for container_id in $containers; do
|
||||||
|
status=$(pct status $container_id | awk '{print $2}')
|
||||||
|
if [[ $status == "running" ]]; then
|
||||||
|
pct stop $container_id
|
||||||
|
pct destroy $container_id
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Post error comments
|
||||||
|
run: |
|
||||||
|
ERROR="false"
|
||||||
|
SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line"
|
||||||
|
for FILE in ${{ env.ALL_FILES }}; do
|
||||||
|
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
|
||||||
|
if [[ ! -f result_$STRIPPED_NAME.log ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
ERROR_MSG=$(cat result_$STRIPPED_NAME.log)
|
||||||
|
|
||||||
|
if [ -n "$ERROR_MSG" ]; then
|
||||||
|
CLEANED_ERROR_MSG=$(echo "$ERROR_MSG" | sed "s|$SEARCH_LINE.*||")
|
||||||
|
echo "Posting error message for $FILE"
|
||||||
|
echo ${CLEANED_ERROR_MSG}
|
||||||
|
gh pr comment ${{ github.event.pull_request.number }} \
|
||||||
|
--body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>"
|
||||||
|
|
||||||
|
ERROR="true"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "ERROR=$ERROR" >> $GITHUB_ENV
|
||||||
|
- name: Fail if error
|
||||||
|
if: ${{ env.ERROR }} == 'true'
|
||||||
|
run: exit 1
|
||||||
88
.github/workflows/scripts/app-test/pr-alpine-install.func
vendored
Normal file
88
.github/workflows/scripts/app-test/pr-alpine-install.func
vendored
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
color() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
catch_errors() {
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
error_handler() {
|
||||||
|
local line_number="$1"
|
||||||
|
local command="$2"
|
||||||
|
SCRIPT_NAME=$(basename "$0")
|
||||||
|
local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command $command"
|
||||||
|
echo -e "\n$error_message"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
verb_ip6() {
|
||||||
|
STD=""
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_info() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -ne "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_ok() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_error() {
|
||||||
|
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
RETRY_NUM=10
|
||||||
|
RETRY_EVERY=3
|
||||||
|
i=$RETRY_NUM
|
||||||
|
|
||||||
|
setting_up_container() {
|
||||||
|
while [ $i -gt 0 ]; do
|
||||||
|
if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo 1>&2 -en "No Network! "
|
||||||
|
sleep $RETRY_EVERY
|
||||||
|
i=$((i - 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then
|
||||||
|
echo 1>&2 -e "\n No Network After $RETRY_NUM Tries"
|
||||||
|
echo -e "Check Network Settings"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
msg_ok "Set up Container OS"
|
||||||
|
msg_ok "Network Connected: $(hostname -i)"
|
||||||
|
}
|
||||||
|
|
||||||
|
network_check() {
|
||||||
|
RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }')
|
||||||
|
if [[ -z "$RESOLVEDIP" ]]; then msg_error "DNS Lookup Failure"; else msg_ok "DNS Resolved github.com to $RESOLVEDIP"; fi
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
|
update_os() {
|
||||||
|
msg_info "Updating Container OS"
|
||||||
|
apk update
|
||||||
|
apk upgrade
|
||||||
|
msg_ok "Updated Container OS"
|
||||||
|
}
|
||||||
|
|
||||||
|
motd_ssh() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
customize() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
259
.github/workflows/scripts/app-test/pr-build.func
vendored
Normal file
259
.github/workflows/scripts/app-test/pr-build.func
vendored
Normal file
@@ -0,0 +1,259 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
variables() {
|
||||||
|
NSAPP=$(echo ${APP,,} | tr -d ' ')
|
||||||
|
var_install="${NSAPP}-install"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
timezone=$(cat /etc/timezone)
|
||||||
|
header_info(){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
base_settings() {
|
||||||
|
|
||||||
|
CT_TYPE="1"
|
||||||
|
DISK_SIZE="4"
|
||||||
|
CORE_COUNT="1"
|
||||||
|
RAM_SIZE="1024"
|
||||||
|
VERBOSE="${1:-no}"
|
||||||
|
PW=""
|
||||||
|
CT_ID=$NEXTID
|
||||||
|
HN="Testing"
|
||||||
|
BRG="vmbr0"
|
||||||
|
NET="dhcp"
|
||||||
|
GATE=""
|
||||||
|
APT_CACHER=""
|
||||||
|
APT_CACHER_IP=""
|
||||||
|
DISABLEIP6="no"
|
||||||
|
MTU=""
|
||||||
|
SD=""
|
||||||
|
NS=""
|
||||||
|
MAC=""
|
||||||
|
VLAN=""
|
||||||
|
SSH="no"
|
||||||
|
SSH_AUTHORIZED_KEY=""
|
||||||
|
TAGS="community-script;"
|
||||||
|
|
||||||
|
|
||||||
|
CT_TYPE=${var_unprivileged:-$CT_TYPE}
|
||||||
|
DISK_SIZE=${var_disk:-$DISK_SIZE}
|
||||||
|
CORE_COUNT=${var_cpu:-$CORE_COUNT}
|
||||||
|
RAM_SIZE=${var_ram:-$RAM_SIZE}
|
||||||
|
VERB=${var_verbose:-$VERBOSE}
|
||||||
|
TAGS="${TAGS}${var_tags:-}"
|
||||||
|
|
||||||
|
if [ -z "$var_os" ]; then
|
||||||
|
var_os="debian"
|
||||||
|
fi
|
||||||
|
if [ -z "$var_version" ]; then
|
||||||
|
var_version="12"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
color() {
|
||||||
|
# Colors
|
||||||
|
YW=$(echo "\033[33m")
|
||||||
|
YWB=$(echo "\033[93m")
|
||||||
|
BL=$(echo "\033[36m")
|
||||||
|
RD=$(echo "\033[01;31m")
|
||||||
|
BGN=$(echo "\033[4;92m")
|
||||||
|
GN=$(echo "\033[1;92m")
|
||||||
|
DGN=$(echo "\033[32m")
|
||||||
|
|
||||||
|
# Formatting
|
||||||
|
CL=$(echo "\033[m")
|
||||||
|
UL=$(echo "\033[4m")
|
||||||
|
BOLD=$(echo "\033[1m")
|
||||||
|
BFR="\\r\\033[K"
|
||||||
|
HOLD=" "
|
||||||
|
TAB=" "
|
||||||
|
|
||||||
|
# Icons
|
||||||
|
CM="${TAB}✔️${TAB}${CL}"
|
||||||
|
CROSS="${TAB}✖️${TAB}${CL}"
|
||||||
|
INFO="${TAB}💡${TAB}${CL}"
|
||||||
|
OS="${TAB}🖥️${TAB}${CL}"
|
||||||
|
OSVERSION="${TAB}🌟${TAB}${CL}"
|
||||||
|
CONTAINERTYPE="${TAB}📦${TAB}${CL}"
|
||||||
|
DISKSIZE="${TAB}💾${TAB}${CL}"
|
||||||
|
CPUCORE="${TAB}🧠${TAB}${CL}"
|
||||||
|
RAMSIZE="${TAB}🛠️${TAB}${CL}"
|
||||||
|
SEARCH="${TAB}🔍${TAB}${CL}"
|
||||||
|
VERIFYPW="${TAB}🔐${TAB}${CL}"
|
||||||
|
CONTAINERID="${TAB}🆔${TAB}${CL}"
|
||||||
|
HOSTNAME="${TAB}🏠${TAB}${CL}"
|
||||||
|
BRIDGE="${TAB}🌉${TAB}${CL}"
|
||||||
|
NETWORK="${TAB}📡${TAB}${CL}"
|
||||||
|
GATEWAY="${TAB}🌐${TAB}${CL}"
|
||||||
|
DISABLEIPV6="${TAB}🚫${TAB}${CL}"
|
||||||
|
DEFAULT="${TAB}⚙️${TAB}${CL}"
|
||||||
|
MACADDRESS="${TAB}🔗${TAB}${CL}"
|
||||||
|
VLANTAG="${TAB}🏷️${TAB}${CL}"
|
||||||
|
ROOTSSH="${TAB}🔑${TAB}${CL}"
|
||||||
|
CREATING="${TAB}🚀${TAB}${CL}"
|
||||||
|
ADVANCED="${TAB}🧩${TAB}${CL}"
|
||||||
|
}
|
||||||
|
|
||||||
|
catch_errors() {
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
|
}
|
||||||
|
|
||||||
|
# This function handles errors
|
||||||
|
error_handler() {
|
||||||
|
local line_number="$1"
|
||||||
|
local command="$2"
|
||||||
|
SCRIPT_NAME=$(basename "$0")
|
||||||
|
local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command $command"
|
||||||
|
echo -e "\n$error_message"
|
||||||
|
exit "$error_message"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
msg_info() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -ne "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_ok() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_error() {
|
||||||
|
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
start(){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
build_container() {
|
||||||
|
|
||||||
|
if [ "$CT_TYPE" == "1" ]; then
|
||||||
|
FEATURES="keyctl=1,nesting=1"
|
||||||
|
else
|
||||||
|
FEATURES="nesting=1"
|
||||||
|
fi
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
pushd $TEMP_DIR >/dev/null
|
||||||
|
if [ "$var_os" == "alpine" ]; then
|
||||||
|
export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-alpine-install.func)"
|
||||||
|
else
|
||||||
|
export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-install.func)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export CACHER="$APT_CACHER"
|
||||||
|
export CACHER_IP="$APT_CACHER_IP"
|
||||||
|
export tz=""
|
||||||
|
export DISABLEIPV6="$DISABLEIP6"
|
||||||
|
export APPLICATION="$APP"
|
||||||
|
export app="$NSAPP"
|
||||||
|
export PASSWORD="$PW"
|
||||||
|
export VERBOSE="$VERB"
|
||||||
|
export SSH_ROOT="${SSH}"
|
||||||
|
export SSH_AUTHORIZED_KEY
|
||||||
|
export CTID="$CT_ID"
|
||||||
|
export CTTYPE="$CT_TYPE"
|
||||||
|
export PCT_OSTYPE="$var_os"
|
||||||
|
export PCT_OSVERSION="$var_version"
|
||||||
|
export PCT_DISK_SIZE="$DISK_SIZE"
|
||||||
|
export tz="$timezone"
|
||||||
|
export PCT_OPTIONS="
|
||||||
|
-features $FEATURES
|
||||||
|
-hostname $HN
|
||||||
|
-tags $TAGS
|
||||||
|
$SD
|
||||||
|
$NS
|
||||||
|
-net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN$MTU
|
||||||
|
-onboot 1
|
||||||
|
-cores $CORE_COUNT
|
||||||
|
-memory $RAM_SIZE
|
||||||
|
-unprivileged $CT_TYPE
|
||||||
|
$PW
|
||||||
|
"
|
||||||
|
echo "Container ID: $CTID"
|
||||||
|
|
||||||
|
|
||||||
|
# This executes create_lxc.sh and creates the container and .conf file
|
||||||
|
bash /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-create-lxc.sh
|
||||||
|
|
||||||
|
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
|
||||||
|
if [ "$CT_TYPE" == "0" ]; then
|
||||||
|
cat <<EOF >>$LXC_CONFIG
|
||||||
|
# USB passthrough
|
||||||
|
lxc.cgroup2.devices.allow: a
|
||||||
|
lxc.cap.drop:
|
||||||
|
lxc.cgroup2.devices.allow: c 188:* rwm
|
||||||
|
lxc.cgroup2.devices.allow: c 189:* rwm
|
||||||
|
lxc.mount.entry: /dev/serial/by-id dev/serial/by-id none bind,optional,create=dir
|
||||||
|
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
|
||||||
|
lxc.mount.entry: /dev/ttyUSB1 dev/ttyUSB1 none bind,optional,create=file
|
||||||
|
lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
|
||||||
|
lxc.mount.entry: /dev/ttyACM1 dev/ttyACM1 none bind,optional,create=file
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CT_TYPE" == "0" ]; then
|
||||||
|
if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" ]]; then
|
||||||
|
cat <<EOF >>$LXC_CONFIG
|
||||||
|
# VAAPI hardware transcoding
|
||||||
|
lxc.cgroup2.devices.allow: c 226:0 rwm
|
||||||
|
lxc.cgroup2.devices.allow: c 226:128 rwm
|
||||||
|
lxc.cgroup2.devices.allow: c 29:0 rwm
|
||||||
|
lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file
|
||||||
|
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
|
||||||
|
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" ]]; then
|
||||||
|
if [[ -e "/dev/dri/renderD128" ]]; then
|
||||||
|
if [[ -e "/dev/dri/card0" ]]; then
|
||||||
|
cat <<EOF >>$LXC_CONFIG
|
||||||
|
# VAAPI hardware transcoding
|
||||||
|
dev0: /dev/dri/card0,gid=44
|
||||||
|
dev1: /dev/dri/renderD128,gid=104
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat <<EOF >>$LXC_CONFIG
|
||||||
|
# VAAPI hardware transcoding
|
||||||
|
dev0: /dev/dri/card1,gid=44
|
||||||
|
dev1: /dev/dri/renderD128,gid=104
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This starts the container and executes <app>-install.sh
|
||||||
|
msg_info "Starting LXC Container"
|
||||||
|
pct start "$CTID"
|
||||||
|
msg_ok "Started LXC Container"
|
||||||
|
|
||||||
|
if [[ ! -f "/root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh" ]]; then
|
||||||
|
msg_error "No install script found for $APP"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ "$var_os" == "alpine" ]; then
|
||||||
|
sleep 3
|
||||||
|
pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
|
||||||
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
||||||
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
||||||
|
EOF'
|
||||||
|
pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
|
||||||
|
fi
|
||||||
|
lxc-attach -n "$CTID" -- bash -c "$(< /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh)"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
description(){
|
||||||
|
return
|
||||||
|
}
|
||||||
158
.github/workflows/scripts/app-test/pr-create-lxc.sh
vendored
Normal file
158
.github/workflows/scripts/app-test/pr-create-lxc.sh
vendored
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
color() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
catch_errors() {
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
error_handler() {
|
||||||
|
local exit_code="$?"
|
||||||
|
local line_number="$1"
|
||||||
|
local command="$2"
|
||||||
|
local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command"
|
||||||
|
echo -e "\n$error_message"
|
||||||
|
exit 100
|
||||||
|
}
|
||||||
|
verb_ip6() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_info() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -ne "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_ok() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_error() {
|
||||||
|
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
|
||||||
|
if [ -z "$VALIDCT" ]; then
|
||||||
|
msg_error "Unable to detect a valid Container Storage location."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
VALIDTMP=$(pvesm status -content vztmpl | awk 'NR>1')
|
||||||
|
if [ -z "$VALIDTMP" ]; then
|
||||||
|
msg_error "Unable to detect a valid Template Storage location."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
function select_storage() {
|
||||||
|
local CLASS=$1
|
||||||
|
local CONTENT
|
||||||
|
local CONTENT_LABEL
|
||||||
|
case $CLASS in
|
||||||
|
container)
|
||||||
|
CONTENT='rootdir'
|
||||||
|
CONTENT_LABEL='Container'
|
||||||
|
;;
|
||||||
|
template)
|
||||||
|
CONTENT='vztmpl'
|
||||||
|
CONTENT_LABEL='Container template'
|
||||||
|
;;
|
||||||
|
*) false || { msg_error "Invalid storage class."; exit 201; };;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local -a MENU
|
||||||
|
while read -r line; do
|
||||||
|
local TAG=$(echo $line | awk '{print $1}')
|
||||||
|
local TYPE=$(echo $line | awk '{printf "%-10s", $2}')
|
||||||
|
local FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
|
||||||
|
local ITEM="Type: $TYPE Free: $FREE "
|
||||||
|
local OFFSET=2
|
||||||
|
if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
|
||||||
|
local MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
|
||||||
|
fi
|
||||||
|
MENU+=("$TAG" "$ITEM" "OFF")
|
||||||
|
done < <(pvesm status -content $CONTENT | awk 'NR>1')
|
||||||
|
|
||||||
|
if [ $((${#MENU[@]}/3)) -eq 1 ]; then
|
||||||
|
printf ${MENU[0]}
|
||||||
|
else
|
||||||
|
msg_error "STORAGE ISSUES!"
|
||||||
|
exit 202
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; }
|
||||||
|
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; }
|
||||||
|
|
||||||
|
[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; }
|
||||||
|
|
||||||
|
if pct status $CTID &>/dev/null; then
|
||||||
|
echo -e "ID '$CTID' is already in use."
|
||||||
|
unset CTID
|
||||||
|
msg_error "Cannot use ID that is already in use."
|
||||||
|
exit 206
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
TEMPLATE_STORAGE=$(select_storage template) || exit
|
||||||
|
msg_ok "Using $TEMPLATE_STORAGE for Template Storage."
|
||||||
|
|
||||||
|
|
||||||
|
CONTAINER_STORAGE=$(select_storage container) || exit
|
||||||
|
msg_ok "Using $CONTAINER_STORAGE for Container Storage."
|
||||||
|
|
||||||
|
msg_info "Updating LXC Template List"
|
||||||
|
pveam update >/dev/null
|
||||||
|
msg_ok "Updated LXC Template List"
|
||||||
|
|
||||||
|
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
||||||
|
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
|
||||||
|
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; }
|
||||||
|
TEMPLATE="${TEMPLATES[-1]}"
|
||||||
|
|
||||||
|
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
|
||||||
|
|
||||||
|
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
|
||||||
|
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
||||||
|
msg_info "Downloading LXC Template"
|
||||||
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
|
||||||
|
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; }
|
||||||
|
msg_ok "Downloaded LXC Template"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid
|
||||||
|
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid
|
||||||
|
|
||||||
|
|
||||||
|
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
||||||
|
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
|
||||||
|
|
||||||
|
echo "${PCT_OPTIONS[@]}"
|
||||||
|
|
||||||
|
|
||||||
|
msg_info "Creating LXC Container"
|
||||||
|
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||||
|
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
||||||
|
|
||||||
|
msg_ok "Template integrity check completed"
|
||||||
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
|
||||||
|
{ msg_error "A problem occurred while re-downloading the LXC template."; exit 208; }
|
||||||
|
|
||||||
|
msg_ok "Re-downloaded LXC Template"
|
||||||
|
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||||
|
msg_error "A problem occurred while trying to create container after re-downloading template."
|
||||||
|
exit 200
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
msg_ok "LXC Container $CTID was successfully created."
|
||||||
93
.github/workflows/scripts/app-test/pr-install.func
vendored
Normal file
93
.github/workflows/scripts/app-test/pr-install.func
vendored
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
color() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
catch_errors() {
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
|
}
|
||||||
|
|
||||||
|
error_handler() {
|
||||||
|
local line_number="$1"
|
||||||
|
local command="$2"
|
||||||
|
SCRIPT_NAME=$(basename "$0")
|
||||||
|
local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command $command"
|
||||||
|
echo -e "\n$error_message"
|
||||||
|
exit "$error_message"
|
||||||
|
}
|
||||||
|
verb_ip6() {
|
||||||
|
STD=""
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_info() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -ne "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_ok() {
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_error() {
|
||||||
|
|
||||||
|
local msg="$1"
|
||||||
|
echo -e "${msg}\n"
|
||||||
|
}
|
||||||
|
RETRY_NUM=10
|
||||||
|
RETRY_EVERY=3
|
||||||
|
setting_up_container() {
|
||||||
|
sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
|
||||||
|
locale_line=$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print $1}' | head -n 1)
|
||||||
|
echo "LANG=${locale_line}" >/etc/default/locale
|
||||||
|
locale-gen >/dev/null
|
||||||
|
export LANG=${locale_line}
|
||||||
|
echo $tz >/etc/timezone
|
||||||
|
ln -sf /usr/share/zoneinfo/$tz /etc/localtime
|
||||||
|
|
||||||
|
for ((i = RETRY_NUM; i > 0; i--)); do
|
||||||
|
if [ "$(hostname -I)" != "" ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo 1>&2 -en "No Network! "
|
||||||
|
sleep $RETRY_EVERY
|
||||||
|
done
|
||||||
|
if [ "$(hostname -I)" = "" ]; then
|
||||||
|
echo 1>&2 -e "\nNo Network After $RETRY_NUM Tries"
|
||||||
|
echo -e "Check Network Settings"
|
||||||
|
exit 101
|
||||||
|
fi
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
systemctl disable -q --now systemd-networkd-wait-online.service
|
||||||
|
msg_ok "Set up Container OS"
|
||||||
|
msg_ok "Network Connected: $(hostname -I)"
|
||||||
|
}
|
||||||
|
|
||||||
|
network_check() {
|
||||||
|
RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }')
|
||||||
|
if [[ -z "$RESOLVEDIP" ]]; then msg_error "DNS Lookup Failure"; else msg_ok "DNS Resolved github.com to $RESOLVEDIP"; fi
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
|
update_os() {
|
||||||
|
msg_info "Updating Container OS"
|
||||||
|
apt-get update
|
||||||
|
apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
msg_ok "Updated Container OS"
|
||||||
|
}
|
||||||
|
|
||||||
|
motd_ssh() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
customize() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
20
.github/workflows/scripts/update-json.sh
vendored
Normal file
20
.github/workflows/scripts/update-json.sh
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
FILE=$1
|
||||||
|
TODAY=$(date -u +"%Y-%m-%d")
|
||||||
|
|
||||||
|
if [[ -z "$FILE" ]]; then
|
||||||
|
echo "No file specified. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$FILE" ]]; then
|
||||||
|
echo "File $FILE not found. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DATE_IN_JSON=$(jq -r '.date_created' "$FILE" 2>/dev/null || echo "")
|
||||||
|
|
||||||
|
if [[ "$DATE_IN_JSON" != "$TODAY" ]]; then
|
||||||
|
jq --arg date "$TODAY" '.date_created = $date' "$FILE" > tmp.json && mv tmp.json "$FILE"
|
||||||
|
fi
|
||||||
102
.github/workflows/update_json_date.yml.bak
vendored
102
.github/workflows/update_json_date.yml.bak
vendored
@@ -1,48 +1,88 @@
|
|||||||
name: Update JSON Date
|
name: Auto Update JSON-Date
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
push:
|
||||||
types: [opened, synchronize, reopened]
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
list-files:
|
update-json-dates:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout PR Branch
|
- name: Generate a token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.APP_ID }}
|
||||||
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.ref }}
|
fetch-depth: 0 # Full history for proper detection
|
||||||
|
|
||||||
- name: Fetch PR changes
|
- name: Set up Git
|
||||||
run: |
|
run: |
|
||||||
git remote add fork https://github.com/${{ github.event.pull_request.head.repo.full_name }}.git
|
git config --global user.name "GitHub Actions"
|
||||||
git fetch fork ${{ github.event.pull_request.head.ref }}:pullreq
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
git checkout pullreq
|
|
||||||
|
|
||||||
- name: Update JSON
|
- name: Find JSON files with incorrect date_created
|
||||||
id: changed-files
|
id: find_wrong_json
|
||||||
run: |
|
run: |
|
||||||
FILES=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files --jq '.[].filename' | tr '\n' ' ')
|
TODAY=$(date -u +"%Y-%m-%d")
|
||||||
echo "changed_files=${FILES}"
|
> incorrect_json_files.txt
|
||||||
for FILE in $FILES; do
|
|
||||||
if [[ "$FILE" =~ /(.*)\.json ]]; then
|
for FILE in json/*.json; do
|
||||||
NAME="${BASH_REMATCH[1]}"
|
if [[ -f "$FILE" ]]; then
|
||||||
else
|
DATE_IN_JSON=$(jq -r '.date_created' "$FILE" 2>/dev/null || echo "")
|
||||||
echo "no new JSON in ${FILES}"
|
|
||||||
continue
|
if [[ "$DATE_IN_JSON" != "$TODAY" ]]; then
|
||||||
|
echo "$FILE" >> incorrect_json_files.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
JSON_FILE="json/${NAME}.json"
|
|
||||||
if [[ -f "$JSON_FILE" ]]; then
|
|
||||||
echo "Updating date_created in $JSON_FILE"
|
|
||||||
jq --arg date "$(date +%Y-%m-%d)" '.date_created = $date' "$JSON_FILE" > tmp.json && mv tmp.json "$JSON_FILE"
|
|
||||||
else
|
|
||||||
echo "JSON file $FILES not found"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
git config --global user.name "github-actions[bot]"
|
if [[ -s incorrect_json_files.txt ]]; then
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
echo "CHANGED=true" >> $GITHUB_ENV
|
||||||
git diff --exit-code || git commit -am "Updating Dates in affected JSON files."
|
else
|
||||||
git push
|
echo "CHANGED=false" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Run update script
|
||||||
|
if: env.CHANGED == 'true'
|
||||||
|
run: |
|
||||||
|
chmod +x .github/workflows/scripts/update-json.sh
|
||||||
|
while read -r FILE; do
|
||||||
|
.github/workflows/scripts/update-json.sh "$FILE"
|
||||||
|
done < incorrect_json_files.txt
|
||||||
|
|
||||||
|
- name: Commit and create PR if changes exist
|
||||||
|
if: env.CHANGED == 'true'
|
||||||
|
run: |
|
||||||
|
git add json/*.json
|
||||||
|
git commit -m "Auto-update date_created in incorrect JSON files"
|
||||||
|
git checkout -b pr-fix-json-dates
|
||||||
|
git push origin pr-fix-json-dates --force
|
||||||
|
gh pr create --title "[core] Fix incorrect JSON date_created fields" \
|
||||||
|
--body "This PR is auto-generated to fix incorrect `date_created` fields in JSON files." \
|
||||||
|
--head pr-fix-json-dates \
|
||||||
|
--base main \
|
||||||
|
--label "automated pr"
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|
||||||
|
- name: Approve pull request
|
||||||
|
if: env.CHANGED == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
PR_NUMBER=$(gh pr list --head "pr-fix-json-dates" --json number --jq '.[].number')
|
||||||
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
|
gh pr review $PR_NUMBER --approve
|
||||||
|
fi
|
||||||
|
|||||||
164
CHANGELOG.md
164
CHANGELOG.md
@@ -17,6 +17,170 @@ 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
|
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-02-12
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Frigate: Use Fixed Version 14 [@MickLesk](https://github.com/MickLesk) ([#2288](https://github.com/community-scripts/ProxmoxVE/pull/2288))
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Kometa [@tremor021](https://github.com/tremor021) ([#2281](https://github.com/community-scripts/ProxmoxVE/pull/2281))
|
||||||
|
- New Script: Excalidraw [@tremor021](https://github.com/tremor021) ([#2285](https://github.com/community-scripts/ProxmoxVE/pull/2285))
|
||||||
|
- New Script: Graylog [@tremor021](https://github.com/tremor021) ([#2270](https://github.com/community-scripts/ProxmoxVE/pull/2270))
|
||||||
|
- New Script: TasmoCompiler [@tremor021](https://github.com/tremor021) ([#2235](https://github.com/community-scripts/ProxmoxVE/pull/2235))
|
||||||
|
- New script: cross-seed [@jmatraszek](https://github.com/jmatraszek) ([#2186](https://github.com/community-scripts/ProxmoxVE/pull/2186))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- FIX: Frigate - remove bad variable [@tremor021](https://github.com/tremor021) ([#2323](https://github.com/community-scripts/ProxmoxVE/pull/2323))
|
||||||
|
- Fix: Kometa - Fix wrong web site address [@tremor021](https://github.com/tremor021) ([#2318](https://github.com/community-scripts/ProxmoxVE/pull/2318))
|
||||||
|
- Fix: var_tags instead of TAGS in some CT's [@MickLesk](https://github.com/MickLesk) ([#2310](https://github.com/community-scripts/ProxmoxVE/pull/2310))
|
||||||
|
- Update ubuntu2410-vm.sh: Fix typo in API call. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2305](https://github.com/community-scripts/ProxmoxVE/pull/2305))
|
||||||
|
- Fix: Myspeed Installation (g++) [@MickLesk](https://github.com/MickLesk) ([#2308](https://github.com/community-scripts/ProxmoxVE/pull/2308))
|
||||||
|
- Fix: Pingvin wrong variable used for version tracking [@alberanid](https://github.com/alberanid) ([#2302](https://github.com/community-scripts/ProxmoxVE/pull/2302))
|
||||||
|
- Fix: SQL Server 2022 - remove unnecessary sudo [@tremor021](https://github.com/tremor021) ([#2282](https://github.com/community-scripts/ProxmoxVE/pull/2282))
|
||||||
|
- fix: frigate pin version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2296](https://github.com/community-scripts/ProxmoxVE/pull/2296))
|
||||||
|
- Fix changedetection: Correct Browser install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2277](https://github.com/community-scripts/ProxmoxVE/pull/2277))
|
||||||
|
- Paperless-AI: add dependency "make" [@MickLesk](https://github.com/MickLesk) ([#2289](https://github.com/community-scripts/ProxmoxVE/pull/2289))
|
||||||
|
- Fix: Typo OPNsense VM [@chpego](https://github.com/chpego) ([#2291](https://github.com/community-scripts/ProxmoxVE/pull/2291))
|
||||||
|
- Fix: CraftyControler fix java default [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2286](https://github.com/community-scripts/ProxmoxVE/pull/2286))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Fix: some jsons (debian instead Debian in OS) [@MickLesk](https://github.com/MickLesk) ([#2311](https://github.com/community-scripts/ProxmoxVE/pull/2311))
|
||||||
|
- Website: Add After-Install Note for Ubuntu VM 22.04/24.04/24.10 and Debian VM [@MickLesk](https://github.com/MickLesk) ([#2307](https://github.com/community-scripts/ProxmoxVE/pull/2307))
|
||||||
|
- Fix: duplicate 'VM' name in opnsense-vm.json [@nayzm](https://github.com/nayzm) ([#2293](https://github.com/community-scripts/ProxmoxVE/pull/2293))
|
||||||
|
|
||||||
|
## 2025-02-11
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Opnsense VM [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2097](https://github.com/community-scripts/ProxmoxVE/pull/2097))
|
||||||
|
- New Script: Watcharr [@tremor021](https://github.com/tremor021) ([#2243](https://github.com/community-scripts/ProxmoxVE/pull/2243))
|
||||||
|
- New Script: Suwayomi-Server [@tremor021](https://github.com/tremor021) ([#2139](https://github.com/community-scripts/ProxmoxVE/pull/2139))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix Photoprism: Add defaults.yml for CLI Tool [@MickLesk](https://github.com/MickLesk) ([#2261](https://github.com/community-scripts/ProxmoxVE/pull/2261))
|
||||||
|
- Update Checkmk: include Patch versions in Release grepping [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2264](https://github.com/community-scripts/ProxmoxVE/pull/2264))
|
||||||
|
- Fix: Apache Guacamole Version Crawling - only latest Version [@MickLesk](https://github.com/MickLesk) ([#2258](https://github.com/community-scripts/ProxmoxVE/pull/2258))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Update Komodo icon [@bannert1337](https://github.com/bannert1337) ([#2263](https://github.com/community-scripts/ProxmoxVE/pull/2263))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- Add Workflow to test Scripts [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2269](https://github.com/community-scripts/ProxmoxVE/pull/2269))
|
||||||
|
|
||||||
|
## 2025-02-10
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- [Fix] Filebrowser - Add Static Path for DB [@MickLesk](https://github.com/MickLesk) ([#2207](https://github.com/community-scripts/ProxmoxVE/pull/2207))
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Prometheus Paperless-NGX Exporter [@andygrunwald](https://github.com/andygrunwald) ([#2153](https://github.com/community-scripts/ProxmoxVE/pull/2153))
|
||||||
|
- New Script: Proxmox Mail Gateway [@thost96](https://github.com/thost96) ([#1906](https://github.com/community-scripts/ProxmoxVE/pull/1906))
|
||||||
|
- New Script: FreshRSS [@bvdberg01](https://github.com/bvdberg01) ([#2226](https://github.com/community-scripts/ProxmoxVE/pull/2226))
|
||||||
|
- New Script: Zitadel [@dave-yap](https://github.com/dave-yap) ([#2141](https://github.com/community-scripts/ProxmoxVE/pull/2141))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Feature: Automatic Deletion of choosen LXC's (lxc-delete.sh) [@MickLesk](https://github.com/MickLesk) ([#2228](https://github.com/community-scripts/ProxmoxVE/pull/2228))
|
||||||
|
- Quickfix: Crafty-Controller remove unnecessary \ [@MickLesk](https://github.com/MickLesk) ([#2233](https://github.com/community-scripts/ProxmoxVE/pull/2233))
|
||||||
|
- Fix: Crafty-Controller java versions and set default [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2199](https://github.com/community-scripts/ProxmoxVE/pull/2199))
|
||||||
|
- Feature: Add optional Port for Filebrowser [@MickLesk](https://github.com/MickLesk) ([#2224](https://github.com/community-scripts/ProxmoxVE/pull/2224))
|
||||||
|
- [core] Prevent double spinner [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2203](https://github.com/community-scripts/ProxmoxVE/pull/2203))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Website: Fix Zitadel Logo & Created-Date [@MickLesk](https://github.com/MickLesk) ([#2217](https://github.com/community-scripts/ProxmoxVE/pull/2217))
|
||||||
|
- Fixed URL typo zerotier-one.json [@Divaksh](https://github.com/Divaksh) ([#2206](https://github.com/community-scripts/ProxmoxVE/pull/2206))
|
||||||
|
- evcc.json Clarify the config file location [@mvdw](https://github.com/mvdw) ([#2193](https://github.com/community-scripts/ProxmoxVE/pull/2193))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [gh]: Improve Workflows, Templates, Handling [@MickLesk](https://github.com/MickLesk) ([#2214](https://github.com/community-scripts/ProxmoxVE/pull/2214))
|
||||||
|
- [core] Fix app-header workflow and add API [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2204](https://github.com/community-scripts/ProxmoxVE/pull/2204))
|
||||||
|
- Fix: "read -p" does not support color formatting [@PhoenixEmik](https://github.com/PhoenixEmik) ([#2191](https://github.com/community-scripts/ProxmoxVE/pull/2191))
|
||||||
|
- [API] Add API to vms [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2021](https://github.com/community-scripts/ProxmoxVE/pull/2021))
|
||||||
|
|
||||||
|
## 2025-02-09
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: pbs_microcode.sh [@DonPablo1010](https://github.com/DonPablo1010) ([#2166](https://github.com/community-scripts/ProxmoxVE/pull/2166))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Keep the same hass_config volume for Home Assistant [@genehand](https://github.com/genehand) ([#2160](https://github.com/community-scripts/ProxmoxVE/pull/2160))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Website: Set new Logo for Paperless-AI [@MickLesk](https://github.com/MickLesk) ([#2194](https://github.com/community-scripts/ProxmoxVE/pull/2194))
|
||||||
|
- Fix: Barcode Buddy Logo & Title [@MickLesk](https://github.com/MickLesk) ([#2183](https://github.com/community-scripts/ProxmoxVE/pull/2183))
|
||||||
|
|
||||||
|
## 2025-02-08
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New script: Barcode Buddy [@bvdberg01](https://github.com/bvdberg01) ([#2167](https://github.com/community-scripts/ProxmoxVE/pull/2167))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Actualbudget - salvage the `.migrate` file when upgrading [@bourquep](https://github.com/bourquep) ([#2173](https://github.com/community-scripts/ProxmoxVE/pull/2173))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Update cosmos.json description [@BramSuurdje](https://github.com/BramSuurdje) ([#2162](https://github.com/community-scripts/ProxmoxVE/pull/2162))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- fix typos in CONTRIBUTOR_GUIDE [@thomashondema](https://github.com/thomashondema) ([#2174](https://github.com/community-scripts/ProxmoxVE/pull/2174))
|
||||||
|
|
||||||
|
## 2025-02-07 - 10.000 ⭐
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- [core]: Enhance LXC template handling and improve error recovery [@MickLesk](https://github.com/MickLesk) ([#2128](https://github.com/community-scripts/ProxmoxVE/pull/2128))
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Cosmos [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2120](https://github.com/community-scripts/ProxmoxVE/pull/2120))
|
||||||
|
- New Script: SearXNG [@MickLesk](https://github.com/MickLesk) ([#2123](https://github.com/community-scripts/ProxmoxVE/pull/2123))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Trillium Update Function & Harmonize Installation [@MickLesk](https://github.com/MickLesk) ([#2148](https://github.com/community-scripts/ProxmoxVE/pull/2148))
|
||||||
|
- Fix: Zerotier-One fixed missing dependency [@tremor021](https://github.com/tremor021) ([#2147](https://github.com/community-scripts/ProxmoxVE/pull/2147))
|
||||||
|
- Fix: Openwrt Version checking [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2137](https://github.com/community-scripts/ProxmoxVE/pull/2137))
|
||||||
|
- Fix: PeaNUT Increase HDD & RAM Size [@MickLesk](https://github.com/MickLesk) ([#2127](https://github.com/community-scripts/ProxmoxVE/pull/2127))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Fix: Zerotier json had a bad script path [@tremor021](https://github.com/tremor021) ([#2144](https://github.com/community-scripts/ProxmoxVE/pull/2144))
|
||||||
|
- Fix: Cosmos logo doesnt display on website [@MickLesk](https://github.com/MickLesk) ([#2132](https://github.com/community-scripts/ProxmoxVE/pull/2132))
|
||||||
|
- Fix JSON-Editor [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2121](https://github.com/community-scripts/ProxmoxVE/pull/2121))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [gh]: Following the trend - add star-history in readme [@MickLesk](https://github.com/MickLesk) ([#2135](https://github.com/community-scripts/ProxmoxVE/pull/2135))
|
||||||
|
|
||||||
## 2025-02-06
|
## 2025-02-06
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -91,6 +91,16 @@ If you encounter any issues or have suggestions for improvement, file a new issu
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## ⭐ Star History
|
||||||
|
|
||||||
|
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
|
||||||
|
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
||||||
|
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
|
||||||
## 📜 License
|
## 📜 License
|
||||||
|
|
||||||
This project is licensed under the [MIT License](LICENSE).
|
This project is licensed under the [MIT License](LICENSE).
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="2FAuth"
|
APP="2FAuth"
|
||||||
TAGS="2fa;authenticator"
|
var_tags="2fa;authenticator"
|
||||||
var_cpu="1"
|
var_cpu="1"
|
||||||
var_ram="512"
|
var_ram="512"
|
||||||
var_disk="2"
|
var_disk="2"
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ function update_script() {
|
|||||||
mv *ctual-server-* /opt/actualbudget
|
mv *ctual-server-* /opt/actualbudget
|
||||||
rm -rf /opt/actualbudget/.env
|
rm -rf /opt/actualbudget/.env
|
||||||
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
||||||
|
mv /opt/actualbudget_bak/.migrate /opt/actualbudget
|
||||||
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
||||||
cd /opt/actualbudget
|
cd /opt/actualbudget
|
||||||
yarn install &>/dev/null
|
yarn install &>/dev/null
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/r
|
|||||||
|
|
||||||
#App Default Values
|
#App Default Values
|
||||||
APP="Apache-Guacamole"
|
APP="Apache-Guacamole"
|
||||||
TAGS="webserver;remote"
|
var_tags="webserver;remote"
|
||||||
var_disk="4"
|
var_disk="4"
|
||||||
var_cpu="1"
|
var_cpu="1"
|
||||||
var_ram="2048"
|
var_ram="2048"
|
||||||
|
|||||||
76
ct/barcode-buddy.sh
Normal file
76
ct/barcode-buddy.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: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Forceu/barcodebuddy
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Barcode-Buddy"
|
||||||
|
var_tags="grocery;household"
|
||||||
|
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/barcodebuddy ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Forceu/barcodebuddy/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 Service"
|
||||||
|
systemctl stop apache2
|
||||||
|
systemctl stop barcodebuddy
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
|
||||||
|
wget -q "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip"
|
||||||
|
unzip -q "v${RELEASE}.zip"
|
||||||
|
mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
|
||||||
|
cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
|
||||||
|
chown -R www-data:www-data /opt/barcodebuddy/data
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start apache2
|
||||||
|
systemctl start barcodebuddy
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -r "/opt/v${RELEASE}.zip"
|
||||||
|
rm -r /opt/barcodebuddy-backup
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}${CL}"
|
||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1)
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
omd stop monitoring &>/dev/null
|
omd stop monitoring &>/dev/null
|
||||||
|
|||||||
45
ct/cosmos.sh
Normal file
45
ct/cosmos.sh
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/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: Michel Roegl-Brunner (michelroegl-brunner)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://https://cosmos-cloud.io/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="cosmos"
|
||||||
|
var_tags="os,docker"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="8"
|
||||||
|
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/cosmos ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_ok "${APP} updates itself automatically!"
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
@@ -182,24 +182,37 @@ mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLA
|
|||||||
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; }
|
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; }
|
||||||
TEMPLATE="${TEMPLATES[-1]}"
|
TEMPLATE="${TEMPLATES[-1]}"
|
||||||
|
|
||||||
# Download LXC template if needed
|
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
|
||||||
if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
|
# Check if template exists, if corrupt remove and redownload
|
||||||
|
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
|
||||||
|
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
||||||
msg_info "Downloading LXC Template"
|
msg_info "Downloading LXC Template"
|
||||||
pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
|
||||||
msg_error "A problem occured while downloading the LXC template."
|
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; }
|
||||||
exit 208
|
|
||||||
msg_ok "Downloaded LXC Template"
|
msg_ok "Downloaded LXC Template"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check and fix subuid/subgid
|
||||||
|
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid
|
||||||
|
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid
|
||||||
|
|
||||||
# Combine all options
|
# Combine all options
|
||||||
DEFAULT_PCT_OPTIONS=(
|
|
||||||
-arch $(dpkg --print-architecture))
|
|
||||||
|
|
||||||
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
||||||
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs $CONTAINER_STORAGE:${PCT_DISK_SIZE:-8})
|
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
|
||||||
|
|
||||||
# Create container
|
# Create container with template integrity check
|
||||||
msg_info "Creating LXC Container"
|
msg_info "Creating LXC Container"
|
||||||
pct create $CTID ${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE} ${PCT_OPTIONS[@]} >/dev/null || { msg_error "A problem occured while trying to create container."; exit 200; }
|
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||||
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
|
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
||||||
|
|
||||||
|
msg_ok "Template integrity check completed"
|
||||||
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
|
||||||
|
{ msg_error "A problem occurred while re-downloading the LXC template."; exit 208; }
|
||||||
|
|
||||||
|
msg_ok "Re-downloaded LXC Template"
|
||||||
|
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||||
|
msg_error "A problem occurred while trying to create container after re-downloading template."
|
||||||
|
exit 200
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
|
||||||
|
|||||||
54
ct/cross-seed.sh
Normal file
54
ct/cross-seed.sh
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#!/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: Jakub Matraszek (jmatraszek)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.cross-seed.org
|
||||||
|
|
||||||
|
APP="cross-seed"
|
||||||
|
var_tags="arr"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="2"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if command -v cross-seed &> /dev/null; then
|
||||||
|
current_version=$(cross-seed --version)
|
||||||
|
latest_version=$(npm show cross-seed version)
|
||||||
|
if [ "$current_version" != "$latest_version" ]; then
|
||||||
|
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
|
||||||
|
npm install -g cross-seed@latest &> /dev/null
|
||||||
|
systemctl restart cross-seed
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "${APP} is already at v${current_version}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
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 cross-seed API using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}"
|
||||||
@@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
# Source: https://github.com/duplicati/duplicati/
|
# Source: https://github.com/duplicati/duplicati/
|
||||||
|
|
||||||
APP="Duplicati"
|
APP="Duplicati"
|
||||||
TAGS="backup"
|
var_tags="backup"
|
||||||
var_cpu="1"
|
var_cpu="1"
|
||||||
var_ram="1024"
|
var_ram="1024"
|
||||||
var_disk="10"
|
var_disk="10"
|
||||||
|
|||||||
74
ct/excalidraw.sh
Normal file
74
ct/excalidraw.sh
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/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/excalidraw/excalidraw
|
||||||
|
|
||||||
|
APP="Excalidraw"
|
||||||
|
TAGS="diagrams"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="3072"
|
||||||
|
var_disk="6"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/excalidraw ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop excalidraw
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /tmp
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
wget -q "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
|
||||||
|
tar xzf $temp_file
|
||||||
|
rm -rf /opt/excalidraw
|
||||||
|
mv excalidraw-${RELEASE} /opt/excalidraw
|
||||||
|
cd /opt/excalidraw
|
||||||
|
yarn &> /dev/null
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start excalidraw
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf $temp_file
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
echo "${RELEASE}" >/opt/excalidraw_version.txt
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}"
|
||||||
46
ct/freshrss.sh
Normal file
46
ct/freshrss.sh
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/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: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/FreshRSS/FreshRSS
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="FreshRSS"
|
||||||
|
var_tags="RSS"
|
||||||
|
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 [[ ! -d /opt/freshrss ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_error "FreshRSS should be updated via the user interface."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
59
ct/graylog.sh
Normal file
59
ct/graylog.sh
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/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://graylog.org/
|
||||||
|
|
||||||
|
APP="Graylog"
|
||||||
|
TAGS="logging"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="8192"
|
||||||
|
var_disk="30"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /etc/graylog ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop graylog-datanode
|
||||||
|
systemctl stop graylog-server
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
apt-get update &> /dev/null
|
||||||
|
apt-get upgrade -y &> /dev/null
|
||||||
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start graylog-datanode
|
||||||
|
systemctl start graylog-server
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
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}:9000${CL}"
|
||||||
6
ct/headers/barcode-buddy
Normal file
6
ct/headers/barcode-buddy
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ ____ __ __
|
||||||
|
/ __ )____ _______________ ____/ /__ / __ )__ ______/ /___/ /_ __
|
||||||
|
/ __ / __ `/ ___/ ___/ __ \/ __ / _ \______/ __ / / / / __ / __ / / / /
|
||||||
|
/ /_/ / /_/ / / / /__/ /_/ / /_/ / __/_____/ /_/ / /_/ / /_/ / /_/ / /_/ /
|
||||||
|
/_____/\__,_/_/ \___/\____/\__,_/\___/ /_____/\__,_/\__,_/\__,_/\__, /
|
||||||
|
/____/
|
||||||
6
ct/headers/cosmos
Normal file
6
ct/headers/cosmos
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
_________ _________ ___ ____ _____
|
||||||
|
/ ___/ __ \/ ___/ __ `__ \/ __ \/ ___/
|
||||||
|
/ /__/ /_/ (__ ) / / / / / /_/ (__ )
|
||||||
|
\___/\____/____/_/ /_/ /_/\____/____/
|
||||||
|
|
||||||
6
ct/headers/cross-seed
Normal file
6
ct/headers/cross-seed
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__
|
||||||
|
______________ __________ ________ ___ ____/ /
|
||||||
|
/ ___/ ___/ __ \/ ___/ ___/_____/ ___/ _ \/ _ \/ __ /
|
||||||
|
/ /__/ / / /_/ (__ |__ )_____(__ ) __/ __/ /_/ /
|
||||||
|
\___/_/ \____/____/____/ /____/\___/\___/\__,_/
|
||||||
|
|
||||||
6
ct/headers/excalidraw
Normal file
6
ct/headers/excalidraw
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ ___ __
|
||||||
|
/ ____/ ___________ _/ (_)___/ /________ __ __
|
||||||
|
/ __/ | |/_/ ___/ __ `/ / / __ / ___/ __ `/ | /| / /
|
||||||
|
/ /____> </ /__/ /_/ / / / /_/ / / / /_/ /| |/ |/ /
|
||||||
|
/_____/_/|_|\___/\__,_/_/_/\__,_/_/ \__,_/ |__/|__/
|
||||||
|
|
||||||
6
ct/headers/freshrss
Normal file
6
ct/headers/freshrss
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ __ ____ __________
|
||||||
|
/ ____/_______ _____/ /_ / __ \/ ___/ ___/
|
||||||
|
/ /_ / ___/ _ \/ ___/ __ \/ /_/ /\__ \\__ \
|
||||||
|
/ __/ / / / __(__ ) / / / _, _/___/ /__/ /
|
||||||
|
/_/ /_/ \___/____/_/ /_/_/ |_|/____/____/
|
||||||
|
|
||||||
6
ct/headers/graylog
Normal file
6
ct/headers/graylog
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ __
|
||||||
|
/ ____/________ ___ __/ /___ ____ _
|
||||||
|
/ / __/ ___/ __ `/ / / / / __ \/ __ `/
|
||||||
|
/ /_/ / / / /_/ / /_/ / / /_/ / /_/ /
|
||||||
|
\____/_/ \__,_/\__, /_/\____/\__, /
|
||||||
|
/____/ /____/
|
||||||
6
ct/headers/kometa
Normal file
6
ct/headers/kometa
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ __
|
||||||
|
/ //_/___ ____ ___ ___ / /_____ _
|
||||||
|
/ ,< / __ \/ __ `__ \/ _ \/ __/ __ `/
|
||||||
|
/ /| / /_/ / / / / / / __/ /_/ /_/ /
|
||||||
|
/_/ |_\____/_/ /_/ /_/\___/\__/\__,_/
|
||||||
|
|
||||||
6
ct/headers/prometheus-paperless-ngx-exporter
Normal file
6
ct/headers/prometheus-paperless-ngx-exporter
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ __ ____ __ _ _________ __ ______ __
|
||||||
|
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / __ \____ _____ ___ _____/ /__ __________ / | / / ____/ |/ / / ____/ ______ ____ _____/ /____ _____
|
||||||
|
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ |/ / / __ | /_____/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
|
||||||
|
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ /| / /_/ // /_____/ /____> </ /_/ / /_/ / / / /_/ __/ /
|
||||||
|
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ |_/\____//_/|_| /_____/_/|_/ .___/\____/_/ \__/\___/_/
|
||||||
|
/_/ /_/
|
||||||
6
ct/headers/proxmox-mail-gateway
Normal file
6
ct/headers/proxmox-mail-gateway
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ ___ _ __ ______ __
|
||||||
|
/ __ \_________ _ ______ ___ ____ _ __ / |/ /___ _(_) / / ____/___ _/ /____ _ ______ ___ __
|
||||||
|
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ /|_/ / __ `/ / /_____/ / __/ __ `/ __/ _ \ | /| / / __ `/ / / /
|
||||||
|
/ ____/ / / /_/ /> </ / / / / / /_/ /> </_____/ / / / /_/ / / /_____/ /_/ / /_/ / /_/ __/ |/ |/ / /_/ / /_/ /
|
||||||
|
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_/ /_/\__,_/_/_/ \____/\__,_/\__/\___/|__/|__/\__,_/\__, /
|
||||||
|
/____/
|
||||||
6
ct/headers/searxng
Normal file
6
ct/headers/searxng
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ _ __ _ ________
|
||||||
|
/ ___/___ ____ _____| |/ // | / / ____/
|
||||||
|
\__ \/ _ \/ __ `/ ___/ // |/ / / __
|
||||||
|
___/ / __/ /_/ / / / |/ /| / /_/ /
|
||||||
|
/____/\___/\__,_/_/ /_/|_/_/ |_/\____/
|
||||||
|
|
||||||
6
ct/headers/suwayomiserver
Normal file
6
ct/headers/suwayomiserver
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ _ _____
|
||||||
|
/ ___/__ ___ ______ ___ ______ ____ ___ (_) ___/___ ______ _____ _____
|
||||||
|
\__ \/ / / / | /| / / __ `/ / / / __ \/ __ `__ \/ /\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
___/ / /_/ /| |/ |/ / /_/ / /_/ / /_/ / / / / / / /___/ / __/ / | |/ / __/ /
|
||||||
|
/____/\__,_/ |__/|__/\__,_/\__, /\____/_/ /_/ /_/_//____/\___/_/ |___/\___/_/
|
||||||
|
/____/
|
||||||
6
ct/headers/tasmocompiler
Normal file
6
ct/headers/tasmocompiler
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ ______ _ __
|
||||||
|
/_ __/___ __________ ___ ____ / ____/___ ____ ___ ____ (_) /__ _____
|
||||||
|
/ / / __ `/ ___/ __ `__ \/ __ \/ / / __ \/ __ `__ \/ __ \/ / / _ \/ ___/
|
||||||
|
/ / / /_/ (__ ) / / / / / /_/ / /___/ /_/ / / / / / / /_/ / / / __/ /
|
||||||
|
/_/ \__,_/____/_/ /_/ /_/\____/\____/\____/_/ /_/ /_/ .___/_/_/\___/_/
|
||||||
|
/_/
|
||||||
6
ct/headers/watcharr
Normal file
6
ct/headers/watcharr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_ __ __ __
|
||||||
|
| | / /___ _/ /______/ /_ ____ ___________
|
||||||
|
| | /| / / __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
|
||||||
|
| |/ |/ / /_/ / /_/ /__/ / / / /_/ / / / /
|
||||||
|
|__/|__/\__,_/\__/\___/_/ /_/\__,_/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/zitadel
Normal file
6
ct/headers/zitadel
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ _ __ __ __
|
||||||
|
/__ / (_) /_____ _____/ /__ / /
|
||||||
|
/ / / / __/ __ `/ __ / _ \/ /
|
||||||
|
/ /__/ / /_/ /_/ / /_/ / __/ /
|
||||||
|
/____/_/\__/\__,_/\__,_/\___/_/
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ function update_script() {
|
|||||||
LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
|
LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
|
||||||
if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then
|
if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then
|
||||||
echo "Updating ${container} image ${CONTAINER_IMAGE}"
|
echo "Updating ${container} image ${CONTAINER_IMAGE}"
|
||||||
DOCKER_COMMAND="$(runlike "${container}")"
|
DOCKER_COMMAND="$(runlike --use-volume-id "${container}")"
|
||||||
docker rm --force "${container}"
|
docker rm --force "${container}"
|
||||||
eval ${DOCKER_COMMAND}
|
eval ${DOCKER_COMMAND}
|
||||||
fi
|
fi
|
||||||
|
|||||||
80
ct/kometa.sh
Normal file
80
ct/kometa.sh
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/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/Kometa-Team/Kometa
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Kometa"
|
||||||
|
TAGS="media;streaming"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="4"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f "/opt/kometa/kometa.py" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/kometa_version.txt)" ]] || [[ ! -f /opt/kometa_version.txt ]]; then
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop kometa
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
cd /tmp
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
|
||||||
|
tar -xzf "$temp_file"
|
||||||
|
cp /opt/kometa/config/config.yml /opt
|
||||||
|
rm -rf /opt/kometa
|
||||||
|
mv Kometa-${RELEASE} /opt/kometa
|
||||||
|
cd /opt/kometa
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
pip install -r requirements.txt --ignore-installed &> /dev/null
|
||||||
|
mkdir -p config/assets
|
||||||
|
cp /opt/config.yml config/config.yml
|
||||||
|
echo "${RELEASE}" >/opt/kometa_version.txt
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start kometa
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f $temp_file
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
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}${CL}"
|
||||||
@@ -9,8 +9,8 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
APP="PeaNUT"
|
APP="PeaNUT"
|
||||||
var_tags="network;ups;"
|
var_tags="network;ups;"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="3072"
|
||||||
var_disk="4"
|
var_disk="7"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
var_version="12"
|
var_version="12"
|
||||||
var_unprivileged="1"
|
var_unprivileged="1"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -s https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/$pingvin_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/pingvin_version.txt)" ]]; then
|
if [[ ! -f /opt/pingvin_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/pingvin_version.txt)" ]]; then
|
||||||
|
|
||||||
msg_info "Stopping Pingvin Share"
|
msg_info "Stopping Pingvin Share"
|
||||||
systemctl stop pm2-root.service
|
systemctl stop pm2-root.service
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="PocketID"
|
APP="PocketID"
|
||||||
TAGS="identity-provider"
|
var_tags="identity-provider"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="2048"
|
||||||
var_disk="4"
|
var_disk="4"
|
||||||
|
|||||||
67
ct/prometheus-paperless-ngx-exporter.sh
Executable file
67
ct/prometheus-paperless-ngx-exporter.sh
Executable file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/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://github.com/hansmi/prometheus-paperless-exporter
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Prometheus-Paperless-NGX-Exporter"
|
||||||
|
var_tags="monitoring;alerting"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="256"
|
||||||
|
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-paperless-ngx-exporter.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/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-paperless-ngx-exporter
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
||||||
|
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start prometheus-paperless-ngx-exporter
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}:8081/metrics${CL}"
|
||||||
43
ct/proxmox-mail-gateway.sh
Normal file
43
ct/proxmox-mail-gateway.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/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: thost96 (thost96)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.proxmox.com/en/products/proxmox-mail-gateway
|
||||||
|
|
||||||
|
APP="Proxmox-Mail-Gateway"
|
||||||
|
var_tags="mail"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="4096"
|
||||||
|
var_disk="10"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -e /usr/bin/pmgproxy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
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}https://${IP}:8006/${CL}"
|
||||||
47
ct/searxng.sh
Normal file
47
ct/searxng.sh
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/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: MickLesk (Canbiz)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/searxng/searxng
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="SearXNG"
|
||||||
|
var_tags="search"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="7"
|
||||||
|
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 /usr/local/searxng/searxng-src ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then
|
||||||
|
msg_ok "There is currently no update available."
|
||||||
|
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}:8888${CL}"
|
||||||
@@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
# Source: https://github.com/YuukanOO/seelf
|
# Source: https://github.com/YuukanOO/seelf
|
||||||
|
|
||||||
APP="seelf"
|
APP="seelf"
|
||||||
TAGS="server;docker"
|
var_tags="server;docker"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="4096"
|
var_ram="4096"
|
||||||
var_disk="10"
|
var_disk="10"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -s https://raw.githubusercontent.com/kris701/ProxmoxVE/refs/heads/main/misc/build.func)
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: Kristian Skov
|
# Author: Kristian Skov
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|||||||
66
ct/suwayomiserver.sh
Normal file
66
ct/suwayomiserver.sh
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#!/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: tremor021
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Suwayomi/Suwayomi-Server
|
||||||
|
|
||||||
|
APP="SuwayomiServer"
|
||||||
|
var_tags="media;manga"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="4"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /usr/bin/suwayomi-server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop suwayomi-server
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /tmp
|
||||||
|
URL=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1)
|
||||||
|
wget -q $URL
|
||||||
|
$STD dpkg -i /tmp/*.deb
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start suwayomi-server
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f *.deb
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}:4567${CL}"
|
||||||
71
ct/tasmocompiler.sh
Normal file
71
ct/tasmocompiler.sh
Normal 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/benzino77/tasmocompiler
|
||||||
|
|
||||||
|
APP="TasmoCompiler"
|
||||||
|
var_tags="compiler"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="10"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/tasmocompiler ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/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 tasmocompiler
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
rm -rf /opt/tasmocompiler
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz
|
||||||
|
tar xzf v${RELEASE}.tar.gz
|
||||||
|
mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/
|
||||||
|
cd /opt/tasmocompiler
|
||||||
|
yarn install &> /dev/null
|
||||||
|
export NODE_OPTIONS=--openssl-legacy-provider
|
||||||
|
npm i &> /dev/null
|
||||||
|
yarn build &> /dev/null
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start tasmocompiler
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -r "/opt/v${RELEASE}.tar.gz"
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}"
|
||||||
@@ -32,21 +32,30 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt
|
||||||
|
fi
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop trilium
|
systemctl stop trilium
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating to ${RELEASE}"
|
msg_info "Updating to ${RELEASE}"
|
||||||
|
mkdir -p /opt/trilium_backup
|
||||||
|
mv /opt/trilium/{db,dump-db} /opt/trilium_backup/
|
||||||
|
rm -rf /opt/trilium
|
||||||
|
cd /tmp
|
||||||
wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
||||||
tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
||||||
cp -r trilium-linux-x64-server/* /opt/trilium/
|
mv trilium-linux-x64-server /opt/trilium
|
||||||
|
cp -r /opt/trilium_backup/{db,dump-db} /opt/trilium/
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated to ${RELEASE}"
|
msg_ok "Updated to ${RELEASE}"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz trilium-linux-x64-server
|
rm -rf /tmp/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
||||||
|
rm -rf /opt/trilium_backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
@@ -54,6 +63,9 @@ function update_script() {
|
|||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
80
ct/watcharr.sh
Normal file
80
ct/watcharr.sh
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/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/sbondCo/Watcharr
|
||||||
|
|
||||||
|
APP="Watcharr"
|
||||||
|
var_tags="media"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="4"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/watcharr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop watcharr
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
|
||||||
|
tar -xzf "$temp_file"
|
||||||
|
rm -f /opt/watcharr/server/watcharr
|
||||||
|
rm -rf /opt/watcharr/server/ui
|
||||||
|
mv Watcharr-${RELEASE}/ /opt/watcharr
|
||||||
|
cd /opt/watcharr
|
||||||
|
export GOOS=linux
|
||||||
|
npm i &> /dev/null
|
||||||
|
npm run build &> /dev/null
|
||||||
|
mv ./build ./server/ui
|
||||||
|
cd server
|
||||||
|
go mod download
|
||||||
|
go build -o ./watcharr
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start watcharr
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f ${temp_file}
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}:3080${CL}"
|
||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
#App Default Values
|
#App Default Values
|
||||||
APP="Zammad"
|
APP="Zammad"
|
||||||
TAGS="webserver;ticket-system"
|
var_tags="webserver;ticket-system"
|
||||||
var_disk="8"
|
var_disk="8"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="4096"
|
var_ram="4096"
|
||||||
|
|||||||
70
ct/zitadel.sh
Normal file
70
ct/zitadel.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/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: dave-yap (dave-yap)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://zitadel.com/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Zitadel"
|
||||||
|
var_tags="identity-provider"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="8"
|
||||||
|
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/zitadel.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop zitadel
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
cd /tmp
|
||||||
|
wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz
|
||||||
|
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
||||||
|
zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true &>/dev/null
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start zitadel
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf /tmp/zitadel-linux-amd64
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
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}:8080/ui/console${CL}"
|
||||||
@@ -64,8 +64,8 @@ function InstallMethod({
|
|||||||
if (key === "type") {
|
if (key === "type") {
|
||||||
updatedMethod.script =
|
updatedMethod.script =
|
||||||
value === "alpine"
|
value === "alpine"
|
||||||
? `/${prev.type}/alpine-${prev.slug}.sh`
|
? `${prev.type}/alpine-${prev.slug}.sh`
|
||||||
: `/${prev.type}/${prev.slug}.sh`;
|
: `${prev.type}/${prev.slug}.sh`;
|
||||||
|
|
||||||
// Set OS to Alpine and reset version if type is alpine
|
// Set OS to Alpine and reset version if type is alpine
|
||||||
if (value === "alpine") {
|
if (value === "alpine") {
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ export default function JSONGenerator() {
|
|||||||
...method,
|
...method,
|
||||||
script:
|
script:
|
||||||
method.type === "alpine"
|
method.type === "alpine"
|
||||||
? `/${updated.type}/alpine-${updated.slug}.sh`
|
? `${updated.type}/alpine-${updated.slug}.sh`
|
||||||
: `/${updated.type}/${updated.slug}.sh`,
|
: `${updated.type}/${updated.slug}.sh`,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup Apache Tomcat"
|
msg_info "Setup Apache Tomcat"
|
||||||
RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//')
|
RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//' | sort -V | tail -n1)
|
||||||
mkdir -p /opt/apache-guacamole/tomcat9
|
mkdir -p /opt/apache-guacamole/tomcat9
|
||||||
mkdir -p /opt/apache-guacamole/server
|
mkdir -p /opt/apache-guacamole/server
|
||||||
wget -qO- "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1
|
wget -qO- "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1
|
||||||
|
|||||||
81
install/barcode-buddy-install.sh
Normal file
81
install/barcode-buddy-install.sh
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /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 \
|
||||||
|
apache2 \
|
||||||
|
redis \
|
||||||
|
php-{curl,date,json,mbstring,redis,sqlite3,sockets} \
|
||||||
|
libapache2-mod-php
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing barcodebuddy"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
cd /opt
|
||||||
|
wget -q "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip"
|
||||||
|
unzip -q "v${RELEASE}.zip"
|
||||||
|
mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
|
||||||
|
chown -R www-data:www-data /opt/barcodebuddy/data
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed barcodebuddy"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/barcodebuddy.service
|
||||||
|
[Unit]
|
||||||
|
Description=Run websocket server for barcodebuddy screen feature
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/php /opt/barcodebuddy/wsserver.php
|
||||||
|
StandardOutput=null
|
||||||
|
Restart=on-failure
|
||||||
|
User=www-data
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/apache2/sites-available/barcodebuddy.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName barcodebuddy
|
||||||
|
DocumentRoot /opt/barcodebuddy
|
||||||
|
|
||||||
|
<Directory /opt/barcodebuddy>
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog /var/log/apache2/barcodebuddy_error.log
|
||||||
|
CustomLog /var/log/apache2/barcodebuddy_access.log combined
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now barcodebuddy
|
||||||
|
$STD a2ensite barcodebuddy
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
$STD a2dissite 000-default.conf
|
||||||
|
$STD systemctl reload apache2
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf "/opt/v${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -76,7 +76,10 @@ mkdir /opt/browserless
|
|||||||
$STD python3 -m pip install playwright
|
$STD python3 -m pip install playwright
|
||||||
$STD git clone https://github.com/browserless/chrome /opt/browserless
|
$STD git clone https://github.com/browserless/chrome /opt/browserless
|
||||||
$STD npm install --prefix /opt/browserless
|
$STD npm install --prefix /opt/browserless
|
||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps chrome chromium firefox webkit
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null
|
||||||
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null
|
||||||
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null
|
||||||
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
|
||||||
$STD npm run build --prefix /opt/browserless
|
$STD npm run build --prefix /opt/browserless
|
||||||
$STD npm run build:function --prefix /opt/browserless
|
$STD npm run build:function --prefix /opt/browserless
|
||||||
$STD npm prune production --prefix /opt/browserless
|
$STD npm prune production --prefix /opt/browserless
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Install Checkmk"
|
msg_info "Install Checkmk"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | head -n 1)
|
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1)
|
||||||
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
|
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
|
||||||
$STD apt-get install -y /opt/checkmk.deb
|
$STD apt-get install -y /opt/checkmk.deb
|
||||||
echo "${RELEASE}" >"/opt/checkmk_version.txt"
|
echo "${RELEASE}" >"/opt/checkmk_version.txt"
|
||||||
|
|||||||
86
install/cosmos-install.sh
Normal file
86
install/cosmos-install.sh
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
|
||||||
|
#Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||||
|
# 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 \
|
||||||
|
curl \
|
||||||
|
mc \
|
||||||
|
sudo \
|
||||||
|
snapraid \
|
||||||
|
avahi-daemon \
|
||||||
|
fdisk
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Install mergerfs"
|
||||||
|
MERGERFS_VERSION="2.40.2"
|
||||||
|
wget -q "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
|
||||||
|
$STD dpkg -i "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" || $STD apt-get install -f -y
|
||||||
|
rm "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
|
||||||
|
msg_ok "Installed mergerfs"
|
||||||
|
|
||||||
|
msg_info "Install Docker"
|
||||||
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
|
$STD sh get-docker.sh
|
||||||
|
rm get-docker.sh
|
||||||
|
msg_ok "Installed Docker"
|
||||||
|
|
||||||
|
msg_info "Install Cosmos"
|
||||||
|
mkdir -p /opt/cosmos
|
||||||
|
LATEST_RELEASE=$(curl -s https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4)
|
||||||
|
ZIP_FILE="cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
|
||||||
|
curl -sL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}"
|
||||||
|
cd /opt/cosmos
|
||||||
|
unzip -o -q "${ZIP_FILE}"
|
||||||
|
LATEST_RELEASE_NO_V=${LATEST_RELEASE#v}
|
||||||
|
mv /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}/* /opt/cosmos/
|
||||||
|
rmdir /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}
|
||||||
|
chmod +x /opt/cosmos/cosmos
|
||||||
|
msg_ok "Installed Cosmos"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF > /etc/systemd/system/cosmos.service
|
||||||
|
[Unit]
|
||||||
|
Description=Cosmos Cloud service
|
||||||
|
ConditionFileIsExecutable=/opt/cosmos/start.sh
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
StartLimitInterval=10
|
||||||
|
StartLimitBurst=5
|
||||||
|
ExecStart=/opt/cosmos/start.sh
|
||||||
|
|
||||||
|
WorkingDirectory=/opt/cosmos
|
||||||
|
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
RestartSec=2
|
||||||
|
EnvironmentFile=-/etc/sysconfig/CosmosCloud
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl enable -q --now cosmos.service
|
||||||
|
msg_info "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "/opt/cosmos/cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -23,13 +23,18 @@ $STD apt-get install -y \
|
|||||||
lsb-release \
|
lsb-release \
|
||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
coreutils \
|
coreutils \
|
||||||
software-properties-common \
|
software-properties-common
|
||||||
openjdk-17-jdk
|
|
||||||
wget -q https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
|
|
||||||
$STD sudo dpkg -i jdk-21_linux-x64_bin.deb
|
|
||||||
rm -f jdk-21_linux-x64_bin.deb
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up TemurinJDK"
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /etc/apt/keyrings/adoptium.asc
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y temurin-{8,11,17,21}-jre
|
||||||
|
sudo update-alternatives --set java /usr/lib/jvm/temurin-21-jre-amd64/bin/java
|
||||||
|
msg_ok "Installed TemurinJDK"
|
||||||
|
|
||||||
msg_info "Setup Python3"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
python3 \
|
python3 \
|
||||||
@@ -39,7 +44,6 @@ $STD apt-get install -y \
|
|||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
msg_ok "Setup Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
|
|
||||||
msg_info "Installing Craty-Controller (Patience)"
|
msg_info "Installing Craty-Controller (Patience)"
|
||||||
useradd crafty -m -s /bin/bash
|
useradd crafty -m -s /bin/bash
|
||||||
cd /opt
|
cd /opt
|
||||||
@@ -71,7 +75,7 @@ After=network.target
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=crafty
|
User=crafty
|
||||||
WorkingDirectory=/opt/crafty-controller/crafty/crafty-4
|
WorkingDirectory=/opt/crafty-controller/crafty/crafty-4
|
||||||
Environment=PATH=/opt/crafty-controller/crafty/.venv/bin:$PATH
|
Environment=PATH=/usr/lib/jvm/temurin-21-jre-amd64/bin:/opt/crafty-controller/crafty/.venv/bin:$PATH
|
||||||
ExecStart=/opt/crafty-controller/crafty/.venv/bin/python3 main.py -d
|
ExecStart=/opt/crafty-controller/crafty/.venv/bin/python3 main.py -d
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
|
|||||||
63
install/cross-seed-install.sh
Normal file
63
install/cross-seed-install.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Jakub Matraszek (jmatraszek)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.cross-seed.org
|
||||||
|
|
||||||
|
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
|
||||||
|
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_23.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
|
msg_ok "Setup Node.js Repository"
|
||||||
|
|
||||||
|
msg_info "Setting up Node.js"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
msg_ok "Setup Node.js"
|
||||||
|
|
||||||
|
msg_info "Setup Cross-Seed"
|
||||||
|
$STD npm install cross-seed@latest -g
|
||||||
|
$STD cross-seed gen-config
|
||||||
|
msg_ok "Setup Cross-Seed"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/cross-seed.service
|
||||||
|
[Unit]
|
||||||
|
Description=Cross-Seed daemon Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=cross-seed daemon
|
||||||
|
Restart=always
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now cross-seed
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
73
install/excalidraw-install.sh
Normal file
73
install/excalidraw-install.sh
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#!/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/excalidraw/excalidraw
|
||||||
|
|
||||||
|
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 \
|
||||||
|
xdg-utils
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup 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 "Setup Node.js Repository"
|
||||||
|
|
||||||
|
msg_info "Setup Node.js"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
$STD npm install -g yarn
|
||||||
|
msg_ok "Setup Node.js"
|
||||||
|
|
||||||
|
msg_info "Setup Excalidraw"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
|
||||||
|
tar xzf $temp_file
|
||||||
|
mv excalidraw-${RELEASE} /opt/excalidraw
|
||||||
|
cd /opt/excalidraw
|
||||||
|
$STD yarn
|
||||||
|
echo "${RELEASE}" >/opt/excalidraw_version.txt
|
||||||
|
msg_ok "Setup Excalidraw"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/excalidraw.service
|
||||||
|
[Unit]
|
||||||
|
Description=Excalidraw Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/excalidraw
|
||||||
|
ExecStart=/usr/bin/yarn start --host
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now excalidraw
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f $temp_file
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
84
install/freshrss-install.sh
Normal file
84
install/freshrss-install.sh
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /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 \
|
||||||
|
postgresql \
|
||||||
|
apache2 \
|
||||||
|
php-{curl,dom,json,ctype,pgsql,gmp,mbstring,iconv,zip} \
|
||||||
|
libapache2-mod-php
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
|
||||||
|
msg_info "Setting up PostgreSQL"
|
||||||
|
DB_NAME=freshrss
|
||||||
|
DB_USER=freshrss
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
$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 TEMPLATE template0;"
|
||||||
|
{
|
||||||
|
echo "FreshRSS Credentials"
|
||||||
|
echo "FreshRSS Database User: $DB_USER"
|
||||||
|
echo "FreshRSS Database Password: $DB_PASS"
|
||||||
|
echo "FreshRSS Database Name: $DB_NAME"
|
||||||
|
} >> ~/freshrss.creds
|
||||||
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Installing FreshRSS"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
cd /opt
|
||||||
|
wget -q "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip"
|
||||||
|
unzip -q "${RELEASE}.zip"
|
||||||
|
mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss
|
||||||
|
cd /opt/freshrss
|
||||||
|
chown -R www-data:www-data /opt/freshrss
|
||||||
|
chmod -R g+rX /opt/freshrss
|
||||||
|
chmod -R g+w /opt/freshrss/data/
|
||||||
|
msg_ok "Installed FreshRSS"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/apache2/sites-available/freshrss.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName freshrss
|
||||||
|
DocumentRoot /opt/freshrss/p
|
||||||
|
|
||||||
|
<Directory /opt/freshrss/p>
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog /var/log/apache2/freshrss_error.log
|
||||||
|
CustomLog /var/log/apache2/freshrss_access.log combined
|
||||||
|
|
||||||
|
AllowEncodedSlashes On
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
$STD a2ensite freshrss
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
$STD a2dissite 000-default.conf
|
||||||
|
$STD systemctl reload apache2
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf "/opt/${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -48,13 +48,13 @@ if [[ "$CTTYPE" == "0" ]]; then
|
|||||||
fi
|
fi
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
msg_ok "Set Up Hardware Acceleration"
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
|
#RELEASE=$(curl -s https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
|
||||||
msg_ok "Stop spinner to prevent segmentation fault"
|
msg_ok "Stop spinner to prevent segmentation fault"
|
||||||
msg_info "Installing Frigate $RELEASE (Perseverance)"
|
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
||||||
cd ~
|
cd ~
|
||||||
mkdir -p /opt/frigate/models
|
mkdir -p /opt/frigate/models
|
||||||
wget -q https://github.com/blakeblackshear/frigate/archive/refs/tags/${RELEASE}.tar.gz -O frigate.tar.gz
|
wget -q https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz -O frigate.tar.gz
|
||||||
tar -xzf frigate.tar.gz -C /opt/frigate --strip-components 1
|
tar -xzf frigate.tar.gz -C /opt/frigate --strip-components 1
|
||||||
rm -rf frigate.tar.gz
|
rm -rf frigate.tar.gz
|
||||||
cd /opt/frigate
|
cd /opt/frigate
|
||||||
@@ -102,7 +102,7 @@ else
|
|||||||
sed -i -e 's/^kvm:x:104:$/render:x:104:frigate/' -e 's/^render:x:105:$/kvm:x:105:/' /etc/group
|
sed -i -e 's/^kvm:x:104:$/render:x:104:frigate/' -e 's/^render:x:105:$/kvm:x:105:/' /etc/group
|
||||||
fi
|
fi
|
||||||
echo "tmpfs /tmp/cache tmpfs defaults 0 0" >> /etc/fstab
|
echo "tmpfs /tmp/cache tmpfs defaults 0 0" >> /etc/fstab
|
||||||
msg_ok "Installed Frigate $RELEASE"
|
msg_ok "Installed Frigate"
|
||||||
|
|
||||||
if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then
|
if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then
|
||||||
msg_ok "AVX Support Detected"
|
msg_ok "AVX Support Detected"
|
||||||
|
|||||||
65
install/graylog-install.sh
Normal file
65
install/graylog-install.sh
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
#!/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://graylog.org/
|
||||||
|
|
||||||
|
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
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup MongoDB"
|
||||||
|
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y mongodb-org
|
||||||
|
$STD apt-mark hold mongodb-org
|
||||||
|
systemctl enable -q --now mongod
|
||||||
|
msg_ok "Setup MongoDB"
|
||||||
|
|
||||||
|
msg_info "Setup Graylog Data Node"
|
||||||
|
PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
|
||||||
|
wget -q https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb
|
||||||
|
$STD dpkg -i graylog-6.1-repository_latest.deb
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install graylog-datanode -y
|
||||||
|
sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf
|
||||||
|
systemctl enable -q --now graylog-datanode
|
||||||
|
msg_ok "Setup Graylog Data Node"
|
||||||
|
|
||||||
|
msg_info "Setup ${APPLICATION}"
|
||||||
|
$STD apt-get install graylog-server
|
||||||
|
ROOT_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
|
||||||
|
{
|
||||||
|
echo "${APPLICATION} Credentials"
|
||||||
|
echo "Admin User: admin"
|
||||||
|
echo "Admin Password: ${ROOT_PASSWORD}"
|
||||||
|
} >> ~/graylog.creds
|
||||||
|
ROOT_PASSWORD=$(echo -n $ROOT_PASSWORD | shasum -a 256 | awk '{print $1}')
|
||||||
|
sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/server/server.conf
|
||||||
|
sed -i "s/root_password_sha2 =/root_password_sha2 = $ROOT_PASSWORD/g" /etc/graylog/server/server.conf
|
||||||
|
sed -i 's/#http_bind_address = 127.0.0.1.*/http_bind_address = 0.0.0.0:9000/g' /etc/graylog/server/server.conf
|
||||||
|
systemctl enable -q --now graylog-server
|
||||||
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f graylog-*-repository_latest.deb
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
74
install/kometa-install.sh
Normal file
74
install/kometa-install.sh
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/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/Kometa-Team/Kometa
|
||||||
|
|
||||||
|
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 \
|
||||||
|
mc \
|
||||||
|
sudo
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Python 3"
|
||||||
|
$STD apt-get install python3-pip -y
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
msg_ok "Setup Python 3"
|
||||||
|
|
||||||
|
msg_info "Setup Kometa"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
|
||||||
|
tar -xzf "$temp_file"
|
||||||
|
mv Kometa-${RELEASE} /opt/kometa
|
||||||
|
cd /opt/kometa
|
||||||
|
$STD pip install -r requirements.txt --ignore-installed
|
||||||
|
mkdir -p config/assets
|
||||||
|
cp config/config.yml.template config/config.yml
|
||||||
|
echo "${RELEASE}" >/opt/kometa_version.txt
|
||||||
|
msg_ok "Setup Kometa"
|
||||||
|
|
||||||
|
read -p "Enter your TMDb API key: " TMDBKEY
|
||||||
|
read -p "Enter your Plex URL: " PLEXURL
|
||||||
|
read -p "Enter your Plex token: " PLEXTOKEN
|
||||||
|
sed -i -e "s#url: http://192.168.1.12:32400#url: $PLEXURL#g" /opt/kometa/config/config.yml
|
||||||
|
sed -i -e "s/token: ####################/token: $PLEXTOKEN/g" /opt/kometa/config/config.yml
|
||||||
|
sed -i -e "s/apikey: ################################/apikey: $TMDBKEY/g" /opt/kometa/config/config.yml
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/kometa.service
|
||||||
|
[Unit]
|
||||||
|
Description=Kometa Service
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/kometa
|
||||||
|
ExecStart=/usr/bin/python3 kometa.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=30
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable --now -q kometa
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f $temp_file
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 tteck
|
||||||
# Author: tteck
|
# Author: MickLesk (Canbiz)
|
||||||
# Co-Author: MickLesk (Canbiz)
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# License: MIT
|
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/gnmyt/myspeed
|
# Source: https://github.com/gnmyt/myspeed
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
@@ -18,6 +16,9 @@ update_os
|
|||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
curl \
|
curl \
|
||||||
|
build-essential \
|
||||||
|
g++ \
|
||||||
|
make \
|
||||||
sudo \
|
sudo \
|
||||||
make \
|
make \
|
||||||
gpg \
|
gpg \
|
||||||
|
|||||||
@@ -17,7 +17,11 @@ $STD apt-get install -y \
|
|||||||
curl \
|
curl \
|
||||||
sudo \
|
sudo \
|
||||||
mc \
|
mc \
|
||||||
gpg
|
gpg \
|
||||||
|
make \
|
||||||
|
gcc \
|
||||||
|
g++ \
|
||||||
|
build-essential
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
|
|||||||
@@ -62,6 +62,35 @@ PHOTOPRISM_PUBLIC='false'
|
|||||||
PHOTOPRISM_DEBUG='false'
|
PHOTOPRISM_DEBUG='false'
|
||||||
EOF
|
EOF
|
||||||
ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism
|
ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism
|
||||||
|
|
||||||
|
mkdir -p /etc/photoprism/
|
||||||
|
cat <<EOF >/etc/photoprism/defaults.yml
|
||||||
|
ConfigPath: "~/.config/photoprism"
|
||||||
|
StoragePath: "/opt/photoprism/storage"
|
||||||
|
OriginalsPath: "/opt/photoprism/photos/originals"
|
||||||
|
ImportPath: "/media"
|
||||||
|
AdminUser: "admin"
|
||||||
|
AdminPassword: "changeme"
|
||||||
|
AuthMode: "password"
|
||||||
|
DatabaseDriver: "sqlite"
|
||||||
|
HttpHost: "0.0.0.0"
|
||||||
|
HttpPort: 2342
|
||||||
|
HttpCompression: "gzip"
|
||||||
|
DisableTLS: false
|
||||||
|
DefaultTLS: true
|
||||||
|
Experimental: false
|
||||||
|
DisableWebDAV: false
|
||||||
|
DisableSettings: false
|
||||||
|
DisableTensorFlow: false
|
||||||
|
DisableFaces: false
|
||||||
|
DisableClassification: false
|
||||||
|
DisableVectors: false
|
||||||
|
DisableRaw: false
|
||||||
|
RawPresets: false
|
||||||
|
JpegQuality: 85
|
||||||
|
DetectNSFW: false
|
||||||
|
UploadNSFW: true
|
||||||
|
EOF
|
||||||
msg_ok "Installed PhotoPrism"
|
msg_ok "Installed PhotoPrism"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
64
install/prometheus-paperless-ngx-exporter-install.sh
Executable file
64
install/prometheus-paperless-ngx-exporter-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://github.com/hansmi/prometheus-paperless-exporter
|
||||||
|
|
||||||
|
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 Paperless NGX Exporter"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
||||||
|
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
||||||
|
cat <<EOF > /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||||
|
SECRET_AUTH_TOKEN
|
||||||
|
EOF
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Prometheus Paperless NGX Exporter"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
||||||
|
[Unit]
|
||||||
|
Description=Prometheus Paperless NGX Exporter
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Restart=always
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/prometheus-paperless-exporter \
|
||||||
|
--paperless_url=http://paperless.example.org \
|
||||||
|
--paperless_auth_token_file=/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||||
|
ExecReload=/bin/kill -HUP \$MAINPID
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now prometheus-paperless-ngx-exporter
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
msg_ok "Cleaned"
|
||||||
36
install/proxmox-mail-gateway-install.sh
Normal file
36
install/proxmox-mail-gateway-install.sh
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: thost96 (thost96)
|
||||||
|
# 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 -y install \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
wget
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Proxmox Mail Gateway"
|
||||||
|
wget -q https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
|
||||||
|
echo "deb http://download.proxmox.com/debian/pmg bookworm pmg-no-subscription" > /etc/apt/sources.list.d/pmg.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y install proxmox-mailgateway-container
|
||||||
|
msg_ok "Installed Proxmox Mail Gateway"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
116
install/searxng-install.sh
Normal file
116
install/searxng-install.sh
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (Canbiz)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/searxng/searxng
|
||||||
|
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies (Patience)"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
redis-server \
|
||||||
|
build-essential \
|
||||||
|
libffi-dev \
|
||||||
|
libssl-dev \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
git \
|
||||||
|
mc
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Python3"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
python3 \
|
||||||
|
python3-{pip,venv,yaml,dev}
|
||||||
|
$STD pip install --upgrade pip setuptools wheel
|
||||||
|
$STD pip install pyyaml
|
||||||
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
|
msg_info "Setup SearXNG"
|
||||||
|
mkdir -p /usr/local/searxng /etc/searxng
|
||||||
|
useradd -d /etc/searxng searxng
|
||||||
|
chown searxng:searxng /usr/local/searxng /etc/searxng
|
||||||
|
$STD git clone https://github.com/searxng/searxng.git /usr/local/searxng/searxng-src
|
||||||
|
cd /usr/local/searxng/
|
||||||
|
sudo -u searxng python3 -m venv /usr/local/searxng/searx-pyenv
|
||||||
|
source /usr/local/searxng/searx-pyenv/bin/activate
|
||||||
|
$STD pip install --upgrade pip setuptools wheel
|
||||||
|
$STD pip install pyyaml
|
||||||
|
$STD pip install -e /usr/local/searxng/searxng-src
|
||||||
|
SECRET_KEY=$(openssl rand -hex 32)
|
||||||
|
cat <<EOF >/etc/searxng/settings.yml
|
||||||
|
# SearXNG settings
|
||||||
|
use_default_settings: true
|
||||||
|
general:
|
||||||
|
debug: false
|
||||||
|
instance_name: "SearXNG"
|
||||||
|
privacypolicy_url: false
|
||||||
|
contact_url: false
|
||||||
|
server:
|
||||||
|
bind_address: "0.0.0.0"
|
||||||
|
port: 8888
|
||||||
|
secret_key: "${SECRET_KEY}"
|
||||||
|
limiter: true
|
||||||
|
image_proxy: true
|
||||||
|
redis:
|
||||||
|
url: "redis://127.0.0.1:6379/0"
|
||||||
|
ui:
|
||||||
|
static_use_hash: true
|
||||||
|
enabled_plugins:
|
||||||
|
- 'Hash plugin'
|
||||||
|
- 'Self Information'
|
||||||
|
- 'Tracker URL remover'
|
||||||
|
- 'Ahmia blacklist'
|
||||||
|
search:
|
||||||
|
safe_search: 2
|
||||||
|
autocomplete: 'google'
|
||||||
|
engines:
|
||||||
|
- name: google
|
||||||
|
engine: google
|
||||||
|
shortcut: gg
|
||||||
|
use_mobile_ui: false
|
||||||
|
- name: duckduckgo
|
||||||
|
engine: duckduckgo
|
||||||
|
shortcut: ddg
|
||||||
|
display_error_messages: true
|
||||||
|
EOF
|
||||||
|
chown searxng:searxng /etc/searxng/settings.yml
|
||||||
|
chmod 640 /etc/searxng/settings.yml
|
||||||
|
msg_ok "Setup SearXNG"
|
||||||
|
|
||||||
|
msg_info "Set up web services"
|
||||||
|
cat <<EOF >/etc/systemd/system/searxng.service
|
||||||
|
[Unit]
|
||||||
|
Description=SearXNG service
|
||||||
|
After=network.target redis-server.service
|
||||||
|
Wants=redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=searxng
|
||||||
|
Group=searxng
|
||||||
|
Environment="SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml"
|
||||||
|
ExecStart=/usr/local/searxng/searx-pyenv/bin/python -m searx.webapp
|
||||||
|
WorkingDirectory=/usr/local/searxng/searxng-src
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now searxng
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get autoremove
|
||||||
|
$STD apt-get autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -23,11 +23,13 @@ $STD apt install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup SQL Server 2022"
|
msg_info "Setup SQL Server 2022"
|
||||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
|
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
|
||||||
$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
|
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
|
||||||
|
#$STD curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
|
||||||
|
#$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
|
||||||
$STD apt-get clean *
|
$STD apt-get clean *
|
||||||
$STD apt-get update -y
|
$STD apt-get update -y
|
||||||
$STD apt-get install -y mssql-server
|
apt-get install -y mssql-server
|
||||||
msg_ok "Setup Server 2022"
|
msg_ok "Setup Server 2022"
|
||||||
|
|
||||||
msg_info "Installing SQL Server Tools"
|
msg_info "Installing SQL Server Tools"
|
||||||
|
|||||||
53
install/suwayomiserver-install.sh
Normal file
53
install/suwayomiserver-install.sh
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: tremor021
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Suwayomi/Suwayomi-Server
|
||||||
|
|
||||||
|
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 \
|
||||||
|
openjdk-17-jre \
|
||||||
|
libc++-dev
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Settting up Suwayomi-Server"
|
||||||
|
URL=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
wget -q $URL
|
||||||
|
$STD dpkg -i *.deb
|
||||||
|
echo ${RELEASE} >/opt/suwayomi-server_version.txt
|
||||||
|
msg_ok "Done setting up Suwayomi-Server"
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/suwayomi-server.service
|
||||||
|
[Unit]
|
||||||
|
Description=Suwayomi-Server Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/suwayomi-server
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now suwayomi-server
|
||||||
|
msg_ok "Created Service"
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f *.deb
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
87
install/tasmocompiler-install.sh
Normal file
87
install/tasmocompiler-install.sh
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/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/benzino77/tasmocompiler
|
||||||
|
|
||||||
|
# Import Functions und Setup
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies. Patience"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
gnupg \
|
||||||
|
git
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Python3"
|
||||||
|
$STD apt-get install -y python3-venv
|
||||||
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
|
msg_info "Setup Node.js & yarn"
|
||||||
|
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
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
$STD npm install -g yarn
|
||||||
|
msg_ok "Setup Node.js & yarn"
|
||||||
|
|
||||||
|
msg_info "Setup Platformio"
|
||||||
|
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
|
||||||
|
$STD python3 get-platformio.py
|
||||||
|
msg_ok "Setup Platformio"
|
||||||
|
|
||||||
|
msg_info "Setup TasmoCompiler"
|
||||||
|
mkdir /tmp/Tasmota
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz -O /tmp/v${RELEASE}.tar.gz
|
||||||
|
cd /tmp
|
||||||
|
tar xzf /tmp/v${RELEASE}.tar.gz
|
||||||
|
mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/
|
||||||
|
cd /opt/tasmocompiler
|
||||||
|
$STD yarn install
|
||||||
|
export NODE_OPTIONS=--openssl-legacy-provider
|
||||||
|
$STD npm i
|
||||||
|
$STD yarn build
|
||||||
|
mkdir -p /usr/local/bin
|
||||||
|
ln -s ~/.platformio/penv/bin/platformio /usr/local/bin/platformio
|
||||||
|
ln -s ~/.platformio/penv/bin/pio /usr/local/bin/pio
|
||||||
|
ln -s ~/.platformio/penv/bin/piodebuggdb /usr/local/bin/piodebuggdb
|
||||||
|
echo "${RELEASE}" >"/opt/tasmocompiler_version.txt"
|
||||||
|
msg_ok "Setup TasmoCompiler"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/tasmocompiler.service
|
||||||
|
[Unit]
|
||||||
|
Description=TasmoCompiler Service
|
||||||
|
After=multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
ExecStart=/usr/bin/node /opt/tasmocompiler/server/app.js
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now tasmocompiler
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f /tmp/v${RELEASE}.tar.gz
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 tteck
|
||||||
# Author: tteck (tteckster)
|
# Author: tteck (tteckster)
|
||||||
# License: MIT
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
|
|
||||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
@@ -14,23 +13,24 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y curl
|
$STD apt-get install -y \
|
||||||
$STD apt-get install -y sudo
|
curl \
|
||||||
$STD apt-get install -y mc
|
sudo \
|
||||||
|
mc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup TriliumNext"
|
||||||
|
cd /opt
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
|
||||||
msg_info "Installing TriliumNext"
|
|
||||||
wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
||||||
tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
||||||
mv trilium-linux-x64-server /opt/trilium
|
mv trilium-linux-x64-server /opt/trilium
|
||||||
msg_ok "Installed TriliumNext"
|
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||||
|
msg_ok "Setup TriliumNext"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
service_path="/etc/systemd/system/trilium.service"
|
cat <<EOF >/etc/systemd/system/trilium.service
|
||||||
|
[Unit]
|
||||||
echo "[Unit]
|
|
||||||
Description=Trilium Daemon
|
Description=Trilium Daemon
|
||||||
After=syslog.target network.target
|
After=syslog.target network.target
|
||||||
|
|
||||||
@@ -43,7 +43,8 @@ TimeoutStopSec=20
|
|||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target" >$service_path
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
systemctl enable --now -q trilium
|
systemctl enable --now -q trilium
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
@@ -51,7 +52,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm -rf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
93
install/watcharr-install.sh
Normal file
93
install/watcharr-install.sh
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/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/sbondCo/Watcharr
|
||||||
|
|
||||||
|
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 \
|
||||||
|
gcc \
|
||||||
|
gnupg
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Golang"
|
||||||
|
set +o pipefail
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
|
tar -C /usr/local -xzf "$temp_file"
|
||||||
|
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||||
|
rm -f "$temp_file"
|
||||||
|
set -o pipefail
|
||||||
|
msg_ok "Setup Golang"
|
||||||
|
|
||||||
|
msg_info "Setup Node.js"
|
||||||
|
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
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
msg_ok "Setup Node.js"
|
||||||
|
|
||||||
|
msg_info "Setup Watcharr"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
|
||||||
|
tar -xzf "$temp_file"
|
||||||
|
mv Watcharr-${RELEASE}/ /opt/watcharr
|
||||||
|
cd /opt/watcharr
|
||||||
|
$STD npm i
|
||||||
|
$STD npm run build
|
||||||
|
mv ./build ./server/ui
|
||||||
|
cd server
|
||||||
|
export CGO_ENABLED=1 GOOS=linux
|
||||||
|
go mod download
|
||||||
|
go build -o ./watcharr
|
||||||
|
cat <<EOF >/opt/start.sh
|
||||||
|
#! /bin/bash
|
||||||
|
source ~/.bashrc
|
||||||
|
cd /opt/watcharr/server
|
||||||
|
./watcharr
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/start.sh
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Setup Watcharr"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/watcharr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Watcharr Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/watcharr/server
|
||||||
|
ExecStart=/opt/start.sh
|
||||||
|
Restart=always
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now watcharr
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -16,7 +16,8 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
curl \
|
curl \
|
||||||
mc \
|
mc \
|
||||||
sudo
|
sudo \
|
||||||
|
gnupg
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Zerotier-One"
|
msg_info "Setting up Zerotier-One"
|
||||||
|
|||||||
155
install/zitadel-install.sh
Normal file
155
install/zitadel-install.sh
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: dave-yap
|
||||||
|
# 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 (Patience)"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
ca-certificates \
|
||||||
|
wget
|
||||||
|
msg_ok "Installed Dependecies"
|
||||||
|
|
||||||
|
msg_info "Installing Postgresql"
|
||||||
|
$STD apt-get install -y postgresql postgresql-common
|
||||||
|
DB_NAME="zitadel"
|
||||||
|
DB_USER="zitadel"
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
DB_ADMIN_USER="root"
|
||||||
|
DB_ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
systemctl start postgresql
|
||||||
|
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE USER $DB_ADMIN_USER WITH PASSWORD '$DB_ADMIN_PASS' SUPERUSER;"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;"
|
||||||
|
{
|
||||||
|
echo "Application Credentials"
|
||||||
|
echo "DB_NAME: $DB_NAME"
|
||||||
|
echo "DB_USER: $DB_USER"
|
||||||
|
echo "DB_PASS: $DB_PASS"
|
||||||
|
echo "DB_ADMIN_USER: $DB_ADMIN_USER"
|
||||||
|
echo "DB_ADMIN_PASS: $DB_ADMIN_PASS"
|
||||||
|
} >> ~/zitadel.creds
|
||||||
|
msg_ok "Installed PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Installing Zitadel"
|
||||||
|
RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
|
||||||
|
wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz
|
||||||
|
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
||||||
|
echo "${RELEASE}" >"/opt/zitadel_version.txt"
|
||||||
|
msg_ok "Installed Zitadel"
|
||||||
|
|
||||||
|
msg_info "Setting up Zitadel Environments"
|
||||||
|
mkdir -p /opt/zitadel
|
||||||
|
echo "/opt/zitadel/config.yaml" > "/opt/zitadel/.config"
|
||||||
|
head -c 32 < <(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9') > "/opt/zitadel/.masterkey"
|
||||||
|
{
|
||||||
|
echo "Config location: $(cat "/opt/zitadel/.config")"
|
||||||
|
echo "Masterkey: $(cat "/opt/zitadel/.masterkey")"
|
||||||
|
} >> ~/zitadel.creds
|
||||||
|
cat <<EOF >/opt/zitadel/config.yaml
|
||||||
|
Port: 8080
|
||||||
|
ExternalPort: 8080
|
||||||
|
ExternalDomain: localhost
|
||||||
|
ExternalSecure: false
|
||||||
|
TLS:
|
||||||
|
Enabled: false
|
||||||
|
KeyPath: ""
|
||||||
|
Key: ""
|
||||||
|
CertPath: ""
|
||||||
|
Cert: ""
|
||||||
|
|
||||||
|
Database:
|
||||||
|
postgres:
|
||||||
|
Host: localhost
|
||||||
|
Port: 5432
|
||||||
|
Database: ${DB_NAME}
|
||||||
|
User:
|
||||||
|
Username: ${DB_USER}
|
||||||
|
Password: ${DB_PASS}
|
||||||
|
SSL:
|
||||||
|
Mode: disable
|
||||||
|
RootCert: ""
|
||||||
|
Cert: ""
|
||||||
|
Key: ""
|
||||||
|
Admin:
|
||||||
|
Username: ${DB_ADMIN_USER}
|
||||||
|
Password: ${DB_ADMIN_PASS}
|
||||||
|
SSL:
|
||||||
|
Mode: disable
|
||||||
|
RootCert: ""
|
||||||
|
Cert: ""
|
||||||
|
Key: ""
|
||||||
|
EOF
|
||||||
|
msg_ok "Installed Zitadel Enviroments"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/zitadel.service
|
||||||
|
[Unit]
|
||||||
|
Description=ZITADEL Identiy Server
|
||||||
|
After=network.target postgresql.service
|
||||||
|
Wants=postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=zitadel
|
||||||
|
Group=zitadel
|
||||||
|
ExecStart=/usr/local/bin/zitadel start --masterkeyFile "/opt/zitadel/.masterkey" --config "/opt/zitadel/config.yaml"
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
TimeoutStartSec=0
|
||||||
|
|
||||||
|
# Security Hardening options
|
||||||
|
ProtectSystem=full
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
NoNewPrivileges=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q zitadel.service
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
msg_info "Zitadel initial setup"
|
||||||
|
zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null &
|
||||||
|
sleep 60
|
||||||
|
kill $(lsof -i | awk '/zitadel/ {print $2}' | head -n1)
|
||||||
|
useradd zitadel
|
||||||
|
echo -e "$(zitadel -v | grep -oP 'v\d+\.\d+\.\d+')" > /opt/Zitadel_version.txt
|
||||||
|
msg_ok "Zitadel initialized"
|
||||||
|
|
||||||
|
msg_info "Set ExternalDomain to current IP and restart Zitadel"
|
||||||
|
IP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
|
sed -i "0,/localhost/s/localhost/${IP}/" /opt/zitadel/config.yaml
|
||||||
|
systemctl stop -q zitadel.service
|
||||||
|
zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null
|
||||||
|
systemctl restart -q zitadel.service
|
||||||
|
msg_ok "Zitadel restarted with ExternalDomain set to current IP"
|
||||||
|
|
||||||
|
msg_info "Create zitadel-rerun.sh"
|
||||||
|
cat <<EOF >~/zitadel-rerun.sh
|
||||||
|
systemctl stop zitadel.service
|
||||||
|
timeout --kill-after=5s 15s zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
|
||||||
|
systemctl restart zitadel.service
|
||||||
|
EOF
|
||||||
|
msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf ~/zitadel-linux-amd64
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "Debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "Debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
39
json/barcode-buddy.json
Normal file
39
json/barcode-buddy.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "Barcode Buddy",
|
||||||
|
"slug": "barcode-buddy",
|
||||||
|
"categories": [
|
||||||
|
24
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-08",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://barcodebuddy-documentation.readthedocs.io/en/latest/",
|
||||||
|
"website": "https://github.com/Forceu/barcodebuddy",
|
||||||
|
"logo": "https://raw.githubusercontent.com/Forceu/barcodebuddy/refs/heads/master/incl/img/favicon/android-icon-192x192.png",
|
||||||
|
"description": "Barcode Buddy for Grocy is an extension for Grocy, allowing to pass barcodes to Grocy. It supports barcodes for products and chores. If you own a physical barcode scanner, it can be integrated, so that all barcodes scanned are automatically pushed to BarcodeBuddy/Grocy.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/barcode-buddy.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 3,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "After install enable the option \"Use Redis cache\" on the settings page.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
35
json/cosmos.json
Normal file
35
json/cosmos.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Cosmos",
|
||||||
|
"slug": "cosmos",
|
||||||
|
"categories": [
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-07",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://cosmos-cloud.io/doc/1%20index/",
|
||||||
|
"website": "https://cosmos-cloud.io/",
|
||||||
|
"logo": "https://cosmos-cloud.io/Logo.png",
|
||||||
|
"description": "Cosmos Cloud is a self-hosting platform that automates maintenance and security. It offers an app marketplace, reverse proxy management, container control, VPN integration, real-time monitoring, and disk management. Security features include SSO, anti-DDoS, and encryption. It simplifies self-hosting for all users.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/cosmos.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
39
json/cross-seed.json
Normal file
39
json/cross-seed.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "cross-seed",
|
||||||
|
"slug": "cross-seed",
|
||||||
|
"categories": [
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-07",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 2468,
|
||||||
|
"documentation": "https://www.cross-seed.org/docs/category/basics",
|
||||||
|
"website": "https://www.cross-seed.org/",
|
||||||
|
"logo": "https://www.cross-seed.org/img/cross-seed.svg",
|
||||||
|
"description": "cross-seed is an app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/cross-seed.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "After the installation cross-seed will fail to start with an empty configuration. To fix this, edit `~/.cross-seed/config.js` to properly configure cross-seed, then restart by running `systemctl restart cross-seed`.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -30,5 +30,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "after installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "entering `evcc configure` in the LXC terminal will guide you through the creation of a configuration file for evcc.",
|
"text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
34
json/excalidraw.json
Normal file
34
json/excalidraw.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Excalidraw",
|
||||||
|
"slug": "excalidraw",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-12",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://docs.excalidraw.com/docs",
|
||||||
|
"website": "https://excalidraw.com/",
|
||||||
|
"logo": "https://docs.excalidraw.com/img/logo.svg",
|
||||||
|
"description": "An open source virtual hand-drawn style whiteboard. Collaborative and end-to-end encrypted.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/excalidraw.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 3072,
|
||||||
|
"hdd": 6,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "Debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
39
json/freshrss.json
Normal file
39
json/freshrss.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "FreshRSS",
|
||||||
|
"slug": "freshrss",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-10",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://freshrss.github.io/FreshRSS/en/",
|
||||||
|
"website": "https://freshrss.org/",
|
||||||
|
"logo": "https://freshrss.org/images/icon.svg",
|
||||||
|
"description": "FreshRSS is a self-hosted RSS and Atom feed aggregator that lets users collect, organize, and read from multiple sources in one place. It is lightweight, easy to work with, powerful, and customizable.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/freshrss.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Database credentials: `cat ~/freshrss.creds`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
43
json/graylog.json
Normal file
43
json/graylog.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Graylog",
|
||||||
|
"slug": "graylog",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-12",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9000,
|
||||||
|
"documentation": "https://go2docs.graylog.org/current/home.htm",
|
||||||
|
"website": "https://graylog.org/",
|
||||||
|
"logo": "https://graylog.org/wp-content/uploads/2023/11/gl-logo-horiz-all-white-1200w-300x96.png.webp",
|
||||||
|
"description": "Graylog is a free and open log management platform.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/graylog.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 8192,
|
||||||
|
"hdd": 30,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "Debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user