mirror of
https://github.com/community-scripts/ProxmoxVED.git
synced 2026-02-28 15:55:52 +00:00
Compare commits
179 Commits
change_to_
...
update_ver
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0498a331e | ||
|
|
1e39073985 | ||
|
|
80ff5a19a6 | ||
|
|
1b5d455d8a | ||
|
|
9c0304206f | ||
|
|
b610d01325 | ||
|
|
800269916d | ||
|
|
88d1339a68 | ||
|
|
a6f4a69cfd | ||
|
|
53b06aa746 | ||
|
|
e33c543859 | ||
|
|
19da53f77d | ||
|
|
860f4f3871 | ||
|
|
cf046389d1 | ||
|
|
7de3f5768f | ||
|
|
6eb1cd8488 | ||
|
|
dae20358d3 | ||
|
|
46bd6a5599 | ||
|
|
7239210ead | ||
|
|
bb44863767 | ||
|
|
6921f19bee | ||
|
|
7f96fef66f | ||
|
|
14ad92198b | ||
|
|
6172db2ec5 | ||
|
|
4b9b14ae1a | ||
|
|
f49b5a661f | ||
|
|
8dc69f80f2 | ||
|
|
ec2c1b946e | ||
|
|
02cf584995 | ||
|
|
7bf6257b02 | ||
|
|
3f24a3fcc0 | ||
|
|
02b83804e1 | ||
|
|
ad0166a8b3 | ||
|
|
c54095425e | ||
|
|
e2ee08d3ae | ||
|
|
71128e6082 | ||
|
|
b692e65cf6 | ||
|
|
a8ef0300e2 | ||
|
|
35ddde0256 | ||
|
|
ca35a45ecd | ||
|
|
ada434223e | ||
|
|
269d9f0528 | ||
|
|
9e2ec4af31 | ||
|
|
620ad1b84f | ||
|
|
5493caaed5 | ||
|
|
5ebd8dc7ab | ||
|
|
f8e02e1ed5 | ||
|
|
a964925a15 | ||
|
|
6a2ff4feef | ||
|
|
56800199f7 | ||
|
|
17776f3355 | ||
|
|
1b8c74a3b3 | ||
|
|
30f0deed4c | ||
|
|
c4dc609202 | ||
|
|
9265e10243 | ||
|
|
7242fc2880 | ||
|
|
b82284d041 | ||
|
|
474d97322d | ||
|
|
0ded7bf751 | ||
|
|
584442e3c7 | ||
|
|
f5292249c3 | ||
|
|
a28751f37a | ||
|
|
e384cdcb3c | ||
|
|
04a07db27c | ||
|
|
2655068e7e | ||
|
|
0e298adc05 | ||
|
|
7cd0eb9fca | ||
|
|
a59f8bef8f | ||
|
|
f9f50e945c | ||
|
|
de814ffd50 | ||
|
|
fcbc27ecd8 | ||
|
|
48d1e7ecf6 | ||
|
|
d5388a85c3 | ||
|
|
be8986d070 | ||
|
|
9584f5e0f8 | ||
|
|
25947ba60b | ||
|
|
f88097e9d7 | ||
|
|
6b1165d7da | ||
|
|
a7408a994b | ||
|
|
8ec5dac90c | ||
|
|
f3ceea5c68 | ||
|
|
1d17fbb429 | ||
|
|
fc625d0d07 | ||
|
|
b9d6559d35 | ||
|
|
4774d76495 | ||
|
|
0a7bed66ea | ||
|
|
05e4ed3fc5 | ||
|
|
44b1bc01af | ||
|
|
c7f0208da8 | ||
|
|
656de28402 | ||
|
|
50f52fe5c7 | ||
|
|
4a56789328 | ||
|
|
230e0100fe | ||
|
|
82361db112 | ||
|
|
adef06845d | ||
|
|
10ff89a117 | ||
|
|
47b83d93cd | ||
|
|
e12157c66d | ||
|
|
1aa20369e9 | ||
|
|
3f20620006 | ||
|
|
1285c4b3bd | ||
|
|
cddb483499 | ||
|
|
f12dec0c75 | ||
|
|
6161aed815 | ||
|
|
5d5b18d11f | ||
|
|
1746c163a5 | ||
|
|
67832266fc | ||
|
|
dbb887e093 | ||
|
|
7e31d6a799 | ||
|
|
a13b714208 | ||
|
|
7cebd85b50 | ||
|
|
3599c8bb8d | ||
|
|
b99494c659 | ||
|
|
0f0664d2e3 | ||
|
|
1b890c6c4a | ||
|
|
9b6fc1d095 | ||
|
|
5df685f67c | ||
|
|
0c072d8e62 | ||
|
|
5989417a8a | ||
|
|
0785ff8720 | ||
|
|
51008e23bd | ||
|
|
5bf570055d | ||
|
|
bc2bfeec1c | ||
|
|
080f42a429 | ||
|
|
3f3d967a2c | ||
|
|
ad0607361a | ||
|
|
75a9afaf56 | ||
|
|
43d33f4a69 | ||
|
|
c54dbef059 | ||
|
|
6ea741bc34 | ||
|
|
cd197e48be | ||
|
|
38d9e4caeb | ||
|
|
6836e234a1 | ||
|
|
032fa7533c | ||
|
|
706ff5b006 | ||
|
|
abfa33f935 | ||
|
|
fbf474f996 | ||
|
|
30faf65098 | ||
|
|
e82b7ba698 | ||
|
|
a337fa15d7 | ||
|
|
2ac12c5d94 | ||
|
|
606008cbe9 | ||
|
|
7e15bd6eb0 | ||
|
|
89c7960cc4 | ||
|
|
d46538f726 | ||
|
|
4170d28138 | ||
|
|
4483371fc4 | ||
|
|
c0ff48d1ec | ||
|
|
cecffa1d34 | ||
|
|
50ed02155c | ||
|
|
5715622bf6 | ||
|
|
9e9a18cf71 | ||
|
|
5eaa071d7d | ||
|
|
a02ad32edc | ||
|
|
cb9c539fc1 | ||
|
|
430ff5f2e1 | ||
|
|
7103edd163 | ||
|
|
8d15d1bd84 | ||
|
|
21cb76d15f | ||
|
|
f541aa4310 | ||
|
|
e8f543b9ac | ||
|
|
5961ec2d1e | ||
|
|
ced08b3ca4 | ||
|
|
d729c88264 | ||
|
|
6236aa796f | ||
|
|
2fc25c281e | ||
|
|
38744e16f7 | ||
|
|
f99c48d760 | ||
|
|
6ab9a16e95 | ||
|
|
80b76212d9 | ||
|
|
145d116ef8 | ||
|
|
a4c69b211c | ||
|
|
19b0c7d527 | ||
|
|
75812b4409 | ||
|
|
5fd366e9b1 | ||
|
|
c7c9daca80 | ||
|
|
60788fccbd | ||
|
|
b541ecf318 | ||
|
|
30229fe06c |
16
.github/workflows/auto-update-app-headers.yml
vendored
16
.github/workflows/auto-update-app-headers.yml
vendored
@@ -25,6 +25,13 @@ jobs:
|
|||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: Generate a token for PR approval and merge
|
||||||
|
id: generate-token-merge
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
# Step 1: Checkout repository
|
# Step 1: Checkout repository
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -91,14 +98,17 @@ jobs:
|
|||||||
gh pr review $PR_NUMBER --approve
|
gh pr review $PR_NUMBER --approve
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Re-approve pull request after update
|
- name: Approve pull request and merge
|
||||||
if: env.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
|
git config --global user.name "github-actions-automege[bot]"
|
||||||
|
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||||
|
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||||
if [ -n "$PR_NUMBER" ]; then
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
gh pr review $PR_NUMBER --approve
|
gh pr review $PR_NUMBER --approve
|
||||||
|
gh pr merge $PR_NUMBER --squash --admin
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Step 8: Output success message when no changes
|
# Step 8: Output success message when no changes
|
||||||
|
|||||||
16
.github/workflows/changelog-pr.yaml
vendored
16
.github/workflows/changelog-pr.yaml
vendored
@@ -17,13 +17,20 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token for PR creation
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: Generate a token for PR approval and merge
|
||||||
|
id: generate-token-merge
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -261,12 +268,15 @@ jobs:
|
|||||||
gh pr review $PR_NUMBER --approve
|
gh pr review $PR_NUMBER --approve
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Re-approve pull request after update
|
- name: Approve pull request and merge
|
||||||
if: env.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
|
git config --global user.name "github-actions-automege[bot]"
|
||||||
|
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||||
if [ -n "$PR_NUMBER" ]; then
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
gh pr review $PR_NUMBER --approve
|
gh pr review $PR_NUMBER --approve
|
||||||
|
gh pr merge $PR_NUMBER --squash --admin
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -80,7 +80,25 @@ jobs:
|
|||||||
VAR+="${{ github.event.issue.html_url }}"
|
VAR+="${{ github.event.issue.html_url }}"
|
||||||
echo "message=$VAR" >> $GITHUB_ENV
|
echo "message=$VAR" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Check if Discord thread exists
|
||||||
|
id: check_thread
|
||||||
|
run: |
|
||||||
|
ISSUE_TITLE="${{ github.event.issue.title }}"
|
||||||
|
|
||||||
|
THREAD_ID=$(curl -s -X GET "https://discord.com/api/v10/guilds/${{ secrets.DISCORD_GUILD_ID }}/threads/active" \
|
||||||
|
-H "Authorization: Bot ${{ secrets.DISCORD_BOT_TOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" | \
|
||||||
|
jq -r --arg TITLE "$ISSUE_TITLE" --arg PARENT_ID "${{ secrets.DISCORD_CHANNEL_ID }}" \
|
||||||
|
'.threads[] | select(.parent_id == $PARENT_ID and .name == ("Wanted Tester for " + $TITLE)) | .id')
|
||||||
|
|
||||||
|
if [ -n "$THREAD_ID" ]; then
|
||||||
|
echo "thread_exists=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "thread_exists=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Create a forumpost in Discord
|
- name: Create a forumpost in Discord
|
||||||
|
if: steps.check_thread.outputs.thread_exists != 'true'
|
||||||
id: post_to_discord
|
id: post_to_discord
|
||||||
env:
|
env:
|
||||||
DISCORD_CHANNEL_ID: ${{ secrets.DISCORD_CHANNEL_ID }}
|
DISCORD_CHANNEL_ID: ${{ secrets.DISCORD_CHANNEL_ID }}
|
||||||
@@ -106,6 +124,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Comment on Issue
|
- name: Comment on Issue
|
||||||
|
if: steps.check_thread.outputs.thread_exists != 'true'
|
||||||
id: comment_on_issue
|
id: comment_on_issue
|
||||||
env:
|
env:
|
||||||
MESSAGE: ${{ env.message }}
|
MESSAGE: ${{ env.message }}
|
||||||
|
|||||||
20
.github/workflows/delete_new_script.yaml
vendored
20
.github/workflows/delete_new_script.yaml
vendored
@@ -14,6 +14,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Generate a token for PR approval and merge
|
||||||
|
id: generate-token-merge
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
- name: Extract Issue Title (Lowercase & Underscores)
|
- name: Extract Issue Title (Lowercase & Underscores)
|
||||||
id: extract_title
|
id: extract_title
|
||||||
run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
|
run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
|
||||||
@@ -72,6 +79,19 @@ jobs:
|
|||||||
#gh pr merge $pr_number --squash
|
#gh pr merge $pr_number --squash
|
||||||
echo pr_number=$pr_number >> $GITHUB_ENV
|
echo pr_number=$pr_number >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Approve pull request and merge
|
||||||
|
if: env.changed == 'true'
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||||
|
run: |
|
||||||
|
git config --global user.name "github-actions-automege[bot]"
|
||||||
|
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||||
|
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||||
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
|
gh pr review $PR_NUMBER --approve
|
||||||
|
gh pr merge $PR_NUMBER --squash --admin
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Comment on Issue
|
- name: Comment on Issue
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -29,6 +29,13 @@ jobs:
|
|||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: Generate a token for PR approval and merge
|
||||||
|
id: generate-token-merge
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||||
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||||
|
|
||||||
- name: Crawl from newreleases.io
|
- name: Crawl from newreleases.io
|
||||||
env:
|
env:
|
||||||
token: ${{ secrets.NEWRELEASES_TOKEN }}
|
token: ${{ secrets.NEWRELEASES_TOKEN }}
|
||||||
@@ -110,10 +117,12 @@ jobs:
|
|||||||
- name: Approve pull request and merge
|
- name: Approve pull request and merge
|
||||||
if: env.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.PAT_MICHEL }}
|
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
|
git config --global user.name "github-actions-automege[bot]"
|
||||||
|
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||||
|
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||||
if [ -n "$PR_NUMBER" ]; then
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
gh pr review $PR_NUMBER --approve
|
gh pr review $PR_NUMBER --approve
|
||||||
gh pr merge $PR_NUMBER --squash --delete-branch --admin
|
gh pr merge $PR_NUMBER --squash --admin
|
||||||
fi
|
fi
|
||||||
|
|||||||
15
.github/workflows/move-to-main-repo.yaml
vendored
15
.github/workflows/move-to-main-repo.yaml
vendored
@@ -133,10 +133,6 @@ jobs:
|
|||||||
echo "install file already exists in ProxmoxVE"
|
echo "install file already exists in ProxmoxVE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [[ -f "frontend/public/json/${script_name}.json" ]]; then
|
|
||||||
echo "json file already exists in ProxmoxVE"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
git checkout -b "$branch_name"
|
git checkout -b "$branch_name"
|
||||||
|
|
||||||
@@ -157,10 +153,13 @@ jobs:
|
|||||||
cp ../frontend/public/json/$json_file frontend/public/json/. || true
|
cp ../frontend/public/json/$json_file frontend/public/json/. || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|' ct/$script_name.sh
|
echo $script_name
|
||||||
sed -i 's|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|' ct/$script_name.sh
|
sed -i "s|https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh
|
||||||
sed -i 's|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|' install/$script_name-install.sh
|
sed -i "s|https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh
|
||||||
git add .
|
sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" ct/$script_name.sh
|
||||||
|
sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" install/$script_name-install.sh
|
||||||
|
|
||||||
|
git add . > /dev/null 2>&1
|
||||||
if git diff --cached --exit-code; then
|
if git diff --cached --exit-code; then
|
||||||
echo "No changes detected, skipping commit."
|
echo "No changes detected, skipping commit."
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
2
.github/workflows/push-to-gitea.yml
vendored
2
.github/workflows/push-to-gitea.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
git config --global user.name "Push From Github"
|
git config --global user.name "Push From Github"
|
||||||
git config --global user.email "actions@github.com"
|
git config --global user.email "actions@github.com"
|
||||||
git remote add gitea https://$GITEA_USER:$GITEA_TOKEN@git.community-scripts.org/community-scripts/ProxmoxVED.git
|
git remote add gitea https://$GITEA_USER:$GITEA_TOKEN@git.community-scripts.org/community-scripts/ProxmoxVED.git
|
||||||
git push gitea --mirror
|
git push gitea --all
|
||||||
env:
|
env:
|
||||||
GITEA_USER: ${{ secrets.GITEA_USERNAME }}
|
GITEA_USER: ${{ secrets.GITEA_USERNAME }}
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
|||||||
81
CHANGELOG.md
81
CHANGELOG.md
@@ -7,6 +7,76 @@
|
|||||||
|
|
||||||
<h3 align="center">All notable changes to this project will be documented in this file.</h3>
|
<h3 align="center">All notable changes to this project will be documented in this file.</h3>
|
||||||
|
|
||||||
|
## 2025-05-14
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- odoo ([#4477](https://github.com/community-scripts/ProxmoxVE/pull/4477))
|
||||||
|
- alpine-transmission ([#4277](https://github.com/community-scripts/ProxmoxVE/pull/4277))
|
||||||
|
- alpine-tinyauth ([#4264](https://github.com/community-scripts/ProxmoxVE/pull/4264))
|
||||||
|
- alpine-rclone ([#4265](https://github.com/community-scripts/ProxmoxVE/pull/4265))
|
||||||
|
- streamlink-webui ([#4262](https://github.com/community-scripts/ProxmoxVE/pull/4262))
|
||||||
|
- Fumadocs ([#4263](https://github.com/community-scripts/ProxmoxVE/pull/4263))
|
||||||
|
- asterisk ([#4468](https://github.com/community-scripts/ProxmoxVE/pull/4468))
|
||||||
|
- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
|
||||||
|
- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
|
||||||
|
- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- fix: fetch_release_and_deploy function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4478](https://github.com/community-scripts/ProxmoxVE/pull/4478))
|
||||||
|
- Website: re-add documenso & some little bugfixes [@MickLesk](https://github.com/MickLesk) ([#4456](https://github.com/community-scripts/ProxmoxVE/pull/4456))
|
||||||
|
- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
|
||||||
|
- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Bugfix: Mikrotik & Pimox HAOS VM (NEXTID) [@MickLesk](https://github.com/MickLesk) ([#4313](https://github.com/community-scripts/ProxmoxVE/pull/4313))
|
||||||
|
- Bookstack: fix copy of themes/uploads/storage [@MickLesk](https://github.com/MickLesk) ([#4457](https://github.com/community-scripts/ProxmoxVE/pull/4457))
|
||||||
|
- homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
|
||||||
|
- Authentik: change install to UV & increase resources to 10GB RAM [@MickLesk](https://github.com/MickLesk) ([#4364](https://github.com/community-scripts/ProxmoxVE/pull/4364))
|
||||||
|
- Jellyseerr: better handling of node and pnpm [@MickLesk](https://github.com/MickLesk) ([#4365](https://github.com/community-scripts/ProxmoxVE/pull/4365))
|
||||||
|
- Alpine-Rclone: Fix location of passwords file [@tremor021](https://github.com/tremor021) ([#4465](https://github.com/community-scripts/ProxmoxVE/pull/4465))
|
||||||
|
- Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
|
||||||
|
- openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
|
||||||
|
- (fix) Documenso: fix build failures [@vhsdream](https://github.com/vhsdream) ([#4382](https://github.com/community-scripts/ProxmoxVE/pull/4382))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
|
||||||
|
- Feature: get correct next VMID [@MickLesk](https://github.com/MickLesk) ([#4292](https://github.com/community-scripts/ProxmoxVE/pull/4292))
|
||||||
|
- HomeAssistant-Core: update script for 2025.5+ [@MickLesk](https://github.com/MickLesk) ([#4363](https://github.com/community-scripts/ProxmoxVE/pull/4363))
|
||||||
|
- Feature: autologin for Alpine [@MickLesk](https://github.com/MickLesk) ([#4344](https://github.com/community-scripts/ProxmoxVE/pull/4344))
|
||||||
|
- monitor-all: improvements - tag based filtering [@grizmin](https://github.com/grizmin) ([#4437](https://github.com/community-scripts/ProxmoxVE/pull/4437))
|
||||||
|
- Make apt-cacher-ng a client of its own server [@pgcudahy](https://github.com/pgcudahy) ([#4092](https://github.com/community-scripts/ProxmoxVE/pull/4092))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 💾 Core
|
||||||
|
|
||||||
|
- fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
|
||||||
|
- Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
|
||||||
|
- fix: detect all bridge types, not just vmbr prefix [@filippolauria](https://github.com/filippolauria) ([#4351](https://github.com/community-scripts/ProxmoxVE/pull/4351))
|
||||||
|
|
||||||
|
- #### 📂 Github
|
||||||
|
|
||||||
|
- Add Github app for auto PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4461](https://github.com/community-scripts/ProxmoxVE/pull/4461))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- FAQ: Explanation "updatable" [@tremor021](https://github.com/tremor021) ([#4300](https://github.com/community-scripts/ProxmoxVE/pull/4300))
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
|
||||||
|
- Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
|
||||||
|
- pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
|
||||||
|
- Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
|
||||||
|
|
||||||
## 2025-03-24
|
## 2025-03-24
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
@@ -15,8 +85,7 @@
|
|||||||
- wazuh [@omiinaya](https://github.com/omiinaya) ([#3381](https://github.com/community-scripts/ProxmoxVE/pull/3381))
|
- wazuh [@omiinaya](https://github.com/omiinaya) ([#3381](https://github.com/community-scripts/ProxmoxVE/pull/3381))
|
||||||
- yt-dlp-webui [@CrazyWolf13](https://github.com/CrazyWolf13) ([#3364](https://github.com/community-scripts/ProxmoxVE/pull/3364))
|
- yt-dlp-webui [@CrazyWolf13](https://github.com/CrazyWolf13) ([#3364](https://github.com/community-scripts/ProxmoxVE/pull/3364))
|
||||||
- Extension/New Script: Redis Alpine Installation [@MickLesk](https://github.com/MickLesk) ([#3367](https://github.com/community-scripts/ProxmoxVE/pull/3367))
|
- Extension/New Script: Redis Alpine Installation [@MickLesk](https://github.com/MickLesk) ([#3367](https://github.com/community-scripts/ProxmoxVE/pull/3367))
|
||||||
- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](https://github.com/community-scripts/ProxmoxVE/pull/2869))
|
- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](ht
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
|
- License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
|
||||||
@@ -35,7 +104,7 @@
|
|||||||
- GoMFT: Fix build dependencies [@tremor021](https://github.com/tremor021) ([#3313](https://github.com/community-scripts/ProxmoxVE/pull/3313))
|
- GoMFT: Fix build dependencies [@tremor021](https://github.com/tremor021) ([#3313](https://github.com/community-scripts/ProxmoxVE/pull/3313))
|
||||||
- GoMFT: Don't rely on binaries from github [@tremor021](https://github.com/tremor021) ([#3303](https://github.com/community-scripts/ProxmoxVE/pull/3303))
|
- GoMFT: Don't rely on binaries from github [@tremor021](https://github.com/tremor021) ([#3303](https://github.com/community-scripts/ProxmoxVE/pull/3303))
|
||||||
- Wikijs: Remove Dev Message & Performance-Boost [@bvdberg01](https://github.com/bvdberg01) ([#3232](https://github.com/community-scripts/ProxmoxVE/pull/3232))
|
- Wikijs: Remove Dev Message & Performance-Boost [@bvdberg01](https://github.com/bvdberg01) ([#3232](https://github.com/community-scripts/ProxmoxVE/pull/3232))
|
||||||
- Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.com/community-scripts/ProxmoxVE/pull/3245))
|
- Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.cooxVE/pull/3245))
|
||||||
- TriliumNotes: Fix release handling [@tremor021](https://github.com/tremor021) ([#3160](https://github.com/community-scripts/ProxmoxVE/pull/3160))
|
- TriliumNotes: Fix release handling [@tremor021](https://github.com/tremor021) ([#3160](https://github.com/community-scripts/ProxmoxVE/pull/3160))
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
@@ -56,7 +125,7 @@
|
|||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
|
|
||||||
- [core] add gitignore to prevent big pulls [@MickLesk](https://github.com/MickLesk) ([#3278](https://github.com/community-scripts/ProxmoxVE/pull/3278))
|
|
||||||
- [core] install core deps (debian / ubuntu) [@MickLesk](https://github.com/MickLesk) ([#3366](https://github.com/community-scripts/ProxmoxVE/pull/3366))
|
- [core] install core deps (debian / ubuntu) [@MickLesk](https://github.com/MickLesk) ([#3366](https://github.com/community-scripts/ProxmoxVE/pull/3366))
|
||||||
|
|
||||||
- #### 💾 Core
|
- #### 💾 Core
|
||||||
@@ -72,11 +141,11 @@
|
|||||||
### 🌐 Website
|
### 🌐 Website
|
||||||
|
|
||||||
- Update siteConfig.tsx to use new analytics code [@BramSuurdje](https://github.com/BramSuurdje) ([#3389](https://github.com/community-scripts/ProxmoxVE/pull/3389))
|
- Update siteConfig.tsx to use new analytics code [@BramSuurdje](https://github.com/BramSuurdje) ([#3389](https://github.com/community-scripts/ProxmoxVE/pull/3389))
|
||||||
- Bump next from 15.1.3 to 15.2.3 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3316](https://github.com/community-scripts/ProxmoxVE/pull/3316))
|
- Bump next from 15.1.3 to 15.2.16](https://github.com/community-scripE/pull/3316))
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
- Better Text for Version Date [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3388](https://github.com/community-scripts/ProxmoxVE/pull/3388))
|
- Better Text for Version Date [@michelroegl-brunner](https:er) ([#3388](https://github.com/community-scripts/ProxmoxVE/pull/3388))
|
||||||
- JSON editor note fix [@bvdberg01](https://github.com/bvdberg01) ([#3260](https://github.com/community-scripts/ProxmoxVE/pull/3260))
|
- JSON editor note fix [@bvdberg01](https://github.com/bvdberg01) ([#3260](https://github.com/community-scripts/ProxmoxVE/pull/3260))
|
||||||
- Move cryptpad files to right folders [@bvdberg01](https://github.com/bvdberg01) ([#3242](https://github.com/community-scripts/ProxmoxVE/pull/3242))
|
- Move cryptpad files to right folders [@bvdberg01](https://github.com/bvdberg01) ([#3242](https://github.com/community-scripts/ProxmoxVE/pull/3242))
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,8 @@ function update_script() {
|
|||||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||||
cd /opt/bitmagnet
|
cd /opt/bitmagnet
|
||||||
$STD go build
|
VREL=v$RELEASE
|
||||||
|
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||||
chmod +x bitmagnet
|
chmod +x bitmagnet
|
||||||
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
|
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
|
||||||
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
|
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
|
||||||
|
|||||||
@@ -21,12 +21,11 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
msg_info "Updating Alpine Packages"
|
msg_info "Updating Alpine Packages"
|
||||||
$STD apk update
|
$STD apk -U upgrade
|
||||||
$STD apk upgrade
|
|
||||||
msg_ok "Updated Alpine Packages"
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
msg_info "Updating Syncthing"
|
msg_info "Updating Syncthing"
|
||||||
$STD $STD apk upgrade syncthing
|
$STD apk upgrade syncthing
|
||||||
msg_ok "Updated Syncthing"
|
msg_ok "Updated Syncthing"
|
||||||
|
|
||||||
msg_info "Restarting Syncthing"
|
msg_info "Restarting Syncthing"
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: michelroegl-brunner
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://asterisk.org/
|
|
||||||
|
|
||||||
APP="Asterisk"
|
|
||||||
var_tags="${var_tags:-os}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /var ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "No Update function provided for ${APP} LXC"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: remz1337
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://goauthentik.io/
|
|
||||||
|
|
||||||
APP="Authentik"
|
|
||||||
var_tags="${var_tags:-identity-provider}"
|
|
||||||
var_disk="${var_disk:-12}"
|
|
||||||
var_cpu="${var_cpu:-6}"
|
|
||||||
var_ram="${var_ram:-10240}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /etc/systemd/system/authentik-server.service ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
NODE_VERSION="22"
|
|
||||||
PG_VERSION="16"
|
|
||||||
setup_uv
|
|
||||||
install_postgresql
|
|
||||||
install_node_and_modules
|
|
||||||
install_go
|
|
||||||
|
|
||||||
msg_info "Stopping ${APP}"
|
|
||||||
systemctl stop authentik-server
|
|
||||||
systemctl stop authentik-worker
|
|
||||||
msg_ok "Stopped ${APP}"
|
|
||||||
|
|
||||||
msg_info "Building ${APP} website"
|
|
||||||
mkdir -p /opt/authentik
|
|
||||||
curl -fsSL "${RELEASE}" -o "authentik.tar.gz"
|
|
||||||
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
|
||||||
rm -rf authentik.tar.gz
|
|
||||||
cd /opt/authentik/website
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build-bundled
|
|
||||||
cd /opt/authentik/web
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Built ${APP} website"
|
|
||||||
|
|
||||||
msg_info "Building ${APP} server"
|
|
||||||
cd /opt/authentik
|
|
||||||
go mod download
|
|
||||||
go build -o /go/authentik ./cmd/server
|
|
||||||
go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
|
||||||
msg_ok "Built ${APP} server"
|
|
||||||
|
|
||||||
msg_info "Building Authentik"
|
|
||||||
cd /opt/authentik
|
|
||||||
$STD uv sync --frozen --no-install-project --no-dev
|
|
||||||
uv run python -m lifecycle.migrate
|
|
||||||
ln -s /opt/authentik/.venv/bin/gunicorn /usr/local/bin/gunicorn
|
|
||||||
ln -s /opt/authentik/.venv/bin/celery /usr/local/bin/celery
|
|
||||||
msg_ok "Authentik built"
|
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
|
||||||
systemctl start authentik-server
|
|
||||||
systemctl start authentik-worker
|
|
||||||
msg_ok "Started ${APP}"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
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/if/flow/initial-setup/${CL}"
|
|
||||||
63
ct/backrest.sh
Normal file
63
ct/backrest.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: ksad (enirys31)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://garethgeorge.github.io/backrest/
|
||||||
|
|
||||||
|
APP="Backrest"
|
||||||
|
var_tags="${var_tags:-backup}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/backrest ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/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 backrest
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
|
cd /opt/backrest/bin
|
||||||
|
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "backrest_Linux_x86_64.tar.gz"
|
||||||
|
tar -xzf backrest_Linux_x86_64.tar.gz
|
||||||
|
rm -rf backrest_Linux_x86_64.tar.gz
|
||||||
|
rm -f install.sh uninstall.sh
|
||||||
|
chmod +x backrest
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start backrest
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9898${CL}"
|
||||||
98
ct/bitmagnet.sh
Normal file
98
ct/bitmagnet.sh
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/bitmagnet/bitmagnet
|
||||||
|
|
||||||
|
APP="Bitmagnet"
|
||||||
|
var_tags="${var_tags:-os}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/bitmagnet ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/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 bitmagnet-web
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up database"
|
||||||
|
rm -f /tmp/backup.sql
|
||||||
|
$STD sudo -u postgres pg_dump \
|
||||||
|
--column-inserts \
|
||||||
|
--data-only \
|
||||||
|
--on-conflict-do-nothing \
|
||||||
|
--rows-per-insert=1000 \
|
||||||
|
--table=metadata_sources \
|
||||||
|
--table=content \
|
||||||
|
--table=content_attributes \
|
||||||
|
--table=content_collections \
|
||||||
|
--table=content_collections_content \
|
||||||
|
--table=torrent_sources \
|
||||||
|
--table=torrents \
|
||||||
|
--table=torrent_files \
|
||||||
|
--table=torrent_hints \
|
||||||
|
--table=torrent_contents \
|
||||||
|
--table=torrent_tags \
|
||||||
|
--table=torrents_torrent_sources \
|
||||||
|
--table=key_values \
|
||||||
|
bitmagnet \
|
||||||
|
>/tmp/backup.sql
|
||||||
|
mv /tmp/backup.sql /opt/
|
||||||
|
msg_ok "Database backed up"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
|
||||||
|
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
|
||||||
|
rm -rf /opt/bitmagnet/*
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
|
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||||
|
cd /opt/bitmagnet
|
||||||
|
VREL=v$RELEASE
|
||||||
|
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||||
|
chmod +x bitmagnet
|
||||||
|
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
|
||||||
|
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start bitmagnet-web
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
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}:3333${CL}"
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/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/BookStackApp/BookStack
|
|
||||||
|
|
||||||
APP="Bookstack"
|
|
||||||
var_tags="${var_tags:-organizer}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/bookstack ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/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 Apache2"
|
|
||||||
systemctl stop apache2
|
|
||||||
msg_ok "Services Stopped"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
mv /opt/bookstack /opt/bookstack-backup
|
|
||||||
fetch_and_deploy_gh_release BookstackApp/BookStack
|
|
||||||
cp /opt/bookstack-backup/.env /opt/bookstack/.env
|
|
||||||
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true
|
|
||||||
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true
|
|
||||||
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true
|
|
||||||
cd /opt/bookstack
|
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
|
||||||
$STD composer install --no-dev
|
|
||||||
$STD php artisan migrate --force
|
|
||||||
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
|
||||||
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
|
||||||
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
|
|
||||||
chmod -R 640 /opt/bookstack/.env
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Apache2"
|
|
||||||
systemctl start apache2
|
|
||||||
msg_ok "Started Apache2"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf /opt/bookstack-backup
|
|
||||||
rm -rf "/opt/BookStack-${RELEASE}.zip"
|
|
||||||
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}"
|
|
||||||
@@ -6,7 +6,7 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
|
|||||||
# Source: https://www.freepbx.org/
|
# Source: https://www.freepbx.org/
|
||||||
|
|
||||||
APP="FreePBX"
|
APP="FreePBX"
|
||||||
var_tags=""
|
var_tags="pbx;voip;telephony"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-20}"
|
var_disk="${var_disk:-20}"
|
||||||
|
|||||||
75
ct/gatus.sh
75
ct/gatus.sh
@@ -1,75 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/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/TwiN/gatus
|
|
||||||
|
|
||||||
APP="gatus"
|
|
||||||
var_tags="${var_tags:-monitoring}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/gatus ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/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 gatus
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
mv /opt/gatus/config/config.yaml /opt
|
|
||||||
rm -rf /opt/gatus/*
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
|
||||||
cd /opt/gatus
|
|
||||||
$STD go mod tidy
|
|
||||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
|
||||||
setcap CAP_NET_RAW+ep gatus
|
|
||||||
mv /opt/config.yaml config
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
|
||||||
systemctl start gatus
|
|
||||||
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 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,6 +0,0 @@
|
|||||||
___ __ _ __
|
|
||||||
/ | _____/ /____ _____(_)____/ /__
|
|
||||||
/ /| | / ___/ __/ _ \/ ___/ / ___/ //_/
|
|
||||||
/ ___ |(__ ) /_/ __/ / / (__ ) ,<
|
|
||||||
/_/ |_/____/\__/\___/_/ /_/____/_/|_|
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __ __ __ _ __
|
|
||||||
/ | __ __/ /_/ /_ ___ ____ / /_(_) /__
|
|
||||||
/ /| |/ / / / __/ __ \/ _ \/ __ \/ __/ / //_/
|
|
||||||
/ ___ / /_/ / /_/ / / / __/ / / / /_/ / ,<
|
|
||||||
/_/ |_\__,_/\__/_/ /_/\___/_/ /_/\__/_/_/|_|
|
|
||||||
|
|
||||||
6
ct/headers/backrest
Normal file
6
ct/headers/backrest
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ __
|
||||||
|
/ __ )____ ______/ /__________ _____/ /_
|
||||||
|
/ __ / __ `/ ___/ //_/ ___/ _ \/ ___/ __/
|
||||||
|
/ /_/ / /_/ / /__/ ,< / / / __(__ ) /_
|
||||||
|
/_____/\__,_/\___/_/|_/_/ \___/____/\__/
|
||||||
|
|
||||||
6
ct/headers/bitmagnet
Normal file
6
ct/headers/bitmagnet
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ _ __ __
|
||||||
|
/ __ )(_) /_____ ___ ____ _____ _____ ___ / /_
|
||||||
|
/ __ / / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
|
||||||
|
/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
|
||||||
|
/_____/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
|
||||||
|
/____/
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ __ __ __
|
|
||||||
/ __ )____ ____ / /_______/ /_____ ______/ /__
|
|
||||||
/ __ / __ \/ __ \/ //_/ ___/ __/ __ `/ ___/ //_/
|
|
||||||
/ /_/ / /_/ / /_/ / ,< (__ ) /_/ /_/ / /__/ ,<
|
|
||||||
/_____/\____/\____/_/|_/____/\__/\__,_/\___/_/|_|
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__
|
|
||||||
____ _____ _/ /___ _______
|
|
||||||
/ __ `/ __ `/ __/ / / / ___/
|
|
||||||
/ /_/ / /_/ / /_/ /_/ (__ )
|
|
||||||
\__, /\__,_/\__/\__,_/____/
|
|
||||||
/____/
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
__ __
|
__
|
||||||
/ / / /___ ____ ___ ____ ___________
|
/ /_ ____ ____ ___ ____ ___________
|
||||||
/ /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/
|
/ __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/
|
||||||
/ __ / /_/ / / / / / / /_/ / / / /
|
/ / / / /_/ / / / / / / /_/ / / / /
|
||||||
/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
|
/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
__ __ ___ _ __ __ ______
|
|
||||||
/ / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ / ____/___ ________
|
|
||||||
/ /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \
|
|
||||||
/ __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/
|
|
||||||
/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ ___ __ __ __ _ __
|
|
||||||
/ |/ /___ _/ /_/ /____ _____/ /_ _____(_)___/ /___ ____
|
|
||||||
/ /|_/ / __ `/ __/ __/ _ \/ ___/ __ \/ ___/ / __ / __ `/ _ \
|
|
||||||
/ / / / /_/ / /_/ /_/ __/ / / /_/ / / / / /_/ / /_/ / __/
|
|
||||||
/_/ /_/\__,_/\__/\__/\___/_/ /_.___/_/ /_/\__,_/\__, /\___/
|
|
||||||
/____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ ___ __ __ __
|
|
||||||
/ |/ /___ _/ /_/ /____ _________ ___ ____ _____/ /_
|
|
||||||
/ /|_/ / __ `/ __/ __/ _ \/ ___/ __ `__ \/ __ \/ ___/ __/
|
|
||||||
/ / / / /_/ / /_/ /_/ __/ / / / / / / / /_/ (__ ) /_
|
|
||||||
/_/ /_/\__,_/\__/\__/\___/_/ /_/ /_/ /_/\____/____/\__/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ ____ __
|
|
||||||
/ __ \____ ___ ____ / __ \/ /_ ________ ______ _____
|
|
||||||
/ / / / __ \/ _ \/ __ \/ / / / __ \/ ___/ _ \/ ___/ | / / _ \
|
|
||||||
/ /_/ / /_/ / __/ / / / /_/ / /_/ (__ ) __/ / | |/ / __/
|
|
||||||
\____/ .___/\___/_/ /_/\____/_.___/____/\___/_/ |___/\___/
|
|
||||||
/_/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ ____ _ __
|
|
||||||
/ __ \____ ___ ____ / __ \_________ (_)__ _____/ /_
|
|
||||||
/ / / / __ \/ _ \/ __ \/ /_/ / ___/ __ \ / / _ \/ ___/ __/
|
|
||||||
/ /_/ / /_/ / __/ / / / ____/ / / /_/ / / / __/ /__/ /_
|
|
||||||
\____/ .___/\___/_/ /_/_/ /_/ \____/_/ /\___/\___/\__/
|
|
||||||
/_/ /___/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ __
|
|
||||||
/ __ \____ _____ ___ _____/ /__ __________ ____ ____ __ __
|
|
||||||
/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ __ \/ __ `/ |/_/
|
|
||||||
/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ / / / /_/ /> <
|
|
||||||
/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_|
|
|
||||||
/_/ /____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ ___ __ __ _
|
|
||||||
_____/ /_________ ____ _____ ___ / (_)___ / /__ _ _____ / /_ __ __(_)
|
|
||||||
/ ___/ __/ ___/ _ \/ __ `/ __ `__ \/ / / __ \/ //_/____| | /| / / _ \/ __ \/ / / / /
|
|
||||||
(__ ) /_/ / / __/ /_/ / / / / / / / / / / / ,< /_____/ |/ |/ / __/ /_/ / /_/ / /
|
|
||||||
/____/\__/_/ \___/\__,_/_/ /_/ /_/_/_/_/ /_/_/|_| |__/|__/\___/_.___/\__,_/_/
|
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://homarr.dev/
|
# Source: https://homarr.dev/
|
||||||
|
|
||||||
APP="Homarr"
|
APP="homarr"
|
||||||
var_tags="${var_tags:-arr;dashboard}"
|
var_tags="${var_tags:-arr;dashboard}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
@@ -124,7 +124,7 @@ EOF
|
|||||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||||
cd /opt/homarr
|
cd /opt/homarr
|
||||||
$STD pnpm install
|
$STD pnpm install --config.allowBuildScripts=true
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
cp /opt/homarr/apps/nextjs/next.config.ts .
|
||||||
cp /opt/homarr/apps/nextjs/package.json .
|
cp /opt/homarr/apps/nextjs/package.json .
|
||||||
|
|||||||
@@ -1,170 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: tteck (tteckster) | Co-Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://www.home-assistant.io/
|
|
||||||
|
|
||||||
APP="Home Assistant-Core"
|
|
||||||
var_tags="${var_tags:-automation;smarthome}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_os="${var_os:-ubuntu}"
|
|
||||||
var_version="${var_version:-24.10}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
|
|
||||||
# OS Check
|
|
||||||
if ! lsb_release -d | grep -q "Ubuntu 24.10"; then
|
|
||||||
msg_error "Wrong OS detected. This script only supports Ubuntu 24.10."
|
|
||||||
msg_error "Read Guide: https://github.com/community-scripts/ProxmoxVE/discussions/1549"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /srv/homeassistant ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
setup_uv
|
|
||||||
IP=$(hostname -I | awk '{print $1}')
|
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
|
|
||||||
"1" "Update Core" ON \
|
|
||||||
"2" "Install HACS" OFF \
|
|
||||||
"3" "Install FileBrowser" OFF \
|
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
|
||||||
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
|
|
||||||
clear
|
|
||||||
header_info
|
|
||||||
echo -e "${GN}Updating to Beta Version${CL}"
|
|
||||||
BR="--pre"
|
|
||||||
else
|
|
||||||
clear
|
|
||||||
header_info
|
|
||||||
echo -e "${GN}Updating to Stable Version${CL}"
|
|
||||||
BR=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Stopping Home Assistant"
|
|
||||||
systemctl stop homeassistant
|
|
||||||
msg_ok "Stopped Home Assistant"
|
|
||||||
|
|
||||||
if [[ -d /srv/homeassistant/bin ]]; then
|
|
||||||
msg_info "Migrating to .venv-based structure"
|
|
||||||
$STD source /srv/homeassistant/bin/activate
|
|
||||||
PY_VER=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
|
|
||||||
$STD deactivate
|
|
||||||
mv /srv/homeassistant "/srv/homeassistant_backup_$PY_VER"
|
|
||||||
mkdir -p /srv/homeassistant
|
|
||||||
cd /srv/homeassistant
|
|
||||||
|
|
||||||
$STD uv python install 3.13
|
|
||||||
UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
|
|
||||||
if [[ -z "$UV_PYTHON" ]]; then
|
|
||||||
msg_error "No local Python 3.13 found via uv"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
$STD uv venv .venv --python "$UV_PYTHON"
|
|
||||||
$STD source .venv/bin/activate
|
|
||||||
$STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
|
|
||||||
mkdir -p /root/.homeassistant
|
|
||||||
msg_ok "Migration complete"
|
|
||||||
else
|
|
||||||
source /srv/homeassistant/.venv/bin/activate
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Updating Home Assistant"
|
|
||||||
$STD uv pip install $BR --upgrade homeassistant
|
|
||||||
msg_ok "Updated Home Assistant"
|
|
||||||
|
|
||||||
msg_info "Starting Home Assistant"
|
|
||||||
if [[ -f /etc/systemd/system/homeassistant.service ]] && grep -q "/srv/homeassistant/bin/python3" /etc/systemd/system/homeassistant.service; then
|
|
||||||
sed -i 's|ExecStart=/srv/homeassistant/bin/python3|ExecStart=/srv/homeassistant/.venv/bin/python3|' /etc/systemd/system/homeassistant.service
|
|
||||||
sed -i 's|PATH=/srv/homeassistant/bin|PATH=/srv/homeassistant/.venv/bin|' /etc/systemd/system/homeassistant.service
|
|
||||||
$STD systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
|
|
||||||
systemctl start homeassistant
|
|
||||||
sleep 5
|
|
||||||
msg_ok "Started Home Assistant"
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$UPD" == "2" ]; then
|
|
||||||
msg_info "Installing Home Assistant Community Store (HACS)"
|
|
||||||
$STD apt update
|
|
||||||
$STD apt install -y unzip
|
|
||||||
cd /root/.homeassistant
|
|
||||||
$STD bash <(curl -fsSL https://get.hacs.xyz)
|
|
||||||
msg_ok "Installed Home Assistant Community Store (HACS)"
|
|
||||||
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$UPD" == "3" ]; then
|
|
||||||
set +Eeuo pipefail
|
|
||||||
read -r -p "Would you like to use No Authentication? <y/N> " prompt
|
|
||||||
msg_info "Installing FileBrowser"
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
|
|
||||||
$STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
|
|
||||||
|
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
|
||||||
$STD filebrowser config init -a '0.0.0.0'
|
|
||||||
$STD filebrowser config set -a '0.0.0.0'
|
|
||||||
$STD filebrowser config set --auth.method=noauth
|
|
||||||
$STD filebrowser users add ID 1 --perm.admin
|
|
||||||
else
|
|
||||||
$STD filebrowser config init -a '0.0.0.0'
|
|
||||||
$STD filebrowser config set -a '0.0.0.0'
|
|
||||||
$STD filebrowser users add admin helper-scripts.com --perm.admin
|
|
||||||
fi
|
|
||||||
msg_ok "Installed FileBrowser"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/filebrowser.service
|
|
||||||
[Unit]
|
|
||||||
Description=Filebrowser
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/root/
|
|
||||||
ExecStart=/usr/local/bin/filebrowser -r /root/.homeassistant
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl enable --now -q filebrowser.service
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "FileBrowser should be reachable by going to the following URL.
|
|
||||||
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
|
|
||||||
exit
|
|
||||||
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}http://${IP}:8123${CL}"
|
|
||||||
@@ -6,19 +6,15 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
|
|||||||
|
|
||||||
## App Default Values
|
## App Default Values
|
||||||
APP="Koel"
|
APP="Koel"
|
||||||
var_tags="${var_tags:-music;player;homelab}"
|
var_tags="${var_tags:-music}"
|
||||||
var_disk="${var_disk:-9}"
|
var_disk="${var_disk:-9}"
|
||||||
var_cpu="${var_cpu:-3}"
|
var_cpu="${var_cpu:-3}"
|
||||||
var_ram="${var_ram:-3072}"
|
var_ram="${var_ram:-3072}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_verbose="${var_verbose:-yes}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
# App Output & Base Settings
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
base_settings
|
|
||||||
|
|
||||||
# Core
|
|
||||||
variables
|
variables
|
||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: MickLesk (Canbiz)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/Luligu/matterbridge
|
|
||||||
|
|
||||||
APP="Matterbridge"
|
|
||||||
var_tags="${var_tags:-matter;smarthome}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /root/Matterbridge ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get upgrade -y
|
|
||||||
NODE_VERSION="22"
|
|
||||||
NODE_MODULE="matterbridge"
|
|
||||||
install_node_and_modules
|
|
||||||
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}:8283${CL}"
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/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
|
|
||||||
|
|
||||||
APP="Mattermost"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
if [[ ! -d /opt/mattermost ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/xxxx/xxxx/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 App"
|
|
||||||
systemctl stop xxxx
|
|
||||||
msg_ok "App Stopped"
|
|
||||||
|
|
||||||
msg_info "Updating App"
|
|
||||||
#
|
|
||||||
msg_ok "Updated App"
|
|
||||||
|
|
||||||
msg_info "Starting App"
|
|
||||||
systemctl start App
|
|
||||||
msg_ok "Started App"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
#rm -rf
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${APP} Setup should be reachable by going to the following URL.
|
|
||||||
${BL}http://${IP}:8086${CL} \n"
|
|
||||||
71
ct/odoo.sh
71
ct/odoo.sh
@@ -1,71 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/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/odoo/odoo
|
|
||||||
|
|
||||||
APP="Odoo"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
var_tags="${var_tags:-erp}"
|
|
||||||
var_disk="${var_disk:-6}"
|
|
||||||
var_cpu="${var_cpu:-4}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/odoo ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE="17.0"
|
|
||||||
if [[ ! -f /opt/odoo_version.txt ]] || [[ "$RELEASE" != "$(cat /opt/odoo_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping ${APP} service"
|
|
||||||
systemctl stop odoo
|
|
||||||
msg_ok "Stopped ${APP}"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
|
||||||
cd /opt
|
|
||||||
rm -rf odoo_bak
|
|
||||||
mv odoo odoo_bak
|
|
||||||
git clone --depth 1 --branch "$RELEASE" https://github.com/odoo/odoo.git /opt/odoo/odoo
|
|
||||||
cd /opt/odoo
|
|
||||||
/opt/odoo/venv/bin/pip install -r /opt/odoo/odoo/requirements.txt
|
|
||||||
echo "$RELEASE" >/opt/odoo_version.txt
|
|
||||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP} service"
|
|
||||||
systemctl start odoo
|
|
||||||
msg_ok "Started ${APP}"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf /opt/odoo_bak
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8069${CL}"
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://openobserve.ai/
|
|
||||||
|
|
||||||
APP="OpenObserve"
|
|
||||||
var_tags="${var_tags:-monitoring}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-512}"
|
|
||||||
var_disk="${var_disk:-3}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/openobserve/ ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating $APP"
|
|
||||||
systemctl stop openobserve
|
|
||||||
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
|
||||||
tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve
|
|
||||||
systemctl start openobserve
|
|
||||||
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}http://${IP}:5080${CL}"
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: michelroegl-brunner
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/opf/openproject
|
|
||||||
|
|
||||||
APP="OpenProject"
|
|
||||||
var_tags="${var_tags:-project-management,erp}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-4096}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /etc/openproject/installer.dat ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install --only-upgrade -y openproject
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
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}/openproject${CL}"
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://docs.paperless-ngx.com/
|
|
||||||
|
|
||||||
APP="Paperless-ngx"
|
|
||||||
var_tags="${var_tags:-document;management}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/paperless ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
msg_info "Stopping Paperless services"
|
|
||||||
systemctl stop paperless-{webserver,scheduler,task-queue,consumer}
|
|
||||||
msg_ok "Stopped Paperless services"
|
|
||||||
|
|
||||||
BACKUP_DIR="/opt/paperless-backup-$(date +%F_%T | tr ':' '-')"
|
|
||||||
|
|
||||||
MIGRATION_NEEDED=0
|
|
||||||
if ! command -v uv &>/dev/null || [[ ! -d /opt/paperless/.venv ]]; then
|
|
||||||
MIGRATION_NEEDED=1
|
|
||||||
msg_info "uv not found or missing venv, migrating..."
|
|
||||||
setup_uv
|
|
||||||
$STD uv venv /opt/paperless/.venv
|
|
||||||
source /opt/paperless/.venv/bin/activate
|
|
||||||
$STD uv sync --all-extras
|
|
||||||
fi
|
|
||||||
|
|
||||||
BACKUP_DIR="/opt/paperless-backup-$(date +%F_%T | tr ':' '-')"
|
|
||||||
|
|
||||||
setup_gs
|
|
||||||
setup_uv
|
|
||||||
|
|
||||||
msg_info "Backing up Paperless folders"
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
|
||||||
for d in consume data media; do
|
|
||||||
[[ -d "/opt/paperless/$d" ]] && mv "/opt/paperless/$d" "$BACKUP_DIR/"
|
|
||||||
done
|
|
||||||
[[ -f "/opt/paperless/paperless.conf" ]] && cp "/opt/paperless/paperless.conf" "$BACKUP_DIR/"
|
|
||||||
msg_ok "Backup completed to $BACKUP_DIR"
|
|
||||||
|
|
||||||
msg_info "Updating PaperlessNGX"
|
|
||||||
RELEASE=$(curl -fsSL "https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" | grep 'tag_name' | cut -d '"' -f4)
|
|
||||||
cd /tmp
|
|
||||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o paperless.tar.xz
|
|
||||||
tar -xf paperless.tar.xz
|
|
||||||
cp -r paperless-ngx/* /opt/paperless/
|
|
||||||
rm -rf paperless.tar.xz paperless-ngx
|
|
||||||
echo "$RELEASE" >/opt/paperless/Paperless-ngx_version.txt
|
|
||||||
msg_ok "Updated Paperless-ngx to $RELEASE"
|
|
||||||
|
|
||||||
for d in consume data media; do
|
|
||||||
[[ -d "$BACKUP_DIR/$d" ]] && mv "$BACKUP_DIR/$d" "/opt/paperless/"
|
|
||||||
done
|
|
||||||
[[ ! -f "/opt/paperless/paperless.conf" && -f "$BACKUP_DIR/paperless.conf" ]] && cp "$BACKUP_DIR/paperless.conf" "/opt/paperless/paperless.conf"
|
|
||||||
$STD uv venv /opt/paperless/.venv
|
|
||||||
source /opt/paperless/.venv/bin/activate
|
|
||||||
echo -e "source done"
|
|
||||||
$STD uv sync --all-extras
|
|
||||||
echo -e "uv sync done"
|
|
||||||
source /opt/paperless/paperless.conf
|
|
||||||
$STD /opt/paperless/.venv/bin/python3 /opt/paperless/src/manage.py migrate
|
|
||||||
|
|
||||||
if [[ "$MIGRATION_NEEDED" == 1 ]]; then
|
|
||||||
cat <<EOF >/etc/default/paperless
|
|
||||||
PYTHONDONTWRITEBYTECODE=1
|
|
||||||
PYTHONUNBUFFERED=1
|
|
||||||
PNGX_CONTAINERIZED=0
|
|
||||||
UV_LINK_MODE=copy
|
|
||||||
EOF
|
|
||||||
|
|
||||||
for svc in /etc/systemd/system/paperless-*.service; do
|
|
||||||
sed -i \
|
|
||||||
-e "s|^ExecStart=.*manage.py|ExecStart=/opt/paperless/.venv/bin/python3 manage.py|" \
|
|
||||||
-e "s|^ExecStart=.*celery|ExecStart=/opt/paperless/.venv/bin/celery|" \
|
|
||||||
-e "s|^ExecStart=.*granian|ExecStart=/opt/paperless/.venv/bin/granian|" \
|
|
||||||
-e "/^WorkingDirectory=/a EnvironmentFile=/etc/default/paperless" "$svc"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
systemctl daemon-reexec
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
msg_info "Starting Paperless services"
|
|
||||||
systemctl start paperless-{webserver,scheduler,task-queue,consumer}.service
|
|
||||||
sleep 1
|
|
||||||
msg_ok "All services restarted"
|
|
||||||
msg_ok "Updated Successfully!\n"
|
|
||||||
read -r -p "Remove backup directory at $BACKUP_DIR? [y/N]: " CLEANUP
|
|
||||||
if [[ "$CLEANUP" =~ ^[Yy]$ ]]; then
|
|
||||||
rm -rf "$BACKUP_DIR"
|
|
||||||
msg_ok "Backup directory removed"
|
|
||||||
else
|
|
||||||
msg_info "Backup directory retained at $BACKUP_DIR"
|
|
||||||
fi
|
|
||||||
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}:8000${CL}"
|
|
||||||
37
ct/rclone.sh
37
ct/rclone.sh
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: MickLesk (CanbiZ)
|
# Author: Slaviša Arežina (tremor021)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
# Source: https://rclone.org/
|
# Source: https://github.com/rclone/rclone
|
||||||
|
|
||||||
APP="Rclone"
|
APP="Rclone"
|
||||||
var_tags="${var_tags:-os}"
|
var_tags="${var_tags:-os}"
|
||||||
@@ -23,14 +23,35 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /var ]]; then
|
if [[ ! -d /opt/rclone ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating $APP LXC"
|
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
$STD apt-get update
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
$STD apt-get -y upgrade
|
msg_info "Stopping Service"
|
||||||
msg_ok "Updated $APP LXC"
|
systemctl stop rclone-web
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
rm -rf /opt/rclone/*
|
||||||
|
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
||||||
|
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start rclone-web
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,3 +61,5 @@ description
|
|||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: CrazyWolf13
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/CrazyWolf13/streamlink-webui
|
|
||||||
|
|
||||||
APP="streamlink-webui"
|
|
||||||
var_tags="${var_tags:-download,streaming}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-12}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/streamlink-webui ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/CrazyWolf13/streamlink-webui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
msg_info "Stopping $APP"
|
|
||||||
systemctl stop ${APP}
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
rm -rf /opt/${APP}
|
|
||||||
NODE_VERSION="22"
|
|
||||||
NODE_MODULE="npm@latest,yarn@latest"
|
|
||||||
install_node_and_modules
|
|
||||||
setup_uv
|
|
||||||
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
|
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
$STD uv venv /opt/"${APP}"/backend/src/.venv
|
|
||||||
source /opt/"${APP}"/backend/src/.venv/bin/activate
|
|
||||||
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APP}"/backend/src/.venv
|
|
||||||
cd /opt/"${APP}"/frontend/src
|
|
||||||
$STD yarn install
|
|
||||||
$STD yarn build
|
|
||||||
chmod +x /opt/"${APP}"/start.sh
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
|
||||||
systemctl start ${APP}
|
|
||||||
msg_ok "Started $APP"
|
|
||||||
|
|
||||||
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}:8000${CL}"
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Asterisk",
|
|
||||||
"slug": "asterisk",
|
|
||||||
"categories": [
|
|
||||||
0,
|
|
||||||
4
|
|
||||||
],
|
|
||||||
"date_created": "2025-05-13",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": false,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": null,
|
|
||||||
"documentation": "https://docs.asterisk.org/",
|
|
||||||
"config_path": "/etc/asterisk",
|
|
||||||
"website": "https://asterisk.org/",
|
|
||||||
"logo": "https://docs.asterisk.org/favicon.ico",
|
|
||||||
"description": "Asterisk is an open-source framework for building communications applications, most commonly used as a phone system (PBX). Developed by Digium (now part of Sangoma), it turns a standard computer into a powerful telephony server.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/asterisk.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 4,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "authentik",
|
|
||||||
"slug": "authentik",
|
|
||||||
"categories": [
|
|
||||||
6
|
|
||||||
],
|
|
||||||
"date_created": "2024-12-27",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 9000,
|
|
||||||
"documentation": "https://docs.goauthentik.io/docs/",
|
|
||||||
"website": "https://goauthentik.io/",
|
|
||||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/authentik.svg",
|
|
||||||
"config_path": "/etc/authentik/config.yml",
|
|
||||||
"description": "authentik is an IdP (Identity Provider) and SSO (single sign on) that is built with security at the forefront of every piece of code, every feature, with an emphasis on flexibility and versatility.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/authentik.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 6,
|
|
||||||
"ram": 8192,
|
|
||||||
"hdd": 12,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "Authentik is very resource-heavy, it is recommended to use at least 8GB RAM anytime!",
|
|
||||||
"type": "warning"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
40
frontend/public/json/backrest.json
Normal file
40
frontend/public/json/backrest.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "Backrest",
|
||||||
|
"slug": "backrest",
|
||||||
|
"categories": [
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"date_created": "2025-05-11",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9898,
|
||||||
|
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
|
||||||
|
"website": "https://garethgeorge.github.io/backrest",
|
||||||
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/backrest-light.svg",
|
||||||
|
"config_path": "/opt/backrest/config/config.json",
|
||||||
|
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/backrest.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"type": "info",
|
||||||
|
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -8,22 +8,22 @@
|
|||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 3333,
|
||||||
"documentation": "https://bitmagnet.io/setup.html",
|
"documentation": "https://bitmagnet.io/setup.html",
|
||||||
"website": "https://bitmagnet.io/",
|
"website": "https://bitmagnet.io/",
|
||||||
"logo": "https://github.com/bitmagnet-io/bitmagnet/blob/main/webui/public/magnet.svg",
|
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/bitmagnet.webp",
|
||||||
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
|
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
|
||||||
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
|
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/alpine-bitmagnet.sh",
|
"script": "ct/bitmagnet.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 256,
|
"ram": 512,
|
||||||
"hdd": 3,
|
"hdd": 4,
|
||||||
"os": "alpine",
|
"os": "debian",
|
||||||
"version": "3.21"
|
"version": "12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -42,5 +42,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "During installation you will be asked to enter your TMDB API key, if you wanna use it. Make sure you have it ready.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Alpine-gatus",
|
|
||||||
"slug": "alpine-gatus",
|
|
||||||
"categories": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"date_created": "2025-05-06",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 8080,
|
|
||||||
"documentation": "https://gatus.io/docs",
|
|
||||||
"website": "https://gatus.io/",
|
|
||||||
"logo": "https://raw.githubusercontent.com/TwiN/gatus/refs/heads/master/web/static/img/logo.svg",
|
|
||||||
"config_path": "/opt/gatus/config/config.yaml",
|
|
||||||
"description": "Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/gatus.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 512,
|
|
||||||
"hdd": 4,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "alpine",
|
|
||||||
"script": "ct/alpine-gatus.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 256,
|
|
||||||
"hdd": 3,
|
|
||||||
"os": "alpine",
|
|
||||||
"version": "3.21"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "OpenObserve",
|
|
||||||
"slug": "openobserve",
|
|
||||||
"categories": [
|
|
||||||
9
|
|
||||||
],
|
|
||||||
"date_created": "2024-05-02",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 5080,
|
|
||||||
"documentation": null,
|
|
||||||
"website": "https://openobserve.ai/",
|
|
||||||
"logo": "https://avatars.githubusercontent.com/u/95867656",
|
|
||||||
"config_path": "",
|
|
||||||
"description": "OpenObserve is a simple yet sophisticated log search, infrastructure monitoring, and APM solution.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/openobserve.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 1,
|
|
||||||
"ram": 512,
|
|
||||||
"hdd": 3,
|
|
||||||
"os": "debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "Show Login Credentials: `cat /opt/openobserve/data/.env`",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "OpenProject",
|
|
||||||
"slug": "openproject",
|
|
||||||
"categories": [
|
|
||||||
25
|
|
||||||
],
|
|
||||||
"date_created": "2025-04-03",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 80,
|
|
||||||
"documentation": "https://www.openproject.org",
|
|
||||||
"website": "https://www.openproject.org",
|
|
||||||
"logo": "https://raw.githubusercontent.com/opf/openproject/dev/docker/prod/logo.png",
|
|
||||||
"config_path": "",
|
|
||||||
"description": "OpenProject is a web-based project management software. Use OpenProject to manage your projects, tasks and goals. Collaborate via work packages and link them to your pull requests on Github. Read more about the OpenProject GitHub integration.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/openproject.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 4096,
|
|
||||||
"hdd": 8,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": "admin",
|
|
||||||
"password": "admin"
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
|
|
||||||
44
frontend/public/json/rclone.json
Normal file
44
frontend/public/json/rclone.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "Rclone",
|
||||||
|
"slug": "rclone",
|
||||||
|
"categories": [
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2025-05-06",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://rclone.org/docs/",
|
||||||
|
"website": "https://rclone.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg",
|
||||||
|
"config_path": "~/.config/rclone/rclone.conf",
|
||||||
|
"description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/rclone.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"type": "info",
|
||||||
|
"text": "`cat ~/rclone.creds` to view login credentials"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "info",
|
||||||
|
"text": "`htpasswd -b -B /opt/login.pwd newuser newuserpassword` to add more users."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Streamlink WebUI",
|
|
||||||
"slug": "streamlink-webui",
|
|
||||||
"categories": [
|
|
||||||
11
|
|
||||||
],
|
|
||||||
"date_created": "2025-05-05",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 8000,
|
|
||||||
"documentation": "https://github.com/CrazyWolf13/streamlink-webui",
|
|
||||||
"config_path": "/opt/streamlink-webui.env",
|
|
||||||
"website": "https://github.com/CrazyWolf13/streamlink-webui",
|
|
||||||
"logo": null,
|
|
||||||
"description": "a simple web-ui to the well-known streamlink cli application, which allows you to save twitch streams to your local disk.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/streamlink-webui.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 5,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": "null",
|
|
||||||
"password": "null"
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "This app requires a Twitch cliend_ID and client_secret, set it in the config file. Look in the application documentation on how to obtain it.",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,109 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "blakeblackshear/frigate",
|
||||||
|
"version": "v0.14.1",
|
||||||
|
"date": "2024-08-29T22:32:51Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Checkmk/checkmk",
|
||||||
|
"version": "v2.4.0p1-rc1",
|
||||||
|
"date": "2025-05-14T07:54:22Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nzbgetcom/nzbget",
|
||||||
|
"version": "v25.0",
|
||||||
|
"date": "2025-05-12T09:12:04Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.2",
|
||||||
|
"date": "2025-05-11T16:40:55Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.22.1895",
|
||||||
|
"date": "2025-05-14T05:59:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TandoorRecipes/recipes",
|
||||||
|
"version": "2.0.0-alpha-4",
|
||||||
|
"date": "2025-05-14T05:01:45Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MediaBrowser/Emby.Releases",
|
||||||
|
"version": "4.8.11.0",
|
||||||
|
"date": "2025-03-10T06:39:11Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.6.9-rc0",
|
||||||
|
"date": "2025-05-10T18:57:30Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "esphome/esphome",
|
||||||
|
"version": "2025.4.2",
|
||||||
|
"date": "2025-05-11T22:18:43Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cross-seed/cross-seed",
|
||||||
|
"version": "v6.12.4",
|
||||||
|
"date": "2025-05-11T11:41:32Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "v6.2.12",
|
||||||
|
"date": "2025-04-20T19:22:17Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "netbox-community/netbox",
|
||||||
|
"version": "v4.3.1",
|
||||||
|
"date": "2025-05-13T19:45:00Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "glanceapp/glance",
|
||||||
|
"version": "v0.8.1",
|
||||||
|
"date": "2025-05-13T19:42:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pocketbase/pocketbase",
|
||||||
|
"version": "v0.28.1",
|
||||||
|
"date": "2025-05-13T18:45:47Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jenkinsci/jenkins",
|
||||||
|
"version": "jenkins-2.510",
|
||||||
|
"date": "2025-05-13T18:33:42Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mongodb/mongo",
|
||||||
|
"version": "r6.0.23",
|
||||||
|
"date": "2025-05-13T18:28:23Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keycloak/keycloak",
|
||||||
|
"version": "26.2.4",
|
||||||
|
"date": "2025-05-08T09:10:10Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "OctoPrint/OctoPrint",
|
||||||
|
"version": "1.11.1",
|
||||||
|
"date": "2025-05-13T13:32:07Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "redis/redis",
|
||||||
|
"version": "8.0.1",
|
||||||
|
"date": "2025-05-13T13:31:53Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "theonedev/onedev",
|
"name": "theonedev/onedev",
|
||||||
"version": "v11.9.6",
|
"version": "v11.9.6",
|
||||||
"date": "2025-05-13T12:16:17Z"
|
"date": "2025-05-13T12:16:17Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "element-hq/synapse",
|
||||||
|
"version": "v1.129.0",
|
||||||
|
"date": "2025-05-06T12:28:54Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "zabbix/zabbix",
|
"name": "zabbix/zabbix",
|
||||||
"version": "7.2.7rc1",
|
"version": "7.2.7rc1",
|
||||||
@@ -14,51 +114,16 @@
|
|||||||
"version": "6.3.0-alpha.4",
|
"version": "6.3.0-alpha.4",
|
||||||
"date": "2025-05-13T11:18:29Z"
|
"date": "2025-05-13T11:18:29Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "firefly-iii/firefly-iii",
|
|
||||||
"version": "v6.2.12",
|
|
||||||
"date": "2025-04-20T19:22:17Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cross-seed/cross-seed",
|
|
||||||
"version": "v6.12.4",
|
|
||||||
"date": "2025-05-11T11:41:32Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "element-hq/synapse",
|
|
||||||
"version": "v1.129.0",
|
|
||||||
"date": "2025-05-06T12:28:54Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jackett/Jackett",
|
|
||||||
"version": "v0.22.1893",
|
|
||||||
"date": "2025-05-13T05:57:50Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "zitadel/zitadel",
|
"name": "zitadel/zitadel",
|
||||||
"version": "v2.65.9",
|
"version": "v2.65.9",
|
||||||
"date": "2025-05-13T05:14:39Z"
|
"date": "2025-05-13T05:14:39Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "ollama/ollama",
|
|
||||||
"version": "v0.6.9-rc0",
|
|
||||||
"date": "2025-05-10T18:57:30Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "go-gitea/gitea",
|
"name": "go-gitea/gitea",
|
||||||
"version": "v1.23.8",
|
"version": "v1.23.8",
|
||||||
"date": "2025-05-12T22:40:50Z"
|
"date": "2025-05-12T22:40:50Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "MediaBrowser/Emby.Releases",
|
|
||||||
"version": "4.8.11.0",
|
|
||||||
"date": "2025-03-10T06:39:11Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "keycloak/keycloak",
|
|
||||||
"version": "26.2.4",
|
|
||||||
"date": "2025-05-08T09:10:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "leiweibau/Pi.Alert",
|
"name": "leiweibau/Pi.Alert",
|
||||||
"version": "v2025-05-11",
|
"version": "v2025-05-11",
|
||||||
@@ -119,11 +184,6 @@
|
|||||||
"version": "v10.7.2",
|
"version": "v10.7.2",
|
||||||
"date": "2025-05-12T10:42:32Z"
|
"date": "2025-05-12T10:42:32Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "nzbgetcom/nzbget",
|
|
||||||
"version": "v25.0",
|
|
||||||
"date": "2025-05-12T09:12:04Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "dgtlmoon/changedetection.io",
|
"name": "dgtlmoon/changedetection.io",
|
||||||
"version": "0.49.17",
|
"version": "0.49.17",
|
||||||
@@ -139,16 +199,6 @@
|
|||||||
"version": "v2.18.1",
|
"version": "v2.18.1",
|
||||||
"date": "2025-05-12T07:16:12Z"
|
"date": "2025-05-12T07:16:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "esphome/esphome",
|
|
||||||
"version": "2025.4.2",
|
|
||||||
"date": "2025-05-11T22:18:43Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "morpheus65535/bazarr",
|
|
||||||
"version": "v1.5.2",
|
|
||||||
"date": "2025-05-11T16:40:55Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "outline/outline",
|
"name": "outline/outline",
|
||||||
"version": "v0.84.0",
|
"version": "v0.84.0",
|
||||||
@@ -174,11 +224,6 @@
|
|||||||
"version": "v5.22.4.9896",
|
"version": "v5.22.4.9896",
|
||||||
"date": "2025-04-23T18:51:12Z"
|
"date": "2025-04-23T18:51:12Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pocketbase/pocketbase",
|
|
||||||
"version": "v0.28.0",
|
|
||||||
"date": "2025-05-11T06:25:22Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "owncast/owncast",
|
"name": "owncast/owncast",
|
||||||
"version": "v0.2.3",
|
"version": "v0.2.3",
|
||||||
@@ -304,11 +349,6 @@
|
|||||||
"version": "v2.36.0",
|
"version": "v2.36.0",
|
||||||
"date": "2025-05-07T11:54:14Z"
|
"date": "2025-05-07T11:54:14Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Checkmk/checkmk",
|
|
||||||
"version": "v2.2.0p42-rc1",
|
|
||||||
"date": "2025-05-07T11:50:30Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "openobserve/openobserve",
|
"name": "openobserve/openobserve",
|
||||||
"version": "v0.14.7",
|
"version": "v0.14.7",
|
||||||
@@ -334,11 +374,6 @@
|
|||||||
"version": "v1.12.1rc0",
|
"version": "v1.12.1rc0",
|
||||||
"date": "2025-05-06T20:56:30Z"
|
"date": "2025-05-06T20:56:30Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "redis/redis",
|
|
||||||
"version": "8.0.1-int",
|
|
||||||
"date": "2025-05-06T18:40:34Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Athou/commafeed",
|
"name": "Athou/commafeed",
|
||||||
"version": "5.8.0",
|
"version": "5.8.0",
|
||||||
@@ -349,11 +384,6 @@
|
|||||||
"version": "v0.19.0",
|
"version": "v0.19.0",
|
||||||
"date": "2025-05-06T18:05:42Z"
|
"date": "2025-05-06T18:05:42Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jenkinsci/jenkins",
|
|
||||||
"version": "jenkins-2.509",
|
|
||||||
"date": "2025-05-06T15:37:10Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "MariaDB/server",
|
"name": "MariaDB/server",
|
||||||
"version": "mariadb-11.4.6",
|
"version": "mariadb-11.4.6",
|
||||||
@@ -460,38 +490,8 @@
|
|||||||
"date": "2025-05-03T20:23:27Z"
|
"date": "2025-05-03T20:23:27Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "actualbudget/actual",
|
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||||
"version": "v25.5.0",
|
"version": "v3.5.4",
|
||||||
"date": "2025-05-03T19:03:17Z"
|
"date": "2025-05-02T13:42:06Z"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "rogerfar/rdt-client",
|
|
||||||
"version": "v2.0.111",
|
|
||||||
"date": "2025-05-03T16:25:30Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "blakeblackshear/frigate",
|
|
||||||
"version": "v0.14.1",
|
|
||||||
"date": "2024-08-29T22:32:51Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "kimai/kimai",
|
|
||||||
"version": "2.33.0",
|
|
||||||
"date": "2025-05-03T10:33:49Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "documenso/documenso",
|
|
||||||
"version": "v1.10.3",
|
|
||||||
"date": "2025-05-02T23:23:25Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "prometheus/prometheus",
|
|
||||||
"version": "v0.304.0-rc.0",
|
|
||||||
"date": "2025-05-02T17:29:18Z"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jhuckaby/Cronicle",
|
|
||||||
"version": "v0.9.80",
|
|
||||||
"date": "2025-05-02T16:48:15Z"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ const Sidebar = ({
|
|||||||
selectedScript: string | null;
|
selectedScript: string | null;
|
||||||
setSelectedScript: (script: string | null) => void;
|
setSelectedScript: (script: string | null) => void;
|
||||||
}) => {
|
}) => {
|
||||||
const uniqueScripts = items.reduce((acc, category) => {
|
const filteredItems = items.filter(category => category.scripts && category.scripts.length > 0);
|
||||||
|
|
||||||
|
const uniqueScripts = filteredItems.reduce((acc, category) => {
|
||||||
for (const script of category.scripts) {
|
for (const script of category.scripts) {
|
||||||
if (!acc.some((s) => s.name === script.name)) {
|
if (!acc.some((s) => s.name === script.name)) {
|
||||||
acc.push(script);
|
acc.push(script);
|
||||||
@@ -31,7 +33,7 @@ const Sidebar = ({
|
|||||||
</div>
|
</div>
|
||||||
<div className="rounded-lg">
|
<div className="rounded-lg">
|
||||||
<ScriptAccordion
|
<ScriptAccordion
|
||||||
items={items}
|
items={filteredItems}
|
||||||
selectedScript={selectedScript}
|
selectedScript={selectedScript}
|
||||||
setSelectedScript={setSelectedScript}
|
setSelectedScript={setSelectedScript}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -40,12 +40,15 @@ temp_file=$(mktemp)
|
|||||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||||
cd /opt/bitmagnet
|
cd /opt/bitmagnet
|
||||||
$STD go build
|
VREL=v$RELEASE
|
||||||
|
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||||
chmod +x bitmagnet
|
chmod +x bitmagnet
|
||||||
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
|
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
|
||||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
||||||
msg_ok "Installed bitmagnet v${RELEASE}"
|
msg_ok "Installed bitmagnet v${RELEASE}"
|
||||||
|
|
||||||
|
read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
|
||||||
|
|
||||||
msg_info "Enabling bitmagnet Service"
|
msg_info "Enabling bitmagnet Service"
|
||||||
cat <<EOF >/etc/init.d/bitmagnet
|
cat <<EOF >/etc/init.d/bitmagnet
|
||||||
#!/sbin/openrc-run
|
#!/sbin/openrc-run
|
||||||
@@ -60,6 +63,10 @@ pidfile="/var/run/bitmagnet.pid"
|
|||||||
depend() {
|
depend() {
|
||||||
use net
|
use net
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start_pre() {
|
||||||
|
export TMDB_API_KEY="$tmdbapikey"
|
||||||
|
}
|
||||||
EOF
|
EOF
|
||||||
chmod +x /etc/init.d/bitmagnet
|
chmod +x /etc/init.d/bitmagnet
|
||||||
$STD rc-update add bitmagnet default
|
$STD rc-update add bitmagnet default
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
#!/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
|
|
||||||
|
|
||||||
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 \
|
|
||||||
libsrtp2-dev \
|
|
||||||
build-essential \
|
|
||||||
libedit-dev \
|
|
||||||
uuid-dev \
|
|
||||||
libjansson-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libsqlite3-dev
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Downloading Asterisk"
|
|
||||||
RELEASE=$(curl -s https://downloads.asterisk.org/pub/telephony/asterisk/ | grep -o 'asterisk-[0-9]\+-current\.tar\.gz' | sort -V | tail -n1)
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://downloads.asterisk.org/pub/telephony/asterisk/${RELEASE}" -o "$temp_file"
|
|
||||||
mkdir -p /opt/asterisk
|
|
||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/asterisk
|
|
||||||
cd /opt/asterisk
|
|
||||||
msg_ok "Downloaded Asterisk"
|
|
||||||
|
|
||||||
msg_info "Installing Asterisk"
|
|
||||||
$STD ./contrib/scripts/install_prereq install
|
|
||||||
$STD ./configure
|
|
||||||
$STD make -j$(nproc)
|
|
||||||
$STD make install
|
|
||||||
$STD make config
|
|
||||||
$STD make install-logrotate
|
|
||||||
$STD make samples
|
|
||||||
$STD systemctl start asterisk
|
|
||||||
msg_ok "Installed Asterisk"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
$STD rm -f "$temp_file"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: remz1337
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://goauthentik.io/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
pkg-config \
|
|
||||||
libffi-dev \
|
|
||||||
build-essential \
|
|
||||||
libpq-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libsqlite3-dev \
|
|
||||||
tk-dev \
|
|
||||||
libgdbm-dev \
|
|
||||||
libc6-dev \
|
|
||||||
libbz2-dev \
|
|
||||||
zlib1g-dev \
|
|
||||||
libxmlsec1 \
|
|
||||||
libxmlsec1-dev \
|
|
||||||
libxmlsec1-openssl \
|
|
||||||
libmaxminddb0 \
|
|
||||||
python3-pip \
|
|
||||||
redis-server \
|
|
||||||
git
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
setup_uv
|
|
||||||
PG_VERSION="16" install_postgresql
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
|
||||||
install_go
|
|
||||||
|
|
||||||
msg_info "Installing yq"
|
|
||||||
cd /tmp
|
|
||||||
YQ_LATEST="$(curl -fsSL https://api.github.com/repos/mikefarah/yq/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')"
|
|
||||||
curl -fsSL "https://github.com/mikefarah/yq/releases/download/${YQ_LATEST}/yq_linux_amd64" -o /usr/bin/yq
|
|
||||||
chmod +x /usr/bin/yq
|
|
||||||
msg_ok "Installed yq"
|
|
||||||
|
|
||||||
msg_info "Installing GeoIP"
|
|
||||||
cd /tmp
|
|
||||||
GEOIP_RELEASE=$(curl -fsSL https://api.github.com/repos/maxmind/geoipupdate/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_RELEASE}/geoipupdate_${GEOIP_RELEASE}_linux_amd64.deb" -o "geoipupdate.deb"
|
|
||||||
$STD dpkg -i geoipupdate.deb
|
|
||||||
cat <<EOF >/etc/GeoIP.conf
|
|
||||||
#GEOIPUPDATE_EDITION_IDS="GeoLite2-City GeoLite2-ASN"
|
|
||||||
#GEOIPUPDATE_VERBOSE="1"
|
|
||||||
#GEOIPUPDATE_ACCOUNT_ID_FILE="/run/secrets/GEOIPUPDATE_ACCOUNT_ID"
|
|
||||||
#GEOIPUPDATE_LICENSE_KEY_FILE="/run/secrets/GEOIPUPDATE_LICENSE_KEY"
|
|
||||||
EOF
|
|
||||||
msg_ok "Installed GeoIP"
|
|
||||||
|
|
||||||
msg_info "Installing PostgreSQL"
|
|
||||||
$STD apt-get install -y postgresql-16 postgresql-contrib-16
|
|
||||||
DB_NAME="authentik"
|
|
||||||
DB_USER="authentik"
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
|
||||||
msg_ok "Installed PostgreSQL"
|
|
||||||
|
|
||||||
msg_info "Installing authentik"
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
|
|
||||||
mkdir -p /opt/authentik
|
|
||||||
curl -fsSL "${RELEASE}" -o "authentik.tar.gz"
|
|
||||||
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
|
||||||
export NODE_OPTIONS="--max-old-space-size=4096"
|
|
||||||
cd /opt/authentik/website
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build-bundled
|
|
||||||
|
|
||||||
cd /opt/authentik/web
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
|
|
||||||
cd /opt/authentik
|
|
||||||
$STD go mod download
|
|
||||||
$STD go build -o /go/authentik ./cmd/server
|
|
||||||
$STD go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
|
||||||
$STD uv sync --frozen --no-install-project --no-dev
|
|
||||||
#$STD pip3 install --no-cache-dir --upgrade pip
|
|
||||||
#$STD pip3 install --upgrade pip
|
|
||||||
#$STD pip3 install poetry poetry-plugin-export
|
|
||||||
|
|
||||||
#ln -s /usr/local/bin/poetry /usr/bin/poetry
|
|
||||||
#$STD poetry install --only=main --no-ansi --no-interaction --no-root
|
|
||||||
#$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
|
|
||||||
#$STD pip install --no-cache-dir -r requirements.txt
|
|
||||||
#$STD pip install .
|
|
||||||
mkdir -p /etc/authentik
|
|
||||||
mv /opt/authentik/authentik/lib/default.yml /etc/authentik/config.yml
|
|
||||||
$STD yq -i ".secret_key = \"$(openssl rand -hex 32)\"" /etc/authentik/config.yml
|
|
||||||
$STD yq -i ".postgresql.password = \"${DB_PASS}\"" /etc/authentik/config.yml
|
|
||||||
$STD yq -i ".geoip = \"/opt/authentik/tests/GeoLite2-City-Test.mmdb\"" /etc/authentik/config.yml
|
|
||||||
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
|
|
||||||
$STD yq -i ".blueprints_dir = \"/opt/authentik/blueprints\"" /etc/authentik/config.yml
|
|
||||||
#ln -s /usr/bin/python3 /usr/bin/python
|
|
||||||
#ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
|
|
||||||
#ln -s /usr/local/bin/celery /usr/bin/celery
|
|
||||||
#$STD bash /opt/authentik/lifecycle/ak migrate
|
|
||||||
cd /opt/authentik
|
|
||||||
uv run python -m lifecycle.migrate
|
|
||||||
ln -s /opt/authentik/.venv/bin/gunicorn /usr/local/bin/gunicorn
|
|
||||||
ln -s /opt/authentik/.venv/bin/celery /usr/local/bin/celery
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed authentik"
|
|
||||||
|
|
||||||
msg_info "Creating Services"
|
|
||||||
cat <<EOF >/etc/systemd/system/authentik-server.service
|
|
||||||
[Unit]
|
|
||||||
Description=authentik Go Server (API Gateway)
|
|
||||||
After=network.target
|
|
||||||
Wants=redis.service postgresql.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
WorkingDirectory=/opt/authentik/
|
|
||||||
ExecStart=/opt/authentik/authentik-server
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/authentik-worker.service
|
|
||||||
[Unit]
|
|
||||||
Description=authentik Celery Worker
|
|
||||||
After=network.target redis.service postgresql.service
|
|
||||||
Requires=redis.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/authentik
|
|
||||||
ExecStart=/opt/authentik/.venv/bin/celery \
|
|
||||||
-A authentik.root.celery worker \
|
|
||||||
-Ofair \
|
|
||||||
--max-tasks-per-child=1 \
|
|
||||||
--autoscale 3,1 \
|
|
||||||
-Q authentik,authentik_scheduled,authentik_events \
|
|
||||||
-E
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/authentik-celery-beat.service
|
|
||||||
[Unit]
|
|
||||||
Description=authentik Celery Beat Scheduler
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/opt/authentik
|
|
||||||
ExecStart=/opt/authentik/.venv/bin/celery \
|
|
||||||
-A authentik.root.celery beat \
|
|
||||||
-s /tmp/celerybeat-schedule
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
#User=authentik
|
|
||||||
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl enable -q --now authentik-server authentik-worker authentik-celery-beat
|
|
||||||
msg_ok "Created Services"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf /tmp/Python-3.12.1
|
|
||||||
rm -rf /tmp/Python.tgz
|
|
||||||
rm -rf go/
|
|
||||||
rm -rf /tmp/geoipupdate.deb
|
|
||||||
rm -rf authentik.tar.gz
|
|
||||||
$STD apt-get -y remove yq
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
55
install/backrest-install.sh
Normal file
55
install/backrest-install.sh
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: ksad (enirys31)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://garethgeorge.github.io/backrest/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Backrest"
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
mkdir -p /opt/backrest/{bin,config,data}
|
||||||
|
cd /opt/backrest/bin
|
||||||
|
curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "backrest_Linux_x86_64.tar.gz"
|
||||||
|
tar -xzf backrest_Linux_x86_64.tar.gz
|
||||||
|
chmod +x backrest
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Backrest"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/backrest.service
|
||||||
|
[Unit]
|
||||||
|
Description=Backrest
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
ExecStart=/opt/backrest/bin/backrest
|
||||||
|
Environment="BACKREST_PORT=9898"
|
||||||
|
Environment="BACKREST_CONFIG=/opt/backrest/config/config.json"
|
||||||
|
Environment="BACKREST_DATA=/opt/backrest/data"
|
||||||
|
Environment="XDG_CACHE_HOME=/opt/backrest/cache"
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now backrest
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
rm -rf backrest_Linux_x86_64.tar.gz
|
||||||
|
rm -f install.sh uninstall.sh
|
||||||
|
msg_ok "Cleaned"
|
||||||
78
install/bitmagnet-install.sh
Normal file
78
install/bitmagnet-install.sh
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/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/bitmagnet-io/bitmagnet
|
||||||
|
|
||||||
|
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 \
|
||||||
|
iproute2 \
|
||||||
|
gcc \
|
||||||
|
musl-dev
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PG_VERSION="16" install_postgresql
|
||||||
|
install_go
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
|
||||||
|
msg_info "Installing bitmagnet v${RELEASE}"
|
||||||
|
mkdir -p /opt/bitmagnet
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||||
|
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||||
|
cd /opt/bitmagnet
|
||||||
|
VREL=v$RELEASE
|
||||||
|
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||||
|
chmod +x bitmagnet
|
||||||
|
POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
$STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
|
||||||
|
{
|
||||||
|
echo "PostgreSQL Credentials"
|
||||||
|
echo ""
|
||||||
|
echo "postgres user password: $POSTGRES_PASSWORD"
|
||||||
|
} >>~/postgres.creds
|
||||||
|
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
||||||
|
msg_ok "Installed bitmagnet v${RELEASE}"
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/bitmagnet-web.service
|
||||||
|
[Unit]
|
||||||
|
Description=bitmagnet Web GUI
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/bitmagnet
|
||||||
|
ExecStart=/opt/bitmagnet/bitmagnet worker run --all
|
||||||
|
Environment=POSTGRES_HOST=localhost
|
||||||
|
Environment=POSTGRES_PASSWORD=$POSTGRES_PASSWORD
|
||||||
|
Environment=TMDB_API_KEY=$tmdbapikey
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now bitmagnet-web
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: MickLesk (Canbiz)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/BookStackApp/BookStack
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
unzip \
|
|
||||||
mariadb-server \
|
|
||||||
apache2 \
|
|
||||||
php8.2-{mbstring,gd,fpm,curl,intl,ldap,tidy,bz2,mysql,zip,xml} \
|
|
||||||
composer \
|
|
||||||
libapache2-mod-php \
|
|
||||||
make
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Setting up Database"
|
|
||||||
DB_NAME=bookstack
|
|
||||||
DB_USER=bookstack
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
|
||||||
$STD sudo mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
|
||||||
$STD sudo mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
|
||||||
$STD sudo mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
|
||||||
{
|
|
||||||
echo "Bookstack-Credentials"
|
|
||||||
echo "Bookstack Database User: $DB_USER"
|
|
||||||
echo "Bookstack Database Password: $DB_PASS"
|
|
||||||
echo "Bookstack Database Name: $DB_NAME"
|
|
||||||
} >>~/bookstack.creds
|
|
||||||
msg_ok "Set up database"
|
|
||||||
|
|
||||||
msg_info "Setup Bookstack (Patience)"
|
|
||||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
|
||||||
cd /opt
|
|
||||||
fetch_and_deploy_gh_release BookstackApp/BookStack
|
|
||||||
cd /opt/bookstack
|
|
||||||
cp .env.example .env
|
|
||||||
sudo sed -i "s|APP_URL=.*|APP_URL=http://$LOCAL_IP|g" /opt/bookstack/.env
|
|
||||||
sudo sed -i "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" /opt/bookstack/.env
|
|
||||||
sudo sed -i "s/DB_USERNAME=.*/DB_USERNAME=$DB_USER/" /opt/bookstack/.env
|
|
||||||
sudo sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/bookstack/.env
|
|
||||||
$STD composer install --no-dev --no-plugins --no-interaction
|
|
||||||
$STD php artisan key:generate --no-interaction --force
|
|
||||||
$STD php artisan migrate --no-interaction --force
|
|
||||||
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
|
||||||
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
|
||||||
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
|
|
||||||
chmod -R 640 /opt/bookstack/.env
|
|
||||||
$STD a2enmod rewrite
|
|
||||||
$STD a2enmod php8.2
|
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Installed Bookstack"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/apache2/sites-available/bookstack.conf
|
|
||||||
<VirtualHost *:80>
|
|
||||||
ServerAdmin webmaster@localhost
|
|
||||||
DocumentRoot /opt/bookstack/public/
|
|
||||||
|
|
||||||
<Directory /opt/bookstack/public/>
|
|
||||||
Options -Indexes +FollowSymLinks
|
|
||||||
AllowOverride None
|
|
||||||
Require all granted
|
|
||||||
<IfModule mod_rewrite.c>
|
|
||||||
<IfModule mod_negotiation.c>
|
|
||||||
Options -MultiViews -Indexes
|
|
||||||
</IfModule>
|
|
||||||
|
|
||||||
RewriteEngine On
|
|
||||||
|
|
||||||
# Handle Authorization Header
|
|
||||||
RewriteCond %{HTTP:Authorization} .
|
|
||||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
|
||||||
|
|
||||||
# Redirect Trailing Slashes If Not A Folder...
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteCond %{REQUEST_URI} (.+)/$
|
|
||||||
RewriteRule ^ %1 [L,R=301]
|
|
||||||
|
|
||||||
# Handle Front Controller...
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
|
||||||
RewriteRule ^ index.php [L]
|
|
||||||
</IfModule>
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
ErrorLog /var/log/apache2/error.log
|
|
||||||
CustomLog /var/log/apache2/access.log combined
|
|
||||||
|
|
||||||
</VirtualHost>
|
|
||||||
EOF
|
|
||||||
$STD a2ensite bookstack.conf
|
|
||||||
$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 autoremove
|
|
||||||
$STD apt-get autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -24,7 +24,7 @@ update_os
|
|||||||
#NODE_VERSION="22" NODE_MODULE="yarn" install_node_and_modules
|
#NODE_VERSION="22" NODE_MODULE="yarn" install_node_and_modules
|
||||||
|
|
||||||
#PG_VERSION="15"
|
#PG_VERSION="15"
|
||||||
MARIADB_VERSION="10.11"
|
#MARIADB_VERSION="11.8"
|
||||||
#MYSQL_VERSION="8.0"
|
#MYSQL_VERSION="8.0"
|
||||||
|
|
||||||
#install_postgresql
|
#install_postgresql
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
# Source: https://www.freepbx.org/
|
# Source: https://www.freepbx.org/
|
||||||
|
|
||||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
verb_ip6
|
verb_ip6
|
||||||
catch_errors
|
catch_errors
|
||||||
@@ -13,162 +13,15 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
curl \
|
|
||||||
sudo \
|
|
||||||
mc \
|
|
||||||
build-essential \
|
|
||||||
git \
|
|
||||||
libnewt-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libncurses5-dev \
|
|
||||||
subversion \
|
|
||||||
libsqlite3-dev \
|
|
||||||
libjansson-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
uuid-dev \
|
|
||||||
default-libmysqlclient-dev \
|
|
||||||
htop \
|
|
||||||
sngrep \
|
|
||||||
lame \
|
|
||||||
ffmpeg \
|
|
||||||
mpg123 \
|
|
||||||
vim \
|
|
||||||
expect \
|
|
||||||
openssh-server \
|
|
||||||
apache2 \
|
|
||||||
mariadb-server \
|
|
||||||
mariadb-client \
|
|
||||||
bison \
|
|
||||||
flex \
|
|
||||||
php8.2 \
|
|
||||||
php8.2-{curl,cli,common,mysql,gd,mbstring,intl,xml} \
|
|
||||||
php-pear \
|
|
||||||
sox \
|
|
||||||
sqlite3 \
|
|
||||||
pkg-config \
|
|
||||||
automake \
|
|
||||||
libtool \
|
|
||||||
autoconf \
|
|
||||||
unixodbc-dev \
|
|
||||||
uuid \
|
|
||||||
libasound2-dev \
|
|
||||||
libogg-dev \
|
|
||||||
libvorbis-dev \
|
|
||||||
libicu-dev \
|
|
||||||
libcurl4-openssl-dev \
|
|
||||||
odbc-mariadb \
|
|
||||||
libical-dev \
|
|
||||||
libneon27-dev \
|
|
||||||
libsrtp2-dev \
|
|
||||||
libspandsp-dev \
|
|
||||||
subversion \
|
|
||||||
libtool-bin \
|
|
||||||
python-dev-is-python3 \
|
|
||||||
unixodbc \
|
|
||||||
software-properties-common \
|
|
||||||
nodejs \
|
|
||||||
npm \
|
|
||||||
ipset \
|
|
||||||
iptables \
|
|
||||||
fail2ban \
|
|
||||||
php-soap
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Installing Asterisk (Patience)"
|
|
||||||
cd /usr/src
|
|
||||||
curl -fsSL http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21-current.tar.gz
|
|
||||||
tar xf asterisk-21-current.tar.gz
|
|
||||||
cd asterisk-21.*
|
|
||||||
$STD contrib/scripts/get_mp3_source.sh
|
|
||||||
$STD contrib/scripts/install_prereq install
|
|
||||||
$STD ./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
|
|
||||||
$STD make
|
|
||||||
$STD make install
|
|
||||||
$STD make samples
|
|
||||||
$STD make config
|
|
||||||
ldconfig
|
|
||||||
msg_ok "Installed Asterisk"
|
|
||||||
|
|
||||||
msg_info "Setup Asterisk"
|
|
||||||
groupadd asterisk
|
|
||||||
useradd -r -d /var/lib/asterisk -g asterisk asterisk
|
|
||||||
usermod -aG audio,dialout asterisk
|
|
||||||
chown -R asterisk:asterisk /etc/asterisk
|
|
||||||
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
|
|
||||||
chown -R asterisk:asterisk /usr/lib64/asterisk
|
|
||||||
sed -i 's|#AST_USER|AST_USER|' /etc/default/asterisk
|
|
||||||
sed -i 's|#AST_GROUP|AST_GROUP|' /etc/default/asterisk
|
|
||||||
sed -i 's|;runuser|runuser|' /etc/asterisk/asterisk.conf
|
|
||||||
sed -i 's|;rungroup|rungroup|' /etc/asterisk/asterisk.conf
|
|
||||||
echo "/usr/lib64" >> /etc/ld.so.conf.d/x86_64-linux-gnu.conf
|
|
||||||
ldconfig
|
|
||||||
msg_ok "Done Setup Asterisk"
|
|
||||||
|
|
||||||
msg_info "Setup Apache"
|
|
||||||
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/8.2/apache2/php.ini
|
|
||||||
sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/8.2/apache2/php.ini
|
|
||||||
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf
|
|
||||||
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
|
|
||||||
$STD a2enmod rewrite
|
|
||||||
systemctl restart apache2
|
|
||||||
rm /var/www/html/index.html
|
|
||||||
msg_ok "Done Setup Apache"
|
|
||||||
|
|
||||||
# Configure ODBC
|
|
||||||
cat <<EOF > /etc/odbcinst.ini
|
|
||||||
[MySQL]
|
|
||||||
Description = ODBC for MySQL (MariaDB)
|
|
||||||
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
|
|
||||||
FileUsage = 1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF > /etc/odbc.ini
|
|
||||||
[MySQL-asteriskcdrdb]
|
|
||||||
Description = MySQL connection to 'asteriskcdrdb' database
|
|
||||||
Driver = MySQL
|
|
||||||
Server = localhost
|
|
||||||
Database = asteriskcdrdb
|
|
||||||
Port = 3306
|
|
||||||
Socket = /var/run/mysqld/mysqld.sock
|
|
||||||
Option = 3
|
|
||||||
EOF
|
|
||||||
|
|
||||||
msg_info "Installing FreePBX"
|
msg_info "Installing FreePBX"
|
||||||
cd /usr/local/src
|
cd /tmp
|
||||||
curl -fsSL http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest-EDGE.tgz
|
wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
|
||||||
tar zxf freepbx-17.0-latest-EDGE.tgz
|
bash /tmp/sng_freepbx_debian_install.sh
|
||||||
cd /usr/local/src/freepbx/
|
|
||||||
$STD ./start_asterisk start
|
|
||||||
# Even though the php code completes successfully, it is returning non-zero exit code, so in the next line we return true, needed for successful installation
|
|
||||||
./install -n &>/dev/null || true
|
|
||||||
$STD fwconsole ma installall
|
|
||||||
$STD fwconsole reload
|
|
||||||
$STD fwconsole restart
|
|
||||||
msg_ok "Installed FreePBX"
|
msg_ok "Installed FreePBX"
|
||||||
|
|
||||||
msg_info "Setup FreePBX Service"
|
|
||||||
cat <<EOF > /etc/systemd/system/freepbx.service
|
|
||||||
[Unit]
|
|
||||||
Description=FreePBX VoIP Server
|
|
||||||
After=mariadb.service
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=yes
|
|
||||||
ExecStart=/usr/sbin/fwconsole start -q
|
|
||||||
ExecStop=/usr/sbin/fwconsole stop -q
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable -q --now freepbx
|
|
||||||
msg_ok "Done Setup FreePBX Service"
|
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
|
|||||||
171
install/freepbx-install_backup.sh
Normal file
171
install/freepbx-install_backup.sh
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Arian Nasr (arian-nasr)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
|
# Source: https://www.freepbx.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 \
|
||||||
|
build-essential \
|
||||||
|
git \
|
||||||
|
libnewt-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libncurses5-dev \
|
||||||
|
subversion \
|
||||||
|
libsqlite3-dev \
|
||||||
|
libjansson-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
uuid-dev \
|
||||||
|
default-libmysqlclient-dev \
|
||||||
|
htop \
|
||||||
|
sngrep \
|
||||||
|
lame \
|
||||||
|
ffmpeg \
|
||||||
|
mpg123 \
|
||||||
|
vim \
|
||||||
|
expect \
|
||||||
|
openssh-server \
|
||||||
|
apache2 \
|
||||||
|
mariadb-server \
|
||||||
|
mariadb-client \
|
||||||
|
bison \
|
||||||
|
flex \
|
||||||
|
php8.2 \
|
||||||
|
php8.2-{curl,cli,common,mysql,gd,mbstring,intl,xml} \
|
||||||
|
php-pear \
|
||||||
|
sox \
|
||||||
|
sqlite3 \
|
||||||
|
pkg-config \
|
||||||
|
automake \
|
||||||
|
libtool \
|
||||||
|
autoconf \
|
||||||
|
unixodbc-dev \
|
||||||
|
uuid \
|
||||||
|
libasound2-dev \
|
||||||
|
libogg-dev \
|
||||||
|
libvorbis-dev \
|
||||||
|
libicu-dev \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
odbc-mariadb \
|
||||||
|
libical-dev \
|
||||||
|
libneon27-dev \
|
||||||
|
libsrtp2-dev \
|
||||||
|
libspandsp-dev \
|
||||||
|
subversion \
|
||||||
|
libtool-bin \
|
||||||
|
python-dev-is-python3 \
|
||||||
|
unixodbc \
|
||||||
|
software-properties-common \
|
||||||
|
nodejs \
|
||||||
|
npm \
|
||||||
|
ipset \
|
||||||
|
iptables \
|
||||||
|
fail2ban \
|
||||||
|
php-soap
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Asterisk (Patience)"
|
||||||
|
cd /usr/src
|
||||||
|
curl -fsSL http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21-current.tar.gz
|
||||||
|
tar xf asterisk-21-current.tar.gz
|
||||||
|
cd asterisk-21.*
|
||||||
|
$STD contrib/scripts/get_mp3_source.sh
|
||||||
|
$STD contrib/scripts/install_prereq install
|
||||||
|
$STD ./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled
|
||||||
|
$STD make
|
||||||
|
$STD make install
|
||||||
|
$STD make samples
|
||||||
|
$STD make config
|
||||||
|
ldconfig
|
||||||
|
msg_ok "Installed Asterisk"
|
||||||
|
|
||||||
|
msg_info "Setup Asterisk"
|
||||||
|
groupadd asterisk
|
||||||
|
useradd -r -d /var/lib/asterisk -g asterisk asterisk
|
||||||
|
usermod -aG audio,dialout asterisk
|
||||||
|
chown -R asterisk:asterisk /etc/asterisk
|
||||||
|
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
|
||||||
|
chown -R asterisk:asterisk /usr/lib64/asterisk
|
||||||
|
sed -i 's|#AST_USER|AST_USER|' /etc/default/asterisk
|
||||||
|
sed -i 's|#AST_GROUP|AST_GROUP|' /etc/default/asterisk
|
||||||
|
sed -i 's|;runuser|runuser|' /etc/asterisk/asterisk.conf
|
||||||
|
sed -i 's|;rungroup|rungroup|' /etc/asterisk/asterisk.conf
|
||||||
|
echo "/usr/lib64" >>/etc/ld.so.conf.d/x86_64-linux-gnu.conf
|
||||||
|
ldconfig
|
||||||
|
msg_ok "Done Setup Asterisk"
|
||||||
|
|
||||||
|
msg_info "Setup Apache"
|
||||||
|
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/8.2/apache2/php.ini
|
||||||
|
sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/8.2/apache2/php.ini
|
||||||
|
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf
|
||||||
|
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
systemctl restart apache2
|
||||||
|
rm /var/www/html/index.html
|
||||||
|
msg_ok "Done Setup Apache"
|
||||||
|
|
||||||
|
# Configure ODBC
|
||||||
|
cat <<EOF >/etc/odbcinst.ini
|
||||||
|
[MySQL]
|
||||||
|
Description = ODBC for MySQL (MariaDB)
|
||||||
|
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
|
||||||
|
FileUsage = 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/odbc.ini
|
||||||
|
[MySQL-asteriskcdrdb]
|
||||||
|
Description = MySQL connection to 'asteriskcdrdb' database
|
||||||
|
Driver = MySQL
|
||||||
|
Server = localhost
|
||||||
|
Database = asteriskcdrdb
|
||||||
|
Port = 3306
|
||||||
|
Socket = /var/run/mysqld/mysqld.sock
|
||||||
|
Option = 3
|
||||||
|
EOF
|
||||||
|
|
||||||
|
msg_info "Installing FreePBX"
|
||||||
|
cd /usr/local/src
|
||||||
|
curl -fsSL http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest-EDGE.tgz -o freepbx-17.0-latest-EDGE.tgz
|
||||||
|
tar zxf freepbx-17.0-latest-EDGE.tgz
|
||||||
|
cd /usr/local/src/freepbx/
|
||||||
|
$STD ./start_asterisk start
|
||||||
|
# Even though the php code completes successfully, it is returning non-zero exit code, so in the next line we return true, needed for successful installation
|
||||||
|
./install -n &>/dev/null || true
|
||||||
|
$STD fwconsole ma installall
|
||||||
|
$STD fwconsole reload
|
||||||
|
$STD fwconsole restart
|
||||||
|
msg_ok "Installed FreePBX"
|
||||||
|
|
||||||
|
msg_info "Setup FreePBX Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/freepbx.service
|
||||||
|
[Unit]
|
||||||
|
Description=FreePBX VoIP Server
|
||||||
|
After=mariadb.service
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/sbin/fwconsole start -q
|
||||||
|
ExecStop=/usr/sbin/fwconsole stop -q
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable -q --now freepbx
|
||||||
|
msg_ok "Done Setup FreePBX Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
#!/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/TwiN/gatus
|
|
||||||
|
|
||||||
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 \
|
|
||||||
ca-certificates \
|
|
||||||
libcap2-bin
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
install_go
|
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
msg_info "Setting up gatus v${RELEASE}"
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
mkdir -p /opt/gatus
|
|
||||||
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
|
||||||
cd /opt/gatus
|
|
||||||
$STD go mod tidy
|
|
||||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
|
||||||
setcap CAP_NET_RAW+ep gatus
|
|
||||||
mv config.yaml config
|
|
||||||
echo "${RELEASE}" >/opt/gatus_version.txt
|
|
||||||
msg_ok "Done setting up gatus"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/gatus.service
|
|
||||||
[Unit]
|
|
||||||
Description=gatus Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/opt/gatus
|
|
||||||
ExecStart=/opt/gatus/gatus
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now gatus
|
|
||||||
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"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://www.home-assistant.io/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
git \
|
|
||||||
gnupg \
|
|
||||||
ca-certificates \
|
|
||||||
bluez \
|
|
||||||
libtiff6 \
|
|
||||||
tzdata \
|
|
||||||
libffi-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libjpeg-dev \
|
|
||||||
zlib1g-dev \
|
|
||||||
autoconf \
|
|
||||||
build-essential \
|
|
||||||
libopenjp2-7 \
|
|
||||||
libturbojpeg0-dev \
|
|
||||||
ffmpeg \
|
|
||||||
liblapack3 \
|
|
||||||
liblapack-dev \
|
|
||||||
dbus-broker \
|
|
||||||
libpcap-dev \
|
|
||||||
libavdevice-dev \
|
|
||||||
libavformat-dev \
|
|
||||||
libavcodec-dev \
|
|
||||||
libavutil-dev \
|
|
||||||
libavfilter-dev \
|
|
||||||
libmariadb-dev-compat \
|
|
||||||
libatlas-base-dev \
|
|
||||||
software-properties-common \
|
|
||||||
libmariadb-dev \
|
|
||||||
pkg-config
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
setup_uv
|
|
||||||
msg_info "Setup Python3"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
python3.13 \
|
|
||||||
python3.13-dev \
|
|
||||||
python3.13-venv
|
|
||||||
msg_ok "Setup Python3"
|
|
||||||
|
|
||||||
msg_info "Preparing Python 3.13 for uv"
|
|
||||||
$STD uv python install 3.13
|
|
||||||
UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
|
|
||||||
if [[ -z "$UV_PYTHON" ]]; then
|
|
||||||
msg_error "No local Python 3.13 found via uv"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
msg_ok "Prepared Python 3.13"
|
|
||||||
|
|
||||||
msg_info "Setting up Home Assistant-Core environment"
|
|
||||||
rm -rf /srv/homeassistant
|
|
||||||
mkdir -p /srv/homeassistant
|
|
||||||
cd /srv/homeassistant
|
|
||||||
$STD uv venv .venv --python "$UV_PYTHON"
|
|
||||||
source .venv/bin/activate
|
|
||||||
msg_ok "Created virtual environment"
|
|
||||||
|
|
||||||
msg_info "Installing Home Assistant-Core"
|
|
||||||
$STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
|
|
||||||
mkdir -p /root/.homeassistant
|
|
||||||
msg_ok "Installed Home Assistant-Core"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/homeassistant.service
|
|
||||||
[Unit]
|
|
||||||
Description=Home Assistant
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=/root/.homeassistant
|
|
||||||
Environment="PATH=/srv/homeassistant/.venv/bin:/usr/local/bin:/usr/bin"
|
|
||||||
ExecStart=/srv/homeassistant/.venv/bin/python3 -m homeassistant --config /root/.homeassistant
|
|
||||||
Restart=always
|
|
||||||
RestartForceExitStatus=100
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl enable -q --now homeassistant
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
verb_ip6
|
verb_ip6
|
||||||
catch_errors
|
catch_errors
|
||||||
@@ -13,18 +13,17 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
PG_VERSION="16" install_postgresql
|
||||||
|
PHP_VERSION=8.3 PHP_MODULE="bcmath,bz2,cli,exif,common,curl,fpm,gd,imagick,intl,mbstring,pgsql,sqlite3,xml,xmlrpc,zip" install_php
|
||||||
|
NODE_VERSION=22 NODE_MODULE="yarn,npm@latest" install_node_and_modules
|
||||||
|
install_composer
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
msg_info "Installing Dependencies (Patience)"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
postgresql \
|
|
||||||
nginx \
|
nginx \
|
||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
gnupg2 \
|
|
||||||
lsb-release \
|
lsb-release \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
curl \
|
|
||||||
unzip \
|
|
||||||
sudo \
|
|
||||||
mc \
|
|
||||||
cron \
|
cron \
|
||||||
libapache2-mod-xsendfile \
|
libapache2-mod-xsendfile \
|
||||||
libzip-dev \
|
libzip-dev \
|
||||||
@@ -32,15 +31,19 @@ $STD apt-get install -y \
|
|||||||
libpng-dev \
|
libpng-dev \
|
||||||
libjpeg62-turbo-dev \
|
libjpeg62-turbo-dev \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
libwebp-dev \
|
libwebp-dev
|
||||||
libapache2-mod-php \
|
msg_ok "Installed Dependencies"
|
||||||
composer
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Setting up PSql Database"
|
# PG_VERSION="16" install_postgresql
|
||||||
|
# PHP_VERSION=8.3 PHP_MODULE="bcmath,bz2,cli,exif,common,curl,fpm,gd,imagick,intl,mbstring,pgsql,sqlite3,xml,xmlrpc,zip" install_php
|
||||||
|
# NODE_VERSION=22 NODE_MODULE="yarn,npm@latest" install_node_and_modules
|
||||||
|
# install_composer
|
||||||
|
|
||||||
|
msg_info "Setting up PostgreSQL Database"
|
||||||
DB_NAME=koel_db
|
DB_NAME=koel_db
|
||||||
DB_USER=koel
|
DB_USER=koel
|
||||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||||
|
APP_SECRET=$(openssl rand -base64 32)
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
@@ -51,59 +54,39 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
|||||||
echo "Koel Database User: $DB_USER"
|
echo "Koel Database User: $DB_USER"
|
||||||
echo "Koel Database Password: $DB_PASS"
|
echo "Koel Database Password: $DB_PASS"
|
||||||
echo "Koel Database Name: $DB_NAME"
|
echo "Koel Database Name: $DB_NAME"
|
||||||
} >> ~/koel.creds
|
} >>~/koel.creds
|
||||||
msg_ok "Set up PostgreSQL database"
|
msg_ok "Set up PostgreSQL Database"
|
||||||
|
|
||||||
msg_info "Setting up Node.js/Yarn"
|
|
||||||
mkdir -p /etc/apt/keyrings
|
|
||||||
$STD curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
|
||||||
$STD echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install -y nodejs
|
|
||||||
$STD npm install -g npm@latest
|
|
||||||
$STD npm install -g yarn
|
|
||||||
msg_ok "Installed Node.js/Yarn"
|
|
||||||
|
|
||||||
msg_info "Setting up PHP"
|
|
||||||
$STD curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
|
|
||||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
|
|
||||||
$STD apt update
|
|
||||||
$STD apt install -y php8.3 php8.3-{bcmath,exif,bz2,cli,common,curl,fpm,gd,intl,sqlite3,mbstring,xml,zip,pgsql}
|
|
||||||
msg_ok "PHP successfully setup"
|
|
||||||
|
|
||||||
msg_info "Installing Koel(Patience)"
|
msg_info "Installing Koel(Patience)"
|
||||||
RELEASE=$(wget -q https://github.com/koel/koel/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
|
RELEASE=$(curl -fsSL https://github.com/koel/koel/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
||||||
cd /opt
|
|
||||||
mkdir -p /opt/koel_{media,sync}
|
mkdir -p /opt/koel_{media,sync}
|
||||||
wget -q https://github.com/koel/koel/releases/download/${RELEASE}/koel-${RELEASE}.zip
|
curl -fsSL https://github.com/koel/koel/releases/download/${RELEASE}/koel-${RELEASE}.zip -o /opt/koel.zip
|
||||||
unzip -q koel-${RELEASE}.zip
|
cd /opt
|
||||||
|
unzip koel.zip
|
||||||
|
cd /opt/koel
|
||||||
|
mv .env.example .env
|
||||||
|
$STD composer install --no-interaction
|
||||||
|
sed -i -e "s/DB_CONNECTION=.*/DB_CONNECTION=pgsql/" \
|
||||||
|
-e "s/DB_HOST=.*/DB_HOST=localhost/" \
|
||||||
|
-e "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" \
|
||||||
|
-e "s/DB_PORT=.*/DB_PORT=5432/" \
|
||||||
|
-e "s|APP_KEY=.*|APP_KEY=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" \
|
||||||
|
-e "s/DB_USERNAME=.*/DB_USERNAME=$DB_USER/" \
|
||||||
|
-e "s|DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" \
|
||||||
|
-e "s|MEDIA_PATH=.*|MEDIA_PATH=/opt/koel_media|" \
|
||||||
|
-e "s|FFMPEG_PATH=/usr/local/bin/ffmpeg|FFMPEG_PATH=/usr/bin/ffmpeg|" /opt/koel/.env
|
||||||
|
php artisan koel:init --no-assets
|
||||||
chown -R :www-data /opt/*
|
chown -R :www-data /opt/*
|
||||||
chmod -R g+r /opt/*
|
chmod -R g+r /opt/*
|
||||||
chmod -R g+rw /opt/*
|
chmod -R g+rw /opt/*
|
||||||
chown -R www-data:www-data /opt/*
|
chown -R www-data:www-data /opt/*
|
||||||
chmod -R 755 /opt/*
|
chmod -R 755 /opt/*
|
||||||
cd /opt/koel
|
|
||||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc
|
|
||||||
source ~/.bashrc
|
|
||||||
$STD composer update --no-interaction
|
|
||||||
$STD composer install --no-interaction
|
|
||||||
sudo sed -i -e "s/DB_CONNECTION=.*/DB_CONNECTION=pgsql/" \
|
|
||||||
-e "s/DB_HOST=.*/DB_HOST=localhost/" \
|
|
||||||
-e "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" \
|
|
||||||
-e "s/DB_PORT=.*/DB_PORT=5432/" \
|
|
||||||
-e "s/DB_USERNAME=.*/DB_USERNAME=$DB_USER/" \
|
|
||||||
-e "s|DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" \
|
|
||||||
-e "s|MEDIA_PATH=.*|MEDIA_PATH=/opt/koel_media|" \
|
|
||||||
-e "s|FFMPEG_PATH=/usr/local/bin/ffmpeg|FFMPEG_PATH=/usr/bin/ffmpeg|" /opt/koel/.env
|
|
||||||
sed -i -e "s/^upload_max_filesize = .*/upload_max_filesize = 200M/" \
|
|
||||||
-e "s/^post_max_size = .*/post_max_size = 200M/" \
|
|
||||||
-e "s/^memory_limit = .*/memory_limit = 200M/" /etc/php/8.3/fpm/php.ini
|
|
||||||
msg_ok "Installed Koel"
|
msg_ok "Installed Koel"
|
||||||
|
|
||||||
msg_info "Set up web services"
|
msg_info "Set up web services"
|
||||||
cat <<EOF >/etc/nginx/sites-available/koel
|
cat <<EOF >/etc/nginx/sites-available/koel
|
||||||
server {
|
server {
|
||||||
listen 6767;
|
listen *:80;
|
||||||
server_name koel.local;
|
server_name koel.local;
|
||||||
root /opt/koel/public;
|
root /opt/koel/public;
|
||||||
index index.php;
|
index index.php;
|
||||||
@@ -120,18 +103,24 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location /media/ {
|
location /media/ {
|
||||||
internal;
|
|
||||||
alias /opt/koel_media;
|
alias /opt/koel_media;
|
||||||
|
autoindex on;
|
||||||
|
access_log /var/log/nginx/koel.access.log;
|
||||||
|
error_log /var/log/nginx/koel.error.log;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ \.php$ {
|
location ~ \.php$ {
|
||||||
try_files \$uri =404;
|
try_files \$uri \$uri/ /index.php?\$args;
|
||||||
|
|
||||||
|
fastcgi_param PATH_INFO \$fastcgi_path_info;
|
||||||
|
fastcgi_param PATH_TRANSLATED \$document_root\$fastcgi_path_info;
|
||||||
|
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||||
|
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
|
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
|
||||||
fastcgi_index index.php;
|
fastcgi_index index.php;
|
||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
|
||||||
fastcgi_param PATH_INFO \$fastcgi_path_info;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@@ -152,7 +141,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/koel-${RELEASE}.zip
|
rm -rf /opt/koel.zip
|
||||||
$STD apt-get autoremove
|
$STD apt-get autoremove
|
||||||
$STD apt-get autoclean
|
$STD apt-get autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -21,32 +21,23 @@ $STD apt-get install -y \
|
|||||||
fping \
|
fping \
|
||||||
graphviz \
|
graphviz \
|
||||||
imagemagick \
|
imagemagick \
|
||||||
mariadb-client \
|
|
||||||
mariadb-server \
|
|
||||||
mtr-tiny \
|
mtr-tiny \
|
||||||
nginx \
|
nginx \
|
||||||
nmap \
|
nmap \
|
||||||
rrdtool \
|
rrdtool \
|
||||||
snmp \
|
snmp \
|
||||||
snmpd \
|
snmpd
|
||||||
git \
|
|
||||||
whois
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing PHP"
|
install_php
|
||||||
$STD apt-get install -y \
|
install_mariadb
|
||||||
php8.2-{cli,fpm,gd,gmp,mbstring,mysql,snmp,xml,zip,curl}
|
install_composer
|
||||||
msg_ok "Installed PHP"
|
|
||||||
|
|
||||||
msg_info "Installing Python"
|
msg_info "Installing Python"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
python3-{dotenv,pymysql,redis,setuptools,systemd,pip}
|
python3-{dotenv,pymysql,redis,setuptools,systemd,pip}
|
||||||
msg_ok "Installed Python"
|
msg_ok "Installed Python"
|
||||||
|
|
||||||
msg_info "Add User"
|
|
||||||
$STD useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
|
|
||||||
msg_ok "Add User"
|
|
||||||
|
|
||||||
msg_info "Configuring Database"
|
msg_info "Configuring Database"
|
||||||
DB_NAME=librenms
|
DB_NAME=librenms
|
||||||
DB_USER=librenms
|
DB_USER=librenms
|
||||||
@@ -63,15 +54,13 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
|||||||
msg_ok "Configured Database"
|
msg_ok "Configured Database"
|
||||||
|
|
||||||
msg_info "Setup Librenms"
|
msg_info "Setup Librenms"
|
||||||
tmp_file=$(mktemp)
|
$STD useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/librenms/librenms/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
fetch_and_deploy_gh_release "librenms/librenms"
|
||||||
curl -fsSL https://github.com/librenms/librenms/archive/refs/tags/${RELEASE}.tar.gz -o $tmp_file
|
|
||||||
tar -xzf $tmp_file -C /opt
|
|
||||||
mv /opt/librenms-${RELEASE} /opt/librenms
|
|
||||||
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
|
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
|
||||||
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
|
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
|
||||||
|
|
||||||
$STD pip3 install -r /opt/librenms/requirements.txt
|
|
||||||
|
pip3 install --no-user -r /opt/librenms/requirements.txt
|
||||||
|
|
||||||
cp /opt/librenms/.env.example /opt/librenms/.env
|
cp /opt/librenms/.env.example /opt/librenms/.env
|
||||||
|
|
||||||
@@ -79,25 +68,18 @@ sed -i "s/^#DB_DATABASE=.*/DB_DATABASE=${DB_NAME}/" /opt/librenms/.env
|
|||||||
sed -i "s/^#DB_USERNAME=.*/DB_USERNAME=${DB_USER}/" /opt/librenms/.env
|
sed -i "s/^#DB_USERNAME=.*/DB_USERNAME=${DB_USER}/" /opt/librenms/.env
|
||||||
sed -i "s/^#DB_PASSWORD=.*/DB_PASSWORD=${DB_PASS}/" /opt/librenms/.env
|
sed -i "s/^#DB_PASSWORD=.*/DB_PASSWORD=${DB_PASS}/" /opt/librenms/.env
|
||||||
|
|
||||||
msg_ok "Setup Librenms"
|
|
||||||
|
|
||||||
msg_info "Setup Composer"
|
|
||||||
cd /opt
|
|
||||||
curl -fsSL https://getcomposer.org/composer-stable.phar -o /usr/bin/composer
|
|
||||||
chmod +x /usr/bin/composer
|
|
||||||
cd /opt/librenms
|
|
||||||
$STD composer install --no-dev -o --no-interaction
|
|
||||||
chown -R librenms:librenms /opt/librenms
|
chown -R librenms:librenms /opt/librenms
|
||||||
chmod 771 /opt/librenms
|
chmod 771 /opt/librenms
|
||||||
setfacl -d -m g::rwx /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/logs /opt/librenms/rrd
|
setfacl -d -m g::rwx /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/logs /opt/librenms/rrd
|
||||||
chmod -R ug=rwX /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/logs /opt/librenms/rrd
|
chmod -R ug=rwX /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/logs /opt/librenms/rrd
|
||||||
msg_ok "Setup Composer"
|
msg_ok "Setup LibreNMS"
|
||||||
|
|
||||||
|
|
||||||
msg_info "Setup MariaDB"
|
msg_info "Configure MariaDB"
|
||||||
sed -i '/\[mysqld\]/a innodb_file_per_table=1\nlower_case_table_names=0' /etc/mysql/mariadb.conf.d/50-server.cnf
|
sed -i "/\[mysqld\]/a innodb_file_per_table=1\nlower_case_table_names=0" /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||||
systemctl enable -q --now mariadb
|
systemctl enable -q --now mariadb
|
||||||
msg_ok "Setup MariaDB"
|
msg_ok "Configured MariaDB"
|
||||||
|
|
||||||
msg_info "Configure PHP-FPM"
|
msg_info "Configure PHP-FPM"
|
||||||
cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/librenms.conf
|
cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/librenms.conf
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# Author: bvdberg01
|
# Author: bvdberg01
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
verb_ip6
|
verb_ip6
|
||||||
catch_errors
|
catch_errors
|
||||||
@@ -17,8 +17,7 @@ $STD apt-get install -y \
|
|||||||
curl \
|
curl \
|
||||||
sudo \
|
sudo \
|
||||||
mc \
|
mc \
|
||||||
gnupg2\
|
gnupg2 postgresql \
|
||||||
postgresql \
|
|
||||||
lsb-release \
|
lsb-release \
|
||||||
rbenv \
|
rbenv \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
@@ -38,50 +37,43 @@ 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 ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||||
{
|
{
|
||||||
echo "Manyfold Credentials"
|
echo "Manyfold Credentials"
|
||||||
echo "Manyfold Database User: $DB_USER"
|
echo "Manyfold Database User: $DB_USER"
|
||||||
echo "Manyfold Database Password: $DB_PASS"
|
echo "Manyfold Database Password: $DB_PASS"
|
||||||
echo "Manyfold Database Name: $DB_NAME"
|
echo "Manyfold Database Name: $DB_NAME"
|
||||||
} >> ~/manyfold.creds
|
} >>~/manyfold.creds
|
||||||
msg_ok "Set up PostgreSQL"
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
msg_info "Downloading Manyfold"
|
msg_info "Downloading Manyfold"
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
cd /opt
|
cd /opt
|
||||||
curl -fsSL "https://github.com/manyfold3d/manyfold/archive/refs/tags/v${RELEASE}.zip" -o manyfold.zip
|
curl -fsSL "https://github.com/manyfold3d/manyfold/archive/refs/tags/v${RELEASE}.zip" -o manyfold.zip
|
||||||
unzip -q manyfold.zip
|
unzip -q manyfold.zip
|
||||||
mv /opt/manyfold-${RELEASE}/ /opt/manyfold
|
mv /opt/manyfold-${RELEASE}/ /opt/manyfold
|
||||||
RUBY_VERSION=$(cat /opt/manyfold/.ruby-version)
|
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/.ruby-version)
|
||||||
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
|
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Downloaded Manyfold"
|
msg_ok "Downloaded Manyfold"
|
||||||
|
|
||||||
msg_info "Setting up Node.js/Yarn"
|
NODE_VERSION="22" NODE_MODULE="npm@latest,${YARN_VERSION}" install_node_and_modules
|
||||||
mkdir -p /etc/apt/keyrings
|
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" setup_rbenv_stack
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install -y nodejs
|
|
||||||
$STD npm install -g npm@latest
|
|
||||||
$STD npm install -g yarn
|
|
||||||
msg_ok "Installed Node.js/Yarn"
|
|
||||||
|
|
||||||
msg_info "Add ruby-build"
|
# msg_info "Add ruby-build"
|
||||||
mkdir -p ~/.rbenv/plugins
|
# mkdir -p ~/.rbenv/plugins
|
||||||
cd ~/.rbenv/plugins
|
# cd ~/.rbenv/plugins
|
||||||
RUBY_BUILD_RELEASE=$(curl -s https://api.github.com/repos/rbenv/ruby-build/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
# RUBY_BUILD_RELEASE=$(curl -s https://api.github.com/repos/rbenv/ruby-build/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
curl -fsSL "https://github.com/rbenv/ruby-build/archive/refs/tags/v${RUBY_BUILD_RELEASE}.zip" -o ruby-build.zip
|
# curl -fsSL "https://github.com/rbenv/ruby-build/archive/refs/tags/v${RUBY_BUILD_RELEASE}.zip" -o ruby-build.zip
|
||||||
unzip -q ruby-build.zip
|
# unzip -q ruby-build.zip
|
||||||
mv ruby-build-* ~/.rbenv/plugins/ruby-build
|
# mv ruby-build-* ~/.rbenv/plugins/ruby-build
|
||||||
echo "${RUBY_BUILD_RELEASE}" >~/.rbenv/plugins/RUBY_BUILD_version.txt
|
# echo "${RUBY_BUILD_RELEASE}" >~/.rbenv/plugins/RUBY_BUILD_version.txt
|
||||||
msg_ok "Added ruby-build"
|
# msg_ok "Added ruby-build"
|
||||||
|
|
||||||
msg_info "Installing ruby ${RUBY_VERSION}"
|
# msg_info "Installing ruby ${RUBY_VERSION}"
|
||||||
$STD rbenv install $RUBY_VERSION
|
# $STD rbenv install $RUBY_VERSION
|
||||||
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
|
# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>~/.bashrc
|
||||||
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
|
# echo 'eval "$(rbenv init -)"' >>~/.bashrc
|
||||||
source ~/.bashrc
|
# source ~/.bashrc
|
||||||
msg_ok "Installed ruby ${RUBY_VERSION}"
|
# msg_ok "Installed ruby ${RUBY_VERSION}"
|
||||||
|
|
||||||
msg_info "Adding manyfold user"
|
msg_info "Adding manyfold user"
|
||||||
useradd -m -s /usr/bin/bash manyfold
|
useradd -m -s /usr/bin/bash manyfold
|
||||||
@@ -112,7 +104,7 @@ source /opt/.env
|
|||||||
cd /opt/manyfold
|
cd /opt/manyfold
|
||||||
chown -R manyfold:manyfold /opt/manyfold
|
chown -R manyfold:manyfold /opt/manyfold
|
||||||
$STD gem install bundler
|
$STD gem install bundler
|
||||||
$STD rbenv global $RUBY_VERSION
|
$STD rbenv global $RUBY_INSTALL_VERSION
|
||||||
$STD bundle install
|
$STD bundle install
|
||||||
$STD gem install sidekiq
|
$STD gem install sidekiq
|
||||||
$STD npm install --global corepack
|
$STD npm install --global corepack
|
||||||
@@ -124,6 +116,7 @@ rm /opt/manyfold/config/credentials.yml.enc
|
|||||||
$STD bin/rails credentials:edit
|
$STD bin/rails credentials:edit
|
||||||
$STD bin/rails db:migrate
|
$STD bin/rails db:migrate
|
||||||
$STD bin/rails assets:precompile
|
$STD bin/rails assets:precompile
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
msg_ok "Installed manyfold"
|
msg_ok "Installed manyfold"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT
|
|
||||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/odoo/odoo
|
|
||||||
|
|
||||||
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 \
|
|
||||||
build-essential \
|
|
||||||
make
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
#PG_VERSION="16" install_postgresql
|
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
|
|
||||||
msg_info "Setup Odoo $RELEASE"
|
|
||||||
curl -fsSL https://nightly.odoo.com/${RELEASE}/nightly/deb/odoo_${RELEASE}.latest_all.deb -o /opt/odoo.deb
|
|
||||||
$STD apt install -y /opt/odoo.deb
|
|
||||||
msg_ok "Setup Odoo $RELEASE"
|
|
||||||
|
|
||||||
msg_info "Setup PostgreSQL Database"
|
|
||||||
DB_NAME="odoo"
|
|
||||||
DB_USER="odoo_usr"
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
|
||||||
{
|
|
||||||
echo "Odoo-Credentials"
|
|
||||||
echo -e "Odoo Database User: $DB_USER"
|
|
||||||
echo -e "Odoo Database Password: $DB_PASS"
|
|
||||||
echo -e "Odoo Database Name: $DB_NAME"
|
|
||||||
} >>~/odoo.creds
|
|
||||||
msg_ok "Setup PostgreSQL"
|
|
||||||
|
|
||||||
msg_info "Configuring Odoo"
|
|
||||||
sed -i \
|
|
||||||
-e "s|^;*db_host *=.*|db_host = localhost|" \
|
|
||||||
-e "s|^;*db_port *=.*|db_port = 5432|" \
|
|
||||||
-e "s|^;*db_user *=.*|db_user = $DB_USER|" \
|
|
||||||
-e "s|^;*db_password *=.*|db_password = $DB_PASS|" \
|
|
||||||
/etc/odoo/odoo.conf
|
|
||||||
$STD sudo -u odoo odoo -c /etc/odoo/odoo.conf -d odoo -i base --stop-after-init
|
|
||||||
msg_ok "Configured Odoo"
|
|
||||||
|
|
||||||
msg_info "Restarting Odoo"
|
|
||||||
systemctl restart odoo
|
|
||||||
msg_ok "Restarted Odoo"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f /opt/odoo.deb
|
|
||||||
$STD apt-get autoremove
|
|
||||||
$STD apt-get autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://openobserve.ai/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing OpenObserve"
|
|
||||||
mkdir -p /opt/openobserve/data
|
|
||||||
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
|
||||||
$STD tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve
|
|
||||||
|
|
||||||
cat <<EOF >/opt/openobserve/data/.env
|
|
||||||
ZO_ROOT_USER_EMAIL = "admin@example.com"
|
|
||||||
ZO_ROOT_USER_PASSWORD = "$(openssl rand -base64 18 | cut -c1-13)"
|
|
||||||
ZO_DATA_DIR = "/opt/openobserve/data"
|
|
||||||
ZO_HTTP_PORT = "5080"
|
|
||||||
EOF
|
|
||||||
msg_ok "Installed OpenObserve"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/openobserve.service
|
|
||||||
[Unit]
|
|
||||||
Description=OpenObserve
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
EnvironmentFile=/opt/openobserve/data/.env
|
|
||||||
ExecStart=/opt/openobserve/openobserve
|
|
||||||
ExecStop=killall -QUIT openobserve
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now openobserve
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: michelroegl-brunner
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/opf/openproject
|
|
||||||
|
|
||||||
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 \
|
|
||||||
apt-transport-https \
|
|
||||||
ca-certificates \
|
|
||||||
gpg
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Setup OpenProject Repository"
|
|
||||||
wget -qO- https://dl.packager.io/srv/opf/openproject/key | gpg --dearmor >/etc/apt/trusted.gpg.d/packager-io.gpg
|
|
||||||
wget -qO /etc/apt/sources.list.d/openproject.list https://dl.packager.io/srv/opf/openproject/stable/15/installer/debian/12.repo
|
|
||||||
msg_ok "Setup OpenProject Repository"
|
|
||||||
|
|
||||||
msg_info "Setup PostgreSQL Repository"
|
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
|
||||||
echo "deb http://apt.postgresql.org/pub/repos/apt ${VERSION}-pgdg main" >/etc/apt/sources.list.d/pgdg.list
|
|
||||||
curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor --output /etc/apt/trusted.gpg.d/postgresql.gpg
|
|
||||||
msg_ok "Setup PostgreSQL Repository"
|
|
||||||
|
|
||||||
msg_info "Installing PostgreSQL"
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install -y postgresql
|
|
||||||
msg_ok "Installed PostgreSQL"
|
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL"
|
|
||||||
DB_NAME=openproject
|
|
||||||
DB_USER=openproject
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
|
||||||
API_KEY=$(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 "OpenProject-Credentials"
|
|
||||||
echo -e "OpenProject Database User: $DB_USER"
|
|
||||||
echo -e "OpenProject Database Password: $DB_PASS"
|
|
||||||
echo -e "OpenProject Database Name: $DB_NAME"
|
|
||||||
echo -e "OpenProject API Key: $API_KEY"
|
|
||||||
} >>~/openproject.creds
|
|
||||||
msg_ok "Set up PostgreSQL"
|
|
||||||
|
|
||||||
msg_info "Installing OpenProject"
|
|
||||||
$STD apt-get install -y openproject
|
|
||||||
msg_ok "Installed OpenProject"
|
|
||||||
|
|
||||||
msg_info "Configure OpenProject"
|
|
||||||
IP_ADDR=$(hostname -I | cut -d' ' -f1)
|
|
||||||
cat <<EOF >/etc/openproject/installer.dat
|
|
||||||
openproject/edition default
|
|
||||||
|
|
||||||
postgres/retry retry
|
|
||||||
postgres/autoinstall reuse
|
|
||||||
postgres/db_host 127.0.0.1
|
|
||||||
postgres/db_port 5432
|
|
||||||
postgres/db_username ${DB_USER}
|
|
||||||
postgres/db_password ${DB_PASS}
|
|
||||||
postgres/db_name ${DB_NAME}
|
|
||||||
server/autoinstall install
|
|
||||||
server/variant apache2
|
|
||||||
|
|
||||||
server/hostname ${IP_ADDR}
|
|
||||||
server/server_path_prefix /openproject
|
|
||||||
server/ssl no
|
|
||||||
server/variant apache2
|
|
||||||
server/server_path_prefix
|
|
||||||
repositories/api-key ${API_KEY}
|
|
||||||
repositories/svn-install skip
|
|
||||||
repositories/git-install install
|
|
||||||
repositories/git-path /var/db/openproject/git
|
|
||||||
repositories/git-http-backend /usr/lib/git-core/git-http-backend/
|
|
||||||
memcached/autoinstall install
|
|
||||||
openproject/admin_email admin@example.net
|
|
||||||
openproject/default_language en
|
|
||||||
EOF
|
|
||||||
|
|
||||||
$STD sudo openproject configure
|
|
||||||
msg_ok "Configured OpenProject"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -1,244 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://docs.paperless-ngx.com/
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
redis \
|
|
||||||
postgresql \
|
|
||||||
python3-dev \
|
|
||||||
python3-setuptools \
|
|
||||||
python3-wheel \
|
|
||||||
build-essential \
|
|
||||||
imagemagick \
|
|
||||||
fonts-liberation \
|
|
||||||
optipng \
|
|
||||||
gnupg \
|
|
||||||
libpq-dev \
|
|
||||||
libmagic-dev \
|
|
||||||
mime-support \
|
|
||||||
libzbar0 \
|
|
||||||
poppler-utils \
|
|
||||||
default-libmysqlclient-dev \
|
|
||||||
automake \
|
|
||||||
libtool \
|
|
||||||
pkg-config \
|
|
||||||
git \
|
|
||||||
libtiff-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libleptonica-dev
|
|
||||||
setup_uv
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Installing OCR Dependencies (Patience)"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
unpaper \
|
|
||||||
icc-profiles-free \
|
|
||||||
qpdf \
|
|
||||||
liblept5 \
|
|
||||||
libxml2 \
|
|
||||||
pngquant \
|
|
||||||
zlib1g \
|
|
||||||
tesseract-ocr \
|
|
||||||
tesseract-ocr-eng
|
|
||||||
msg_ok "Installed OCR Dependencies"
|
|
||||||
|
|
||||||
setup_gs
|
|
||||||
|
|
||||||
msg_info "Installing JBIG2"
|
|
||||||
$STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc
|
|
||||||
cd /opt/jbig2enc
|
|
||||||
$STD ./autogen.sh
|
|
||||||
$STD ./configure
|
|
||||||
$STD make
|
|
||||||
$STD make install
|
|
||||||
rm -rf /opt/jbig2enc
|
|
||||||
msg_ok "Installed JBIG2"
|
|
||||||
|
|
||||||
msg_info "Installing Paperless-ngx (Patience)"
|
|
||||||
LATEST=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5)
|
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/${LATEST}/paperless-ngx-${LATEST}.tar.xz" -o paperless.tar.xz
|
|
||||||
tar -xf paperless.tar.xz
|
|
||||||
mv paperless-ngx paperless
|
|
||||||
rm paperless.tar.xz
|
|
||||||
cd /opt/paperless
|
|
||||||
|
|
||||||
$STD uv venv /opt/paperless/.venv
|
|
||||||
source /opt/paperless/.venv/bin/activate
|
|
||||||
$STD uv sync --all-extras
|
|
||||||
mkdir -p /opt/paperless/{consume,data,media,static}
|
|
||||||
sed -i -e 's|#PAPERLESS_REDIS=.*|PAPERLESS_REDIS=redis://localhost:6379|' \
|
|
||||||
-e "s|#PAPERLESS_CONSUMPTION_DIR=.*|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
|
|
||||||
-e "s|#PAPERLESS_DATA_DIR=.*|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
|
|
||||||
-e "s|#PAPERLESS_MEDIA_ROOT=.*|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
|
|
||||||
-e "s|#PAPERLESS_STATICDIR=.*|PAPERLESS_STATICDIR=/opt/paperless/static|" \
|
|
||||||
paperless.conf
|
|
||||||
echo "$LATEST" >/opt/"${APPLICATION}"_version.txt
|
|
||||||
msg_ok "Installed Paperless-ngx"
|
|
||||||
|
|
||||||
if /opt/paperless/.venv/bin/python3 -c "import nltk" &>/dev/null; then
|
|
||||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
|
||||||
for d in snowball_data stopwords punkt_tab; do
|
|
||||||
$STD /opt/paperless/.venv/bin/python3 -m nltk.downloader -d /usr/share/nltk_data "$d"
|
|
||||||
done
|
|
||||||
msg_ok "Installed NLTK components"
|
|
||||||
else
|
|
||||||
msg_info "Skipping NLTK setup (nltk not installed)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL database"
|
|
||||||
DB_NAME=paperlessdb
|
|
||||||
DB_USER=paperless
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
|
||||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
|
||||||
|
|
||||||
echo -e "\nPaperless-ngx Database User: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Paperless-ngx Database Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
|
||||||
|
|
||||||
sed -i -e "s|#PAPERLESS_DBHOST=.*|PAPERLESS_DBHOST=localhost|" \
|
|
||||||
-e "s|#PAPERLESS_DBPORT=.*|PAPERLESS_DBPORT=5432|" \
|
|
||||||
-e "s|#PAPERLESS_DBNAME=.*|PAPERLESS_DBNAME=$DB_NAME|" \
|
|
||||||
-e "s|#PAPERLESS_DBUSER=.*|PAPERLESS_DBUSER=$DB_USER|" \
|
|
||||||
-e "s|#PAPERLESS_DBPASS=.*|PAPERLESS_DBPASS=$DB_PASS|" \
|
|
||||||
-e "s|#PAPERLESS_SECRET_KEY=.*|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
|
|
||||||
/opt/paperless/paperless.conf
|
|
||||||
msg_ok "Set up PostgreSQL database"
|
|
||||||
|
|
||||||
msg_info "Running Paperless DB migrations (with config)"
|
|
||||||
source /opt/paperless/paperless.conf
|
|
||||||
$STD /opt/paperless/.venv/bin/python3 /opt/paperless/src/manage.py migrate
|
|
||||||
msg_ok "Migrations applied"
|
|
||||||
|
|
||||||
msg_info "Setting up admin Paperless-ngx User & Password"
|
|
||||||
cat <<EOF | /opt/paperless/.venv/bin/python3 /opt/paperless/src/manage.py shell
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
UserModel = get_user_model()
|
|
||||||
user = UserModel.objects.create_user('admin', password='$DB_PASS')
|
|
||||||
user.is_superuser = True
|
|
||||||
user.is_staff = True
|
|
||||||
user.save()
|
|
||||||
EOF
|
|
||||||
echo "" >>~/paperless.creds
|
|
||||||
echo -e "Paperless-ngx WebUI User: \e[32madmin\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Paperless-ngx WebUI Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
|
||||||
msg_ok "Set up admin Paperless-ngx User & Password"
|
|
||||||
|
|
||||||
read -r -p "Would you like to add Adminer? <y/N> " prompt
|
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
|
||||||
msg_info "Installing Adminer"
|
|
||||||
$STD apt install -y adminer
|
|
||||||
$STD a2enconf adminer
|
|
||||||
systemctl reload apache2
|
|
||||||
IP=$(hostname -I | awk '{print $1}')
|
|
||||||
echo "" >>~/paperless.creds
|
|
||||||
echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
|
||||||
msg_ok "Installed Adminer"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Creating Services"
|
|
||||||
cat <<EOF >/etc/default/paperless
|
|
||||||
PYTHONDONTWRITEBYTECODE=1
|
|
||||||
PYTHONUNBUFFERED=1
|
|
||||||
PNGX_CONTAINERIZED=0
|
|
||||||
UV_LINK_MODE=copy
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/paperless-scheduler.service
|
|
||||||
[Unit]
|
|
||||||
Description=Paperless Celery beat
|
|
||||||
Requires=redis.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
EnvironmentFile=/etc/default/paperless
|
|
||||||
WorkingDirectory=/opt/paperless/src
|
|
||||||
ExecStart=/opt/paperless/.venv/bin/celery --app paperless beat --loglevel INFO
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/paperless-task-queue.service
|
|
||||||
[Unit]
|
|
||||||
Description=Paperless Celery Workers
|
|
||||||
Requires=redis.service
|
|
||||||
After=postgresql.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
EnvironmentFile=/etc/default/paperless
|
|
||||||
WorkingDirectory=/opt/paperless/src
|
|
||||||
ExecStart=/opt/paperless/.venv/bin/celery --app paperless worker --loglevel INFO
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/paperless-consumer.service
|
|
||||||
[Unit]
|
|
||||||
Description=Paperless consumer
|
|
||||||
Requires=redis.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
EnvironmentFile=/etc/default/paperless
|
|
||||||
WorkingDirectory=/opt/paperless/src
|
|
||||||
ExecStartPre=/bin/sleep 2
|
|
||||||
ExecStart=/opt/paperless/.venv/bin/python3 manage.py document_consumer
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/paperless-webserver.service
|
|
||||||
[Unit]
|
|
||||||
Description=Paperless webserver
|
|
||||||
After=network.target
|
|
||||||
Wants=network.target
|
|
||||||
Requires=redis.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
EnvironmentFile=/etc/default/paperless
|
|
||||||
WorkingDirectory=/opt/paperless/src
|
|
||||||
ExecStart=/opt/paperless/.venv/bin/granian --interface asginl --ws "paperless.asgi:application"
|
|
||||||
Environment=GRANIAN_HOST=::
|
|
||||||
Environment=GRANIAN_PORT=8000
|
|
||||||
Environment=GRANIAN_WORKERS=1
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
|
||||||
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
|
||||||
msg_ok "Created Services"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf /opt/paperless/docker
|
|
||||||
rm -rf /tmp/ghostscript* /tmp/ghostpdl*
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: tteck (tteckster)
|
# Author: Slaviša Arežina (tremor021)
|
||||||
# License: MIT
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
# Source: https://github.com/rclone/rclone
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
@@ -14,14 +14,29 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y gnupg2
|
$STD apt-get install -y \
|
||||||
|
apache2-utils \
|
||||||
|
unzip
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing rclone"
|
msg_info "Installing rclone"
|
||||||
$STD fetch_and_deploy_gh_release rclone/rclone
|
temp_file=$(mktemp)
|
||||||
dpkg -i rclone-v1.69.1-linux-amd64.deb
|
mkdir -p /opt/rclone
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
||||||
|
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
||||||
|
cd /opt/rclone
|
||||||
|
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
||||||
|
{
|
||||||
|
echo "rclone-Credentials"
|
||||||
|
echo "rclone User Name: admin"
|
||||||
|
echo "rclone Password: $RCLONE_PASSWORD"
|
||||||
|
} >>~/rclone.creds
|
||||||
|
echo "${RELEASE}" >/opt/rclone_version.txt
|
||||||
msg_ok "Installed rclone"
|
msg_ok "Installed rclone"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/rclone-web.service
|
cat <<EOF >/etc/systemd/system/rclone-web.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Rclone Web GUI
|
Description=Rclone Web GUI
|
||||||
@@ -30,19 +45,21 @@ After=network-online.target
|
|||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=root
|
||||||
ExecStart=/usr/bin/rclone rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-user admin --rc-pass 12345
|
WorkingDirectory=/opt/rclone
|
||||||
|
ExecStart=/opt/rclone/rclone rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl enable -q --now rclone-web
|
systemctl enable -q --now rclone-web
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
rm -f "$temp_file"
|
||||||
$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"
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: CrazyWolf13
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/CrazyWolf13/streamlink-webui
|
|
||||||
|
|
||||||
# Import Functions und Setup
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
NODE_VERSION="22"
|
|
||||||
NODE_MODULE="npm@latest,yarn@latest"
|
|
||||||
install_node_and_modules
|
|
||||||
setup_uv
|
|
||||||
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
|
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
|
||||||
mkdir -p "/opt/${APPLICATION}-download"
|
|
||||||
$STD uv venv /opt/"${APPLICATION}"/backend/src/.venv
|
|
||||||
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
|
|
||||||
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
|
|
||||||
cd /opt/"${APPLICATION}"/frontend/src
|
|
||||||
$STD yarn install
|
|
||||||
$STD yarn build
|
|
||||||
chmod +x /opt/"${APPLICATION}"/start.sh
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<'EOF' >/opt/"${APPLICATION}".env
|
|
||||||
CLIENT_ID='your_client_id'
|
|
||||||
CLIENT_SECRET='your_client_secret'
|
|
||||||
DOWNLOAD_PATH='/opt/streamlink-webui-download'
|
|
||||||
# BASE_URL='https://sub.domain.com' \
|
|
||||||
# REVERSE_PROXY=True \
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}".service
|
|
||||||
[Unit]
|
|
||||||
Description=${APPLICATION} Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
EnvironmentFile=/opt/${APPLICATION}.env
|
|
||||||
WorkingDirectory=/opt/${APPLICATION}/backend/src
|
|
||||||
ExecStart=/bin/bash -c 'source /opt/${APPLICATION}/backend/src/.venv/bin/activate && exec /opt/${APPLICATION}/start.sh'
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now "${APPLICATION}"
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
@@ -490,7 +490,8 @@ advanced_settings() {
|
|||||||
while read -r pair; do
|
while read -r pair; do
|
||||||
start=$(echo "${pair}" | cut -d':' -f1)
|
start=$(echo "${pair}" | cut -d':' -f1)
|
||||||
end=$(echo "${pair}" | cut -d':' -f2)
|
end=$(echo "${pair}" | cut -d':' -f2)
|
||||||
if awk "NR >= ${start} && NR <= ${end}" "${iface_filepath}" | grep -qP '^\s*bridge[-_](ports|stp|fd|vlan-aware|vids)\s+'; then
|
echo "${start}:${end} --- $(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')"
|
||||||
|
if awk "NR >= ${start} && NR <= ${end}" "${iface_filepath}" | grep -qP '^\s*(bridge[-_](ports|stp|fd|vlan-aware|vids)|ovs_type\s+OVSBridge)\b'; then
|
||||||
iface_name=$(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')
|
iface_name=$(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')
|
||||||
BRIDGES="${iface_name}"$'\n'"${BRIDGES}"
|
BRIDGES="${iface_name}"$'\n'"${BRIDGES}"
|
||||||
fi
|
fi
|
||||||
@@ -905,7 +906,7 @@ config_file() {
|
|||||||
while read -r pair; do
|
while read -r pair; do
|
||||||
start=$(echo "${pair}" | cut -d':' -f1)
|
start=$(echo "${pair}" | cut -d':' -f1)
|
||||||
end=$(echo "${pair}" | cut -d':' -f2)
|
end=$(echo "${pair}" | cut -d':' -f2)
|
||||||
if awk "NR >= ${start} && NR <= ${end}" "${iface_filepath}" | grep -qP '^\s*bridge[-_](ports|stp|fd|vlan-aware|vids)\s+'; then
|
if awk "NR >= ${start} && NR <= ${end}" "${iface_filepath}" | grep -qP '^\s*(bridge[-_](ports|stp|fd|vlan-aware|vids)|ovs_type\s+OVSBridge)\b'; then
|
||||||
iface_name=$(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')
|
iface_name=$(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')
|
||||||
BRIDGES="${iface_name}"$'\n'"${BRIDGES}"
|
BRIDGES="${iface_name}"$'\n'"${BRIDGES}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
157
misc/core.func
157
misc/core.func
@@ -47,6 +47,7 @@ formatting() {
|
|||||||
BOLD=$(echo "\033[1m")
|
BOLD=$(echo "\033[1m")
|
||||||
HOLD=" "
|
HOLD=" "
|
||||||
TAB=" "
|
TAB=" "
|
||||||
|
TAB3=" "
|
||||||
}
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
@@ -215,127 +216,155 @@ __curl_err_handler() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
### dev spinner ###
|
### dev spinner ###
|
||||||
SPINNER_ACTIVE=0
|
|
||||||
SPINNER_PID=""
|
|
||||||
SPINNER_MSG=""
|
|
||||||
declare -A MSG_INFO_SHOWN=()
|
declare -A MSG_INFO_SHOWN=()
|
||||||
|
SPINNER_PID=""
|
||||||
|
SPINNER_ACTIVE=0
|
||||||
|
SPINNER_MSG=""
|
||||||
|
|
||||||
# Trap cleanup on various signals
|
# Trap cleanup on various signals
|
||||||
trap 'cleanup_spinner' EXIT INT TERM HUP
|
trap 'cleanup_spinner' EXIT INT TERM HUP
|
||||||
|
|
||||||
# Cleans up spinner process on exit
|
spinner_frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
|
||||||
cleanup_spinner() {
|
|
||||||
stop_spinner
|
|
||||||
# Additional cleanup if needed
|
|
||||||
}
|
|
||||||
|
|
||||||
|
# Ensure POSIX compatibility across Alpine and Debian/Ubuntu
|
||||||
|
# === Spinner Start ===
|
||||||
start_spinner() {
|
start_spinner() {
|
||||||
local msg="${1:-Processing...}"
|
local msg="$1"
|
||||||
local frames=(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏)
|
|
||||||
local spin_i=0
|
local spin_i=0
|
||||||
local interval=0.1
|
local interval=0.1
|
||||||
|
|
||||||
# Set message and clear current line
|
|
||||||
SPINNER_MSG="$msg"
|
|
||||||
printf "\r\e[2K" >&2
|
|
||||||
|
|
||||||
# Stop any existing spinner
|
|
||||||
stop_spinner
|
stop_spinner
|
||||||
|
SPINNER_MSG="$msg"
|
||||||
# Set active flag
|
|
||||||
SPINNER_ACTIVE=1
|
SPINNER_ACTIVE=1
|
||||||
|
|
||||||
# Start spinner in background
|
|
||||||
{
|
{
|
||||||
while [[ "$SPINNER_ACTIVE" -eq 1 ]]; do
|
while [ "$SPINNER_ACTIVE" -eq 1 ]; do
|
||||||
printf "\r\e[2K%s %b" "${TAB}${frames[spin_i]}${TAB}" "${YW}${SPINNER_MSG}${CL}" >&2
|
if [ -t 2 ]; then
|
||||||
spin_i=$(((spin_i + 1) % ${#frames[@]}))
|
printf "\r\e[2K%s %b" "${TAB}${spinner_frames[spin_i]}${TAB}" "${YW}${SPINNER_MSG}${CL}" >&2
|
||||||
|
else
|
||||||
|
printf "%s...\n" "$SPINNER_MSG" >&2
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
spin_i=$(((spin_i + 1) % ${#spinner_frames[@]}))
|
||||||
sleep "$interval"
|
sleep "$interval"
|
||||||
done
|
done
|
||||||
} &
|
} &
|
||||||
|
|
||||||
SPINNER_PID=$!
|
local pid=$!
|
||||||
|
if kill -0 "$pid" 2>/dev/null; then
|
||||||
# Disown to prevent getting "Terminated" messages
|
SPINNER_PID="$pid"
|
||||||
disown "$SPINNER_PID" 2>/dev/null || true
|
disown "$SPINNER_PID" 2>/dev/null || true
|
||||||
|
else
|
||||||
|
SPINNER_ACTIVE=0
|
||||||
|
SPINNER_PID=""
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# === Spinner Stop (No wait!) ===
|
||||||
stop_spinner() {
|
stop_spinner() {
|
||||||
# Check if spinner is active and PID exists
|
if [ "$SPINNER_ACTIVE" -eq 1 ] && [ -n "$SPINNER_PID" ]; then
|
||||||
if [[ "$SPINNER_ACTIVE" -eq 1 ]] && [[ -n "${SPINNER_PID}" ]]; then
|
|
||||||
SPINNER_ACTIVE=0
|
SPINNER_ACTIVE=0
|
||||||
|
|
||||||
if kill -0 "$SPINNER_PID" 2>/dev/null; then
|
if kill -0 "$SPINNER_PID" 2>/dev/null; then
|
||||||
kill "$SPINNER_PID" 2>/dev/null
|
kill "$SPINNER_PID" 2>/dev/null || true
|
||||||
# Give it a moment to terminate
|
for _ in $(seq 1 10); do
|
||||||
sleep 0.1
|
kill -0 "$SPINNER_PID" 2>/dev/null || break
|
||||||
# Force kill if still running
|
sleep 0.05
|
||||||
if kill -0 "$SPINNER_PID" 2>/dev/null; then
|
done
|
||||||
kill -9 "$SPINNER_PID" 2>/dev/null
|
|
||||||
fi
|
fi
|
||||||
# Wait for process but ignore errors
|
|
||||||
wait "$SPINNER_PID" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Clear spinner line
|
|
||||||
printf "\r\e[2K" >&2
|
printf "\r\e[2K" >&2
|
||||||
SPINNER_PID=""
|
SPINNER_PID=""
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
spinner_guard() {
|
# === Cleanup Spinner on signals ===
|
||||||
# Safely stop spinner if it's running
|
cleanup_spinner() {
|
||||||
if [[ "$SPINNER_ACTIVE" -eq 1 ]] && [[ -n "${SPINNER_PID}" ]]; then
|
|
||||||
stop_spinner
|
stop_spinner
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# === msg_info ===
|
||||||
msg_info() {
|
msg_info() {
|
||||||
local msg="${1:-Information message}"
|
local msg="$1"
|
||||||
|
[ -z "$msg" ] && return
|
||||||
# Only show each message once unless reset
|
if [ -n "${MSG_INFO_SHOWN["$msg"]+x}" ]; then return; fi
|
||||||
if [[ -n "${MSG_INFO_SHOWN["$msg"]+x}" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
MSG_INFO_SHOWN["$msg"]=1
|
MSG_INFO_SHOWN["$msg"]=1
|
||||||
|
stop_spinner
|
||||||
spinner_guard
|
|
||||||
start_spinner "$msg"
|
start_spinner "$msg"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# === msg_ok ===
|
||||||
msg_ok() {
|
msg_ok() {
|
||||||
local msg="${1:-Operation completed successfully}"
|
local msg="$1"
|
||||||
|
[ -z "$msg" ] && return
|
||||||
|
if [ "$SPINNER_ACTIVE" -eq 1 ]; then
|
||||||
stop_spinner
|
stop_spinner
|
||||||
printf "\r\e[2K%s %b\n" "${CM}" "${GN}${msg}${CL}" >&2
|
else
|
||||||
|
printf "\r\e[2K" >&2
|
||||||
# Remove from shown messages to allow it to be shown again
|
fi
|
||||||
|
printf "\r\e[2K%s %b\n" "$CM" "${GN}${msg}${CL}" >&2
|
||||||
unset MSG_INFO_SHOWN["$msg"]
|
unset MSG_INFO_SHOWN["$msg"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# === msg_error ===
|
||||||
msg_error() {
|
msg_error() {
|
||||||
local msg="${1:-An error occurred}"
|
local msg="$1"
|
||||||
|
[ -z "$msg" ] && return
|
||||||
stop_spinner
|
stop_spinner
|
||||||
printf "\r\e[2K%s %b\n" "${CROSS}" "${RD}${msg}${CL}" >&2
|
printf "\r\e[2K%s %b\n" "$CROSS" "${RD}${msg}${CL}" >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# === msg_warn ===
|
||||||
msg_warn() {
|
msg_warn() {
|
||||||
local msg="${1:-Warning}"
|
local msg="$1"
|
||||||
|
[ -z "$msg" ] && return
|
||||||
stop_spinner
|
stop_spinner
|
||||||
printf "\r\e[2K%s %b\n" "${INFO}" "${YWB}${msg}" >&2
|
printf "\r\e[2K%s %b\n" "$INFO" "${YWB}${msg}${CL}" >&2
|
||||||
|
|
||||||
# Remove from shown messages to allow it to be shown again
|
|
||||||
unset MSG_INFO_SHOWN["$msg"]
|
unset MSG_INFO_SHOWN["$msg"]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Helper function to display a message with custom symbol and color
|
# === msg_custom ===
|
||||||
msg_custom() {
|
msg_custom() {
|
||||||
local symbol="${1:-*}"
|
local symbol="$1"
|
||||||
local color="${2:-$CL}"
|
local color="$2"
|
||||||
local msg="${3:-Custom message}"
|
local msg="$3"
|
||||||
|
[ -z "$msg" ] && return
|
||||||
stop_spinner
|
stop_spinner
|
||||||
printf "\r\e[2K%s %b\n" "$symbol" "${color}${msg}${CL}" >&2
|
printf "\r\e[2K%s %b\n" "$symbol" "${color}${msg}${CL}" >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msg_progress() {
|
||||||
|
local current="$1"
|
||||||
|
local total="$2"
|
||||||
|
local label="$3"
|
||||||
|
local width=40
|
||||||
|
local filled
|
||||||
|
local percent
|
||||||
|
local bar
|
||||||
|
local empty
|
||||||
|
local fill_char="#"
|
||||||
|
local empty_char="-"
|
||||||
|
|
||||||
|
# Sanitize and validate input
|
||||||
|
if ! [[ "$current" =~ ^[0-9]+$ ]] || ! [[ "$total" =~ ^[0-9]+$ ]] || [ "$total" -eq 0 ]; then
|
||||||
|
printf "\r\e[2K%s %b\n" "$CROSS" "${RD}Invalid progress input${CL}" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
percent=$(((current * 100) / total))
|
||||||
|
filled=$(((current * width) / total))
|
||||||
|
empty=$((width - filled))
|
||||||
|
|
||||||
|
bar=$(printf "%${filled}s" | tr ' ' "$fill_char")
|
||||||
|
bar+=$(printf "%${empty}s" | tr ' ' "$empty_char")
|
||||||
|
|
||||||
|
# Print the progress line
|
||||||
|
printf "\r\e[2K%s [%s] %3d%% %s" "${TAB}" "$bar" "$percent" "$label" >&2
|
||||||
|
|
||||||
|
# Final newline when complete
|
||||||
|
if [ "$current" -eq "$total" ]; then
|
||||||
|
printf "\n" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# # ------------------------------------------------------------------------------
|
# # ------------------------------------------------------------------------------
|
||||||
# # Spinner trap: ensures spinner is stopped on termination signals.
|
# # Spinner trap: ensures spinner is stopped on termination signals.
|
||||||
# # ------------------------------------------------------------------------------
|
# # ------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ setting_up_container() {
|
|||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
systemctl disable -q --now systemd-networkd-wait-online.service
|
systemctl disable -q --now systemd-networkd-wait-online.service
|
||||||
msg_ok "Set up Container OS"
|
msg_ok "Set up Container OS"
|
||||||
msg_ok "Network Connected: ${BL}$(hostname -I)"
|
#msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected
|
# This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected
|
||||||
|
|||||||
129
misc/tools.func
129
misc/tools.func
@@ -112,10 +112,10 @@ install_postgresql() {
|
|||||||
msg_ok "PostgreSQL $PG_VERSION is already installed"
|
msg_ok "PostgreSQL $PG_VERSION is already installed"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
echo -e "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
|
msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
|
||||||
NEED_PG_INSTALL=true
|
NEED_PG_INSTALL=true
|
||||||
else
|
else
|
||||||
echo -e "PostgreSQL not installed, proceeding with fresh install of $PG_VERSION"
|
msg_info "Setup PostgreSQL $PG_VERSION"
|
||||||
NEED_PG_INSTALL=true
|
NEED_PG_INSTALL=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -123,10 +123,10 @@ install_postgresql() {
|
|||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
msg_info "Dumping all PostgreSQL data from version $CURRENT_PG_VERSION"
|
msg_info "Dumping all PostgreSQL data from version $CURRENT_PG_VERSION"
|
||||||
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Stopping PostgreSQL service"
|
msg_info "Stopping PostgreSQL service"
|
||||||
systemctl stop postgresql || true
|
systemctl stop postgresql
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Removing pgdg repo and old GPG key"
|
msg_info "Removing pgdg repo and old GPG key"
|
||||||
rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg
|
rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg
|
||||||
@@ -149,7 +149,7 @@ install_postgresql() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$STD msg_info "Starting PostgreSQL $PG_VERSION"
|
$STD msg_info "Starting PostgreSQL $PG_VERSION"
|
||||||
systemctl enable --now postgresql
|
systemctl enable -q --now postgresql
|
||||||
|
|
||||||
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
if [[ -n "$CURRENT_PG_VERSION" ]]; then
|
||||||
$STD msg_info "Restoring dumped data"
|
$STD msg_info "Restoring dumped data"
|
||||||
@@ -167,13 +167,18 @@ install_mariadb() {
|
|||||||
|
|
||||||
# grab dynamic latest LTS version
|
# grab dynamic latest LTS version
|
||||||
if [[ "$MARIADB_VERSION" == "latest" ]]; then
|
if [[ "$MARIADB_VERSION" == "latest" ]]; then
|
||||||
msg_info "Resolving latest MariaDB version"
|
$STD msg_info "Resolving latest GA MariaDB version"
|
||||||
MARIADB_VERSION=$(curl -fsSL https://mariadb.org | grep -oP 'MariaDB \K10\.[0-9]+' | head -n1)
|
MARIADB_VERSION=$(curl -fsSL http://mirror.mariadb.org/repo/ |
|
||||||
|
grep -Eo '[0-9]+\.[0-9]+\.[0-9]+/' |
|
||||||
|
grep -vE 'rc/|rolling/' |
|
||||||
|
sed 's|/||' |
|
||||||
|
sort -Vr |
|
||||||
|
head -n1)
|
||||||
if [[ -z "$MARIADB_VERSION" ]]; then
|
if [[ -z "$MARIADB_VERSION" ]]; then
|
||||||
msg_error "Could not determine latest MariaDB version"
|
msg_error "Could not determine latest GA MariaDB version"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
msg_ok "Latest MariaDB version is $MARIADB_VERSION"
|
$STD msg_ok "Latest GA MariaDB version is $MARIADB_VERSION"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local CURRENT_VERSION=""
|
local CURRENT_VERSION=""
|
||||||
@@ -182,23 +187,23 @@ install_mariadb() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$CURRENT_VERSION" == "$MARIADB_VERSION" ]]; then
|
if [[ "$CURRENT_VERSION" == "$MARIADB_VERSION" ]]; then
|
||||||
msg_info "MariaDB $MARIADB_VERSION already installed, checking for upgrade"
|
$STD msg_info "MariaDB $MARIADB_VERSION, upgrading"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install --only-upgrade -y mariadb-server mariadb-client
|
$STD apt-get install --only-upgrade -y mariadb-server mariadb-client
|
||||||
msg_ok "MariaDB $MARIADB_VERSION upgraded if applicable"
|
$STD msg_ok "MariaDB upgraded to $MARIADB_VERSION"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$CURRENT_VERSION" ]]; then
|
if [[ -n "$CURRENT_VERSION" ]]; then
|
||||||
msg_info "Replacing MariaDB $CURRENT_VERSION with $MARIADB_VERSION (data will be preserved)"
|
$STD msg_info "Replacing MariaDB $CURRENT_VERSION with $MARIADB_VERSION (data will be preserved)"
|
||||||
$STD systemctl stop mariadb >/dev/null 2>&1 || true
|
$STD systemctl stop mariadb >/dev/null 2>&1 || true
|
||||||
$STD apt-get purge -y 'mariadb*' || true
|
$STD apt-get purge -y 'mariadb*' || true
|
||||||
rm -f /etc/apt/sources.list.d/mariadb.list /etc/apt/trusted.gpg.d/mariadb.gpg
|
rm -f /etc/apt/sources.list.d/mariadb.list /etc/apt/trusted.gpg.d/mariadb.gpg
|
||||||
else
|
else
|
||||||
msg_info "Installing MariaDB $MARIADB_VERSION"
|
msg_info "Setup MariaDB $MARIADB_VERSION"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Setting up MariaDB Repository"
|
$STD msg_info "Setting up MariaDB Repository"
|
||||||
curl -fsSL "https://mariadb.org/mariadb_release_signing_key.asc" |
|
curl -fsSL "https://mariadb.org/mariadb_release_signing_key.asc" |
|
||||||
gpg --dearmor -o /etc/apt/trusted.gpg.d/mariadb.gpg
|
gpg --dearmor -o /etc/apt/trusted.gpg.d/mariadb.gpg
|
||||||
|
|
||||||
@@ -208,7 +213,7 @@ install_mariadb() {
|
|||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y mariadb-server mariadb-client
|
$STD apt-get install -y mariadb-server mariadb-client
|
||||||
|
|
||||||
msg_ok "Installed MariaDB $MARIADB_VERSION"
|
msg_ok "Setup MariaDB $MARIADB_VERSION"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_mysql() {
|
install_mysql() {
|
||||||
@@ -253,6 +258,9 @@ install_php() {
|
|||||||
local PHP_MODULE="${PHP_MODULE:-}"
|
local PHP_MODULE="${PHP_MODULE:-}"
|
||||||
local PHP_APACHE="${PHP_APACHE:-NO}"
|
local PHP_APACHE="${PHP_APACHE:-NO}"
|
||||||
local PHP_FPM="${PHP_FPM:-NO}"
|
local PHP_FPM="${PHP_FPM:-NO}"
|
||||||
|
local DISTRO_CODENAME
|
||||||
|
DISTRO_CODENAME=$(awk -F= '/VERSION_CODENAME/ { print $2 }' /etc/os-release)
|
||||||
|
|
||||||
local DEFAULT_MODULES="bcmath,cli,curl,gd,intl,mbstring,opcache,readline,xml,zip"
|
local DEFAULT_MODULES="bcmath,cli,curl,gd,intl,mbstring,opcache,readline,xml,zip"
|
||||||
local COMBINED_MODULES
|
local COMBINED_MODULES
|
||||||
|
|
||||||
@@ -279,11 +287,11 @@ install_php() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
|
if [[ "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
|
||||||
$STD echo "PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION"
|
$STD msg_info "PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION"
|
||||||
if [[ ! -f /etc/apt/sources.list.d/php.list ]]; then
|
if [[ ! -f /etc/apt/sources.list.d/php.list ]]; then
|
||||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
|
||||||
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" \
|
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ ${DISTRO_CODENAME} main" \
|
||||||
>/etc/apt/sources.list.d/php.list
|
>/etc/apt/sources.list.d/php.list
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
fi
|
fi
|
||||||
@@ -329,12 +337,12 @@ install_php() {
|
|||||||
|
|
||||||
for ini in "${PHP_INI_PATHS[@]}"; do
|
for ini in "${PHP_INI_PATHS[@]}"; do
|
||||||
if [[ -f "$ini" ]]; then
|
if [[ -f "$ini" ]]; then
|
||||||
msg_info "Patching $ini"
|
$STD msg_info "Patching $ini"
|
||||||
sed -i "s|^memory_limit = .*|memory_limit = ${PHP_MEMORY_LIMIT}|" "$ini"
|
sed -i "s|^memory_limit = .*|memory_limit = ${PHP_MEMORY_LIMIT}|" "$ini"
|
||||||
sed -i "s|^upload_max_filesize = .*|upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}|" "$ini"
|
sed -i "s|^upload_max_filesize = .*|upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}|" "$ini"
|
||||||
sed -i "s|^post_max_size = .*|post_max_size = ${PHP_POST_MAX_SIZE}|" "$ini"
|
sed -i "s|^post_max_size = .*|post_max_size = ${PHP_POST_MAX_SIZE}|" "$ini"
|
||||||
sed -i "s|^max_execution_time = .*|max_execution_time = ${PHP_MAX_EXECUTION_TIME}|" "$ini"
|
sed -i "s|^max_execution_time = .*|max_execution_time = ${PHP_MAX_EXECUTION_TIME}|" "$ini"
|
||||||
msg_ok "Patched $ini"
|
$STD msg_ok "Patched $ini"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -347,14 +355,14 @@ install_composer() {
|
|||||||
if [[ -x "$COMPOSER_BIN" ]]; then
|
if [[ -x "$COMPOSER_BIN" ]]; then
|
||||||
local CURRENT_VERSION
|
local CURRENT_VERSION
|
||||||
CURRENT_VERSION=$("$COMPOSER_BIN" --version | awk '{print $3}')
|
CURRENT_VERSION=$("$COMPOSER_BIN" --version | awk '{print $3}')
|
||||||
msg_info "Composer $CURRENT_VERSION found, updating to latest"
|
$STD msg_info "Composer $CURRENT_VERSION found, updating to latest"
|
||||||
else
|
else
|
||||||
msg_info "Composer not found, installing latest version"
|
msg_info "Setup Composer"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Download and install latest composer
|
# Download and install latest composer
|
||||||
curl -fsSL https://getcomposer.org/installer -o /tmp/composer-setup.php
|
curl -fsSL https://getcomposer.org/installer -o /tmp/composer-setup.php
|
||||||
php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer >/dev/null 2>&1
|
php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer &>/dev/null
|
||||||
|
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
msg_error "Failed to install Composer"
|
msg_error "Failed to install Composer"
|
||||||
@@ -913,3 +921,80 @@ function setup_gs() {
|
|||||||
msg_error "Ghostscript installation failed"
|
msg_error "Ghostscript installation failed"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup_rbenv_stack() {
|
||||||
|
local RUBY_VERSION="${RUBY_VERSION:-3.4.4}"
|
||||||
|
local RUBY_INSTALL_RAILS="${RUBY_INSTALL_RAILS:-true}"
|
||||||
|
|
||||||
|
local RBENV_DIR="$HOME/.rbenv"
|
||||||
|
local RBENV_BIN="$RBENV_DIR/bin/rbenv"
|
||||||
|
local PROFILE_FILE="$HOME/.profile"
|
||||||
|
local TMP_DIR
|
||||||
|
TMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
$STD msg_info "Installing rbenv + ruby-build + Ruby $RUBY_VERSION"
|
||||||
|
|
||||||
|
# Fetch latest rbenv release tag from GitHub (e.g. v1.3.2 → 1.3.2)
|
||||||
|
local RBENV_RELEASE
|
||||||
|
RBENV_RELEASE=$(curl -fsSL https://api.github.com/repos/rbenv/rbenv/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//')
|
||||||
|
if [[ -z "$RBENV_RELEASE" ]]; then
|
||||||
|
msg_error "Failed to fetch latest rbenv version"
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download and extract rbenv release
|
||||||
|
curl -fsSL "https://github.com/rbenv/rbenv/archive/refs/tags/v${RBENV_RELEASE}.tar.gz" -o "$TMP_DIR/rbenv.tar.gz"
|
||||||
|
tar -xzf "$TMP_DIR/rbenv.tar.gz" -C "$TMP_DIR"
|
||||||
|
mkdir -p "$RBENV_DIR"
|
||||||
|
cp -r "$TMP_DIR/rbenv-${RBENV_RELEASE}/." "$RBENV_DIR/"
|
||||||
|
cd "$RBENV_DIR" && src/configure && make -C src
|
||||||
|
|
||||||
|
# Fetch latest ruby-build plugin release tag (e.g. v20250507 → 20250507)
|
||||||
|
local RUBY_BUILD_RELEASE
|
||||||
|
RUBY_BUILD_RELEASE=$(curl -fsSL https://api.github.com/repos/rbenv/ruby-build/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//')
|
||||||
|
if [[ -z "$RUBY_BUILD_RELEASE" ]]; then
|
||||||
|
msg_error "Failed to fetch latest ruby-build version"
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download and install ruby-build plugin
|
||||||
|
curl -fsSL "https://github.com/rbenv/ruby-build/archive/refs/tags/v${RUBY_BUILD_RELEASE}.tar.gz" -o "$TMP_DIR/ruby-build.tar.gz"
|
||||||
|
tar -xzf "$TMP_DIR/ruby-build.tar.gz" -C "$TMP_DIR"
|
||||||
|
mkdir -p "$RBENV_DIR/plugins/ruby-build"
|
||||||
|
cp -r "$TMP_DIR/ruby-build-${RUBY_BUILD_RELEASE}/." "$RBENV_DIR/plugins/ruby-build/"
|
||||||
|
echo "$RUBY_BUILD_RELEASE" >"$RBENV_DIR/plugins/ruby-build/RUBY_BUILD_version.txt"
|
||||||
|
|
||||||
|
# Persist rbenv init to user's profile
|
||||||
|
if ! grep -q 'rbenv init' "$PROFILE_FILE"; then
|
||||||
|
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>"$PROFILE_FILE"
|
||||||
|
echo 'eval "$(rbenv init -)"' >>"$PROFILE_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Activate rbenv in current shell
|
||||||
|
export PATH="$RBENV_DIR/bin:$PATH"
|
||||||
|
eval "$("$RBENV_BIN" init - bash)"
|
||||||
|
|
||||||
|
# Install Ruby version if not already present
|
||||||
|
if "$RBENV_BIN" versions --bare | grep -qx "$RUBY_VERSION"; then
|
||||||
|
msg_ok "Ruby $RUBY_VERSION already installed"
|
||||||
|
else
|
||||||
|
$STD msg_info "Installing Ruby $RUBY_VERSION"
|
||||||
|
$STD "$RBENV_BIN" install "$RUBY_VERSION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set Ruby version globally
|
||||||
|
"$RBENV_BIN" global "$RUBY_VERSION"
|
||||||
|
hash -r
|
||||||
|
|
||||||
|
# Optionally install Rails via gem
|
||||||
|
if [[ "$RUBY_INSTALL_RAILS" == "true" ]]; then
|
||||||
|
$STD msg_info "Installing latest Rails via gem"
|
||||||
|
gem install rails
|
||||||
|
msg_ok "Rails $(rails -v) installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
msg_ok "rbenv stack ready (Ruby $RUBY_VERSION)"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user