mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 19:02:50 +00:00
Compare commits
225 Commits
2025-02-04
...
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 | ||
|
|
f1eca8a4bf | ||
|
|
199d304841 | ||
|
|
4163526379 | ||
|
|
9272a1181c | ||
|
|
2e51c289ca | ||
|
|
03828943b0 | ||
|
|
d71ef779ec | ||
|
|
9736d5c785 | ||
|
|
ef33864adf | ||
|
|
d7b6a97415 | ||
|
|
5b4c417729 | ||
|
|
9c4e9ed4be | ||
|
|
5a25348e04 | ||
|
|
f5a73a5449 | ||
|
|
82fecd7bbd | ||
|
|
9badef6f03 | ||
|
|
0e2f711cac | ||
|
|
fbec881f70 | ||
|
|
a3f1ff30e0 | ||
|
|
4eb93ea49b | ||
|
|
7d8ecead7d | ||
|
|
5cf1f880c6 | ||
|
|
873ae3e8af | ||
|
|
4a273c7134 | ||
|
|
439a7ed9e8 | ||
|
|
d941af4cf2 | ||
|
|
cb79d7baab | ||
|
|
fbe2fb10af | ||
|
|
1a00ba109b | ||
|
|
88ee57cf15 | ||
|
|
857964653c | ||
|
|
682674727c | ||
|
|
5451e61484 | ||
|
|
778b6be4e0 | ||
|
|
c52c6ec3a3 | ||
|
|
34837c7777 | ||
|
|
f98124a57f | ||
|
|
7838dd6277 | ||
|
|
a6f656eacf | ||
|
|
43646a8e19 | ||
|
|
8b52639d23 | ||
|
|
8afb439ed7 | ||
|
|
42b175144a | ||
|
|
cb6e2c4455 | ||
|
|
8662be2e4e | ||
|
|
f66f43d91a | ||
|
|
c112edd8ac | ||
|
|
398bae1f64 | ||
|
|
7c2a6822b5 | ||
|
|
3a33e006d4 | ||
|
|
3aedafbfc6 | ||
|
|
4587352377 |
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.
|
||||||
|
|||||||
3
.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
vendored
3
.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]
|
||||||
@@ -66,7 +64,6 @@ function update_script() {
|
|||||||
# Starting Services
|
# Starting Services
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start [SERVICE_NAME]
|
systemctl start [SERVICE_NAME]
|
||||||
sleep 2
|
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
# Cleaning up
|
# Cleaning up
|
||||||
|
|||||||
@@ -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. -->
|
||||||
|
|
||||||
|
|||||||
27
.github/workflows/auto-update-app-headers.yml
vendored
27
.github/workflows/auto-update-app-headers.yml
vendored
@@ -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
|
||||||
@@ -70,8 +77,28 @@ jobs:
|
|||||||
--head pr-update-app-files \
|
--head pr-update-app-files \
|
||||||
--base main \
|
--base main \
|
||||||
--label "automated pr"
|
--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-update-app-files" --json number --jq '.[].number')
|
||||||
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
|
gh pr review $PR_NUMBER --approve
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Re-approve pull request after update
|
||||||
|
if: env.changed == 'true'
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
|
||||||
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
|
gh pr review $PR_NUMBER --approve
|
||||||
|
fi
|
||||||
|
|
||||||
# Step 8: Output success message when no changes
|
# Step 8: Output success message when no changes
|
||||||
- name: No changes detected
|
- name: No changes detected
|
||||||
|
|||||||
48
.github/workflows/changelog-pr.yml
vendored
48
.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,10 +55,10 @@ 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);
|
||||||
|
|
||||||
const { data: pulls } = await github.rest.pulls.list({
|
const { data: pulls } = await github.rest.pulls.list({
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
@@ -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
|
||||||
|
|||||||
4
.github/workflows/validate-filenames.yml
vendored
4
.github/workflows/validate-filenames.yml
vendored
@@ -50,6 +50,10 @@ jobs:
|
|||||||
|
|
||||||
NON_COMPLIANT_FILES=""
|
NON_COMPLIANT_FILES=""
|
||||||
for FILE in $CHANGED_FILES; do
|
for FILE in $CHANGED_FILES; do
|
||||||
|
# Datei "ct/create_lxc.sh" explizit überspringen
|
||||||
|
if [[ "$FILE" == "ct/create_lxc.sh" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
BASENAME=$(echo "$(basename "${FILE%.*}")")
|
BASENAME=$(echo "$(basename "${FILE%.*}")")
|
||||||
if [[ ! "$BASENAME" =~ ^[a-z0-9-]+$ ]]; then
|
if [[ ! "$BASENAME" =~ ^[a-z0-9-]+$ ]]; then
|
||||||
NON_COMPLIANT_FILES="$NON_COMPLIANT_FILES $FILE"
|
NON_COMPLIANT_FILES="$NON_COMPLIANT_FILES $FILE"
|
||||||
|
|||||||
217
CHANGELOG.md
217
CHANGELOG.md
@@ -17,6 +17,223 @@ 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
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Duplicati [@tremor021](https://github.com/tremor021) ([#2052](https://github.com/community-scripts/ProxmoxVE/pull/2052))
|
||||||
|
- New Script: Paperless-AI [@MickLesk](https://github.com/MickLesk) ([#2093](https://github.com/community-scripts/ProxmoxVE/pull/2093))
|
||||||
|
- New Script: Apache Tika [@andygrunwald](https://github.com/andygrunwald) ([#2079](https://github.com/community-scripts/ProxmoxVE/pull/2079))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Alpine IT-Tools Update [@MickLesk](https://github.com/MickLesk) ([#2067](https://github.com/community-scripts/ProxmoxVE/pull/2067))
|
||||||
|
- Fix: Pocket-ID Change link to GH Repo [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2082](https://github.com/community-scripts/ProxmoxVE/pull/2082))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Refactor JSON generator buttons layout for better alignment and consistency [@BramSuurdje](https://github.com/BramSuurdje) ([#2106](https://github.com/community-scripts/ProxmoxVE/pull/2106))
|
||||||
|
- Website: Refactor Footer for improved layout and styling consistency [@BramSuurdje](https://github.com/BramSuurdje) ([#2107](https://github.com/community-scripts/ProxmoxVE/pull/2107))
|
||||||
|
- Website: Update Footer for Json-Editor & Api [@MickLesk](https://github.com/MickLesk) ([#2100](https://github.com/community-scripts/ProxmoxVE/pull/2100))
|
||||||
|
- Website: Add Download for json-editor [@MickLesk](https://github.com/MickLesk) ([#2099](https://github.com/community-scripts/ProxmoxVE/pull/2099))
|
||||||
|
- Radicale: Provide additional information about configuration [@tremor021](https://github.com/tremor021) ([#2072](https://github.com/community-scripts/ProxmoxVE/pull/2072))
|
||||||
|
|
||||||
|
## 2025-02-05
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Zerotier Controller [@tremor021](https://github.com/tremor021) ([#1928](https://github.com/community-scripts/ProxmoxVE/pull/1928))
|
||||||
|
- New Script: Radicale [@tremor021](https://github.com/tremor021) ([#1941](https://github.com/community-scripts/ProxmoxVE/pull/1941))
|
||||||
|
- New Script: seelf [@tremor021](https://github.com/tremor021) ([#2023](https://github.com/community-scripts/ProxmoxVE/pull/2023))
|
||||||
|
- New Script: Crafty-Controller [@CrazyWolf13](https://github.com/CrazyWolf13) ([#1926](https://github.com/community-scripts/ProxmoxVE/pull/1926))
|
||||||
|
- New script: Koillection [@bvdberg01](https://github.com/bvdberg01) ([#2031](https://github.com/community-scripts/ProxmoxVE/pull/2031))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Bugfix: Jellyseerr pnpm Version [@vidonnus](https://github.com/vidonnus) ([#2033](https://github.com/community-scripts/ProxmoxVE/pull/2033))
|
||||||
|
- Radicale: Fixed missing htpasswd flag [@tremor021](https://github.com/tremor021) ([#2065](https://github.com/community-scripts/ProxmoxVE/pull/2065))
|
||||||
|
- [API] Update build.func / Improve error messages #2 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2050](https://github.com/community-scripts/ProxmoxVE/pull/2050))
|
||||||
|
- [API] Update create-lxc.sh / Improve error messages #1 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2049](https://github.com/community-scripts/ProxmoxVE/pull/2049))
|
||||||
|
- Feature: Element Synapse: add option to enter server name during LXC installation [@tremor021](https://github.com/tremor021) ([#2038](https://github.com/community-scripts/ProxmoxVE/pull/2038))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Paperless NGX: Mark it as updateable [@andygrunwald](https://github.com/andygrunwald) ([#2070](https://github.com/community-scripts/ProxmoxVE/pull/2070))
|
||||||
|
- Bump vitest from 2.1.6 to 2.1.9 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#2042](https://github.com/community-scripts/ProxmoxVE/pull/2042))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [API] Add API backend code [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2040](https://github.com/community-scripts/ProxmoxVE/pull/2040))
|
||||||
|
- Update auto-update-app-headers.yml: Enable auto approval [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2057](https://github.com/community-scripts/ProxmoxVE/pull/2057))
|
||||||
|
|
||||||
## 2025-02-04
|
## 2025-02-04
|
||||||
|
|
||||||
### 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).
|
||||||
|
|||||||
5
api/.env.example
Normal file
5
api/.env.example
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
MONGO_USER=
|
||||||
|
MONGO_PASSWORD=
|
||||||
|
MONGO_IP=
|
||||||
|
MONGO_PORT=
|
||||||
|
MONGO_DATABASE=
|
||||||
32
api/go.mod
Normal file
32
api/go.mod
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
module proxmox-api
|
||||||
|
|
||||||
|
go 1.23.2
|
||||||
|
|
||||||
|
require go.mongodb.org/mongo-driver v1.17.2
|
||||||
|
|
||||||
|
require (
|
||||||
|
filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
|
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
||||||
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
|
github.com/gorilla/mux v1.8.1 // indirect
|
||||||
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
||||||
|
github.com/jackc/pgx/v5 v5.7.2 // indirect
|
||||||
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/joho/godotenv v1.5.1 // indirect
|
||||||
|
github.com/klauspost/compress v1.16.7 // indirect
|
||||||
|
github.com/montanaflynn/stats v0.7.1 // indirect
|
||||||
|
github.com/rs/cors v1.11.1 // indirect
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
||||||
|
github.com/xdg-go/scram v1.1.2 // indirect
|
||||||
|
github.com/xdg-go/stringprep v1.0.4 // indirect
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
|
||||||
|
golang.org/x/crypto v0.32.0 // indirect
|
||||||
|
golang.org/x/sync v0.10.0 // indirect
|
||||||
|
golang.org/x/text v0.21.0 // indirect
|
||||||
|
gorm.io/driver/mysql v1.5.7 // indirect
|
||||||
|
gorm.io/driver/postgres v1.5.11 // indirect
|
||||||
|
gorm.io/gorm v1.25.12 // indirect
|
||||||
|
)
|
||||||
83
api/go.sum
Normal file
83
api/go.sum
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||||
|
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
|
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||||
|
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||||
|
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
||||||
|
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||||
|
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||||
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
|
||||||
|
github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI=
|
||||||
|
github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ=
|
||||||
|
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
|
||||||
|
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
|
||||||
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
|
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
|
||||||
|
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||||
|
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
|
||||||
|
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
|
||||||
|
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||||
|
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
|
||||||
|
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||||
|
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
|
||||||
|
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
|
go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793SqyhzM=
|
||||||
|
go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||||
|
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||||
|
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
|
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||||
|
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
|
||||||
|
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
||||||
|
gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314=
|
||||||
|
gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
|
||||||
|
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
|
||||||
|
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
||||||
167
api/main.go
Normal file
167
api/main.go
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
// Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
// Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||||
|
// License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/rs/cors"
|
||||||
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
|
)
|
||||||
|
|
||||||
|
var client *mongo.Client
|
||||||
|
var collection *mongo.Collection
|
||||||
|
|
||||||
|
func loadEnv() {
|
||||||
|
if err := godotenv.Load(); err != nil {
|
||||||
|
log.Fatal("Error loading .env file")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type DataModel struct {
|
||||||
|
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
|
||||||
|
CT_TYPE uint `json:"ct_type" bson:"ct_type"`
|
||||||
|
DISK_SIZE float32 `json:"disk_size" bson:"disk_size"`
|
||||||
|
CORE_COUNT uint `json:"core_count" bson:"core_count"`
|
||||||
|
RAM_SIZE uint `json:"ram_size" bson:"ram_size"`
|
||||||
|
OS_TYPE string `json:"os_type" bson:"os_type"`
|
||||||
|
OS_VERSION string `json:"os_version" bson:"os_version"`
|
||||||
|
DISABLEIP6 string `json:"disableip6" bson:"disableip6"`
|
||||||
|
NSAPP string `json:"nsapp" bson:"nsapp"`
|
||||||
|
METHOD string `json:"method" bson:"method"`
|
||||||
|
CreatedAt time.Time `json:"created_at" bson:"created_at"`
|
||||||
|
PVEVERSION string `json:"pve_version" bson:"pve_version"`
|
||||||
|
STATUS string `json:"status" bson:"status"`
|
||||||
|
RANDOM_ID string `json:"random_id" bson:"random_id"`
|
||||||
|
TYPE string `json:"type" bson:"type"`
|
||||||
|
ERROR string `json:"error" bson:"error"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusModel struct {
|
||||||
|
RANDOM_ID string `json:"random_id" bson:"random_id"`
|
||||||
|
ERROR string `json:"error" bson:"error"`
|
||||||
|
STATUS string `json:"status" bson:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func ConnectDatabase() {
|
||||||
|
loadEnv()
|
||||||
|
|
||||||
|
mongoURI := fmt.Sprintf("mongodb://%s:%s@%s:%s",
|
||||||
|
os.Getenv("MONGO_USER"),
|
||||||
|
os.Getenv("MONGO_PASSWORD"),
|
||||||
|
os.Getenv("MONGO_IP"),
|
||||||
|
os.Getenv("MONGO_PORT"))
|
||||||
|
|
||||||
|
database := os.Getenv("MONGO_DATABASE")
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
var err error
|
||||||
|
client, err = mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Failed to connect to MongoDB!", err)
|
||||||
|
}
|
||||||
|
collection = client.Database(database).Collection("data_models")
|
||||||
|
fmt.Println("Connected to MongoDB on 10.10.10.18")
|
||||||
|
}
|
||||||
|
|
||||||
|
func UploadJSON(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var input DataModel
|
||||||
|
|
||||||
|
if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
input.CreatedAt = time.Now()
|
||||||
|
|
||||||
|
_, err := collection.InsertOne(context.Background(), input)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Received data:", input)
|
||||||
|
w.WriteHeader(http.StatusCreated)
|
||||||
|
json.NewEncoder(w).Encode(map[string]string{"message": "Data saved successfully"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateStatus(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var input StatusModel
|
||||||
|
|
||||||
|
if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
filter := bson.M{"random_id": input.RANDOM_ID}
|
||||||
|
update := bson.M{"$set": bson.M{"status": input.STATUS, "error": input.ERROR}}
|
||||||
|
|
||||||
|
_, err := collection.UpdateOne(context.Background(), filter, update)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Updated data:", input)
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
json.NewEncoder(w).Encode(map[string]string{"message": "Record updated successfully"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataJSON(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var records []DataModel
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
cursor, err := collection.Find(ctx, bson.M{})
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer cursor.Close(ctx)
|
||||||
|
|
||||||
|
for cursor.Next(ctx) {
|
||||||
|
var record DataModel
|
||||||
|
if err := cursor.Decode(&record); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
records = append(records, record)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
json.NewEncoder(w).Encode(records)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ConnectDatabase()
|
||||||
|
|
||||||
|
router := mux.NewRouter()
|
||||||
|
router.HandleFunc("/upload", UploadJSON).Methods("POST")
|
||||||
|
router.HandleFunc("/upload/updatestatus", UpdateStatus).Methods("POST")
|
||||||
|
router.HandleFunc("/data/json", GetDataJSON).Methods("GET")
|
||||||
|
|
||||||
|
c := cors.New(cors.Options{
|
||||||
|
AllowedOrigins: []string{"*"},
|
||||||
|
AllowedMethods: []string{"GET", "POST"},
|
||||||
|
AllowedHeaders: []string{"Content-Type", "Authorization"},
|
||||||
|
AllowCredentials: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
handler := c.Handler(router)
|
||||||
|
|
||||||
|
fmt.Println("Server running on port 8080")
|
||||||
|
log.Fatal(http.ListenAndServe(":8080", handler))
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -29,13 +29,13 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /usr/share/nginx/html ]]; then
|
if [ ! -d /usr/share/nginx/html ]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
|
RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ] || [ ! -f /opt/${APP}_version.txt ]; then
|
||||||
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
|
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
|
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
|
||||||
@@ -46,10 +46,11 @@ function update_script() {
|
|||||||
rm -rf /tmp/it-tools
|
rm -rf /tmp/it-tools
|
||||||
rm -f it-tools.zip
|
rm -f it-tools.zip
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit
|
|
||||||
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
69
ct/apache-tika.sh
Executable file
69
ct/apache-tika.sh
Executable file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/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/apache/tika/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Apache-Tika"
|
||||||
|
var_tags="document"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="10"
|
||||||
|
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/apache-tika.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE="$(wget -qO- https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)"
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop apache-tika
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt/apache-tika
|
||||||
|
wget -q "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar"
|
||||||
|
mv --force tika-server-standard.jar tika-server-standard-prev-version.jar
|
||||||
|
mv tika-server-standard-${RELEASE}.jar tika-server-standard.jar
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start apache-tika
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf /opt/apache-tika/tika-server-standard-prev-version.jar
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
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}:9998${CL}"
|
||||||
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}"
|
||||||
90
ct/crafty-controller.sh
Normal file
90
ct/crafty-controller.sh
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Crafty-Controller"
|
||||||
|
var_tags="gaming"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="4096"
|
||||||
|
var_disk="16"
|
||||||
|
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/crafty-controller ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//')
|
||||||
|
if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/crafty-controller_version.txt)" ]]; then
|
||||||
|
|
||||||
|
msg_info "Stopping Crafty-Controller"
|
||||||
|
systemctl stop crafty-controller
|
||||||
|
msg_ok "Stopped Crafty-Controller"
|
||||||
|
|
||||||
|
msg_info "Creating Backup of config"
|
||||||
|
cp -a /opt/crafty-controller/crafty/crafty-4/app/config/. /opt/crafty-controller/backup
|
||||||
|
rm /opt/crafty-controller/backup/version.json
|
||||||
|
rm /opt/crafty-controller/backup/credits.json
|
||||||
|
rm /opt/crafty-controller/backup/logging.json
|
||||||
|
rm /opt/crafty-controller/backup/default.json.example
|
||||||
|
rm /opt/crafty-controller/backup/motd_format.json
|
||||||
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
|
msg_info "Updating Crafty-Controller to v${RELEASE}"
|
||||||
|
wget -q "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip"
|
||||||
|
unzip -q crafty-4-v${RELEASE}.zip
|
||||||
|
cp -a crafty-4-v${RELEASE}/. /opt/crafty-controller/crafty/crafty-4/
|
||||||
|
rm -rf crafty-4-v${RELEASE}
|
||||||
|
cd /opt/crafty-controller/crafty/crafty-4
|
||||||
|
sudo -u crafty bash -c '
|
||||||
|
source /opt/crafty-controller/crafty/.venv/bin/activate
|
||||||
|
pip3 install --no-cache-dir -r requirements.txt
|
||||||
|
' &>/dev/null
|
||||||
|
echo "${RELEASE}" >"/opt/crafty-controller_version.txt"
|
||||||
|
msg_ok "Updated Crafty-Controller to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Restoring Backup of config"
|
||||||
|
cp -a /opt/crafty-controller/backup/. /opt/crafty-controller/crafty/crafty-4/app/config
|
||||||
|
rm -rf /opt/crafty-controller/backup
|
||||||
|
chown -R crafty:crafty /opt/crafty-controller/
|
||||||
|
msg_ok "Backup Restored"
|
||||||
|
|
||||||
|
msg_info "Starting Crafty-Controller"
|
||||||
|
systemctl start crafty-controller
|
||||||
|
msg_ok "Started Crafty-Controller"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
msg_ok "No update required. Crafty-Controller is already at v${RELEASE}."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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}:8443${CL}"
|
||||||
@@ -43,6 +43,7 @@ function error_handler() {
|
|||||||
local command="$2"
|
local command="$2"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
|
exit 200
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function displays a spinner.
|
# This function displays a spinner.
|
||||||
@@ -112,7 +113,7 @@ function select_storage() {
|
|||||||
CONTENT='vztmpl'
|
CONTENT='vztmpl'
|
||||||
CONTENT_LABEL='Container template'
|
CONTENT_LABEL='Container template'
|
||||||
;;
|
;;
|
||||||
*) false || exit "Invalid storage class." ;;
|
*) false || { msg_error "Invalid storage class."; exit 201; };
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# This Queries all storage locations
|
# This Queries all storage locations
|
||||||
@@ -138,7 +139,7 @@ function select_storage() {
|
|||||||
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
||||||
"Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
|
"Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
|
||||||
16 $(($MSG_MAX_LENGTH + 23)) 6 \
|
16 $(($MSG_MAX_LENGTH + 23)) 6 \
|
||||||
"${MENU[@]}" 3>&1 1>&2 2>&3) || exit "Menu aborted."
|
"${MENU[@]}" 3>&1 1>&2 2>&3) || { msg_error "Menu aborted."; exit 202; }
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
|
echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
|
||||||
exit 0
|
exit 0
|
||||||
@@ -148,17 +149,18 @@ function select_storage() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
# Test if required variables are set
|
# Test if required variables are set
|
||||||
[[ "${CTID:-}" ]] || exit "You need to set 'CTID' variable."
|
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; }
|
||||||
[[ "${PCT_OSTYPE:-}" ]] || exit "You need to set 'PCT_OSTYPE' variable."
|
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; }
|
||||||
|
|
||||||
# Test if ID is valid
|
# Test if ID is valid
|
||||||
[ "$CTID" -ge "100" ] || exit "ID cannot be less than 100."
|
[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; }
|
||||||
|
|
||||||
# Test if ID is in use
|
# Test if ID is in use
|
||||||
if pct status $CTID &>/dev/null; then
|
if pct status $CTID &>/dev/null; then
|
||||||
echo -e "ID '$CTID' is already in use."
|
echo -e "ID '$CTID' is already in use."
|
||||||
unset CTID
|
unset CTID
|
||||||
exit "Cannot use ID that is already in use."
|
msg_error "Cannot use ID that is already in use."
|
||||||
|
exit 206
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get template storage
|
# Get template storage
|
||||||
@@ -177,26 +179,40 @@ msg_ok "Updated LXC Template List"
|
|||||||
# Get LXC template string
|
# Get LXC template string
|
||||||
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
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)
|
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
|
||||||
[ ${#TEMPLATES[@]} -gt 0 ] || exit "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
|
[ ${#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 ||
|
||||||
exit "A problem occured while downloading the LXC template."
|
{ msg_error "A problem occurred while downloading the LXC template."; 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 ||
|
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||||
exit "A problem occured while trying to create container."
|
[[ -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."
|
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}"
|
||||||
65
ct/duplicati.sh
Normal file
65
ct/duplicati.sh
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
#!/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/duplicati/duplicati/
|
||||||
|
|
||||||
|
APP="Duplicati"
|
||||||
|
var_tags="backup"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
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 [[ ! -f /usr/bin/duplicati-server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/duplicati/duplicati/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 "Stopping $APP"
|
||||||
|
systemctl stop duplicati
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
wget -q "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb"
|
||||||
|
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start duplicati
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
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}:8200${CL}"
|
||||||
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/apache-tika
Normal file
6
ct/headers/apache-tika
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _______ __
|
||||||
|
/ | ____ ____ ______/ /_ ___ /_ __(_) /______ _
|
||||||
|
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / / / //_/ __ `/
|
||||||
|
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ / / / ,< / /_/ /
|
||||||
|
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ /_/ /_/_/|_|\__,_/
|
||||||
|
/_/
|
||||||
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/crafty-controller
Normal file
6
ct/headers/crafty-controller
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/duplicati
Normal file
6
ct/headers/duplicati
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/koillection
Normal file
6
ct/headers/koillection
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/paperless-ai
Normal file
6
ct/headers/paperless-ai
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/radicale
Normal file
6
ct/headers/radicale
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/seelf
Normal file
6
ct/headers/seelf
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/zerotier-one
Normal file
6
ct/headers/zerotier-one
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
|
||||||
|
|||||||
@@ -50,17 +50,23 @@ function update_script() {
|
|||||||
msg_ok "Cleaning up"
|
msg_ok "Cleaning up"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v pnpm &> /dev/null; then
|
|
||||||
msg_error "pnpm not found. Installing..."
|
|
||||||
npm install -g pnpm &>/dev/null
|
|
||||||
else
|
|
||||||
msg_ok "pnpm is already installed."
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Updating $APP"
|
|
||||||
cd /opt/jellyseerr
|
cd /opt/jellyseerr
|
||||||
output=$(git pull --no-rebase)
|
output=$(git pull --no-rebase)
|
||||||
|
|
||||||
|
pnpm_current=$(pnpm --version 2>/dev/null)
|
||||||
|
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
||||||
|
|
||||||
|
if [ -z "$pnpm_current" ]; then
|
||||||
|
msg_error "pnpm not found. Installing version $pnpm_desired..."
|
||||||
|
npm install -g pnpm@"$pnpm_desired" &>/dev/null
|
||||||
|
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)" ; then
|
||||||
|
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
|
||||||
|
npm install -g pnpm@"$pnpm_desired" &>/dev/null
|
||||||
|
else
|
||||||
|
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating $APP"
|
||||||
if echo "$output" | grep -q "Already up to date."; then
|
if echo "$output" | grep -q "Already up to date."; then
|
||||||
msg_ok "$APP is already up to date."
|
msg_ok "$APP is already up to date."
|
||||||
exit
|
exit
|
||||||
|
|||||||
83
ct/koillection.sh
Normal file
83
ct/koillection.sh
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#!/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://koillection.github.io/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Koillection"
|
||||||
|
var_tags="network"
|
||||||
|
var_cpu="2"
|
||||||
|
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 [[ ! -d /opt/koillection ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop apache2
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
mv /opt/koillection/ /opt/koillection-backup
|
||||||
|
wget -q "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip"
|
||||||
|
unzip -q "${RELEASE}.zip"
|
||||||
|
mv "/opt/koillection-${RELEASE}" /opt/koillection
|
||||||
|
cd /opt/koillection
|
||||||
|
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
||||||
|
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
composer install --no-dev -o --no-interaction --classmap-authoritative &>/dev/null
|
||||||
|
php bin/console doctrine:migrations:migrate --no-interaction &>/dev/null
|
||||||
|
php bin/console app:translations:dump &>/dev/null
|
||||||
|
cd assets/
|
||||||
|
yarn install &>/dev/null
|
||||||
|
yarn build &>/dev/null
|
||||||
|
chown -R www-data:www-data /opt/koillection/public/uploads
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start apache2
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -r "/opt/${RELEASE}.zip"
|
||||||
|
rm -r /opt/koillection-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}"
|
||||||
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}"
|
||||||
75
ct/paperless-ai.sh
Normal file
75
ct/paperless-ai.sh
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/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/clusterzx/paperless-ai
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Paperless-AI"
|
||||||
|
var_tags="ai;document"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="5"
|
||||||
|
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/paperless-ai ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/clusterzx/paperless-ai/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 "Stopping $APP"
|
||||||
|
systemctl stop paperless-ai
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
mv /opt/paperless-ai /opt/paperless-ai_bak
|
||||||
|
wget -q "https://github.com/clusterzx/paperless-ai/archive/refs/tags/v${RELEASE}.zip"
|
||||||
|
unzip -q v${RELEASE}.zip
|
||||||
|
mv paperless-ai-${RELEASE} /opt/paperless-ai
|
||||||
|
mkdir -p /opt/paperless-ai/data
|
||||||
|
cp -a /opt/paperless-ai_bak/data/. /opt/paperless-ai/data/
|
||||||
|
cd /opt/paperless-ai
|
||||||
|
npm install &>/dev/null
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start paperless-ai
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf /opt/v${RELEASE}.zip
|
||||||
|
rm -rf /opt/paperless-ai_bak
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
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}"
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: Snarkenfaugister
|
# Author: Snarkenfaugister
|
||||||
# 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/stonith404/pocket-id
|
# Source: https://github.com/pocket-id/pocket-id
|
||||||
|
|
||||||
# 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"
|
||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/stonith404/pocket-id/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/pocket-id/pocket-id/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
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating $APP"
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ function update_script() {
|
|||||||
cp /opt/pocket-id/backend/.env /opt/backend.env
|
cp /opt/pocket-id/backend/.env /opt/backend.env
|
||||||
cp /opt/pocket-id/frontend/.env /opt/frontend.env
|
cp /opt/pocket-id/frontend/.env /opt/frontend.env
|
||||||
rm -r /opt/pocket-id
|
rm -r /opt/pocket-id
|
||||||
wget -q "https://github.com/stonith404/pocket-id/archive/refs/tags/v${RELEASE}.zip"
|
wget -q "https://github.com/pocket-id/pocket-id/archive/refs/tags/v${RELEASE}.zip"
|
||||||
unzip -q v${RELEASE}.zip
|
unzip -q v${RELEASE}.zip
|
||||||
mv pocket-id-${RELEASE} /opt/pocket-id
|
mv pocket-id-${RELEASE} /opt/pocket-id
|
||||||
mv /opt/data /opt/pocket-id/backend/data
|
mv /opt/data /opt/pocket-id/backend/data
|
||||||
|
|||||||
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}"
|
||||||
56
ct/radicale.sh
Normal file
56
ct/radicale.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/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://radicale.org/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Radicale"
|
||||||
|
var_tags="calendar"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="512"
|
||||||
|
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 [[ ! -d /opt/radicale ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
python3 -m venv /opt/radicale
|
||||||
|
source /opt/radicale/bin/activate
|
||||||
|
python3 -m pip install --upgrade https://github.com/Kozea/Radicale/archive/master.tar.gz
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl enable -q --now radicale
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5232${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}"
|
||||||
77
ct/seelf.sh
Normal file
77
ct/seelf.sh
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/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/YuukanOO/seelf
|
||||||
|
|
||||||
|
APP="seelf"
|
||||||
|
var_tags="server;docker"
|
||||||
|
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 [[ ! -d /opt/seelf ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/YuukanOO/seelf/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 seelf
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}. Patience"
|
||||||
|
export PATH=$PATH:/usr/local/go/bin
|
||||||
|
source ~/.bashrc
|
||||||
|
wget -q "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz"
|
||||||
|
tar -xzf v${RELEASE}.tar.gz
|
||||||
|
cp -r seelf-${RELEASE}/ /opt/seelf
|
||||||
|
cd /opt/seelf
|
||||||
|
make build &> /dev/null
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start seelf
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
# Cleaning up
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f ~/*.tar.gz
|
||||||
|
rm -rf ~/seelf-${RELEASE}
|
||||||
|
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}:8080${CL}"
|
||||||
@@ -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"
|
||||||
|
|||||||
57
ct/zerotier-one.sh
Normal file
57
ct/zerotier-one.sh
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Zerotier-One"
|
||||||
|
var_tags="networking"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="512"
|
||||||
|
var_disk="4"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /usr/sbin/zerotier-one ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop zerotier-one
|
||||||
|
msg_ok "Stopping Service"
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start zerotier-one
|
||||||
|
msg_ok "Started Service"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:3443${CL}"
|
||||||
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}"
|
||||||
428
frontend/package-lock.json
generated
428
frontend/package-lock.json
generated
@@ -72,7 +72,7 @@
|
|||||||
"tailwindcss-animated": "^1.1.2",
|
"tailwindcss-animated": "^1.1.2",
|
||||||
"typescript": "^5",
|
"typescript": "^5",
|
||||||
"vite-tsconfig-paths": "^5.1.3",
|
"vite-tsconfig-paths": "^5.1.3",
|
||||||
"vitest": "^2.1.6"
|
"vitest": "^2.1.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@alloc/quick-lru": {
|
"node_modules/@alloc/quick-lru": {
|
||||||
@@ -471,9 +471,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/aix-ppc64": {
|
"node_modules/@esbuild/aix-ppc64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
|
||||||
"integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
|
"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -484,13 +484,13 @@
|
|||||||
"aix"
|
"aix"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm": {
|
"node_modules/@esbuild/android-arm": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
|
||||||
"integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
|
"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -501,13 +501,13 @@
|
|||||||
"android"
|
"android"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm64": {
|
"node_modules/@esbuild/android-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
|
||||||
"integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
|
"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -518,13 +518,13 @@
|
|||||||
"android"
|
"android"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-x64": {
|
"node_modules/@esbuild/android-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
|
"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -535,13 +535,13 @@
|
|||||||
"android"
|
"android"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-arm64": {
|
"node_modules/@esbuild/darwin-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
|
||||||
"integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
|
"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -552,13 +552,13 @@
|
|||||||
"darwin"
|
"darwin"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-x64": {
|
"node_modules/@esbuild/darwin-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
|
"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -569,13 +569,13 @@
|
|||||||
"darwin"
|
"darwin"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-arm64": {
|
"node_modules/@esbuild/freebsd-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
|
||||||
"integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
|
"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -586,13 +586,13 @@
|
|||||||
"freebsd"
|
"freebsd"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-x64": {
|
"node_modules/@esbuild/freebsd-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
|
"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -603,13 +603,13 @@
|
|||||||
"freebsd"
|
"freebsd"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm": {
|
"node_modules/@esbuild/linux-arm": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
|
||||||
"integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
|
"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -620,13 +620,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm64": {
|
"node_modules/@esbuild/linux-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
|
||||||
"integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
|
"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -637,13 +637,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ia32": {
|
"node_modules/@esbuild/linux-ia32": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
|
||||||
"integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
|
"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -654,13 +654,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-loong64": {
|
"node_modules/@esbuild/linux-loong64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
|
||||||
"integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
|
"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
@@ -671,13 +671,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-mips64el": {
|
"node_modules/@esbuild/linux-mips64el": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
|
||||||
"integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
|
"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"mips64el"
|
"mips64el"
|
||||||
],
|
],
|
||||||
@@ -688,13 +688,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ppc64": {
|
"node_modules/@esbuild/linux-ppc64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
|
||||||
"integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
|
"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -705,13 +705,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-riscv64": {
|
"node_modules/@esbuild/linux-riscv64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
|
||||||
"integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
|
"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@@ -722,13 +722,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-s390x": {
|
"node_modules/@esbuild/linux-s390x": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
|
||||||
"integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
|
"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -739,13 +739,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-x64": {
|
"node_modules/@esbuild/linux-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
|
"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -756,30 +756,13 @@
|
|||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@esbuild/netbsd-arm64": {
|
|
||||||
"version": "0.24.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
|
|
||||||
"integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"netbsd"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/netbsd-x64": {
|
"node_modules/@esbuild/netbsd-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
|
"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -790,30 +773,13 @@
|
|||||||
"netbsd"
|
"netbsd"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@esbuild/openbsd-arm64": {
|
|
||||||
"version": "0.24.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
|
|
||||||
"integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"openbsd"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openbsd-x64": {
|
"node_modules/@esbuild/openbsd-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
|
"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -824,13 +790,13 @@
|
|||||||
"openbsd"
|
"openbsd"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/sunos-x64": {
|
"node_modules/@esbuild/sunos-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
|
"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -841,13 +807,13 @@
|
|||||||
"sunos"
|
"sunos"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-arm64": {
|
"node_modules/@esbuild/win32-arm64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
|
||||||
"integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
|
"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -858,13 +824,13 @@
|
|||||||
"win32"
|
"win32"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-ia32": {
|
"node_modules/@esbuild/win32-ia32": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
|
||||||
"integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
|
"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -875,13 +841,13 @@
|
|||||||
"win32"
|
"win32"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-x64": {
|
"node_modules/@esbuild/win32-x64": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
|
||||||
"integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
|
"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -892,7 +858,7 @@
|
|||||||
"win32"
|
"win32"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint-community/eslint-utils": {
|
"node_modules/@eslint-community/eslint-utils": {
|
||||||
@@ -3204,7 +3170,7 @@
|
|||||||
"version": "19.0.0-rc.1",
|
"version": "19.0.0-rc.1",
|
||||||
"resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz",
|
"resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz",
|
||||||
"integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==",
|
"integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==",
|
||||||
"dev": true,
|
"devOptional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
}
|
}
|
||||||
@@ -3214,7 +3180,7 @@
|
|||||||
"version": "19.0.0-rc.1",
|
"version": "19.0.0-rc.1",
|
||||||
"resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz",
|
"resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz",
|
||||||
"integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==",
|
"integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==",
|
||||||
"dev": true,
|
"devOptional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
}
|
}
|
||||||
@@ -3463,14 +3429,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/expect": {
|
"node_modules/@vitest/expect": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz",
|
||||||
"integrity": "sha512-9M1UR9CAmrhJOMoSwVnPh2rELPKhYo0m/CSgqw9PyStpxtkwhmdM6XYlXGKeYyERY1N6EIuzkQ7e3Lm1WKCoUg==",
|
"integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/spy": "2.1.6",
|
"@vitest/spy": "2.1.9",
|
||||||
"@vitest/utils": "2.1.6",
|
"@vitest/utils": "2.1.9",
|
||||||
"chai": "^5.1.2",
|
"chai": "^5.1.2",
|
||||||
"tinyrainbow": "^1.2.0"
|
"tinyrainbow": "^1.2.0"
|
||||||
},
|
},
|
||||||
@@ -3479,13 +3445,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/mocker": {
|
"node_modules/@vitest/mocker": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz",
|
||||||
"integrity": "sha512-MHZp2Z+Q/A3am5oD4WSH04f9B0T7UvwEb+v5W0kCYMhtXGYbdyl2NUk1wdSMqGthmhpiThPDp/hEoVwu16+u1A==",
|
"integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/spy": "2.1.6",
|
"@vitest/spy": "2.1.9",
|
||||||
"estree-walker": "^3.0.3",
|
"estree-walker": "^3.0.3",
|
||||||
"magic-string": "^0.30.12"
|
"magic-string": "^0.30.12"
|
||||||
},
|
},
|
||||||
@@ -3494,7 +3460,7 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"msw": "^2.4.9",
|
"msw": "^2.4.9",
|
||||||
"vite": "^5.0.0 || ^6.0.0"
|
"vite": "^5.0.0"
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
"msw": {
|
"msw": {
|
||||||
@@ -3506,9 +3472,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/pretty-format": {
|
"node_modules/@vitest/pretty-format": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz",
|
||||||
"integrity": "sha512-exZyLcEnHgDMKc54TtHca4McV4sKT+NKAe9ix/yhd/qkYb/TP8HTyXRFDijV19qKqTZM0hPL4753zU/U8L/gAA==",
|
"integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -3519,13 +3485,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/runner": {
|
"node_modules/@vitest/runner": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz",
|
||||||
"integrity": "sha512-SjkRGSFyrA82m5nz7To4CkRSEVWn/rwQISHoia/DB8c6IHIhaE/UNAo+7UfeaeJRE979XceGl00LNkIz09RFsA==",
|
"integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/utils": "2.1.6",
|
"@vitest/utils": "2.1.9",
|
||||||
"pathe": "^1.1.2"
|
"pathe": "^1.1.2"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
@@ -3533,13 +3499,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/snapshot": {
|
"node_modules/@vitest/snapshot": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz",
|
||||||
"integrity": "sha512-5JTWHw8iS9l3v4/VSuthCndw1lN/hpPB+mlgn1BUhFbobeIUj1J1V/Bj2t2ovGEmkXLTckFjQddsxS5T6LuVWw==",
|
"integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/pretty-format": "2.1.6",
|
"@vitest/pretty-format": "2.1.9",
|
||||||
"magic-string": "^0.30.12",
|
"magic-string": "^0.30.12",
|
||||||
"pathe": "^1.1.2"
|
"pathe": "^1.1.2"
|
||||||
},
|
},
|
||||||
@@ -3548,9 +3514,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/spy": {
|
"node_modules/@vitest/spy": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz",
|
||||||
"integrity": "sha512-oTFObV8bd4SDdRka5O+mSh5w9irgx5IetrD5i+OsUUsk/shsBoHifwCzy45SAORzAhtNiprUVaK3hSCCzZh1jQ==",
|
"integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -3561,13 +3527,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/utils": {
|
"node_modules/@vitest/utils": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz",
|
||||||
"integrity": "sha512-ixNkFy3k4vokOUTU2blIUvOgKq/N2PW8vKIjZZYsGJCMX69MRa9J2sKqX5hY/k5O5Gty3YJChepkqZ3KM9LyIQ==",
|
"integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/pretty-format": "2.1.6",
|
"@vitest/pretty-format": "2.1.9",
|
||||||
"loupe": "^3.1.2",
|
"loupe": "^3.1.2",
|
||||||
"tinyrainbow": "^1.2.0"
|
"tinyrainbow": "^1.2.0"
|
||||||
},
|
},
|
||||||
@@ -4829,9 +4795,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/es-module-lexer": {
|
"node_modules/es-module-lexer": {
|
||||||
"version": "1.5.4",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
|
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
|
||||||
"integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
|
"integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -4892,9 +4858,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esbuild": {
|
"node_modules/esbuild": {
|
||||||
"version": "0.24.2",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
|
||||||
"integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
|
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -4902,34 +4868,32 @@
|
|||||||
"esbuild": "bin/esbuild"
|
"esbuild": "bin/esbuild"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@esbuild/aix-ppc64": "0.24.2",
|
"@esbuild/aix-ppc64": "0.21.5",
|
||||||
"@esbuild/android-arm": "0.24.2",
|
"@esbuild/android-arm": "0.21.5",
|
||||||
"@esbuild/android-arm64": "0.24.2",
|
"@esbuild/android-arm64": "0.21.5",
|
||||||
"@esbuild/android-x64": "0.24.2",
|
"@esbuild/android-x64": "0.21.5",
|
||||||
"@esbuild/darwin-arm64": "0.24.2",
|
"@esbuild/darwin-arm64": "0.21.5",
|
||||||
"@esbuild/darwin-x64": "0.24.2",
|
"@esbuild/darwin-x64": "0.21.5",
|
||||||
"@esbuild/freebsd-arm64": "0.24.2",
|
"@esbuild/freebsd-arm64": "0.21.5",
|
||||||
"@esbuild/freebsd-x64": "0.24.2",
|
"@esbuild/freebsd-x64": "0.21.5",
|
||||||
"@esbuild/linux-arm": "0.24.2",
|
"@esbuild/linux-arm": "0.21.5",
|
||||||
"@esbuild/linux-arm64": "0.24.2",
|
"@esbuild/linux-arm64": "0.21.5",
|
||||||
"@esbuild/linux-ia32": "0.24.2",
|
"@esbuild/linux-ia32": "0.21.5",
|
||||||
"@esbuild/linux-loong64": "0.24.2",
|
"@esbuild/linux-loong64": "0.21.5",
|
||||||
"@esbuild/linux-mips64el": "0.24.2",
|
"@esbuild/linux-mips64el": "0.21.5",
|
||||||
"@esbuild/linux-ppc64": "0.24.2",
|
"@esbuild/linux-ppc64": "0.21.5",
|
||||||
"@esbuild/linux-riscv64": "0.24.2",
|
"@esbuild/linux-riscv64": "0.21.5",
|
||||||
"@esbuild/linux-s390x": "0.24.2",
|
"@esbuild/linux-s390x": "0.21.5",
|
||||||
"@esbuild/linux-x64": "0.24.2",
|
"@esbuild/linux-x64": "0.21.5",
|
||||||
"@esbuild/netbsd-arm64": "0.24.2",
|
"@esbuild/netbsd-x64": "0.21.5",
|
||||||
"@esbuild/netbsd-x64": "0.24.2",
|
"@esbuild/openbsd-x64": "0.21.5",
|
||||||
"@esbuild/openbsd-arm64": "0.24.2",
|
"@esbuild/sunos-x64": "0.21.5",
|
||||||
"@esbuild/openbsd-x64": "0.24.2",
|
"@esbuild/win32-arm64": "0.21.5",
|
||||||
"@esbuild/sunos-x64": "0.24.2",
|
"@esbuild/win32-ia32": "0.21.5",
|
||||||
"@esbuild/win32-arm64": "0.24.2",
|
"@esbuild/win32-x64": "0.21.5"
|
||||||
"@esbuild/win32-ia32": "0.24.2",
|
|
||||||
"@esbuild/win32-x64": "0.24.2"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/escalade": {
|
"node_modules/escalade": {
|
||||||
@@ -6945,9 +6909,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/loupe": {
|
"node_modules/loupe": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
|
||||||
"integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==",
|
"integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -6992,9 +6956,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/magic-string": {
|
"node_modules/magic-string": {
|
||||||
"version": "0.30.14",
|
"version": "0.30.17",
|
||||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz",
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
|
||||||
"integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==",
|
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -7805,7 +7769,6 @@
|
|||||||
"version": "3.3.3",
|
"version": "3.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
|
||||||
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
|
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"prettier": "bin/prettier.cjs"
|
"prettier": "bin/prettier.cjs"
|
||||||
@@ -9508,7 +9471,6 @@
|
|||||||
"version": "5.6.3",
|
"version": "5.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||||
"dev": true,
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
@@ -9642,21 +9604,21 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.0.11",
|
"version": "5.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz",
|
||||||
"integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==",
|
"integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.24.2",
|
"esbuild": "^0.21.3",
|
||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.43",
|
||||||
"rollup": "^4.23.0"
|
"rollup": "^4.20.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
|
"node": "^18.0.0 || >=20.0.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/vitejs/vite?sponsor=1"
|
"url": "https://github.com/vitejs/vite?sponsor=1"
|
||||||
@@ -9665,25 +9627,19 @@
|
|||||||
"fsevents": "~2.3.3"
|
"fsevents": "~2.3.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
|
"@types/node": "^18.0.0 || >=20.0.0",
|
||||||
"jiti": ">=1.21.0",
|
|
||||||
"less": "*",
|
"less": "*",
|
||||||
"lightningcss": "^1.21.0",
|
"lightningcss": "^1.21.0",
|
||||||
"sass": "*",
|
"sass": "*",
|
||||||
"sass-embedded": "*",
|
"sass-embedded": "*",
|
||||||
"stylus": "*",
|
"stylus": "*",
|
||||||
"sugarss": "*",
|
"sugarss": "*",
|
||||||
"terser": "^5.16.0",
|
"terser": "^5.4.0"
|
||||||
"tsx": "^4.8.1",
|
|
||||||
"yaml": "^2.4.2"
|
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"jiti": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"less": {
|
"less": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
@@ -9704,19 +9660,13 @@
|
|||||||
},
|
},
|
||||||
"terser": {
|
"terser": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
|
||||||
"tsx": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"yaml": {
|
|
||||||
"optional": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite-node": {
|
"node_modules/vite-node": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz",
|
||||||
"integrity": "sha512-DBfJY0n9JUwnyLxPSSUmEePT21j8JZp/sR9n+/gBwQU6DcQOioPdb8/pibWfXForbirSagZCilseYIwaL3f95A==",
|
"integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -9724,13 +9674,13 @@
|
|||||||
"debug": "^4.3.7",
|
"debug": "^4.3.7",
|
||||||
"es-module-lexer": "^1.5.4",
|
"es-module-lexer": "^1.5.4",
|
||||||
"pathe": "^1.1.2",
|
"pathe": "^1.1.2",
|
||||||
"vite": "^5.0.0 || ^6.0.0"
|
"vite": "^5.0.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite-node": "vite-node.mjs"
|
"vite-node": "vite-node.mjs"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
|
"node": "^18.0.0 || >=20.0.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://opencollective.com/vitest"
|
"url": "https://opencollective.com/vitest"
|
||||||
@@ -9757,19 +9707,19 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vitest": {
|
"node_modules/vitest": {
|
||||||
"version": "2.1.6",
|
"version": "2.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz",
|
||||||
"integrity": "sha512-isUCkvPL30J4c5O5hgONeFRsDmlw6kzFEdLQHLezmDdKQHy8Ke/B/dgdTMEgU0vm+iZ0TjW8GuK83DiahBoKWQ==",
|
"integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/expect": "2.1.6",
|
"@vitest/expect": "2.1.9",
|
||||||
"@vitest/mocker": "2.1.6",
|
"@vitest/mocker": "2.1.9",
|
||||||
"@vitest/pretty-format": "^2.1.6",
|
"@vitest/pretty-format": "^2.1.9",
|
||||||
"@vitest/runner": "2.1.6",
|
"@vitest/runner": "2.1.9",
|
||||||
"@vitest/snapshot": "2.1.6",
|
"@vitest/snapshot": "2.1.9",
|
||||||
"@vitest/spy": "2.1.6",
|
"@vitest/spy": "2.1.9",
|
||||||
"@vitest/utils": "2.1.6",
|
"@vitest/utils": "2.1.9",
|
||||||
"chai": "^5.1.2",
|
"chai": "^5.1.2",
|
||||||
"debug": "^4.3.7",
|
"debug": "^4.3.7",
|
||||||
"expect-type": "^1.1.0",
|
"expect-type": "^1.1.0",
|
||||||
@@ -9780,24 +9730,24 @@
|
|||||||
"tinyexec": "^0.3.1",
|
"tinyexec": "^0.3.1",
|
||||||
"tinypool": "^1.0.1",
|
"tinypool": "^1.0.1",
|
||||||
"tinyrainbow": "^1.2.0",
|
"tinyrainbow": "^1.2.0",
|
||||||
"vite": "^5.0.0 || ^6.0.0",
|
"vite": "^5.0.0",
|
||||||
"vite-node": "2.1.6",
|
"vite-node": "2.1.9",
|
||||||
"why-is-node-running": "^2.3.0"
|
"why-is-node-running": "^2.3.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vitest": "vitest.mjs"
|
"vitest": "vitest.mjs"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
|
"node": "^18.0.0 || >=20.0.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://opencollective.com/vitest"
|
"url": "https://opencollective.com/vitest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@edge-runtime/vm": "*",
|
"@edge-runtime/vm": "*",
|
||||||
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
|
"@types/node": "^18.0.0 || >=20.0.0",
|
||||||
"@vitest/browser": "2.1.6",
|
"@vitest/browser": "2.1.9",
|
||||||
"@vitest/ui": "2.1.6",
|
"@vitest/ui": "2.1.9",
|
||||||
"happy-dom": "*",
|
"happy-dom": "*",
|
||||||
"jsdom": "*"
|
"jsdom": "*"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
"tailwindcss-animated": "^1.1.2",
|
"tailwindcss-animated": "^1.1.2",
|
||||||
"typescript": "^5",
|
"typescript": "^5",
|
||||||
"vite-tsconfig-paths": "^5.1.3",
|
"vite-tsconfig-paths": "^5.1.3",
|
||||||
"vitest": "^2.1.6"
|
"vitest": "^2.1.9"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"@types/react": "npm:types-react@19.0.0-rc.1",
|
"@types/react": "npm:types-react@19.0.0-rc.1",
|
||||||
|
|||||||
@@ -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") {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import { fetchCategories } from "@/lib/data";
|
|||||||
import { Category } from "@/lib/types";
|
import { Category } from "@/lib/types";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { format } from "date-fns";
|
import { format } from "date-fns";
|
||||||
import { CalendarIcon, Check, Clipboard } from "lucide-react";
|
import { CalendarIcon, Check, Clipboard, Download } from "lucide-react";
|
||||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
@@ -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`,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +97,21 @@ export default function JSONGenerator() {
|
|||||||
toast.success("Copied metadata to clipboard");
|
toast.success("Copied metadata to clipboard");
|
||||||
}, [script]);
|
}, [script]);
|
||||||
|
|
||||||
|
const handleDownload = useCallback(() => {
|
||||||
|
const jsonString = JSON.stringify(script, null, 2);
|
||||||
|
const blob = new Blob([jsonString], { type: "application/json" });
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = url;
|
||||||
|
a.download = `${script.slug || "script"}.json`;
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
document.body.removeChild(a);
|
||||||
|
}, [script]);
|
||||||
|
|
||||||
const handleDateSelect = useCallback(
|
const handleDateSelect = useCallback(
|
||||||
(date: Date | undefined) => {
|
(date: Date | undefined) => {
|
||||||
updateScript("date_created", format(date || new Date(), "yyyy-MM-dd"));
|
updateScript("date_created", format(date || new Date(), "yyyy-MM-dd"));
|
||||||
@@ -313,18 +328,23 @@ export default function JSONGenerator() {
|
|||||||
<div className="w-1/2 p-4 bg-background overflow-y-auto">
|
<div className="w-1/2 p-4 bg-background overflow-y-auto">
|
||||||
{validationAlert}
|
{validationAlert}
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
|
<div className="absolute right-2 top-2 flex gap-1">
|
||||||
<Button
|
<Button
|
||||||
className="absolute right-2 top-2"
|
|
||||||
size="icon"
|
size="icon"
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onClick={handleCopy}
|
onClick={handleCopy}
|
||||||
>
|
>
|
||||||
{isCopied ? (
|
{isCopied ? <Check className="h-4 w-4" /> : <Clipboard className="h-4 w-4" />}
|
||||||
<Check className="h-4 w-4" />
|
|
||||||
) : (
|
|
||||||
<Clipboard className="h-4 w-4" />
|
|
||||||
)}
|
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button
|
||||||
|
size="icon"
|
||||||
|
variant="outline"
|
||||||
|
onClick={handleDownload}
|
||||||
|
>
|
||||||
|
<Download className="h-4 w-4" />
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<pre className="mt-4 p-4 bg-secondary rounded shadow overflow-x-scroll">
|
<pre className="mt-4 p-4 bg-secondary rounded shadow overflow-x-scroll">
|
||||||
{JSON.stringify(script, null, 2)}
|
{JSON.stringify(script, null, 2)}
|
||||||
</pre>
|
</pre>
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
import { basePath } from "@/config/siteConfig";
|
import { basePath } from "@/config/siteConfig";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { FileJson, Server, ExternalLink } from "lucide-react";
|
||||||
|
import { buttonVariants } from "./ui/button";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
export default function Footer() {
|
export default function Footer() {
|
||||||
return (
|
return (
|
||||||
<div className="supports-backdrop-blur:bg-background/90 mt-auto flex border-t border-border bg-background/40 py-6 backdrop-blur-lg">
|
<div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-6 backdrop-blur-lg">
|
||||||
<div className="flex w-full justify-between">
|
<div className="mx-6 w-full flex justify-between text-xs sm:text-sm text-muted-foreground">
|
||||||
<div className="mx-6 w-full max-w-7xl text-xs sm:text-sm text-muted-foreground">
|
<div className="flex items-center">
|
||||||
Website built by the community. The source code is avaliable on{" "}
|
<p>
|
||||||
|
Website built by the community. The source code is available on{" "}
|
||||||
<Link
|
<Link
|
||||||
href={`https://github.com/community-scripts/${basePath}`}
|
href={`https://github.com/community-scripts/${basePath}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@@ -17,6 +21,21 @@ export default function Footer() {
|
|||||||
GitHub
|
GitHub
|
||||||
</Link>
|
</Link>
|
||||||
.
|
.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="sm:flex hidden">
|
||||||
|
<Link
|
||||||
|
href="/json-editor"
|
||||||
|
className={cn(buttonVariants({ variant: "link" }), "text-muted-foreground flex items-center gap-2")}
|
||||||
|
>
|
||||||
|
<FileJson className="h-4 w-4" /> JSON Editor
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="/data"
|
||||||
|
className={cn(buttonVariants({ variant: "link" }), "text-muted-foreground flex items-center gap-2")}
|
||||||
|
>
|
||||||
|
<Server className="h-4 w-4" /> API Data
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
78
install/apache-tika-install.sh
Normal file
78
install/apache-tika-install.sh
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/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/apache/tika/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
software-properties-common \
|
||||||
|
gdal-bin \
|
||||||
|
tesseract-ocr \
|
||||||
|
tesseract-ocr-eng \
|
||||||
|
tesseract-ocr-ita \
|
||||||
|
tesseract-ocr-fra \
|
||||||
|
tesseract-ocr-spa \
|
||||||
|
tesseract-ocr-deu
|
||||||
|
$STD echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections
|
||||||
|
$STD apt-get install -y \
|
||||||
|
xfonts-utils \
|
||||||
|
fonts-freefont-ttf \
|
||||||
|
fonts-liberation \
|
||||||
|
ttf-mscorefonts-installer \
|
||||||
|
cabextract
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup OpenJDK"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
openjdk-17-jre-headless
|
||||||
|
msg_ok "Setup OpenJDK"
|
||||||
|
|
||||||
|
msg_info "Installing Apache Tika"
|
||||||
|
mkdir -p /opt/apache-tika
|
||||||
|
cd /opt/apache-tika
|
||||||
|
RELEASE="$(wget -qO- https://dlcdn.apache.org/tika/ | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1)"
|
||||||
|
wget -q "https://dlcdn.apache.org/tika/${RELEASE}/tika-server-standard-${RELEASE}.jar"
|
||||||
|
mv tika-server-standard-${RELEASE}.jar tika-server-standard.jar
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Apache Tika"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/apache-tika.service
|
||||||
|
[Unit]
|
||||||
|
Description=Apache Tika
|
||||||
|
Documentation=https://tika.apache.org/
|
||||||
|
After=syslog.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Restart=always
|
||||||
|
Type=simple
|
||||||
|
ExecStart=java -jar /opt/apache-tika/tika-server-standard.jar --host 0.0.0.0 --port 9998
|
||||||
|
ExecReload=/bin/kill -HUP \$MAINPID
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now apache-tika
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
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"
|
||||||
101
install/crafty-controller-install.sh
Normal file
101
install/crafty-controller-install.sh
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docs.craftycontrol.com/pages/getting-started/installation/linux/
|
||||||
|
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies (a lot of patience)"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
git \
|
||||||
|
sed \
|
||||||
|
lsb-release \
|
||||||
|
apt-transport-https \
|
||||||
|
coreutils \
|
||||||
|
software-properties-common
|
||||||
|
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"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
python3 \
|
||||||
|
python3-dev \
|
||||||
|
python3-pip \
|
||||||
|
python3-venv
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
|
msg_info "Installing Craty-Controller (Patience)"
|
||||||
|
useradd crafty -m -s /bin/bash
|
||||||
|
cd /opt
|
||||||
|
mkdir -p /opt/crafty-controller/crafty /opt/crafty-controller/server
|
||||||
|
RELEASE=$(curl -s "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//')
|
||||||
|
echo "${RELEASE}" >"/opt/crafty-controller_version.txt"
|
||||||
|
wget -q "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip"
|
||||||
|
unzip -q crafty-4-v${RELEASE}.zip
|
||||||
|
cp -a crafty-4-v${RELEASE}/. /opt/crafty-controller/crafty/crafty-4/
|
||||||
|
rm -rf crafty-4-v${RELEASE}
|
||||||
|
|
||||||
|
cd /opt/crafty-controller/crafty
|
||||||
|
python3 -m venv .venv
|
||||||
|
chown -R crafty:crafty /opt/crafty-controller/
|
||||||
|
$STD sudo -u crafty bash -c '
|
||||||
|
source /opt/crafty-controller/crafty/.venv/bin/activate
|
||||||
|
cd /opt/crafty-controller/crafty/crafty-4
|
||||||
|
pip3 install --no-cache-dir -r requirements.txt
|
||||||
|
'
|
||||||
|
msg_ok "Installed Craft-Controller and dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Crafty-Controller service"
|
||||||
|
cat > /etc/systemd/system/crafty-controller.service << 'EOF'
|
||||||
|
[Unit]
|
||||||
|
Description=Crafty 4
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=crafty
|
||||||
|
WorkingDirectory=/opt/crafty-controller/crafty/crafty-4
|
||||||
|
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
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
$STD systemctl enable -q --now crafty-controller
|
||||||
|
sleep 10
|
||||||
|
{
|
||||||
|
echo "Crafty-Controller-Credentials"
|
||||||
|
echo "Username: $(grep -oP '(?<="username": ")[^"]*' /opt/crafty-controller/crafty/crafty-4/app/config/default-creds.txt)"
|
||||||
|
echo "Password: $(grep -oP '(?<="password": ")[^"]*' /opt/crafty-controller/crafty/crafty-4/app/config/default-creds.txt)"
|
||||||
|
} >> ~/crafty-controller.creds
|
||||||
|
msg_ok "Crafty-Controller service started"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/crafty-4-v${RELEASE}.zip
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
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"
|
||||||
66
install/duplicati-install.sh
Normal file
66
install/duplicati-install.sh
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#!/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/duplicati/duplicati
|
||||||
|
|
||||||
|
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 \
|
||||||
|
libice6 \
|
||||||
|
libsm6 \
|
||||||
|
libfontconfig1
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Duplicati"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
|
wget -q "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb"
|
||||||
|
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
|
||||||
|
echo "${RELEASE}" >/opt/Duplicati_version.txt
|
||||||
|
msg_ok "Finished setting up Duplicati"
|
||||||
|
|
||||||
|
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
{
|
||||||
|
echo "Admin password = ${ADMINPASS}"
|
||||||
|
echo "Database encryption key = ${DECRYPTKEY}"
|
||||||
|
} >> ~/duplicati.creds
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/duplicati.service
|
||||||
|
[Unit]
|
||||||
|
Description=Duplicati Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/duplicati-server --webservice-interface=any --webservice-password=$ADMINPASS --settings-encryption-key=$DECRYPTKEY
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now duplicati
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f duplicati-${RELEASE}-linux-x64-gui.deb
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@@ -23,11 +23,13 @@ $STD apt-get install -y \
|
|||||||
debconf-utils
|
debconf-utils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
read -p "Please enter the name for your server: " servername
|
||||||
|
|
||||||
msg_info "Installing Element Synapse"
|
msg_info "Installing Element Synapse"
|
||||||
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
|
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
|
||||||
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
|
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
echo "matrix-synapse-py3 matrix-synapse/server-name string matrix" | debconf-set-selections
|
echo "matrix-synapse-py3 matrix-synapse/server-name string $servername" | debconf-set-selections
|
||||||
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
|
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
|
||||||
$STD apt-get install matrix-synapse-py3 -y
|
$STD apt-get install matrix-synapse-py3 -y
|
||||||
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
|
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
|
||||||
|
|||||||
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"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user