mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-04 18:32:51 +00:00
Compare commits
186 Commits
2025-07-10
...
2025-07-24
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0484259f39 | ||
|
|
cadd0a53bd | ||
|
|
c82c185e4e | ||
|
|
89b2b21761 | ||
|
|
0a722a242f | ||
|
|
01be7acf10 | ||
|
|
2d66d09de2 | ||
|
|
67069cfb21 | ||
|
|
e78c590772 | ||
|
|
d956763642 | ||
|
|
af4aedf15a | ||
|
|
e25f3dce52 | ||
|
|
eda1b1aea8 | ||
|
|
16e2d2206c | ||
|
|
33a03f4b0e | ||
|
|
5867ef3288 | ||
|
|
8ef59b590a | ||
|
|
72d6fb40dc | ||
|
|
7e9d786202 | ||
|
|
ed934a21ff | ||
|
|
c9015cca20 | ||
|
|
b52e958623 | ||
|
|
1f51e96cb1 | ||
|
|
de1a93bf6d | ||
|
|
8bfb78e001 | ||
|
|
4fa4ed35cc | ||
|
|
4a050f3723 | ||
|
|
9304835775 | ||
|
|
a2fa104176 | ||
|
|
3c0888abdd | ||
|
|
d6af60f0c0 | ||
|
|
0a83090ad2 | ||
|
|
035419b4b9 | ||
|
|
d19130d8f1 | ||
|
|
b36f982fc2 | ||
|
|
d67fa6cf38 | ||
|
|
4201ab58ab | ||
|
|
0f3b95b3ff | ||
|
|
feea82e0ba | ||
|
|
0e0c954f0c | ||
|
|
6b74f6247f | ||
|
|
4159ba3970 | ||
|
|
a53daa3559 | ||
|
|
4b3233d6a8 | ||
|
|
ff51b1e5dc | ||
|
|
1aab127bdf | ||
|
|
baf7dff759 | ||
|
|
b4ec04a54f | ||
|
|
2ee8269684 | ||
|
|
84860a9893 | ||
|
|
ebb7da43c1 | ||
|
|
44c584dced | ||
|
|
2bede5256f | ||
|
|
2848cf6d6b | ||
|
|
bce076161e | ||
|
|
040a15aa3e | ||
|
|
5c0cffce6f | ||
|
|
d552fb86c1 | ||
|
|
42af89dd2d | ||
|
|
003fc3c080 | ||
|
|
a638dc8672 | ||
|
|
d7668531e7 | ||
|
|
30ca65e1d5 | ||
|
|
ae84b7d281 | ||
|
|
202eed7c13 | ||
|
|
e194a36301 | ||
|
|
7b93eed34a | ||
|
|
5a3855566b | ||
|
|
85595871df | ||
|
|
901837b4ae | ||
|
|
9f1273349f | ||
|
|
e6756385ed | ||
|
|
74be3e70b9 | ||
|
|
9060e8f372 | ||
|
|
2adcf04426 | ||
|
|
88d58cd100 | ||
|
|
1046ffb544 | ||
|
|
a011b60a6e | ||
|
|
be6ac828ca | ||
|
|
a196541771 | ||
|
|
ca7564d0e5 | ||
|
|
ccdf6a4aec | ||
|
|
c2c2e4030e | ||
|
|
268d692281 | ||
|
|
3547552c23 | ||
|
|
3579c93d80 | ||
|
|
65e0ed2976 | ||
|
|
2bd9f4a7c6 | ||
|
|
f56489cb07 | ||
|
|
852bfbd71c | ||
|
|
255bd7a803 | ||
|
|
ffe774dc4c | ||
|
|
2f08a8623b | ||
|
|
1af6cc6b54 | ||
|
|
0113c7e7fd | ||
|
|
745533759a | ||
|
|
c62b244569 | ||
|
|
2600e84a14 | ||
|
|
51faa3b03d | ||
|
|
a5ed6c1af7 | ||
|
|
05f552eca7 | ||
|
|
da71a0fa01 | ||
|
|
2a359b5d2d | ||
|
|
a125d00cad | ||
|
|
14f36819c2 | ||
|
|
b4df44bc5c | ||
|
|
53fa29e01f | ||
|
|
33e19bc535 | ||
|
|
52bc5f33e6 | ||
|
|
51a6024a1b | ||
|
|
49aa5ae552 | ||
|
|
6dc91a2144 | ||
|
|
03813ff991 | ||
|
|
c0df5b79f5 | ||
|
|
523b3e6a70 | ||
|
|
4ce715acd4 | ||
|
|
1ad394367e | ||
|
|
0b0ae1a3bc | ||
|
|
63c5912723 | ||
|
|
dafb4af6a8 | ||
|
|
88e3a334f7 | ||
|
|
bbd600a348 | ||
|
|
c90f800a69 | ||
|
|
ca5f0629b0 | ||
|
|
a7f67e5534 | ||
|
|
03c4e54da6 | ||
|
|
eb86d3e960 | ||
|
|
968b7cdf43 | ||
|
|
688d296d13 | ||
|
|
0379223ead | ||
|
|
7a0ca05153 | ||
|
|
fb3bf03332 | ||
|
|
6d312c9c8d | ||
|
|
a2dde6594e | ||
|
|
f7c9d77019 | ||
|
|
8f4f2f4d92 | ||
|
|
f15e4ea552 | ||
|
|
1a90d90d5e | ||
|
|
11f1e86500 | ||
|
|
9d84657763 | ||
|
|
31d57da5ab | ||
|
|
7d223b984b | ||
|
|
417c4e466c | ||
|
|
b16fa8d34f | ||
|
|
3a2f0bf2cc | ||
|
|
a83b58f1df | ||
|
|
e5e8b1e020 | ||
|
|
3b3e62c4cf | ||
|
|
478b65b2c2 | ||
|
|
1982ca80d2 | ||
|
|
b060de68c0 | ||
|
|
a437a7896b | ||
|
|
561a2f2712 | ||
|
|
aa0a2e1654 | ||
|
|
b34b4e09d8 | ||
|
|
f48593ac81 | ||
|
|
eba06a27f3 | ||
|
|
ac1d7f8169 | ||
|
|
595fb1ecd9 | ||
|
|
207616ec66 | ||
|
|
9297ee5e7b | ||
|
|
3fc21c7705 | ||
|
|
a514a7ff97 | ||
|
|
591106adb4 | ||
|
|
149b2f1602 | ||
|
|
3aff85b730 | ||
|
|
c116e773b3 | ||
|
|
1e58019e2e | ||
|
|
17e671cae9 | ||
|
|
4d236e6382 | ||
|
|
f4ac341c15 | ||
|
|
20e9e9efe8 | ||
|
|
ee5cd20915 | ||
|
|
5dcd39231f | ||
|
|
8f79823c95 | ||
|
|
ba00a1d3f0 | ||
|
|
599d65768e | ||
|
|
471e2f758f | ||
|
|
f3a4bd461d | ||
|
|
b115fe9120 | ||
|
|
f9429ecf5a | ||
|
|
ebea43f299 | ||
|
|
d693c9361b | ||
|
|
3ca53067a7 | ||
|
|
93e204850b | ||
|
|
8595d48cec |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -26,6 +26,7 @@ SECURITY.md linguist-documentation
|
|||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Exclude generated/config files
|
# Exclude generated/config files
|
||||||
*.json linguist-generated
|
*.json linguist-generated
|
||||||
|
frontend/public/json/*.json linguist-generated=false
|
||||||
*.lock linguist-generated
|
*.lock linguist-generated
|
||||||
*.yml linguist-generated
|
*.yml linguist-generated
|
||||||
*.yaml linguist-generated
|
*.yaml linguist-generated
|
||||||
|
|||||||
2
.github/workflows/auto-update-app-headers.yml
generated
vendored
2
.github/workflows/auto-update-app-headers.yml
generated
vendored
@@ -11,7 +11,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
update-app-files:
|
update-app-files:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|||||||
2
.github/workflows/autolabeler.yml
generated
vendored
2
.github/workflows/autolabeler.yml
generated
vendored
@@ -9,7 +9,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
autolabeler:
|
autolabeler:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
env:
|
env:
|
||||||
|
|||||||
2
.github/workflows/changelog-pr.yml
generated
vendored
2
.github/workflows/changelog-pr.yml
generated
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
update-changelog-pull-request:
|
update-changelog-pull-request:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
CONFIG_PATH: .github/changelog-pr-config.json
|
CONFIG_PATH: .github/changelog-pr-config.json
|
||||||
BRANCH_NAME: github-action-update-changelog
|
BRANCH_NAME: github-action-update-changelog
|
||||||
|
|||||||
2
.github/workflows/close-discussion.yml
generated
vendored
2
.github/workflows/close-discussion.yml
generated
vendored
@@ -12,7 +12,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
close-discussion:
|
close-discussion:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
|
|||||||
2
.github/workflows/crawl-versions.yaml
generated
vendored
2
.github/workflows/crawl-versions.yaml
generated
vendored
@@ -13,7 +13,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
crawl-versions:
|
crawl-versions:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
|
|||||||
2
.github/workflows/delete-json-branch.yml
generated
vendored
2
.github/workflows/delete-json-branch.yml
generated
vendored
@@ -10,7 +10,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
delete_branch:
|
delete_branch:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the code
|
- name: Checkout the code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|||||||
83
.github/workflows/frontend-cicd.yml
generated
vendored
83
.github/workflows/frontend-cicd.yml
generated
vendored
@@ -24,12 +24,87 @@ concurrency:
|
|||||||
cancel-in-progress: false
|
cancel-in-progress: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
test-json-files:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
runs-on: ubuntu-latest
|
||||||
runs-on: runner-cluster-htl-set
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: frontend # Set default working directory for all run steps
|
working-directory: frontend
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: "3.x"
|
||||||
|
|
||||||
|
- name: Test JSON files
|
||||||
|
run: |
|
||||||
|
python3 << 'EOF'
|
||||||
|
import json
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def test_json_files():
|
||||||
|
# Change to the correct directory
|
||||||
|
json_dir = "public/json"
|
||||||
|
if not os.path.exists(json_dir):
|
||||||
|
print(f"❌ Directory not found: {json_dir}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Find all JSON files
|
||||||
|
pattern = os.path.join(json_dir, "*.json")
|
||||||
|
json_files = glob.glob(pattern)
|
||||||
|
|
||||||
|
if not json_files:
|
||||||
|
print(f"⚠️ No JSON files found in {json_dir}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
print(f"Testing {len(json_files)} JSON files for valid syntax...")
|
||||||
|
|
||||||
|
invalid_files = []
|
||||||
|
|
||||||
|
for file_path in json_files:
|
||||||
|
try:
|
||||||
|
with open(file_path, 'r', encoding='utf-8') as f:
|
||||||
|
json.load(f)
|
||||||
|
print(f"✅ Valid JSON: {file_path}")
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"❌ Invalid JSON syntax in: {file_path}")
|
||||||
|
print(f" Error: {e}")
|
||||||
|
invalid_files.append(file_path)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"⚠️ Error reading: {file_path}")
|
||||||
|
print(f" Error: {e}")
|
||||||
|
invalid_files.append(file_path)
|
||||||
|
|
||||||
|
print("\n=== JSON Validation Summary ===")
|
||||||
|
print(f"Total files tested: {len(json_files)}")
|
||||||
|
print(f"Valid files: {len(json_files) - len(invalid_files)}")
|
||||||
|
print(f"Invalid files: {len(invalid_files)}")
|
||||||
|
|
||||||
|
if invalid_files:
|
||||||
|
print("\n❌ Found invalid JSON file(s):")
|
||||||
|
for file_path in invalid_files:
|
||||||
|
print(f" - {file_path}")
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
print("\n✅ All JSON files have valid syntax!")
|
||||||
|
return True
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
success = test_json_files()
|
||||||
|
sys.exit(0 if success else 1)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
build:
|
||||||
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
|
needs: test-json-files
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: frontend
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
2
.github/workflows/github-release.yml
generated
vendored
2
.github/workflows/github-release.yml
generated
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
create-daily-release:
|
create-daily-release:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
2
.github/workflows/update-json-date.yml
generated
vendored
2
.github/workflows/update-json-date.yml
generated
vendored
@@ -11,7 +11,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
update-app-files:
|
update-app-files:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|||||||
2
.github/workflows/validate-filenames.yml
generated
vendored
2
.github/workflows/validate-filenames.yml
generated
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
check-files:
|
check-files:
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
name: Check changed files
|
name: Check changed files
|
||||||
runs-on: runner-cluster-htl-set
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
|
|||||||
207
CHANGELOG.md
207
CHANGELOG.md
@@ -10,8 +10,215 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
|
## 2025-07-25
|
||||||
|
|
||||||
|
## 2025-07-24
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine TeamSpeak Server [@tremor021](https://github.com/tremor021) ([#6201](https://github.com/community-scripts/ProxmoxVE/pull/6201))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: Pin Version to v1.135.3 [@MickLesk](https://github.com/MickLesk) ([#6212](https://github.com/community-scripts/ProxmoxVE/pull/6212))
|
||||||
|
- Habitica: force npm to 10 [@MickLesk](https://github.com/MickLesk) ([#6192](https://github.com/community-scripts/ProxmoxVE/pull/6192))
|
||||||
|
- sabnzbd: add uv setup in update [@MickLesk](https://github.com/MickLesk) ([#6191](https://github.com/community-scripts/ProxmoxVE/pull/6191))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- SnipeIT - Update dependencies [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#6217](https://github.com/community-scripts/ProxmoxVE/pull/6217))
|
||||||
|
- Refactor: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#6210](https://github.com/community-scripts/ProxmoxVE/pull/6210))
|
||||||
|
- Headscale: Add headscale-admin UI as option [@tremor021](https://github.com/tremor021) ([#6205](https://github.com/community-scripts/ProxmoxVE/pull/6205))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Gokapi [@tremor021](https://github.com/tremor021) ([#6197](https://github.com/community-scripts/ProxmoxVE/pull/6197))
|
||||||
|
- Refactor: duplicati [@tremor021](https://github.com/tremor021) ([#6202](https://github.com/community-scripts/ProxmoxVE/pull/6202))
|
||||||
|
- Refactor: go2rtc [@tremor021](https://github.com/tremor021) ([#6198](https://github.com/community-scripts/ProxmoxVE/pull/6198))
|
||||||
|
- Refactor: Headscale [@tremor021](https://github.com/tremor021) ([#6180](https://github.com/community-scripts/ProxmoxVE/pull/6180))
|
||||||
|
|
||||||
|
## 2025-07-23
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- documenso: remove customerId by creating initial user [@MickLesk](https://github.com/MickLesk) ([#6171](https://github.com/community-scripts/ProxmoxVE/pull/6171))
|
||||||
|
|
||||||
|
## 2025-07-22
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Salt ([#6116](https://github.com/community-scripts/ProxmoxVE/pull/6116))
|
||||||
|
- LinkStack ([#6137](https://github.com/community-scripts/ProxmoxVE/pull/6137))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func - fix typo for target_file [@tjcomserv](https://github.com/tjcomserv) ([#6156](https://github.com/community-scripts/ProxmoxVE/pull/6156))
|
||||||
|
- fix(nginxproxymanager.sh): Set the version number before build. [@JMarcosHP](https://github.com/JMarcosHP) ([#6139](https://github.com/community-scripts/ProxmoxVE/pull/6139))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Fixed the previous fix of the anti-nag hook and propagated fixes everywhere [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6162](https://github.com/community-scripts/ProxmoxVE/pull/6162))
|
||||||
|
- [core]: Improved LXC Container Startup Handling [@MickLesk](https://github.com/MickLesk) ([#6142](https://github.com/community-scripts/ProxmoxVE/pull/6142))
|
||||||
|
- wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- gitea-mirror: add: migration to 3.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6138](https://github.com/community-scripts/ProxmoxVE/pull/6138))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- [core]: tools.func: increase setup_php function [@MickLesk](https://github.com/MickLesk) ([#6141](https://github.com/community-scripts/ProxmoxVE/pull/6141))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Bump form-data from 4.0.3 to 4.0.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#6150](https://github.com/community-scripts/ProxmoxVE/pull/6150))
|
||||||
|
|
||||||
|
## 2025-07-21
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Teamspeak-Server ([#6121](https://github.com/community-scripts/ProxmoxVE/pull/6121))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- pve-post-installer: remove Nag-File if already exist [@luckman212](https://github.com/luckman212) ([#6098](https://github.com/community-scripts/ProxmoxVE/pull/6098))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- firefly: fix permissions at update [@MickLesk](https://github.com/MickLesk) ([#6119](https://github.com/community-scripts/ProxmoxVE/pull/6119))
|
||||||
|
- nginxproxymanager: remove injected footer link (tteck) [@MickLesk](https://github.com/MickLesk) ([#6117](https://github.com/community-scripts/ProxmoxVE/pull/6117))
|
||||||
|
|
||||||
|
## 2025-07-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix OpenWebUI install/update scripts [@karamanliev](https://github.com/karamanliev) ([#6093](https://github.com/community-scripts/ProxmoxVE/pull/6093))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- karakeep: add DB_WAL_MODE; suppress test output [@vhsdream](https://github.com/vhsdream) ([#6101](https://github.com/community-scripts/ProxmoxVE/pull/6101))
|
||||||
|
|
||||||
|
## 2025-07-19
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fixed nag script on ProxMox 8.4.5 [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6084](https://github.com/community-scripts/ProxmoxVE/pull/6084))
|
||||||
|
|
||||||
|
## 2025-07-18
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- AdventureLog: add backup folder before update [@MickLesk](https://github.com/MickLesk) ([#6066](https://github.com/community-scripts/ProxmoxVE/pull/6066))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Bar-Assistant: add Cocktail database [@MickLesk](https://github.com/MickLesk) ([#6068](https://github.com/community-scripts/ProxmoxVE/pull/6068))
|
||||||
|
- ErsatzTV: use project prebuild ffmpeg version [@MickLesk](https://github.com/MickLesk) ([#6067](https://github.com/community-scripts/ProxmoxVE/pull/6067))
|
||||||
|
|
||||||
|
## 2025-07-17
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Cloudreve ([#6044](https://github.com/community-scripts/ProxmoxVE/pull/6044))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- config-file: set GATE [@ahmaddxb](https://github.com/ahmaddxb) ([#6042](https://github.com/community-scripts/ProxmoxVE/pull/6042))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- add "setup_composer" in update_script (baikal, bar-assistant, firefly) [@MickLesk](https://github.com/MickLesk) ([#6047](https://github.com/community-scripts/ProxmoxVE/pull/6047))
|
||||||
|
- PLANKA: Fix update procedure [@tremor021](https://github.com/tremor021) ([#6031](https://github.com/community-scripts/ProxmoxVE/pull/6031))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Reactive Resume: switch source to community-maintained fork [@vhsdream](https://github.com/vhsdream) ([#6051](https://github.com/community-scripts/ProxmoxVE/pull/6051))
|
||||||
|
|
||||||
|
## 2025-07-16
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- homepage.sh: resolves #6028 [@vhsdream](https://github.com/vhsdream) ([#6032](https://github.com/community-scripts/ProxmoxVE/pull/6032))
|
||||||
|
- karakeep-install: Disable Playwright browser download, remove MCP build [@vhsdream](https://github.com/vhsdream) ([#5833](https://github.com/community-scripts/ProxmoxVE/pull/5833))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- chore: reorganize nginxproxymanager update script [@Kirbo](https://github.com/Kirbo) ([#5971](https://github.com/community-scripts/ProxmoxVE/pull/5971))
|
||||||
|
|
||||||
|
## 2025-07-15
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001))
|
||||||
|
- Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003))
|
||||||
|
- 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002))
|
||||||
|
|
||||||
|
## 2025-07-14
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977))
|
||||||
|
- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Config-File: Some Addons, Bugfixes... [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957))
|
||||||
|
- Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Update nic-offloading-fix: add Intel as search Text [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954))
|
||||||
|
|
||||||
|
## 2025-07-12
|
||||||
|
|
||||||
## 2025-07-11
|
## 2025-07-11
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- immich: hotfix #5921 [@vhsdream](https://github.com/vhsdream) ([#5938](https://github.com/community-scripts/ProxmoxVE/pull/5938))
|
||||||
|
- bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935))
|
||||||
|
- Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896))
|
||||||
|
|
||||||
## 2025-07-10
|
## 2025-07-10
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
10
ct/2fauth.sh
10
ct/2fauth.sh
@@ -28,8 +28,11 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if ! command -v jq &>/dev/null; then
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
|
$STD apt-get install -y jq
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
@@ -45,10 +48,11 @@ function update_script() {
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
lsb-release \
|
lsb-release \
|
||||||
gnupg2
|
gnupg2
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
|
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
|
||||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
||||||
fi
|
fi
|
||||||
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
||||||
|
setup_composer
|
||||||
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
||||||
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
||||||
cd "/opt/2fauth" || return
|
cd "/opt/2fauth" || return
|
||||||
|
|||||||
@@ -35,26 +35,29 @@ function update_script() {
|
|||||||
systemctl stop adventurelog-frontend
|
systemctl stop adventurelog-frontend
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
|
msg_info "Backup Old Installation"
|
||||||
|
mkdir -p /opt/adventurelog-backup
|
||||||
|
cp /opt/adventurelog/backend/server/.env /opt/adventurelog-backup/backend/server/.env
|
||||||
|
cp -r /opt/adventurelog/backend/server/media /opt/adventurelog-backup/backend/server/media
|
||||||
|
cp /opt/adventurelog/frontend/.env /opt/adventurelog-backup/frontend/.env
|
||||||
|
msg_ok "Backup done"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
|
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
# Backend Migration
|
|
||||||
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
||||||
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
||||||
|
|
||||||
cd /opt/adventurelog/backend/server
|
cd /opt/adventurelog/backend/server
|
||||||
if [[ ! -x .venv/bin/python ]]; then
|
if [[ ! -x .venv/bin/python ]]; then
|
||||||
$STD uv venv .venv
|
$STD uv venv .venv
|
||||||
$STD .venv/bin/python -m ensurepip --upgrade
|
$STD .venv/bin/python -m ensurepip --upgrade
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$STD .venv/bin/python -m pip install --upgrade pip
|
$STD .venv/bin/python -m pip install --upgrade pip
|
||||||
$STD .venv/bin/python -m pip install -r requirements.txt
|
$STD .venv/bin/python -m pip install -r requirements.txt
|
||||||
$STD .venv/bin/python -m manage collectstatic --noinput
|
$STD .venv/bin/python -m manage collectstatic --noinput
|
||||||
$STD .venv/bin/python -m manage migrate
|
$STD .venv/bin/python -m manage migrate
|
||||||
|
|
||||||
# Frontend Migration
|
|
||||||
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
||||||
cd /opt/adventurelog/frontend
|
cd /opt/adventurelog/frontend
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
@@ -68,7 +71,6 @@ function update_script() {
|
|||||||
msg_ok "Services Started"
|
msg_ok "Services Started"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf /opt/v${RELEASE}.zip
|
|
||||||
rm -rf /opt/adventurelog-backup
|
rm -rf /opt/adventurelog-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
|||||||
58
ct/alpine-teamspeak-server.sh
Normal file
58
ct/alpine-teamspeak-server.sh
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: tremor021 (Slaviša Arežina)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://teamspeak.com/en/
|
||||||
|
|
||||||
|
APP="Alpine-TeamSpeak-Server"
|
||||||
|
var_tags="${var_tags:-alpine;communication}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-256}"
|
||||||
|
var_disk="${var_disk:-2}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
|
||||||
|
if [[ ! -d /opt/teamspeak-server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n '/teamspeak3-server_linux_amd64-/ { s/.*teamspeak3-server_linux_amd64-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p; q }')
|
||||||
|
|
||||||
|
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
$STD service teamspeak stop
|
||||||
|
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
|
||||||
|
tar -xf ./ts3server.tar.bz2
|
||||||
|
cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
|
||||||
|
rm -f ~/ts3server.tar.bz*
|
||||||
|
rm -rf teamspeak3-server_linux_amd64
|
||||||
|
echo "${RELEASE}" >~/.teamspeak-server
|
||||||
|
$STD service teamspeak start
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
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 IP:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}${IP}:9987${CL}"
|
||||||
@@ -39,12 +39,15 @@ function update_script() {
|
|||||||
msg_ok "Backed up data"
|
msg_ok "Backed up data"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
|
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Configuring Baikal"
|
msg_info "Configuring Baikal"
|
||||||
cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
|
cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
|
||||||
cp -r /opt/baikal-backup/Specific/ /opt/baikal/
|
cp -r /opt/baikal-backup/Specific/ /opt/baikal/
|
||||||
chown -R www-data:www-data /opt/baikal/
|
chown -R www-data:www-data /opt/baikal/
|
||||||
chmod -R 755 /opt/baikal/
|
chmod -R 755 /opt/baikal/
|
||||||
|
cd /opt/baikal
|
||||||
|
$STD composer install
|
||||||
msg_ok "Configured Baikal"
|
msg_ok "Configured Baikal"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
129
ct/bar-assistant.sh
Normal file
129
ct/bar-assistant.sh
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01 | CanbiZ
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/karlomikus/bar-assistant
|
||||||
|
# Source: https://github.com/karlomikus/vue-salt-rim
|
||||||
|
# Source: https://www.meilisearch.com/
|
||||||
|
|
||||||
|
APP="Bar-Assistant"
|
||||||
|
var_tags="${var_tags:-cocktails;drinks}"
|
||||||
|
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 /opt/bar-assistant ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
|
||||||
|
RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
|
||||||
|
RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
|
||||||
|
|
||||||
|
if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
|
||||||
|
msg_info "Stopping nginx"
|
||||||
|
systemctl stop nginx
|
||||||
|
msg_ok "Stopped nginx"
|
||||||
|
|
||||||
|
msg_info "Backing up Bar Assistant"
|
||||||
|
mv /opt/bar-assistant /opt/bar-assistant-backup
|
||||||
|
msg_ok "Backed up Bar Assistant"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
|
||||||
|
setup_composer
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
|
||||||
|
cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
|
||||||
|
cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
|
||||||
|
cd /opt/bar-assistant
|
||||||
|
$STD composer install --no-interaction
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
$STD php artisan storage:link
|
||||||
|
$STD php artisan bar:setup-meilisearch
|
||||||
|
$STD php artisan scout:sync-index-settings
|
||||||
|
$STD php artisan config:cache
|
||||||
|
$STD php artisan route:cache
|
||||||
|
$STD php artisan event:cache
|
||||||
|
chown -R www-data:www-data /opt/bar-assistant
|
||||||
|
msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
|
||||||
|
|
||||||
|
msg_info "Starting nginx"
|
||||||
|
systemctl start nginx
|
||||||
|
msg_ok "Started nginx"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/bar-assistant-backup
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
|
||||||
|
msg_info "Backing up Vue Salt Rim"
|
||||||
|
mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
|
||||||
|
msg_ok "Backed up Vue Salt Rim"
|
||||||
|
|
||||||
|
msg_info "Stopping nginx"
|
||||||
|
systemctl stop nginx
|
||||||
|
msg_ok "Stopped nginx"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
|
||||||
|
|
||||||
|
msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
|
||||||
|
cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
|
||||||
|
cd /opt/vue-salt-rim
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
|
||||||
|
|
||||||
|
msg_info "Starting nginx"
|
||||||
|
systemctl start nginx
|
||||||
|
msg_ok "Started nginx"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/vue-salt-rim-backup
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
|
||||||
|
msg_info "Stopping Meilisearch"
|
||||||
|
systemctl stop meilisearch
|
||||||
|
msg_ok "Stopped Meilisearch"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||||
|
|
||||||
|
msg_info "Starting Meilisearch"
|
||||||
|
systemctl start meilisearch
|
||||||
|
msg_ok "Started Meilisearch"
|
||||||
|
|
||||||
|
msg_ok "Updated Meilisearch"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
|
||||||
|
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}"
|
||||||
@@ -40,6 +40,7 @@ function update_script() {
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
|
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
|
||||||
PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
|
PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
msg_info "Restoring backup"
|
||||||
cp /opt/bookstack-backup/.env /opt/bookstack/.env
|
cp /opt/bookstack-backup/.env /opt/bookstack/.env
|
||||||
|
|||||||
58
ct/cloudreve.sh
Normal file
58
ct/cloudreve.sh
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://cloudreve.org/
|
||||||
|
|
||||||
|
APP="Cloudreve"
|
||||||
|
var_tags="${var_tags:-cloud}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
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/cloudreve ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/cloudreve/cloudreve/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.cloudreve 2>/dev/null)" ]] || [[ ! -f ~/.cloudreve ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop cloudreve
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start cloudreve
|
||||||
|
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}:5212${CL}"
|
||||||
76
ct/docker.sh
76
ct/docker.sh
@@ -20,18 +20,68 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /var ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
get_latest_release() {
|
||||||
exit
|
curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
|
||||||
fi
|
}
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
$STD apt-get update
|
msg_info "Updating base system"
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get update
|
||||||
msg_ok "Updated ${APP} LXC"
|
$STD apt-get -y upgrade
|
||||||
exit
|
msg_ok "Base system updated"
|
||||||
|
|
||||||
|
msg_info "Updating Docker Engine"
|
||||||
|
$STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io
|
||||||
|
msg_ok "Docker Engine updated"
|
||||||
|
|
||||||
|
if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then
|
||||||
|
COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose"
|
||||||
|
COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose")
|
||||||
|
msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION"
|
||||||
|
curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
|
||||||
|
-o "$COMPOSE_BIN"
|
||||||
|
chmod +x "$COMPOSE_BIN"
|
||||||
|
msg_ok "Docker Compose updated"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
|
||||||
|
msg_info "Updating Portainer"
|
||||||
|
$STD docker pull portainer/portainer-ce:latest
|
||||||
|
$STD docker stop portainer && docker rm portainer
|
||||||
|
$STD docker volume create portainer_data >/dev/null 2>&1
|
||||||
|
$STD docker run -d \
|
||||||
|
-p 8000:8000 \
|
||||||
|
-p 9443:9443 \
|
||||||
|
--name=portainer \
|
||||||
|
--restart=always \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v portainer_data:/data \
|
||||||
|
portainer/portainer-ce:latest
|
||||||
|
msg_ok "Updated Portainer"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then
|
||||||
|
msg_info "Updating Portainer Agent"
|
||||||
|
$STD docker pull portainer/agent:latest
|
||||||
|
$STD docker stop portainer_agent && docker rm portainer_agent
|
||||||
|
$STD docker run -d \
|
||||||
|
-p 9001:9001 \
|
||||||
|
--name=portainer_agent \
|
||||||
|
--restart=always \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
|
||||||
|
portainer/agent
|
||||||
|
msg_ok "Updated Portainer Agent"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleanup complete"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
@@ -39,4 +89,4 @@ build_container
|
|||||||
description
|
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}"
|
||||||
|
|||||||
@@ -27,25 +27,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.duplicati)" ]] || [[ ! -f ~/.duplicati ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop duplicati
|
systemctl stop duplicati
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb")
|
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
||||||
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start duplicati
|
systemctl start duplicati
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ function update_script() {
|
|||||||
systemctl stop emqx
|
systemctl stop emqx
|
||||||
msg_ok "Stopped EMQX"
|
msg_ok "Stopped EMQX"
|
||||||
|
|
||||||
|
msg_info "Removing old EMQX"
|
||||||
|
$STD apt-get remove --purge -y emqx
|
||||||
|
msg_ok "Removed old EMQX"
|
||||||
|
|
||||||
msg_info "Downloading EMQX v${RELEASE}"
|
msg_info "Downloading EMQX v${RELEASE}"
|
||||||
DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
||||||
curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
|
||||||
|
|||||||
@@ -26,13 +26,14 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
|
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\Kv\K[^"]+' | head -n1)
|
||||||
|
RELEASE_FFMPEG=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV-ffmpeg/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
|
||||||
|
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
|
||||||
msg_info "Stopping ErsatzTV"
|
msg_info "Stopping ErsatzTV"
|
||||||
systemctl stop ersatzTV
|
systemctl stop ersatzTV
|
||||||
msg_ok "Stopped ErsatzTV"
|
msg_ok "Stopped ErsatzTV"
|
||||||
|
|
||||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
|
|
||||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||||
|
|
||||||
msg_info "Starting ErsatzTV"
|
msg_info "Starting ErsatzTV"
|
||||||
@@ -43,6 +44,29 @@ function update_script() {
|
|||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "${RELEASE_FFMPEG}" != "$(cat ~/.ersatztv-ffmpeg 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv-ffmpeg ]]; then
|
||||||
|
msg_info "Stopping ErsatzTV"
|
||||||
|
systemctl stop ersatzTV
|
||||||
|
msg_ok "Stopped ErsatzTV"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||||
|
|
||||||
|
msg_info "Set ErsatzTV-ffmpeg links"
|
||||||
|
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
|
||||||
|
msg_ok "ffmpeg links set"
|
||||||
|
|
||||||
|
msg_info "Starting ErsatzTV"
|
||||||
|
systemctl start ersatzTV
|
||||||
|
msg_ok "Started ErsatzTV"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ErsatzTV-ffmpeg is already at ${RELEASE_FFMPEG}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,15 +39,20 @@ function update_script() {
|
|||||||
cp -r /opt/firefly/storage /opt/storage
|
cp -r /opt/firefly/storage /opt/storage
|
||||||
msg_ok "Backed up data"
|
msg_ok "Backed up data"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
|
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
rm -rf /opt/firefly/storage
|
rm -rf /opt/firefly/storage
|
||||||
cp /opt/.env /opt/firefly/.env
|
cp /opt/.env /opt/firefly/.env
|
||||||
cp -r /opt/storage /opt/firefly/storage
|
cp -r /opt/storage /opt/firefly/storage
|
||||||
cd /opt/firefly
|
|
||||||
chown -R www-data:www-data /opt/firefly
|
chown -R www-data:www-data /opt/firefly
|
||||||
chmod -R 775 /opt/firefly/storage
|
find /opt/firefly/storage -type d -exec chmod 775 {} \;
|
||||||
|
find /opt/firefly/storage -type f -exec chmod 664 {} \;
|
||||||
|
mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views}
|
||||||
|
$STD sudo -u www-data php /opt/firefly/artisan cache:clear
|
||||||
|
|
||||||
$STD php artisan migrate --seed --force
|
$STD php artisan migrate --seed --force
|
||||||
$STD php artisan cache:clear
|
$STD php artisan cache:clear
|
||||||
$STD php artisan view:clear
|
$STD php artisan view:clear
|
||||||
|
|||||||
@@ -28,6 +28,26 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
|
||||||
|
if [[ $APP_VERSION =~ ^2\. ]]; then
|
||||||
|
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
|
||||||
|
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
|
||||||
|
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno
|
||||||
|
then
|
||||||
|
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
|
||||||
|
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
|
||||||
|
rm -rf /opt/gitea-mirror
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
|
||||||
|
|
||||||
|
|||||||
25
ct/go2rtc.sh
25
ct/go2rtc.sh
@@ -27,14 +27,23 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating $APP"
|
|
||||||
systemctl stop go2rtc
|
RELEASE=$(curl -fsSL https://api.github.com/repos/AlexxIT/go2rtc/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
cd /opt/go2rtc
|
if [[ "${RELEASE}" != "$(cat ~/.go2rtc 2>/dev/null)" ]] || [[ ! -f ~/.go2rtc ]]; then
|
||||||
rm go2rtc_linux_amd64
|
msg_info "Stopping service"
|
||||||
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64")
|
systemctl stop go2rtc
|
||||||
chmod +x go2rtc_linux_amd64
|
msg_ok "Stopped service"
|
||||||
systemctl start go2rtc
|
|
||||||
msg_ok "Updated $APP"
|
fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
|
systemctl start go2rtc
|
||||||
|
msg_ok "Started service"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
25
ct/gokapi.sh
25
ct/gokapi.sh
@@ -27,8 +27,27 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
if [[ -f /opt/${APP}_version.txt ]]; then
|
||||||
exit
|
mv /opt/${APP}_version ~/.gokapi
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.gokapi 2>/dev/null)" ]] || [[ ! -f ~/.gokapi ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop gokapi
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start gokapi
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
@@ -38,4 +57,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"
|
||||||
|
|||||||
6
ct/headers/alpine-teamspeak-server
Normal file
6
ct/headers/alpine-teamspeak-server
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ______ _____ __ _____
|
||||||
|
/ | / /___ (_)___ ___ /_ __/__ ____ _____ ___ / ___/____ ___ ____ _/ /__ / ___/___ ______ _____ _____
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ / / __/ /_/ / / / / / /__/ / /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/
|
||||||
|
/_/ /_/
|
||||||
6
ct/headers/bar-assistant
Normal file
6
ct/headers/bar-assistant
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ ___ _ __ __
|
||||||
|
/ __ )____ ______ / | __________(_)____/ /_____ _____ / /_
|
||||||
|
/ __ / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
|
||||||
|
/ /_/ / /_/ / / /_____/ ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
|
||||||
|
/_____/\__,_/_/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/
|
||||||
|
|
||||||
6
ct/headers/cloudreve
Normal file
6
ct/headers/cloudreve
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
________ __
|
||||||
|
/ ____/ /___ __ ______/ /_______ _ _____
|
||||||
|
/ / / / __ \/ / / / __ / ___/ _ \ | / / _ \
|
||||||
|
/ /___/ / /_/ / /_/ / /_/ / / / __/ |/ / __/
|
||||||
|
\____/_/\____/\__,_/\__,_/_/ \___/|___/\___/
|
||||||
|
|
||||||
6
ct/headers/linkstack
Normal file
6
ct/headers/linkstack
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ _ __ _____ __ __
|
||||||
|
/ / (_)___ / /__/ ___// /_____ ______/ /__
|
||||||
|
/ / / / __ \/ //_/\__ \/ __/ __ `/ ___/ //_/
|
||||||
|
/ /___/ / / / / ,< ___/ / /_/ /_/ / /__/ ,<
|
||||||
|
/_____/_/_/ /_/_/|_|/____/\__/\__,_/\___/_/|_|
|
||||||
|
|
||||||
6
ct/headers/mealie
Normal file
6
ct/headers/mealie
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ ___ ___
|
||||||
|
/ |/ /__ ____ _/ (_)__
|
||||||
|
/ /|_/ / _ \/ __ `/ / / _ \
|
||||||
|
/ / / / __/ /_/ / / / __/
|
||||||
|
/_/ /_/\___/\__,_/_/_/\___/
|
||||||
|
|
||||||
6
ct/headers/salt
Normal file
6
ct/headers/salt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ ____
|
||||||
|
/ ___/____ _/ / /_
|
||||||
|
\__ \/ __ `/ / __/
|
||||||
|
___/ / /_/ / / /_
|
||||||
|
/____/\__,_/_/\__/
|
||||||
|
|
||||||
6
ct/headers/teamspeak-server
Normal file
6
ct/headers/teamspeak-server
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ __ _____
|
||||||
|
/_ __/__ ____ _____ ___ _________ ___ ____ _/ /__ / ___/___ ______ _____ _____
|
||||||
|
/ / / _ \/ __ `/ __ `__ \/ ___/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
/ / / __/ /_/ / / / / / (__ ) /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ /
|
||||||
|
/_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/
|
||||||
|
/_/
|
||||||
@@ -27,18 +27,18 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if [[ -f /opt/${APP}_version.txt ]]; then
|
||||||
|
mv /opt/"${APP}_version.txt" ~/.headscale
|
||||||
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.headscale 2>/dev/null)" ]] || [[ ! -f ~/.headscale ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop headscale
|
systemctl stop headscale
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
|
||||||
curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb")
|
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
|
||||||
dpkg -i headscale_${RELEASE}_linux_amd64.deb
|
|
||||||
rm headscale_${RELEASE}_linux_amd64.deb
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
# Temporary fix until headscale project resolves service getting disabled on updates.
|
# Temporary fix until headscale project resolves service getting disabled on updates.
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ function update_script() {
|
|||||||
rm -rf homepage-${RELEASE}
|
rm -rf homepage-${RELEASE}
|
||||||
cd /opt/homepage
|
cd /opt/homepage
|
||||||
$STD pnpm install
|
$STD pnpm install
|
||||||
$STD npx --yes update-browserslist-db@latest
|
$STD pnpm update --no-save caniuse-lite
|
||||||
export NEXT_PUBLIC_VERSION="v$RELEASE"
|
export NEXT_PUBLIC_VERSION="v$RELEASE"
|
||||||
export NEXT_PUBLIC_REVISION="source"
|
export NEXT_PUBLIC_REVISION="source"
|
||||||
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
|
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
|
||||||
|
|||||||
283
ct/immich.sh
283
ct/immich.sh
@@ -51,136 +51,15 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
if [[ -f ~/.immich_library_revisions ]]; then
|
if [[ -f ~/.immich_library_revisions ]]; then
|
||||||
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
||||||
readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
|
cd "$BASE_DIR"
|
||||||
echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
|
$STD git pull
|
||||||
done)
|
for library in "${libraries[@]}"; do
|
||||||
UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
|
compile_"$library"
|
||||||
if [[ "$UPDATED_REVISIONS" ]]; then
|
done
|
||||||
readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
|
msg_ok "Image-processing libraries updated"
|
||||||
rm -rf "$SOURCE_DIR"
|
|
||||||
mkdir -p "$SOURCE_DIR"
|
|
||||||
cd "$BASE_DIR"
|
|
||||||
$STD git pull
|
|
||||||
cd "$STAGING_DIR"
|
|
||||||
for name in "${NAMES[@]}"; do
|
|
||||||
if [[ "$name" == "libjxl" ]]; then
|
|
||||||
msg_info "Recompiling libjxl"
|
|
||||||
SOURCE=${SOURCE_DIR}/libjxl
|
|
||||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
|
||||||
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
|
||||||
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
|
|
||||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
|
||||||
cd "$SOURCE"
|
|
||||||
$STD git reset --hard "$LIBJXL_REVISION"
|
|
||||||
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
|
|
||||||
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
|
|
||||||
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
$STD cmake \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DBUILD_TESTING=OFF \
|
|
||||||
-DJPEGXL_ENABLE_DOXYGEN=OFF \
|
|
||||||
-DJPEGXL_ENABLE_MANPAGES=OFF \
|
|
||||||
-DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
|
|
||||||
-DJPEGXL_ENABLE_BENCHMARK=OFF \
|
|
||||||
-DJPEGXL_ENABLE_EXAMPLES=OFF \
|
|
||||||
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
|
|
||||||
-DJPEGXL_FORCE_SYSTEM_HWY=ON \
|
|
||||||
-DJPEGXL_ENABLE_JPEGLI=ON \
|
|
||||||
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
|
|
||||||
-DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
|
|
||||||
-DJPEGXL_ENABLE_PLUGINS=ON \
|
|
||||||
-DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
|
|
||||||
-DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
|
|
||||||
-DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
|
|
||||||
..
|
|
||||||
$STD cmake --build . -- -j"$(nproc)"
|
|
||||||
$STD cmake --install .
|
|
||||||
ldconfig /usr/local/lib
|
|
||||||
$STD make clean
|
|
||||||
cd "$STAGING_DIR"
|
|
||||||
rm -rf "$SOURCE"/{build,third_party}
|
|
||||||
msg_ok "Recompiled libjxl"
|
|
||||||
fi
|
|
||||||
if [[ "$name" == "libheif" ]]; then
|
|
||||||
msg_info "Recompiling libheif"
|
|
||||||
SOURCE=${SOURCE_DIR}/libheif
|
|
||||||
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
|
|
||||||
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
|
||||||
cd "$SOURCE"
|
|
||||||
$STD git reset --hard "$LIBHEIF_REVISION"
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
$STD cmake --preset=release-noplugins \
|
|
||||||
-DWITH_DAV1D=ON \
|
|
||||||
-DENABLE_PARALLEL_TILE_DECODING=ON \
|
|
||||||
-DWITH_LIBSHARPYUV=ON \
|
|
||||||
-DWITH_LIBDE265=ON \
|
|
||||||
-DWITH_AOM_DECODER=OFF \
|
|
||||||
-DWITH_AOM_ENCODER=OFF \
|
|
||||||
-DWITH_X265=OFF \
|
|
||||||
-DWITH_EXAMPLES=OFF \
|
|
||||||
..
|
|
||||||
$STD make install -j "$(nproc)"
|
|
||||||
ldconfig /usr/local/lib
|
|
||||||
$STD make clean
|
|
||||||
cd "$STAGING_DIR"
|
|
||||||
rm -rf "$SOURCE"/build
|
|
||||||
msg_ok "Recompiled libheif"
|
|
||||||
fi
|
|
||||||
if [[ "$name" == "libraw" ]]; then
|
|
||||||
msg_info "Recompiling libraw"
|
|
||||||
SOURCE=${SOURCE_DIR}/libraw
|
|
||||||
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
|
|
||||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
|
||||||
cd "$SOURCE"
|
|
||||||
$STD git reset --hard "$LIBRAW_REVISION"
|
|
||||||
$STD autoreconf --install
|
|
||||||
$STD ./configure
|
|
||||||
$STD make -j"$(nproc)"
|
|
||||||
$STD make install
|
|
||||||
ldconfig /usr/local/lib
|
|
||||||
$STD make clean
|
|
||||||
cd "$STAGING_DIR"
|
|
||||||
msg_ok "Recompiled libraw"
|
|
||||||
fi
|
|
||||||
if [[ "$name" == "imagemagick" ]]; then
|
|
||||||
msg_info "Recompiling ImageMagick"
|
|
||||||
SOURCE=$SOURCE_DIR/imagemagick
|
|
||||||
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
|
|
||||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
|
||||||
cd "$SOURCE"
|
|
||||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
|
||||||
$STD ./configure --with-modules
|
|
||||||
$STD make -j"$(nproc)"
|
|
||||||
$STD make install
|
|
||||||
ldconfig /usr/local/lib
|
|
||||||
$STD make clean
|
|
||||||
cd "$STAGING_DIR"
|
|
||||||
msg_ok "Recompiled ImageMagick"
|
|
||||||
fi
|
|
||||||
if [[ "$name" == "libvips" ]]; then
|
|
||||||
msg_info "Recompiling libvips"
|
|
||||||
SOURCE=$SOURCE_DIR/libvips
|
|
||||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
|
||||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
|
||||||
cd "$SOURCE"
|
|
||||||
$STD git reset --hard "$LIBVIPS_REVISION"
|
|
||||||
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
|
|
||||||
cd build
|
|
||||||
$STD ninja install
|
|
||||||
ldconfig /usr/local/lib
|
|
||||||
cd "$STAGING_DIR"
|
|
||||||
rm -rf "$SOURCE"/build
|
|
||||||
msg_ok "Recompiled libvips"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
|
|
||||||
msg_ok "Image-processing libraries compiled"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE="1.135.3"
|
||||||
|
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
exit
|
exit
|
||||||
@@ -224,7 +103,7 @@ function update_script() {
|
|||||||
mkdir -p "$ML_DIR"
|
mkdir -p "$ML_DIR"
|
||||||
rm -rf "$SRC_DIR"
|
rm -rf "$SRC_DIR"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.135.3" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Updating ${APP} web and microservices"
|
msg_info "Updating ${APP} web and microservices"
|
||||||
cd "$SRC_DIR"/server
|
cd "$SRC_DIR"/server
|
||||||
@@ -245,6 +124,10 @@ function update_script() {
|
|||||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
||||||
cp -a web/build "$APP_DIR"/www
|
cp -a web/build "$APP_DIR"/www
|
||||||
cp LICENSE "$APP_DIR"
|
cp LICENSE "$APP_DIR"
|
||||||
|
cd "$APP_DIR"
|
||||||
|
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||||
|
$STD npm install sharp
|
||||||
|
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
||||||
msg_ok "Updated ${APP} web and microservices"
|
msg_ok "Updated ${APP} web and microservices"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
@@ -276,8 +159,6 @@ function update_script() {
|
|||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
ln -s "$GEO_DIR" "$APP_DIR"
|
||||||
|
|
||||||
msg_info "Updating Immich CLI"
|
msg_info "Updating Immich CLI"
|
||||||
$STD npm install --build-from-source sharp
|
|
||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
|
||||||
$STD npm i -g @immich/cli
|
$STD npm i -g @immich/cli
|
||||||
msg_ok "Updated Immich CLI"
|
msg_ok "Updated Immich CLI"
|
||||||
|
|
||||||
@@ -293,6 +174,144 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function compile_libjxl() {
|
||||||
|
SOURCE=${SOURCE_DIR}/libjxl
|
||||||
|
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
||||||
|
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
||||||
|
: "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
|
||||||
|
if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
|
msg_info "Recompiling libjxl"
|
||||||
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
|
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
||||||
|
cd "$SOURCE"
|
||||||
|
$STD git reset --hard "$LIBJXL_REVISION"
|
||||||
|
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
|
||||||
|
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
|
||||||
|
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
$STD cmake \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DBUILD_TESTING=OFF \
|
||||||
|
-DJPEGXL_ENABLE_DOXYGEN=OFF \
|
||||||
|
-DJPEGXL_ENABLE_MANPAGES=OFF \
|
||||||
|
-DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
|
||||||
|
-DJPEGXL_ENABLE_BENCHMARK=OFF \
|
||||||
|
-DJPEGXL_ENABLE_EXAMPLES=OFF \
|
||||||
|
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
|
||||||
|
-DJPEGXL_FORCE_SYSTEM_HWY=ON \
|
||||||
|
-DJPEGXL_ENABLE_JPEGLI=ON \
|
||||||
|
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
|
||||||
|
-DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
|
||||||
|
-DJPEGXL_ENABLE_PLUGINS=ON \
|
||||||
|
-DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
|
||||||
|
-DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
|
||||||
|
-DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
|
||||||
|
..
|
||||||
|
$STD cmake --build . -- -j"$(nproc)"
|
||||||
|
$STD cmake --install .
|
||||||
|
ldconfig /usr/local/lib
|
||||||
|
$STD make clean
|
||||||
|
cd "$STAGING_DIR"
|
||||||
|
rm -rf "$SOURCE"/{build,third_party}
|
||||||
|
msg_ok "Recompiled libjxl"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function compile_libheif() {
|
||||||
|
SOURCE=${SOURCE_DIR}/libheif
|
||||||
|
if ! dpkg -l | grep -q libaom; then
|
||||||
|
$STD apt-get install -y libaom-dev
|
||||||
|
local update="required"
|
||||||
|
fi
|
||||||
|
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
|
||||||
|
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
|
msg_info "Recompiling libheif"
|
||||||
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
|
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
||||||
|
cd "$SOURCE"
|
||||||
|
$STD git reset --hard "$LIBHEIF_REVISION"
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
$STD cmake --preset=release-noplugins \
|
||||||
|
-DWITH_DAV1D=ON \
|
||||||
|
-DENABLE_PARALLEL_TILE_DECODING=ON \
|
||||||
|
-DWITH_LIBSHARPYUV=ON \
|
||||||
|
-DWITH_LIBDE265=ON \
|
||||||
|
-DWITH_AOM_DECODER=OFF \
|
||||||
|
-DWITH_AOM_ENCODER=ON \
|
||||||
|
-DWITH_X265=OFF \
|
||||||
|
-DWITH_EXAMPLES=OFF \
|
||||||
|
..
|
||||||
|
$STD make install -j "$(nproc)"
|
||||||
|
ldconfig /usr/local/lib
|
||||||
|
$STD make clean
|
||||||
|
cd "$STAGING_DIR"
|
||||||
|
rm -rf "$SOURCE"/build
|
||||||
|
msg_ok "Recompiled libheif"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function compile_libraw() {
|
||||||
|
SOURCE=${SOURCE_DIR}/libraw
|
||||||
|
local update
|
||||||
|
: "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
|
||||||
|
if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
|
msg_info "Recompiling libraw"
|
||||||
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
|
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
||||||
|
cd "$SOURCE"
|
||||||
|
$STD git reset --hard "$LIBRAW_REVISION"
|
||||||
|
$STD autoreconf --install
|
||||||
|
$STD ./configure
|
||||||
|
$STD make -j"$(nproc)"
|
||||||
|
$STD make install
|
||||||
|
ldconfig /usr/local/lib
|
||||||
|
$STD make clean
|
||||||
|
cd "$STAGING_DIR"
|
||||||
|
msg_ok "Recompiled libraw"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function compile_imagemagick() {
|
||||||
|
SOURCE=$SOURCE_DIR/imagemagick
|
||||||
|
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
|
||||||
|
if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
|
msg_info "Recompiling ImageMagick"
|
||||||
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
|
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
||||||
|
cd "$SOURCE"
|
||||||
|
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
||||||
|
$STD ./configure --with-modules
|
||||||
|
$STD make -j"$(nproc)"
|
||||||
|
$STD make install
|
||||||
|
ldconfig /usr/local/lib
|
||||||
|
$STD make clean
|
||||||
|
cd "$STAGING_DIR"
|
||||||
|
msg_ok "Recompiled ImageMagick"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function compile_libvips() {
|
||||||
|
SOURCE=$SOURCE_DIR/libvips
|
||||||
|
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
|
||||||
|
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
|
||||||
|
if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
|
msg_info "Recompiling libvips"
|
||||||
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
|
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||||
|
cd "$SOURCE"
|
||||||
|
$STD git reset --hard "$LIBVIPS_REVISION"
|
||||||
|
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
|
||||||
|
cd build
|
||||||
|
$STD ninja install
|
||||||
|
ldconfig /usr/local/lib
|
||||||
|
cd "$STAGING_DIR"
|
||||||
|
rm -rf "$SOURCE"/build
|
||||||
|
msg_ok "Recompiled libvips"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|||||||
110
ct/karakeep.sh
110
ct/karakeep.sh
@@ -27,59 +27,67 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop karakeep-web karakeep-workers karakeep-browser
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
msg_info "Updating yt-dlp"
|
|
||||||
$STD yt-dlp --update-to nightly
|
|
||||||
msg_ok "Updated yt-dlp"
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
if [[ $(corepack -v) < "0.31.0" ]]; then
|
|
||||||
$STD npm install -g corepack@0.31.0
|
|
||||||
fi
|
|
||||||
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
|
|
||||||
$STD apt-get install -y graphicsmagick ghostscript
|
|
||||||
fi
|
|
||||||
cd /opt
|
|
||||||
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
|
||||||
mkdir -p /etc/karakeep
|
|
||||||
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
|
||||||
fi
|
|
||||||
rm -rf /opt/karakeep
|
|
||||||
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
|
||||||
$STD unzip "v${RELEASE}.zip"
|
|
||||||
mv karakeep-"${RELEASE}" /opt/karakeep
|
|
||||||
cd /opt/karakeep/apps/web
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm build
|
|
||||||
cd /opt/karakeep/apps/workers
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
cd /opt/karakeep/apps/cli
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm build
|
|
||||||
cd /opt/karakeep/apps/mcp
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm build
|
|
||||||
export DATA_DIR=/opt/karakeep_data
|
|
||||||
cd /opt/karakeep/packages/db
|
|
||||||
$STD pnpm migrate
|
|
||||||
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
systemctl start karakeep-browser karakeep-workers karakeep-web
|
if [[ -f ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then
|
||||||
msg_ok "Started Services"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
msg_info "Cleaning up"
|
exit
|
||||||
rm -R /opt/v"${RELEASE}".zip
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
|
||||||
fi
|
fi
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop karakeep-web karakeep-workers karakeep-browser
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
msg_info "Updating yt-dlp"
|
||||||
|
$STD yt-dlp --update-to nightly
|
||||||
|
msg_ok "Updated yt-dlp"
|
||||||
|
|
||||||
|
msg_info "Prepare update"
|
||||||
|
if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
|
||||||
|
$STD apt-get install -y graphicsmagick ghostscript
|
||||||
|
fi
|
||||||
|
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
||||||
|
mkdir -p /etc/karakeep
|
||||||
|
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
||||||
|
fi
|
||||||
|
rm -rf /opt/karakeep
|
||||||
|
msg_ok "Update prepared"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
|
||||||
|
if command -v corepack >/dev/null; then
|
||||||
|
$STD corepack disable
|
||||||
|
fi
|
||||||
|
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
|
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
|
||||||
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
|
export CI="true"
|
||||||
|
cd /opt/karakeep/apps/web
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm build
|
||||||
|
cd /opt/karakeep/apps/workers
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
cd /opt/karakeep/apps/cli
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm build
|
||||||
|
export DATA_DIR=/opt/karakeep_data
|
||||||
|
cd /opt/karakeep/packages/db
|
||||||
|
$STD pnpm migrate
|
||||||
|
$STD pnpm store prune
|
||||||
|
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start karakeep-browser karakeep-workers karakeep-web
|
||||||
|
msg_ok "Started Services"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get autoremove -y
|
||||||
|
$STD apt-get autoclean -y
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
43
ct/linkstack.sh
Normal file
43
ct/linkstack.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Omar Minaya | MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://linkstack.org/
|
||||||
|
|
||||||
|
APP="LinkStack"
|
||||||
|
var_tags="${var_tags:-os}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
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 ~/.linkstack ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
|
||||||
|
msg_warn "LinkStack should be updated via the user interface."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
97
ct/mealie.sh
Normal file
97
ct/mealie.sh
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://mealie.io
|
||||||
|
|
||||||
|
APP="Mealie"
|
||||||
|
var_tags="${var_tags:-recipes}"
|
||||||
|
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/mealie ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop mealie
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Backing up .env and start.sh"
|
||||||
|
cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak
|
||||||
|
cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak
|
||||||
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
||||||
|
|
||||||
|
msg_info "Rebuilding Frontend"
|
||||||
|
export NUXT_TELEMETRY_DISABLED=1
|
||||||
|
cd /opt/mealie/frontend
|
||||||
|
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
|
||||||
|
$STD yarn generate
|
||||||
|
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
|
||||||
|
msg_ok "Frontend rebuilt"
|
||||||
|
|
||||||
|
msg_info "Rebuilding Backend Environment"
|
||||||
|
cd /opt/mealie
|
||||||
|
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
|
||||||
|
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
|
||||||
|
$STD /opt/mealie/.venv/bin/poetry build --output dist
|
||||||
|
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
|
||||||
|
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
|
||||||
|
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
|
||||||
|
echo " \\" >>dist/requirements.txt
|
||||||
|
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
|
||||||
|
msg_ok "Backend prepared"
|
||||||
|
|
||||||
|
msg_info "Finalize Installation"
|
||||||
|
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
|
||||||
|
msg_ok "Mealie installed"
|
||||||
|
|
||||||
|
msg_info "Restoring Configuration"
|
||||||
|
mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env
|
||||||
|
mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh
|
||||||
|
chmod +x /opt/mealie/start.sh
|
||||||
|
msg_ok "Configuration restored"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start mealie
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update to $RELEASE 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}:9000${CL}"
|
||||||
@@ -27,15 +27,34 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v pnpm &>/dev/null; then
|
if ! command -v pnpm &>/dev/null; then
|
||||||
msg_info "Installing pnpm"
|
msg_info "Installing pnpm"
|
||||||
#export NODE_OPTIONS=--openssl-legacy-provider
|
#export NODE_OPTIONS=--openssl-legacy-provider
|
||||||
$STD npm install -g pnpm@8.15
|
$STD npm install -g pnpm@8.15
|
||||||
msg_ok "Installed pnpm"
|
msg_ok "Installed pnpm"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||||
grep "tag_name" |
|
grep "tag_name" |
|
||||||
awk '{print substr($2, 3, length($2)-4) }')
|
awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
|
||||||
|
msg_info "Downloading NPM v${RELEASE}"
|
||||||
|
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
|
||||||
|
cd nginx-proxy-manager-"${RELEASE}" || exit
|
||||||
|
msg_ok "Downloaded NPM v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
(
|
||||||
|
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
|
||||||
|
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
|
||||||
|
cd ./frontend || exit
|
||||||
|
$STD pnpm install
|
||||||
|
$STD pnpm upgrade
|
||||||
|
$STD pnpm run build
|
||||||
|
)
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop openresty
|
systemctl stop openresty
|
||||||
systemctl stop npm
|
systemctl stop npm
|
||||||
@@ -50,18 +69,11 @@ function update_script() {
|
|||||||
"$STD" /var/cache/nginx
|
"$STD" /var/cache/nginx
|
||||||
msg_ok "Cleaned Old Files"
|
msg_ok "Cleaned Old Files"
|
||||||
|
|
||||||
msg_info "Downloading NPM v${RELEASE}"
|
msg_info "Setting up Environment"
|
||||||
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
|
|
||||||
cd nginx-proxy-manager-"${RELEASE}"
|
|
||||||
msg_ok "Downloaded NPM v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Setting up Enviroment"
|
|
||||||
ln -sf /usr/bin/python3 /usr/bin/python
|
ln -sf /usr/bin/python3 /usr/bin/python
|
||||||
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
|
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
|
||||||
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
|
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
|
||||||
ln -sf /usr/local/openresty/nginx/ /etc/nginx
|
ln -sf /usr/local/openresty/nginx/ /etc/nginx
|
||||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
|
|
||||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
|
|
||||||
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
|
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
|
||||||
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
|
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
|
||||||
for NGINX_CONF in $NGINX_CONFS; do
|
for NGINX_CONF in $NGINX_CONFS; do
|
||||||
@@ -97,19 +109,12 @@ function update_script() {
|
|||||||
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
|
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
|
||||||
fi
|
fi
|
||||||
mkdir -p /app/global /app/frontend/images
|
mkdir -p /app/global /app/frontend/images
|
||||||
|
cp -r frontend/dist/* /app/frontend
|
||||||
|
cp -r frontend/app-images/* /app/frontend/images
|
||||||
cp -r backend/* /app
|
cp -r backend/* /app
|
||||||
cp -r global/* /app/global
|
cp -r global/* /app/global
|
||||||
$STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare
|
$STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
|
||||||
msg_ok "Setup Enviroment"
|
msg_ok "Setup Environment"
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
|
||||||
cd ./frontend
|
|
||||||
$STD pnpm install
|
|
||||||
$STD pnpm upgrade
|
|
||||||
$STD pnpm run build
|
|
||||||
cp -r dist/* /app/frontend
|
|
||||||
cp -r app-images/* /app/frontend/images
|
|
||||||
msg_ok "Built Frontend"
|
|
||||||
|
|
||||||
msg_info "Initializing Backend"
|
msg_info "Initializing Backend"
|
||||||
$STD rm -rf /app/config/default.json
|
$STD rm -rf /app/config/default.json
|
||||||
@@ -128,7 +133,7 @@ function update_script() {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
cd /app
|
cd /app || exit
|
||||||
$STD pnpm install
|
$STD pnpm install
|
||||||
msg_ok "Initialized Backend"
|
msg_ok "Initialized Backend"
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
systemctl stop open-webui.service
|
systemctl stop open-webui.service
|
||||||
$STD npm install
|
$STD npm install --force
|
||||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
cd ./backend
|
cd ./backend
|
||||||
|
|||||||
29
ct/peanut.sh
29
ct/peanut.sh
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
APP="PeaNUT"
|
APP="PeaNUT"
|
||||||
var_tags="${var_tags:-network;ups;}"
|
var_tags="${var_tags:-network;ups;}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-3072}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-7}"
|
var_disk="${var_disk:-7}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
@@ -27,22 +27,31 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
if ! command -v jq &>/dev/null; then
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
$STD apt-get install -y jq
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
fi
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then
|
||||||
|
|
||||||
|
msg_info "Stopping $APP"
|
||||||
systemctl stop peanut
|
systemctl stop peanut
|
||||||
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
|
msg_ok "Stopped $APP"
|
||||||
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
|
|
||||||
rm peanut.tar.gz
|
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cd /opt/peanut
|
cd /opt/peanut
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
$STD pnpm run build
|
$STD pnpm run build:local
|
||||||
cp -r .next/static .next/standalone/.next/
|
cp -r .next/static .next/standalone/.next/
|
||||||
mkdir -p /opt/peanut/.next/standalone/config
|
mkdir -p /opt/peanut/.next/standalone/config
|
||||||
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
||||||
systemctl start peanut
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start peanut
|
||||||
|
msg_ok "Started $APP"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
32
ct/planka.sh
32
ct/planka.sh
@@ -28,33 +28,33 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop planka
|
systemctl stop planka
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Backing up data"
|
||||||
mkdir -p /opt/planka-backup
|
mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments}
|
||||||
mkdir -p /opt/planka-backup/favicons
|
|
||||||
mkdir -p /opt/planka-backup/user-avatars
|
|
||||||
mkdir -p /opt/planka-backup/background-images
|
|
||||||
mkdir -p /opt/planka-backup/attachments
|
|
||||||
mv /opt/planka/.env /opt/planka-backup
|
mv /opt/planka/.env /opt/planka-backup
|
||||||
[ -n "$(ls -A /opt/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/public/favicons/* /opt/planka-backup/favicons/
|
[ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /opt/planka-backup/favicons {} +
|
||||||
[ -n "$(ls -A /opt/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
|
[ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka-backup/user-avatars {} +
|
||||||
[ -n "$(ls -A /opt/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/public/background-images/* /opt/planka-backup/background-images/
|
[ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /opt/planka-backup/background-images {} +
|
||||||
[ -n "$(ls -A /opt/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/private/attachments/* /opt/planka-backup/attachments/
|
[ -d /opt/planka/private/attachments ] && find /opt/planka/private/attachments -maxdepth 1 -type f -exec mv -t /opt/planka-backup/attachments {} +
|
||||||
rm -rf /opt/planka
|
rm -rf /opt/planka
|
||||||
|
msg_ok "Backed up data"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
|
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
|
||||||
cd /opt/planka
|
cd /opt/planka
|
||||||
$STD npm install
|
$STD npm install
|
||||||
|
|
||||||
|
msg_info "Restoring data"
|
||||||
mv /opt/planka-backup/.env /opt/planka/
|
mv /opt/planka-backup/.env /opt/planka/
|
||||||
[ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/public/favicons/
|
[ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /opt/planka/public/favicons {} +
|
||||||
[ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/public/user-avatars/
|
[ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka/public/user-avatars {} +
|
||||||
[ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/public/background-images/
|
[ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} +
|
||||||
[ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/
|
[ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} +
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Restored data"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start planka
|
systemctl start planka
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://rxresu.me
|
# Source: https://rxresume.org
|
||||||
|
|
||||||
APP="Reactive-Resume"
|
APP="Reactive-Resume"
|
||||||
var_tags="${var_tags:-documents}"
|
var_tags="${var_tags:-documents}"
|
||||||
@@ -20,80 +20,75 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
|
if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No $APP Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
msg_info "Stopping services"
|
|
||||||
systemctl stop Reactive-Resume
|
|
||||||
msg_ok "Stopped services"
|
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
cp /opt/${APP}/.env /opt/rxresume.env
|
|
||||||
res_tmp=$(mktemp)
|
|
||||||
rm -rf /opt/${APP}
|
|
||||||
curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -O $res_tmp
|
|
||||||
$STD unzip $res_tmp
|
|
||||||
mv ${APP}-${RELEASE}/ /opt/${APP}
|
|
||||||
cd /opt/${APP}
|
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
export CI="true"
|
|
||||||
export NODE_ENV="production"
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm run build
|
|
||||||
$STD pnpm run prisma:generate
|
|
||||||
mv /opt/rxresume.env /opt/${APP}/.env
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Updating Minio"
|
|
||||||
systemctl stop minio
|
|
||||||
cd /tmp
|
|
||||||
curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb
|
|
||||||
$STD dpkg -i minio.deb
|
|
||||||
msg_ok "Updated Minio"
|
|
||||||
|
|
||||||
msg_info "Updating Browserless (Patience)"
|
|
||||||
systemctl stop browserless
|
|
||||||
cp /opt/browserless/.env /opt/browserless.env
|
|
||||||
rm -rf browserless
|
|
||||||
brwsr_tmp=$(mktemp)
|
|
||||||
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -O $brwsr_tmp
|
|
||||||
$STD unzip $brwsr_tmp
|
|
||||||
mv browserless-${TAG}/ /opt/browserless
|
|
||||||
cd /opt/browserless
|
|
||||||
$STD npm install
|
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
|
||||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
|
||||||
$STD npm run build
|
|
||||||
$STD npm run build:function
|
|
||||||
$STD npm prune production
|
|
||||||
mv /opt/browserless.env /opt/browserless/.env
|
|
||||||
msg_ok "Updated Browserless"
|
|
||||||
|
|
||||||
msg_info "Restarting services"
|
|
||||||
systemctl start minio Reactive-Resume browserless
|
|
||||||
msg_ok "Restarted services"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -f /tmp/minio.deb
|
|
||||||
rm -f $brwsr_tmp
|
|
||||||
rm -f $res_tmp
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/lazy-media/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ ! -f "$HOME"/.reactive-resume ]] || [[ "$RELEASE" != "$(cat "$HOME"/.reactive-resume)" ]]; then
|
||||||
|
msg_info "Stopping services"
|
||||||
|
systemctl stop Reactive-Resume
|
||||||
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
|
cp /opt/"$APP"/.env /opt/rxresume.env
|
||||||
|
rm -rf /opt/"$APP"
|
||||||
|
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt/"$APP"
|
||||||
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
|
export CI="true"
|
||||||
|
export NODE_ENV="production"
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm run build
|
||||||
|
$STD pnpm run prisma:generate
|
||||||
|
mv /opt/rxresume.env /opt/"$APP"/.env
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Updating Minio"
|
||||||
|
systemctl stop minio
|
||||||
|
cd /tmp
|
||||||
|
curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb
|
||||||
|
$STD dpkg -i minio.deb
|
||||||
|
msg_ok "Updated Minio"
|
||||||
|
|
||||||
|
msg_info "Updating Browserless (Patience)"
|
||||||
|
systemctl stop browserless
|
||||||
|
cp /opt/browserless/.env /opt/browserless.env
|
||||||
|
rm -rf /opt/browserless
|
||||||
|
brwsr_tmp=$(mktemp)
|
||||||
|
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o "$brwsr_tmp"
|
||||||
|
$STD unzip "$brwsr_tmp"
|
||||||
|
mv browserless-"$TAG"/ /opt/browserless
|
||||||
|
cd /opt/browserless
|
||||||
|
$STD npm install
|
||||||
|
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
||||||
|
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
||||||
|
$STD npm run build
|
||||||
|
$STD npm run build:function
|
||||||
|
$STD npm prune production
|
||||||
|
mv /opt/browserless.env /opt/browserless/.env
|
||||||
|
msg_ok "Updated Browserless"
|
||||||
|
|
||||||
|
msg_info "Restarting services"
|
||||||
|
systemctl start minio Reactive-Resume browserless
|
||||||
|
msg_ok "Restarted services"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f /tmp/minio.deb
|
||||||
|
rm -f "$brwsr_tmp"
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. $APP is already at v{$RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ function update_script() {
|
|||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
setup_uv
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
systemctl stop sabnzbd
|
systemctl stop sabnzbd
|
||||||
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
|
||||||
|
|||||||
50
ct/salt.sh
Normal file
50
ct/salt.sh
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/saltstack/salt
|
||||||
|
|
||||||
|
APP="Salt"
|
||||||
|
var_tags="${var_tags:-automations}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
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 /etc/salt ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||||
|
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get upgrade -y
|
||||||
|
echo "${RELEASE}" >/~.salt
|
||||||
|
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||||
|
else
|
||||||
|
msg_ok "${APP} is already up to date (${RELEASE})"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
63
ct/teamspeak-server.sh
Normal file
63
ct/teamspeak-server.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: tremor021 (Slaviša Arežina)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://teamspeak.com/en/
|
||||||
|
|
||||||
|
APP="Teamspeak-Server"
|
||||||
|
var_tags="${var_tags:-voice;communication}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-2}"
|
||||||
|
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/teamspeak-server ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.teamspeak-server 2>/dev/null)" ]] || [[ ! -f ~/.teamspeak-server ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop teamspeak-server
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
|
||||||
|
tar -xf ./ts3server.tar.bz2
|
||||||
|
cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
|
||||||
|
rm -f ~/ts3server.tar.bz*
|
||||||
|
echo "${RELEASE}" >~/.teamspeak-server
|
||||||
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start teamspeak-server
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "Already up to date"
|
||||||
|
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}${IP}:9987${CL}"
|
||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then
|
||||||
|
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop threadfin
|
systemctl stop threadfin
|
||||||
|
|||||||
@@ -27,31 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/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
|
if [[ ! -f ~/.victoriametrics ]] || [[ "${RELEASE}" != "$(cat ~/.victoriametrics)" ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop victoriametrics
|
systemctl stop victoriametrics
|
||||||
|
[[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
|
||||||
temp_dir=$(mktemp -d)
|
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
|
||||||
cd $temp_dir
|
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
|
||||||
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz")
|
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
|
||||||
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz")
|
|
||||||
find /opt/victoriametrics -maxdepth 1 -type f -executable -delete
|
|
||||||
tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
|
|
||||||
tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
|
|
||||||
chmod +x /opt/victoriametrics/*
|
chmod +x /opt/victoriametrics/*
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start victoriametrics
|
systemctl start victoriametrics
|
||||||
|
[[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf $temp_dir
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ function update_script() {
|
|||||||
rm -rf /opt/wallos/db/wallos.empty.db
|
rm -rf /opt/wallos/db/wallos.empty.db
|
||||||
mv /opt/wallos.db /opt/wallos/db/wallos.db
|
mv /opt/wallos.db /opt/wallos/db/wallos.db
|
||||||
mv /opt/logos/* /opt/wallos/images/uploads/logos
|
mv /opt/logos/* /opt/wallos/images/uploads/logos
|
||||||
|
if ! grep -q "storetotalyearlycost.php" /opt/wallos.cron; then
|
||||||
|
echo "30 1 * * 1 php /opt/wallos/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1" >> /opt/wallos.cron
|
||||||
|
fi
|
||||||
chown -R www-data:www-data /opt/wallos
|
chown -R www-data:www-data /opt/wallos
|
||||||
chmod -R 755 /opt/wallos
|
chmod -R 755 /opt/wallos
|
||||||
mkdir -p /var/log/cron
|
mkdir -p /var/log/cron
|
||||||
|
|||||||
6
frontend/package-lock.json
generated
6
frontend/package-lock.json
generated
@@ -7749,9 +7749,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/form-data": {
|
"node_modules/form-data": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
|
||||||
"integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
|
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
35
frontend/public/json/bar-assistant.json
Normal file
35
frontend/public/json/bar-assistant.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Bar-Assistant",
|
||||||
|
"slug": "bar-assistant",
|
||||||
|
"categories": [
|
||||||
|
24
|
||||||
|
],
|
||||||
|
"date_created": "2025-07-14",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://docs.barassistant.app/",
|
||||||
|
"website": "https://barassistant.app/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bar-assistant.webp",
|
||||||
|
"config_path": "/opt/bar-assistant",
|
||||||
|
"description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/bar-assistant.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
40
frontend/public/json/cloudreve.json
Normal file
40
frontend/public/json/cloudreve.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "Cloudreve",
|
||||||
|
"slug": "cloudreve",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-07-17",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 5212,
|
||||||
|
"documentation": "https://docs.cloudreve.org/en/",
|
||||||
|
"website": "https://cloudreve.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudreve.webp",
|
||||||
|
"config_path": "/opt/cloudreve/data/conf.ini",
|
||||||
|
"description": "Cloudreve is an open-source, community-driven cloud storage system that provides file sharing, synchronization, and management features. It supports a wide range of storage backends and integrates with various notification and logging platforms.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/cloudreve.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 10,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "After Installation: Register your user -> Login -> Dashboard -> Accept Primary URL.",
|
||||||
|
"type": "warn"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -35,6 +35,10 @@
|
|||||||
{
|
{
|
||||||
"text": "Configuration settings: `/etc/headscale/config.yaml`",
|
"text": "Configuration settings: `/etc/headscale/config.yaml`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Access headscale-admin UI via `http://<LXC-IP>/admin/`",
|
||||||
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
44
frontend/public/json/linkstack.json
Normal file
44
frontend/public/json/linkstack.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "LinkStack",
|
||||||
|
"slug": "linkstack",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-07-22",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/var/www/html/linkstack/.env",
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://docs.linkstack.org/",
|
||||||
|
"website": "https://linkstack.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linkstack.webp",
|
||||||
|
"description": "LinkStack is an open-source, self-hosted alternative to Linktree, allowing users to create a customizable profile page to share multiple links, hosted on their own server.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/linkstack.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "LinkStack can be updated via the user interface.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Complete setup via the web interface at http://<container-ip>/. Check installation logs: `cat ~/linkstack-install.log`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
35
frontend/public/json/mealie.json
Normal file
35
frontend/public/json/mealie.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Mealie",
|
||||||
|
"slug": "mealie",
|
||||||
|
"categories": [
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2025-07-14",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/opt/mealie/mealie.env",
|
||||||
|
"interface_port": 9000,
|
||||||
|
"documentation": "https://mealie.io/",
|
||||||
|
"website": "https://mealie.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp",
|
||||||
|
"description": "Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/mealie.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 10,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "NIC Offloading Fix",
|
"name": "Intel e1000e NIC Offloading Fix",
|
||||||
"slug": "nic-offloading-fix",
|
"slug": "nic-offloading-fix",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,35 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "PeaNUT",
|
"name": "PeaNUT",
|
||||||
"slug": "peanut",
|
"slug": "peanut",
|
||||||
"categories": [
|
"categories": [
|
||||||
4
|
4
|
||||||
],
|
],
|
||||||
"date_created": "2024-06-14",
|
"date_created": "2024-06-14",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": "https://github.com/Brandawg93/PeaNUT/",
|
"website": "https://github.com/Brandawg93/PeaNUT/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
|
||||||
"config_path": "/etc/peanut/settings.yml",
|
"config_path": "/etc/peanut/settings.yml",
|
||||||
"description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
|
"description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/peanut.sh",
|
"script": "ct/peanut.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 3072,
|
"ram": 4096,
|
||||||
"hdd": 7,
|
"hdd": 7,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": "https://docs.rxresu.me/",
|
"documentation": "https://docs.rxresume.org/",
|
||||||
"website": "https://rxresu.me",
|
"website": "https://rxresume.org",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
|
||||||
"config_path": "/opt/reactive-resume/.env",
|
"config_path": "/opt/reactive-resume/.env",
|
||||||
"description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
|
"description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
|
||||||
|
|||||||
35
frontend/public/json/salt.json
Normal file
35
frontend/public/json/salt.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Salt",
|
||||||
|
"slug": "salt",
|
||||||
|
"categories": [
|
||||||
|
19
|
||||||
|
],
|
||||||
|
"date_created": "2025-07-22",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/opt/salt/.env",
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/",
|
||||||
|
"website": "https://saltproject.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp",
|
||||||
|
"description": "SaltStack Salt is a software for automating the management and configuration of IT infrastructure and applications. It is an event-driven automation tool and framework used to deploy, configure, and manage complex IT systems. Its primary functions include configuration management, where it ensures consistent configurations and manages operating system deployment and software installation. It also automates and orchestrates routine IT processes and can create self-aware, self-healing systems.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/salt.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 3,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
55
frontend/public/json/teamspeak-server.json
Normal file
55
frontend/public/json/teamspeak-server.json
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"name": "Teamspeak-Server",
|
||||||
|
"slug": "teamspeak-server",
|
||||||
|
"categories": [
|
||||||
|
24
|
||||||
|
],
|
||||||
|
"date_created": "2025-07-21",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9987,
|
||||||
|
"documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
|
||||||
|
"website": "https://teamspeak.com/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystal‑clear, low‑latency voice communication.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/teamspeak-server.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-teamspeak-server.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Use `journalctl -u teamspeak-server.service` inside Debian LXC console to check for admin credentials!",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Use `cat /var/log/teamspeak.err.log` inside Alpine LXC console to check for admin credentials!",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,7 @@ $STD apt-get install -y \
|
|||||||
nginx
|
nginx
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
|
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
|
|||||||
69
install/alpine-teamspeak-server-install.sh
Normal file
69
install/alpine-teamspeak-server-install.sh
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: tremor021 (Slaviša Arežina)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://teamspeak.com/en/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing dependencies"
|
||||||
|
$STD apk add --no-cache \
|
||||||
|
ca-certificates \
|
||||||
|
libstdc++ \
|
||||||
|
libc6-compat
|
||||||
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n '/teamspeak3-server_linux_amd64-/ { s/.*teamspeak3-server_linux_amd64-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p; q }')
|
||||||
|
|
||||||
|
msg_info "Installing Teamspeak Server v${RELEASE}"
|
||||||
|
mkdir -p /opt/teamspeak-server
|
||||||
|
cd /opt/teamspeak-server
|
||||||
|
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
|
||||||
|
tar xf ts3server.tar.bz2 --strip-components=1
|
||||||
|
mkdir -p logs data lib
|
||||||
|
mv *.so lib
|
||||||
|
touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted
|
||||||
|
echo "${RELEASE}" >~/.teamspeak-server
|
||||||
|
msg_ok "Installed TeamSpeak Server v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Enabling TeamSpeak Server Service"
|
||||||
|
cat <<EOF >/etc/init.d/teamspeak
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
name="TeamSpeak Server"
|
||||||
|
description="TeamSpeak 3 Server"
|
||||||
|
command="/opt/teamspeak-server/ts3server_startscript.sh"
|
||||||
|
command_args="start"
|
||||||
|
output_log="/var/log/teamspeak.out.log"
|
||||||
|
error_log="/var/log/teamspeak.err.log"
|
||||||
|
command_background=true
|
||||||
|
pidfile="/run/teamspeak-server.pid"
|
||||||
|
directory="/opt/teamspeak-server"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need net
|
||||||
|
use dns
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
chmod +x /etc/init.d/teamspeak
|
||||||
|
$STD rc-update add teamspeak default
|
||||||
|
msg_ok "Enabled TeamSpeak Server Service"
|
||||||
|
|
||||||
|
msg_info "Starting TeamSpeak Server"
|
||||||
|
$STD service teamspeak start
|
||||||
|
msg_ok "Started TeamSpeak Server"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist
|
||||||
|
$STD apk cache clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -15,6 +15,7 @@ update_os
|
|||||||
|
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php
|
PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php
|
||||||
|
setup_composer
|
||||||
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
|
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL Database"
|
msg_info "Setting up PostgreSQL Database"
|
||||||
@@ -32,6 +33,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
|
|||||||
msg_ok "Set up PostgreSQL Database"
|
msg_ok "Set up PostgreSQL Database"
|
||||||
|
|
||||||
msg_info "Configuring Baikal"
|
msg_info "Configuring Baikal"
|
||||||
|
cd /opt/baikal
|
||||||
|
$STD composer install
|
||||||
cat <<EOF >/opt/baikal/config/baikal.yaml
|
cat <<EOF >/opt/baikal/config/baikal.yaml
|
||||||
database:
|
database:
|
||||||
backend: pgsql
|
backend: pgsql
|
||||||
|
|||||||
197
install/bar-assistant-install.sh
Normal file
197
install/bar-assistant-install.sh
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01 | CanbiZ
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/karlomikus/bar-assistant
|
||||||
|
# Source: https://github.com/karlomikus/vue-salt-rim
|
||||||
|
# Source: https://www.meilisearch.com/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
redis-server \
|
||||||
|
nginx \
|
||||||
|
lsb-release \
|
||||||
|
libvips
|
||||||
|
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
|
||||||
|
setup_composer
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||||
|
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
|
||||||
|
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
|
||||||
|
|
||||||
|
msg_info "Configuring PHP"
|
||||||
|
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
|
||||||
|
sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini
|
||||||
|
$STD systemctl reload php${PHPVER}-fpm
|
||||||
|
msg_info "configured PHP"
|
||||||
|
|
||||||
|
msg_info "Configure MeiliSearch"
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
|
||||||
|
MASTER_KEY=$(openssl rand -base64 12)
|
||||||
|
sed -i \
|
||||||
|
-e 's|^env =.*|env = "production"|' \
|
||||||
|
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||||
|
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
||||||
|
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
||||||
|
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
||||||
|
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||||
|
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
|
||||||
|
/etc/meilisearch.toml
|
||||||
|
msg_ok "Configured MeiliSearch"
|
||||||
|
|
||||||
|
msg_info "Creating MeiliSearch service"
|
||||||
|
cat <<EOF >/etc/systemd/system/meilisearch.service
|
||||||
|
[Unit]
|
||||||
|
Description=Meilisearch
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now meilisearch
|
||||||
|
sleep 5
|
||||||
|
msg_ok "Created Service MeiliSearch"
|
||||||
|
|
||||||
|
msg_info "Installing Bar Assistant"
|
||||||
|
cd /opt/bar-assistant
|
||||||
|
cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env
|
||||||
|
mkdir -p /opt/bar-assistant/resources/data
|
||||||
|
curl -fsSL https://github.com/bar-assistant/data/archive/refs/heads/v5.tar.gz | tar -xz --strip-components=1 -C /opt/bar-assistant/resources/data
|
||||||
|
MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//')
|
||||||
|
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
|
||||||
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
|
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
|
||||||
|
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
|
||||||
|
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
|
||||||
|
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
|
||||||
|
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
|
||||||
|
/opt/bar-assistant/.env
|
||||||
|
$STD composer install --no-interaction
|
||||||
|
$STD php artisan key:generate
|
||||||
|
touch storage/bar-assistant/database.ba3.sqlite
|
||||||
|
$STD php artisan migrate --force
|
||||||
|
$STD php artisan storage:link
|
||||||
|
$STD php artisan bar:setup-meilisearch
|
||||||
|
$STD php artisan scout:sync-index-settings
|
||||||
|
$STD php artisan config:cache
|
||||||
|
$STD php artisan route:cache
|
||||||
|
$STD php artisan event:cache
|
||||||
|
mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp
|
||||||
|
chown -R www-data:www-data /opt/bar-assistant
|
||||||
|
msg_ok "Installed Bar Assistant"
|
||||||
|
|
||||||
|
msg_info "Installing Salt Rim"
|
||||||
|
cd /opt/vue-salt-rim
|
||||||
|
cat <<EOF >/opt/vue-salt-rim/public/config.js
|
||||||
|
window.srConfig = {}
|
||||||
|
window.srConfig.API_URL = "http://${LOCAL_IP}/bar"
|
||||||
|
window.srConfig.MEILISEARCH_URL = "http://${LOCAL_IP}/search"
|
||||||
|
EOF
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Installed Salt Rim"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
location = /favicon.ico { access_log off; log_not_found off; }
|
||||||
|
location = /robots.txt { access_log off; log_not_found off; }
|
||||||
|
|
||||||
|
client_max_body_size 100M;
|
||||||
|
|
||||||
|
location /bar/ {
|
||||||
|
proxy_pass http://127.0.0.1:8080/;
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /search/ {
|
||||||
|
proxy_pass http://127.0.0.1:7700/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8081/;
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 127.0.0.1:8080;
|
||||||
|
server_name example.com;
|
||||||
|
root /opt/bar-assistant/public;
|
||||||
|
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN";
|
||||||
|
add_header X-Content-Type-Options "nosniff";
|
||||||
|
|
||||||
|
index index.php;
|
||||||
|
charset utf-8;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ /index.php?\$query_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /favicon.ico { access_log off; log_not_found off; }
|
||||||
|
location = /robots.txt { access_log off; log_not_found off; }
|
||||||
|
|
||||||
|
error_page 404 /index.php;
|
||||||
|
|
||||||
|
location ~ ^/index\.php(/|$) {
|
||||||
|
fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock;
|
||||||
|
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_hide_header X-Powered-By;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.(?!well-known).* {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 127.0.0.1:8081;
|
||||||
|
server_name _;
|
||||||
|
root /opt/vue-salt-rim/dist;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/
|
||||||
|
rm -f /etc/nginx/sites-enabled/default
|
||||||
|
$STD systemctl reload nginx
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -14,12 +14,10 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y redis
|
||||||
apache2 \
|
|
||||||
redis
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php
|
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
|
||||||
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
|
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
|
||||||
|
|
||||||
msg_info "Configuring barcodebuddy"
|
msg_info "Configuring barcodebuddy"
|
||||||
|
|||||||
@@ -24,13 +24,20 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
|
SITE_NAME="monitoring"
|
||||||
$STD omd start
|
$STD omd create "$SITE_NAME"
|
||||||
|
MKPASSWORD=$(openssl rand -base64 18 | tr -d '/+=' | cut -c1-16)
|
||||||
|
|
||||||
|
echo -e "$MKPASSWORD\n$MKPASSWORD" | su - "$SITE_NAME" -c "cmk-passwd cmkadmin --stdin"
|
||||||
|
$STD omd start "$SITE_NAME"
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "Application-Credentials"
|
echo "Application-Credentials"
|
||||||
echo "Username: cmkadmin"
|
echo "Username: cmkadmin"
|
||||||
echo "Password: $PASSWORD"
|
echo "Password: $MKPASSWORD"
|
||||||
|
echo "Site: $SITE_NAME"
|
||||||
} >>~/checkmk.creds
|
} >>~/checkmk.creds
|
||||||
|
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
|||||||
43
install/cloudreve-install.sh
Normal file
43
install/cloudreve-install.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/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://cloudreve.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Setup Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/cloudreve.service
|
||||||
|
[Unit]
|
||||||
|
Description=Cloudreve Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/opt/cloudreve/cloudreve
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl enable -q --now cloudreve
|
||||||
|
msg_ok "Service Setup"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -16,11 +16,11 @@ update_os
|
|||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
|
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
|
||||||
|
|
||||||
msg_info "Installing Dashy ${RELEASE} (Patience)"
|
msg_info "Installing Dashy"
|
||||||
cd /opt/dashy
|
cd /opt/dashy
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Installed Dashy ${RELEASE}"
|
msg_ok "Installed Dashy"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/dashy.service
|
cat <<EOF >/etc/systemd/system/dashy.service
|
||||||
|
|||||||
@@ -29,7 +29,17 @@ echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json
|
|||||||
$STD sh <(curl -fsSL https://get.docker.com)
|
$STD sh <(curl -fsSL https://get.docker.com)
|
||||||
msg_ok "Installed Docker $DOCKER_LATEST_VERSION"
|
msg_ok "Installed Docker $DOCKER_LATEST_VERSION"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
|
read -r -p "${TAB3}Install Docker Compose v2 plugin? <y/N> " prompt_compose
|
||||||
|
if [[ ${prompt_compose,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
|
||||||
|
mkdir -p /usr/local/lib/docker/cli-plugins
|
||||||
|
curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
|
||||||
|
-o /usr/local/lib/docker/cli-plugins/docker-compose
|
||||||
|
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
|
||||||
|
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Would you like to add Portainer (UI)? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
||||||
docker volume create portainer_data >/dev/null
|
docker volume create portainer_data >/dev/null
|
||||||
@@ -43,9 +53,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|||||||
portainer/portainer-ce:latest
|
portainer/portainer-ce:latest
|
||||||
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
||||||
else
|
else
|
||||||
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? <y/N> " prompt_agent
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
|
msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
|
||||||
$STD docker run -d \
|
$STD docker run -d \
|
||||||
-p 9001:9001 \
|
-p 9001:9001 \
|
||||||
--name portainer_agent \
|
--name portainer_agent \
|
||||||
@@ -57,12 +67,25 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
read -r -p "${TAB3}Expose Docker TCP socket (⚠️ insecure)? <y/N> " prompt
|
read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] <n/l/a>: " socket_choice
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
case "${socket_choice,,}" in
|
||||||
msg_info "Enabling Docker TCP socket on port 2375 (insecure)"
|
l)
|
||||||
|
socket="tcp://127.0.0.1:2375"
|
||||||
mkdir -p /etc/docker
|
;;
|
||||||
echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
|
a)
|
||||||
|
socket="tcp://0.0.0.0:2375"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
socket=""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ -n "$socket" ]]; then
|
||||||
|
msg_info "Enabling Docker TCP socket on $socket"
|
||||||
|
$STD apt-get install -y jq
|
||||||
|
|
||||||
|
tmpfile=$(mktemp)
|
||||||
|
jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json > "$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json
|
||||||
|
|
||||||
mkdir -p /etc/systemd/system/docker.service.d
|
mkdir -p /etc/systemd/system/docker.service.d
|
||||||
cat <<EOF > /etc/systemd/system/docker.service.d/override.conf
|
cat <<EOF > /etc/systemd/system/docker.service.d/override.conf
|
||||||
@@ -75,14 +98,13 @@ EOF
|
|||||||
$STD systemctl daemon-reload
|
$STD systemctl daemon-reload
|
||||||
|
|
||||||
if systemctl restart docker; then
|
if systemctl restart docker; then
|
||||||
msg_ok "Docker TCP socket now available on tcp://0.0.0.0:2375"
|
msg_ok "Docker TCP socket available on $socket"
|
||||||
else
|
else
|
||||||
msg_error "Docker failed to restart. Check journalctl -xeu docker.service"
|
msg_error "Docker failed to restart. Check journalctl -xeu docker.service"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ msg_ok "Installed Documenso"
|
|||||||
|
|
||||||
msg_info "Create User"
|
msg_info "Create User"
|
||||||
PASSWORD_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'helper-scripts', bcrypt.gensalt(rounds=12)).decode())")
|
PASSWORD_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'helper-scripts', bcrypt.gensalt(rounds=12)).decode())")
|
||||||
$STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\", \"customerId\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25', NULL) RETURNING id;"
|
$STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25') RETURNING id;"
|
||||||
$STD npm run prisma:migrate-deploy
|
$STD npm run prisma:migrate-deploy
|
||||||
msg_ok "User created"
|
msg_ok "User created"
|
||||||
|
|
||||||
|
|||||||
@@ -20,19 +20,16 @@ $STD apt-get install -y \
|
|||||||
libfontconfig1
|
libfontconfig1
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setting up Duplicati"
|
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
|
||||||
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o "duplicati-${RELEASE}-linux-x64-gui.deb"
|
|
||||||
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
|
|
||||||
echo "${RELEASE}" >/opt/Duplicati_version.txt
|
|
||||||
msg_ok "Finished setting up Duplicati"
|
|
||||||
|
|
||||||
|
msg_info "Configuring duplicati"
|
||||||
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
{
|
{
|
||||||
echo "Admin password = ${ADMINPASS}"
|
echo "Admin password = ${ADMINPASS}"
|
||||||
echo "Database encryption key = ${DECRYPTKEY}"
|
echo "Database encryption key = ${DECRYPTKEY}"
|
||||||
} >>~/duplicati.creds
|
} >>~/duplicati.creds
|
||||||
|
msg_ok "Configured duplicati"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/duplicati.service
|
cat <<EOF >/etc/systemd/system/duplicati.service
|
||||||
@@ -54,10 +51,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f duplicati-${RELEASE}-linux-x64-gui.deb
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
|
|
||||||
|
|
||||||
msg_info "Setting Up Hardware Acceleration"
|
msg_info "Setting Up Hardware Acceleration"
|
||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||||
if [[ "$CTTYPE" == "0" ]]; then
|
if [[ "$CTTYPE" == "0" ]]; then
|
||||||
@@ -26,7 +24,37 @@ if [[ "$CTTYPE" == "0" ]]; then
|
|||||||
fi
|
fi
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
msg_ok "Set Up Hardware Acceleration"
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
|
||||||
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
||||||
|
|
||||||
|
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
|
||||||
|
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
|
||||||
|
|
||||||
|
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
||||||
|
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
|
||||||
|
|
||||||
|
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
||||||
|
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
|
||||||
|
EOF
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||||
|
else
|
||||||
|
msg_info "Installing Intel Hardware Acceleration"
|
||||||
|
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
|
||||||
|
fi
|
||||||
|
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||||
|
|
||||||
|
msg_info "Set ErsatzTV-ffmpeg links"
|
||||||
|
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
|
||||||
|
msg_ok "ffmpeg links set"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/ersatzTV.service
|
cat <<EOF >/etc/systemd/system/ersatzTV.service
|
||||||
|
|||||||
@@ -13,14 +13,9 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y apache2
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
|
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
|
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
|
|
||||||
msg_info "Setting up database"
|
msg_info "Setting up database"
|
||||||
@@ -38,6 +33,8 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI
|
|||||||
} >>~/firefly.creds
|
} >>~/firefly.creds
|
||||||
msg_ok "Set up database"
|
msg_ok "Set up database"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
|
||||||
|
|
||||||
msg_info "Configuring Firefly III (Patience)"
|
msg_info "Configuring Firefly III (Patience)"
|
||||||
chown -R www-data:www-data /opt/firefly
|
chown -R www-data:www-data /opt/firefly
|
||||||
chmod -R 775 /opt/firefly/storage
|
chmod -R 775 /opt/firefly/storage
|
||||||
@@ -45,8 +42,6 @@ cd /opt/firefly
|
|||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
|
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
|
||||||
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
|
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
|
||||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
|
|
||||||
source ~/.bashrc
|
|
||||||
$STD composer install --no-dev --no-plugins --no-interaction
|
$STD composer install --no-dev --no-plugins --no-interaction
|
||||||
$STD php artisan firefly:upgrade-database
|
$STD php artisan firefly:upgrade-database
|
||||||
$STD php artisan firefly:correct-database
|
$STD php artisan firefly:correct-database
|
||||||
|
|||||||
@@ -42,10 +42,7 @@ if [[ "$CTTYPE" == "0" ]]; then
|
|||||||
fi
|
fi
|
||||||
msg_ok "Set Up Hardware Acceleration"
|
msg_ok "Set Up Hardware Acceleration"
|
||||||
|
|
||||||
#RELEASE=$(curl -fsSL https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
|
|
||||||
msg_ok "Stop spinner to prevent segmentation fault"
|
|
||||||
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
msg_info "Installing Frigate v0.14.1 (Perseverance)"
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
cd ~
|
cd ~
|
||||||
mkdir -p /opt/frigate/models
|
mkdir -p /opt/frigate/models
|
||||||
curl -fsSL "https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz" -o "frigate.tar.gz"
|
curl -fsSL "https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz" -o "frigate.tar.gz"
|
||||||
|
|||||||
@@ -13,15 +13,10 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing go2rtc"
|
fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
|
||||||
mkdir -p /opt/go2rtc
|
|
||||||
cd /opt/go2rtc
|
|
||||||
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o "go2rtc_linux_amd64"
|
|
||||||
chmod +x go2rtc_linux_amd64
|
|
||||||
msg_ok "Installed go2rtc"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
service_path="/etc/systemd/system/go2rtc.service"
|
cat <<EOF >/etc/systemd/system/go2rtc.service
|
||||||
echo "[Unit]
|
echo "[Unit]
|
||||||
Description=go2rtc service
|
Description=go2rtc service
|
||||||
After=network.target
|
After=network.target
|
||||||
@@ -32,7 +27,8 @@ User=root
|
|||||||
ExecStart=/opt/go2rtc/go2rtc_linux_amd64
|
ExecStart=/opt/go2rtc/go2rtc_linux_amd64
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target" >$service_path
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
systemctl enable -q --now go2rtc
|
systemctl enable -q --now go2rtc
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
|||||||
@@ -13,14 +13,12 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Gokapi"
|
fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
|
||||||
LATEST=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
|
||||||
|
msg_info "Configuring Gokapi"
|
||||||
mkdir -p /opt/gokapi/{data,config}
|
mkdir -p /opt/gokapi/{data,config}
|
||||||
curl -fsSL "https://github.com/Forceu/Gokapi/releases/download/$LATEST/gokapi-linux_amd64.zip" -o "gokapi-linux_amd64.zip"
|
|
||||||
$STD unzip gokapi-linux_amd64.zip -d /opt/gokapi
|
|
||||||
rm gokapi-linux_amd64.zip
|
|
||||||
chmod +x /opt/gokapi/gokapi-linux_amd64
|
chmod +x /opt/gokapi/gokapi-linux_amd64
|
||||||
msg_ok "Installed Gokapi"
|
msg_ok "Configured Gokapi"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/gokapi.service
|
cat <<EOF >/etc/systemd/system/gokapi.service
|
||||||
|
|||||||
@@ -22,16 +22,17 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1
|
|||||||
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
|
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
|
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha,npm@10" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
|
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Setup ${APPLICATION}"
|
||||||
cd /opt/habitica
|
cd /opt/habitica
|
||||||
$STD npm i
|
$STD npm i
|
||||||
$STD npm run postinstall
|
$STD npm run postinstall
|
||||||
|
cp config.json.example config.json
|
||||||
$STD npm run client:build
|
$STD npm run client:build
|
||||||
$STD gulp build:prod
|
$STD gulp build:prod
|
||||||
cp config.json.example config.json
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -13,19 +13,53 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
|
||||||
msg_info "Installing ${APPLICATION} v${RELEASE}"
|
|
||||||
curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o "headscale_${RELEASE}_linux_amd64.deb"
|
read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt
|
||||||
$STD dpkg -i headscale_${RELEASE}_linux_amd64.deb
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
|
||||||
|
|
||||||
|
msg_info "Configuring headscale-admin"
|
||||||
|
$STD apt-get install -y caddy
|
||||||
|
$STD caddy stop
|
||||||
|
rm /etc/caddy/Caddyfile
|
||||||
|
cat <<EOF >/etc/caddy/Caddyfile
|
||||||
|
:{$PORT:80}
|
||||||
|
|
||||||
|
handle_path /admin* {
|
||||||
|
root * /opt/headscale-admin
|
||||||
|
encode gzip zstd
|
||||||
|
|
||||||
|
# Correct MIME types for JS/WASM
|
||||||
|
header {
|
||||||
|
@js_files path *.js
|
||||||
|
@wasm_files path *.wasm
|
||||||
|
|
||||||
|
Content-Type @js_files application/javascript
|
||||||
|
Content-Type @wasm_files application/wasm
|
||||||
|
|
||||||
|
X-Content-Type-Options nosniff
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fallback for SPA routing
|
||||||
|
try_files {path} {path}/ index.html
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
caddy fmt --overwrite /etc/caddy/Caddyfile
|
||||||
|
systemctl start caddy
|
||||||
|
msg_ok "Configured headscale-admin"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
systemctl enable -q --now headscale
|
systemctl enable -q --now headscale
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
msg_ok "Service started"
|
||||||
msg_ok "Installed ${APPLICATION} v${RELEASE}"
|
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm headscale_${RELEASE}_linux_amd64.deb
|
|
||||||
$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"
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ $STD apt-get install --no-install-recommends -y \
|
|||||||
mesa-vulkan-drivers \
|
mesa-vulkan-drivers \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
tini \
|
tini \
|
||||||
|
libaom-dev \
|
||||||
zlib1g
|
zlib1g
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
libgdk-pixbuf-2.0-dev librsvg2-dev libtool
|
libgdk-pixbuf-2.0-dev librsvg2-dev libtool
|
||||||
@@ -153,7 +154,6 @@ if [[ -f ~/.openvino ]]; then
|
|||||||
fi
|
fi
|
||||||
msg_ok "Packages from Testing Repo Installed"
|
msg_ok "Packages from Testing Repo Installed"
|
||||||
|
|
||||||
# Fix default DB collation issue after libc update
|
|
||||||
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
|
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
|
||||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
|
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ $STD cmake --preset=release-noplugins \
|
|||||||
-DWITH_LIBSHARPYUV=ON \
|
-DWITH_LIBSHARPYUV=ON \
|
||||||
-DWITH_LIBDE265=ON \
|
-DWITH_LIBDE265=ON \
|
||||||
-DWITH_AOM_DECODER=OFF \
|
-DWITH_AOM_DECODER=OFF \
|
||||||
-DWITH_AOM_ENCODER=OFF \
|
-DWITH_AOM_ENCODER=ON \
|
||||||
-DWITH_X265=OFF \
|
-DWITH_X265=OFF \
|
||||||
-DWITH_EXAMPLES=OFF \
|
-DWITH_EXAMPLES=OFF \
|
||||||
..
|
..
|
||||||
@@ -254,7 +254,8 @@ $STD make clean
|
|||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
|
|
||||||
SOURCE=$SOURCE_DIR/libvips
|
SOURCE=$SOURCE_DIR/libvips
|
||||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
||||||
|
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
|
||||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBVIPS_REVISION"
|
$STD git reset --hard "$LIBVIPS_REVISION"
|
||||||
@@ -282,7 +283,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
|
|||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
|
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.135.3" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (more patience please)"
|
msg_info "Installing ${APPLICATION} (more patience please)"
|
||||||
|
|
||||||
@@ -301,6 +302,10 @@ cd "$SRC_DIR"
|
|||||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
||||||
cp -a web/build "$APP_DIR"/www
|
cp -a web/build "$APP_DIR"/www
|
||||||
cp LICENSE "$APP_DIR"
|
cp LICENSE "$APP_DIR"
|
||||||
|
cd "$APP_DIR"
|
||||||
|
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||||
|
$STD npm install sharp
|
||||||
|
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
||||||
msg_ok "Installed Immich Web Components"
|
msg_ok "Installed Immich Web Components"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
@@ -331,8 +336,6 @@ ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
|
|||||||
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
|
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
|
||||||
|
|
||||||
msg_info "Installing Immich CLI"
|
msg_info "Installing Immich CLI"
|
||||||
$STD npm install --build-from-source sharp
|
|
||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
|
||||||
$STD npm i -g @immich/cli
|
$STD npm i -g @immich/cli
|
||||||
msg_ok "Installed Immich CLI"
|
msg_ok "Installed Immich CLI"
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ $STD apt-get install -y \
|
|||||||
chromium/stable \
|
chromium/stable \
|
||||||
chromium-common/stable \
|
chromium-common/stable \
|
||||||
graphicsmagick \
|
graphicsmagick \
|
||||||
ghostscript
|
ghostscript \
|
||||||
|
jq
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Additional Tools"
|
msg_info "Installing Additional Tools"
|
||||||
@@ -48,18 +49,14 @@ sed -i \
|
|||||||
/etc/meilisearch.toml
|
/etc/meilisearch.toml
|
||||||
msg_ok "Installed Meilisearch"
|
msg_ok "Installed Meilisearch"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
|
||||||
$STD npm install -g corepack@0.31.0
|
cd /opt/karakeep
|
||||||
|
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
|
||||||
|
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing karakeep"
|
msg_info "Installing karakeep"
|
||||||
cd /opt
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
|
||||||
$STD unzip "v${RELEASE}.zip"
|
|
||||||
mv karakeep-"${RELEASE}" /opt/karakeep
|
|
||||||
cd /opt/karakeep
|
|
||||||
corepack enable
|
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
|
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
export NEXT_TELEMETRY_DISABLED=1
|
||||||
export CI="true"
|
export CI="true"
|
||||||
cd /opt/karakeep/apps/web
|
cd /opt/karakeep/apps/web
|
||||||
@@ -70,21 +67,20 @@ $STD pnpm install --frozen-lockfile
|
|||||||
cd /opt/karakeep/apps/cli
|
cd /opt/karakeep/apps/cli
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
cd /opt/karakeep/apps/mcp
|
$STD pnpm store prune
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm build
|
|
||||||
|
|
||||||
export DATA_DIR=/opt/karakeep_data
|
export DATA_DIR=/opt/karakeep_data
|
||||||
karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24)
|
karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24)
|
||||||
mkdir -p /etc/karakeep
|
mkdir -p /etc/karakeep
|
||||||
cat <<EOF >/etc/karakeep/karakeep.env
|
cat <<EOF >/etc/karakeep/karakeep.env
|
||||||
SERVER_VERSION=$RELEASE
|
SERVER_VERSION="$(cat ~/.karakeep)"
|
||||||
NEXTAUTH_SECRET="$karakeep_SECRET"
|
NEXTAUTH_SECRET="$karakeep_SECRET"
|
||||||
NEXTAUTH_URL="http://localhost:3000"
|
NEXTAUTH_URL="http://localhost:3000"
|
||||||
DATA_DIR="$DATA_DIR"
|
DATA_DIR="$DATA_DIR"
|
||||||
MEILI_ADDR="http://127.0.0.1:7700"
|
MEILI_ADDR="http://127.0.0.1:7700"
|
||||||
MEILI_MASTER_KEY="$MASTER_KEY"
|
MEILI_MASTER_KEY="$MASTER_KEY"
|
||||||
BROWSER_WEB_URL="http://127.0.0.1:9222"
|
BROWSER_WEB_URL="http://127.0.0.1:9222"
|
||||||
|
DB_WAL_MODE=true
|
||||||
|
|
||||||
# If you're planning to use OpenAI for tagging. Uncomment the following line:
|
# If you're planning to use OpenAI for tagging. Uncomment the following line:
|
||||||
# OPENAI_API_KEY="<API_KEY>"
|
# OPENAI_API_KEY="<API_KEY>"
|
||||||
@@ -112,7 +108,6 @@ BROWSER_WEB_URL="http://127.0.0.1:9222"
|
|||||||
# CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE="50"
|
# CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE="50"
|
||||||
# CRAWLER_ENABLE_ADBLOCKER=true
|
# CRAWLER_ENABLE_ADBLOCKER=true
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Installed karakeep"
|
msg_ok "Installed karakeep"
|
||||||
|
|
||||||
msg_info "Running Database Migration"
|
msg_info "Running Database Migration"
|
||||||
@@ -190,7 +185,6 @@ customize
|
|||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /tmp/meilisearch.deb
|
rm -rf /tmp/meilisearch.deb
|
||||||
rm -f /opt/v"${RELEASE}".zip
|
|
||||||
$STD apt-get autoremove -y
|
$STD apt-get autoremove -y
|
||||||
$STD apt-get autoclean -y
|
$STD apt-get autoclean -y
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
48
install/linkstack-install.sh
Normal file
48
install/linkstack-install.sh
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Omar Minaya | MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://linkstack.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
|
||||||
|
fetch_and_deploy_gh_release "linkstack" "linkstackorg/linkstack" "prebuild" "latest" "/var/www/html/linkstack" "linkstack.zip"
|
||||||
|
|
||||||
|
msg_info "Configuring LinkStack"
|
||||||
|
$STD a2enmod rewrite
|
||||||
|
chown -R www-data:www-data /var/www/html/linkstack
|
||||||
|
chmod -R 755 /var/www/html/linkstack
|
||||||
|
|
||||||
|
cat <<EOF >/etc/apache2/sites-available/linkstack.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerAdmin webmaster@localhost
|
||||||
|
DocumentRoot /var/www/html/linkstack
|
||||||
|
ErrorLog /var/log/apache2/linkstack-error.log
|
||||||
|
CustomLog /var/log/apache2/linkstack-access.log combined
|
||||||
|
<Directory /var/www/html/linkstack/>
|
||||||
|
Options Indexes FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
$STD a2dissite 000-default.conf
|
||||||
|
$STD a2ensite linkstack.conf
|
||||||
|
$STD systemctl restart apache2
|
||||||
|
msg_ok "Configured LinkStack"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
148
install/mealie-install.sh
Normal file
148
install/mealie-install.sh
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
#!/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://mealie.io
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
libpq-dev \
|
||||||
|
libwebp-dev \
|
||||||
|
libsasl2-dev \
|
||||||
|
libldap2-dev \
|
||||||
|
libssl-dev
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
POSTGRES_VERSION="16" setup_postgresql
|
||||||
|
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
||||||
|
|
||||||
|
msg_info "Setup Database"
|
||||||
|
DB_NAME=mealie_db
|
||||||
|
DB_USER=mealie__user
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER 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'"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||||
|
{
|
||||||
|
echo "Mealie-Credentials"
|
||||||
|
echo "Mealie Database User: $DB_USER"
|
||||||
|
echo "Mealie Database Password: $DB_PASS"
|
||||||
|
echo "Mealie Database Name: $DB_NAME"
|
||||||
|
} >>~/mealie.creds
|
||||||
|
msg_ok "Set up Database"
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
export NUXT_TELEMETRY_DISABLED=1
|
||||||
|
cd /opt/mealie/frontend
|
||||||
|
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
|
||||||
|
$STD yarn generate
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
msg_info "Copying Built Frontend into Backend Package"
|
||||||
|
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
|
||||||
|
msg_ok "Copied Frontend"
|
||||||
|
|
||||||
|
msg_info "Preparing Backend (Poetry)"
|
||||||
|
$STD uv venv /opt/mealie/.venv
|
||||||
|
$STD /opt/mealie/.venv/bin/python -m ensurepip --upgrade
|
||||||
|
$STD /opt/mealie/.venv/bin/python -m pip install --upgrade pip
|
||||||
|
$STD /opt/mealie/.venv/bin/pip install uv
|
||||||
|
cd /opt/mealie
|
||||||
|
$STD /opt/mealie/.venv/bin/uv pip install poetry==2.0.1
|
||||||
|
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
|
||||||
|
msg_ok "Prepared Poetry"
|
||||||
|
|
||||||
|
msg_info "Writing Environment File"
|
||||||
|
cat <<EOF >/opt/mealie/mealie.env
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=9000
|
||||||
|
DB_ENGINE=postgres
|
||||||
|
POSTGRES_SERVER=localhost
|
||||||
|
POSTGRES_PORT=5432
|
||||||
|
POSTGRES_USER=${DB_USER}
|
||||||
|
POSTGRES_PASSWORD=${DB_PASS}
|
||||||
|
POSTGRES_DB=${DB_NAME}
|
||||||
|
NLTK_DATA=/nltk_data
|
||||||
|
PRODUCTION=true
|
||||||
|
STATIC_FILES=/opt/mealie/frontend/dist
|
||||||
|
EOF
|
||||||
|
msg_ok "Wrote Environment File"
|
||||||
|
|
||||||
|
msg_info "Creating Start Script"
|
||||||
|
cat <<'EOF' >/opt/mealie/start.sh
|
||||||
|
#!/bin/bash
|
||||||
|
set -a
|
||||||
|
source /opt/mealie/mealie.env
|
||||||
|
set +a
|
||||||
|
exec /opt/mealie/.venv/bin/mealie
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/mealie/start.sh
|
||||||
|
msg_ok "Created Start Script"
|
||||||
|
|
||||||
|
msg_info "Building Mealie Backend Wheel"
|
||||||
|
cd /opt/mealie
|
||||||
|
$STD /opt/mealie/.venv/bin/poetry build --output dist
|
||||||
|
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
|
||||||
|
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
|
||||||
|
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
|
||||||
|
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
|
||||||
|
echo " \\" >>dist/requirements.txt
|
||||||
|
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
|
||||||
|
msg_ok "Built Wheel + Requirements"
|
||||||
|
|
||||||
|
msg_info "Installing Mealie via uv"
|
||||||
|
cd /opt/mealie
|
||||||
|
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
|
||||||
|
msg_ok "Installed Mealie"
|
||||||
|
|
||||||
|
msg_info "Downloading NLTK Data"
|
||||||
|
mkdir -p /nltk_data/
|
||||||
|
$STD /opt/mealie/.venv/bin/python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
|
||||||
|
msg_ok "Downloaded NLTK Data"
|
||||||
|
|
||||||
|
msg_info "Set Symbolic Links for Mealie"
|
||||||
|
ln -sf /opt/mealie/.venv/bin/mealie /usr/local/bin/mealie
|
||||||
|
ln -sf /opt/mealie/.venv/bin/poetry /usr/local/bin/poetry
|
||||||
|
msg_ok "Set Symbolic Links"
|
||||||
|
|
||||||
|
msg_info "Creating Systemd Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/mealie.service
|
||||||
|
[Unit]
|
||||||
|
Description=Mealie Backend Server
|
||||||
|
After=network.target postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/mealie
|
||||||
|
ExecStart=/opt/mealie/start.sh
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now mealie
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -15,7 +15,7 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Mosquitto MQTT Broker"
|
msg_info "Installing Mosquitto MQTT Broker"
|
||||||
source /etc/os-release
|
source /etc/os-release
|
||||||
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key
|
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg >/usr/share/keyrings/mosquitto-repo.gpg.key
|
||||||
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
|
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
|
||||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
|
|||||||
@@ -32,9 +32,8 @@ $STD apt-get install -y \
|
|||||||
python3-cffi \
|
python3-cffi \
|
||||||
python3-certbot \
|
python3-certbot \
|
||||||
python3-certbot-dns-cloudflare
|
python3-certbot-dns-cloudflare
|
||||||
$STD pip3 install certbot-dns-multi
|
$STD pip3 install --break-system-packages certbot-dns-multi
|
||||||
$STD python3 -m venv /opt/certbot/
|
$STD python3 -m venv /opt/certbot/
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
|
||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||||
@@ -85,8 +84,6 @@ else
|
|||||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
|
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
|
||||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
|
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
|
||||||
fi
|
fi
|
||||||
sed -i 's|"fork-me": ".*"|"fork-me": "Proxmox VE Helper-Scripts"|' frontend/js/i18n/messages.json
|
|
||||||
sed -i "s|https://github.com.*source=nginx-proxy-manager|https://helper-scripts.com|g" frontend/js/app/ui/footer/main.ejs
|
|
||||||
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
|
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
|
||||||
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
|
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
|
||||||
for NGINX_CONF in $NGINX_CONFS; do
|
for NGINX_CONF in $NGINX_CONFS; do
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ ENV=prod
|
|||||||
ENABLE_OLLAMA_API=false
|
ENABLE_OLLAMA_API=false
|
||||||
OLLAMA_BASE_URL=http://0.0.0.0:11434
|
OLLAMA_BASE_URL=http://0.0.0.0:11434
|
||||||
EOF
|
EOF
|
||||||
$STD npm install
|
$STD npm install --force
|
||||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Installed Open WebUI"
|
msg_ok "Installed Open WebUI"
|
||||||
|
|||||||
@@ -14,22 +14,17 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Installing NUT"
|
msg_info "Installing NUT"
|
||||||
$STD apt-get install -y nut-client
|
$STD apt-get install -y nut-client
|
||||||
msg_ok "Installed NUT"
|
msg_ok "Installed NUT"
|
||||||
|
|
||||||
msg_info "Installing Peanut"
|
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||||
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
|
|
||||||
mkdir -p /opt/peanut
|
msg_info "Setup Peanut"
|
||||||
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
|
|
||||||
rm peanut.tar.gz
|
|
||||||
cd /opt/peanut
|
cd /opt/peanut
|
||||||
$STD npm install -g pnpm
|
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
$STD pnpm run build
|
$STD pnpm run build:local
|
||||||
cp -r .next/static .next/standalone/.next/
|
cp -r .next/static .next/standalone/.next/
|
||||||
mkdir -p /opt/peanut/.next/standalone/config
|
mkdir -p /opt/peanut/.next/standalone/config
|
||||||
mkdir -p /etc/peanut/
|
mkdir -p /etc/peanut/
|
||||||
@@ -40,7 +35,7 @@ NUT_HOST: 0.0.0.0
|
|||||||
NUT_PORT: 3493
|
NUT_PORT: 3493
|
||||||
EOF
|
EOF
|
||||||
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
||||||
msg_ok "Installed Peanut"
|
msg_ok "Setup Peanut"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/peanut.service
|
cat <<EOF >/etc/systemd/system/peanut.service
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://rxresu.me
|
# Source: https://rxresume.org
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
@@ -32,19 +32,16 @@ $STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_
|
|||||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||||
msg_ok "Set up Database"
|
msg_ok "Set up Database"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION}"
|
msg_info "Installing $APPLICATION"
|
||||||
MINIO_PASS=$(openssl rand -base64 48)
|
MINIO_PASS=$(openssl rand -base64 48)
|
||||||
ACCESS_TOKEN=$(openssl rand -base64 48)
|
ACCESS_TOKEN=$(openssl rand -base64 48)
|
||||||
REFRESH_TOKEN=$(openssl rand -base64 48)
|
REFRESH_TOKEN=$(openssl rand -base64 48)
|
||||||
CHROME_TOKEN=$(openssl rand -hex 32)
|
CHROME_TOKEN=$(openssl rand -hex 32)
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip
|
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
|
||||||
$STD unzip v${RELEASE}.zip
|
cd /opt/"$APPLICATION"
|
||||||
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
|
|
||||||
cd /opt/${APPLICATION}
|
|
||||||
corepack enable
|
|
||||||
export CI="true"
|
export CI="true"
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||||
export NODE_ENV="production"
|
export NODE_ENV="production"
|
||||||
@@ -53,13 +50,13 @@ $STD pnpm install --frozen-lockfile
|
|||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
$STD pnpm install --prod --frozen-lockfile
|
$STD pnpm install --prod --frozen-lockfile
|
||||||
$STD pnpm run prisma:generate
|
$STD pnpm run prisma:generate
|
||||||
msg_ok "Installed ${APPLICATION}"
|
msg_ok "Installed $APPLICATION"
|
||||||
|
|
||||||
msg_info "Installing Browserless (Patience)"
|
msg_info "Installing Browserless (Patience)"
|
||||||
cd /tmp
|
cd /tmp
|
||||||
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -o v${TAG}.zip
|
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o v"$TAG".zip
|
||||||
$STD unzip v${TAG}.zip
|
$STD unzip v"$TAG".zip
|
||||||
mv browserless-${TAG} /opt/browserless
|
mv browserless-"$TAG" /opt/browserless
|
||||||
cd /opt/browserless
|
cd /opt/browserless
|
||||||
$STD npm install
|
$STD npm install
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
||||||
@@ -77,9 +74,10 @@ MINIO_ROOT_PASSWORD="${MINIO_PASS}"
|
|||||||
MINIO_VOLUMES=/opt/minio
|
MINIO_VOLUMES=/opt/minio
|
||||||
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
|
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
|
||||||
EOF
|
EOF
|
||||||
cat <<EOF >/opt/${APPLICATION}/.env
|
cat <<EOF >/opt/"$APPLICATION"/.env
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
||||||
PUBLIC_URL=http://${LOCAL_IP}:3000
|
PUBLIC_URL=http://${LOCAL_IP}:3000
|
||||||
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
||||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public
|
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public
|
||||||
@@ -116,14 +114,13 @@ HOST=localhost
|
|||||||
PORT=8080
|
PORT=8080
|
||||||
TOKEN=${CHROME_TOKEN}
|
TOKEN=${CHROME_TOKEN}
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
{
|
{
|
||||||
echo "${APPLICATION} Credentials"
|
echo "${APPLICATION} Credentials"
|
||||||
echo "Database User: $DB_USER"
|
echo "Database User: $DB_USER"
|
||||||
echo "Database Password: $DB_PASS"
|
echo "Database Password: $DB_PASS"
|
||||||
echo "Database Name: $DB_NAME"
|
echo "Database Name: $DB_NAME"
|
||||||
echo "Minio Root Password: ${MINIO_PASS}"
|
echo "Minio Root Password: ${MINIO_PASS}"
|
||||||
} >>~/${APPLICATION}.creds
|
} >>~/"$APPLICATION".creds
|
||||||
msg_ok "Configured applications"
|
msg_ok "Configured applications"
|
||||||
|
|
||||||
msg_info "Creating Services"
|
msg_info "Creating Services"
|
||||||
@@ -136,7 +133,7 @@ WorkingDirectory=/usr/local/bin
|
|||||||
EnvironmentFile=/opt/minio/.env
|
EnvironmentFile=/opt/minio/.env
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
|
cat <<EOF >/etc/systemd/system/"$APPLICATION".service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=${APPLICATION} Service
|
Description=${APPLICATION} Service
|
||||||
After=network.target postgresql.service minio.service
|
After=network.target postgresql.service minio.service
|
||||||
@@ -167,15 +164,14 @@ Restart=unless-stopped
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable -q --now minio.service ${APPLICATION}.service browserless.service
|
systemctl enable -q --now minio.service "$APPLICATION".service browserless.service
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f /tmp/v${RELEASE}.zip
|
rm -f /tmp/v"$TAG".zip
|
||||||
rm -f /tmp/v${TAG}.zip
|
|
||||||
rm -f /tmp/minio.deb
|
rm -f /tmp/minio.deb
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
|
|||||||
44
install/salt-install.sh
Normal file
44
install/salt-install.sh
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/saltstack/salt
|
||||||
|
|
||||||
|
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 jq
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Salt Repo"
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
|
||||||
|
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
|
||||||
|
$STD apt-get update
|
||||||
|
msg_ok "Setup Salt Repo"
|
||||||
|
|
||||||
|
msg_info "Installing Salt"
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||||
|
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
|
||||||
|
Package: salt-*
|
||||||
|
Pin: version ${RELEASE}
|
||||||
|
Pin-Priority: 1001
|
||||||
|
EOF
|
||||||
|
$STD apt-get install -y salt-master
|
||||||
|
echo "${RELEASE}" >/~.salt
|
||||||
|
msg_ok "Installed Salt"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -18,7 +18,7 @@ $STD apt-get install -y \
|
|||||||
composer \
|
composer \
|
||||||
git \
|
git \
|
||||||
nginx \
|
nginx \
|
||||||
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
|
php8.2-{bcmath,common,ctype,ldap,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|||||||
56
install/teamspeak-server-install.sh
Normal file
56
install/teamspeak-server-install.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: tremor021 (Slaviša Arežina)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://teamspeak.com/en/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
|
||||||
|
|
||||||
|
msg_info "Setting up Teamspeak Server"
|
||||||
|
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
|
||||||
|
tar -xf ./ts3server.tar.bz2
|
||||||
|
mv teamspeak3-server_linux_amd64/ /opt/teamspeak-server/
|
||||||
|
touch /opt/teamspeak-server/.ts3server_license_accepted
|
||||||
|
echo "${RELEASE}" >~/.teamspeak-server
|
||||||
|
msg_ok "Setup Teamspeak Server"
|
||||||
|
|
||||||
|
msg_info "Creating service"
|
||||||
|
cat <<EOF >/etc/systemd/system/teamspeak-server.service
|
||||||
|
[Unit]
|
||||||
|
Description=TeamSpeak3 Server
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/teamspeak-server
|
||||||
|
User=root
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/opt/teamspeak-server/ts3server_startscript.sh start
|
||||||
|
ExecStop=/opt/teamspeak-server/ts3server_startscript.sh stop
|
||||||
|
ExecReload=/opt/teamspeak-server/ts3server_startscript.sh restart
|
||||||
|
Restart=always
|
||||||
|
RestartSec=15
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now teamspeak-server
|
||||||
|
msg_ok "Created service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f ~/ts3server.tar.bz*
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -20,6 +20,8 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
|
fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
|
||||||
|
mv /root/.threadfin /root/.threadfin_version
|
||||||
|
mkdir -p /root/.threadfin
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/threadfin.service
|
cat <<EOF >/etc/systemd/system/threadfin.service
|
||||||
|
|||||||
@@ -13,15 +13,13 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
|
||||||
|
|
||||||
msg_info "Setup VictoriaMetrics"
|
msg_info "Setup VictoriaMetrics"
|
||||||
temp_dir=$(mktemp -d)
|
|
||||||
cd $temp_dir
|
|
||||||
mkdir -p /opt/victoriametrics/data
|
mkdir -p /opt/victoriametrics/data
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o "victoria-metrics-linux-amd64-v${RELEASE}.tar.gz"
|
|
||||||
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o "vmutils-linux-amd64-v${RELEASE}.tar.gz"
|
|
||||||
tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
|
|
||||||
tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
|
|
||||||
chmod +x /opt/victoriametrics/*
|
chmod +x /opt/victoriametrics/*
|
||||||
msg_ok "Setup VictoriaMetrics"
|
msg_ok "Setup VictoriaMetrics"
|
||||||
|
|
||||||
@@ -37,10 +35,26 @@ User=root
|
|||||||
WorkingDirectory=/opt/victoriametrics
|
WorkingDirectory=/opt/victoriametrics
|
||||||
ExecStart=/opt/victoriametrics/victoria-metrics-prod --storageDataPath="/opt/victoriametrics/data"
|
ExecStart=/opt/victoriametrics/victoria-metrics-prod --storageDataPath="/opt/victoriametrics/data"
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/victoriametrics-logs.service
|
||||||
|
[Unit]
|
||||||
|
Description=VictoriaMetrics Service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Restart=always
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/victoriametrics
|
||||||
|
ExecStart=/opt/victoriametrics/victoria-logs-prod
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now victoriametrics
|
systemctl enable -q --now victoriametrics
|
||||||
|
systemctl enable -q --now victoriametrics-logs
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cat <<EOF >/opt/wallos.cron
|
|||||||
*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1
|
*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1
|
||||||
*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1
|
*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1
|
||||||
0 */6 * * * php /opt/wallos/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1
|
0 */6 * * * php /opt/wallos/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1
|
||||||
|
30 1 * * 1 php /opt/wallos/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1
|
||||||
EOF
|
EOF
|
||||||
crontab /opt/wallos.cron
|
crontab /opt/wallos.cron
|
||||||
msg_ok "Crontabs setup"
|
msg_ok "Crontabs setup"
|
||||||
|
|||||||
138
misc/build.func
138
misc/build.func
@@ -192,7 +192,6 @@ base_settings() {
|
|||||||
GATE=""
|
GATE=""
|
||||||
APT_CACHER=""
|
APT_CACHER=""
|
||||||
APT_CACHER_IP=""
|
APT_CACHER_IP=""
|
||||||
#DISABLEIP6="no"
|
|
||||||
MTU=""
|
MTU=""
|
||||||
SD=""
|
SD=""
|
||||||
NS=""
|
NS=""
|
||||||
@@ -236,25 +235,30 @@ CT_TYPE="${CT_TYPE}"
|
|||||||
DISK_SIZE="${DISK_SIZE}"
|
DISK_SIZE="${DISK_SIZE}"
|
||||||
CORE_COUNT="${CORE_COUNT}"
|
CORE_COUNT="${CORE_COUNT}"
|
||||||
RAM_SIZE="${RAM_SIZE}"
|
RAM_SIZE="${RAM_SIZE}"
|
||||||
|
VERBOSE="${VERBOSE}"
|
||||||
|
PW="${PW##-password }"
|
||||||
|
#CT_ID=$NEXTID
|
||||||
HN="${HN}"
|
HN="${HN}"
|
||||||
BRG="${BRG}"
|
BRG="${BRG}"
|
||||||
|
NET="${NET}"
|
||||||
|
IPV6_METHOD="${IPV6_METHOD:-none}"
|
||||||
|
# Set this only if using "IPV6_METHOD=static"
|
||||||
|
#IPV6STATIC="fd00::1234/64"
|
||||||
|
|
||||||
|
GATE="${GATE:-none}"
|
||||||
APT_CACHER_IP="${APT_CACHER_IP:-none}"
|
APT_CACHER_IP="${APT_CACHER_IP:-none}"
|
||||||
DISABLEIP6=""
|
MTU="${MTU:-1500}"
|
||||||
PW='${PW:-none}'
|
SD="${SD:-none}"
|
||||||
|
NS="${NS:-none}"
|
||||||
|
MAC="${MAC:-none}"
|
||||||
|
VLAN="${VLAN:-none}"
|
||||||
SSH="${SSH}"
|
SSH="${SSH}"
|
||||||
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
|
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
|
||||||
VERBOSE="${VERBOSE}"
|
|
||||||
TAGS="${TAGS:-none}"
|
TAGS="${TAGS:-none}"
|
||||||
VLAN="${VLAN:-none}"
|
ENABLE_FUSE="$ENABLE_FUSE"
|
||||||
MTU="${MTU:-1500}"
|
ENABLE_TUN="$ENABLE_TUN"
|
||||||
GATE="${GATE:-none}"
|
|
||||||
SD="${SD:-none}"
|
|
||||||
MAC="${MAC:-none}"
|
|
||||||
NS="${NS:-none}"
|
|
||||||
NET="${NET}"
|
|
||||||
FUSE="${ENABLE_FUSE}"
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
|
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
|
||||||
else
|
else
|
||||||
echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
|
echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
|
||||||
@@ -268,24 +272,29 @@ CT_TYPE="${CT_TYPE}"
|
|||||||
DISK_SIZE="${DISK_SIZE}"
|
DISK_SIZE="${DISK_SIZE}"
|
||||||
CORE_COUNT="${CORE_COUNT}"
|
CORE_COUNT="${CORE_COUNT}"
|
||||||
RAM_SIZE="${RAM_SIZE}"
|
RAM_SIZE="${RAM_SIZE}"
|
||||||
|
VERBOSE="${VERBOSE}"
|
||||||
|
PW="${PW##-password }"
|
||||||
|
#CT_ID=$NEXTID
|
||||||
HN="${HN}"
|
HN="${HN}"
|
||||||
BRG="${BRG}"
|
BRG="${BRG}"
|
||||||
|
NET="${NET}"
|
||||||
|
IPV6_METHOD="${IPV6_METHOD:-none}"
|
||||||
|
|
||||||
|
# Set this only if using "IPV6_METHOD=static"
|
||||||
|
#IPV6STATIC="fd00::1234/64"
|
||||||
|
|
||||||
|
GATE="${GATE:-none}"
|
||||||
APT_CACHER_IP="${APT_CACHER_IP:-none}"
|
APT_CACHER_IP="${APT_CACHER_IP:-none}"
|
||||||
DISABLEIP6=""
|
MTU="${MTU:-1500}"
|
||||||
PW='${PW:-none}'
|
SD="${SD:-none}"
|
||||||
|
NS="${NS:-none}"
|
||||||
|
MAC="${MAC:-none}"
|
||||||
|
VLAN="${VLAN:-none}"
|
||||||
SSH="${SSH}"
|
SSH="${SSH}"
|
||||||
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
|
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
|
||||||
VERBOSE="${VERBOSE}"
|
|
||||||
TAGS="${TAGS:-none}"
|
TAGS="${TAGS:-none}"
|
||||||
VLAN="${VLAN:-none}"
|
ENABLE_FUSE="$ENABLE_FUSE"
|
||||||
MTU="${MTU:-1500}"
|
ENABLE_TUN="$ENABLE_TUN"
|
||||||
GATE="${GATE:-none}"
|
|
||||||
SD="${SD:-none}"
|
|
||||||
MAC="${MAC:-none}"
|
|
||||||
NS="${NS:-none}"
|
|
||||||
NET="${NET}"
|
|
||||||
FUSE="${ENABLE_FUSE}"
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
|
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
|
||||||
else
|
else
|
||||||
@@ -667,13 +676,6 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "IPv6" --yesno "Disable IPv6?" 10 58); then
|
|
||||||
# DISABLEIP6="yes"
|
|
||||||
# else
|
|
||||||
# DISABLEIP6="no"
|
|
||||||
# fi
|
|
||||||
# echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
|
|
||||||
|
|
||||||
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$MTU1" ]; then
|
if [ -z "$MTU1" ]; then
|
||||||
MTU1="Default"
|
MTU1="Default"
|
||||||
@@ -815,7 +817,6 @@ DIAGNOSTICS=yes
|
|||||||
#"ram_size"
|
#"ram_size"
|
||||||
#"os_type"
|
#"os_type"
|
||||||
#"os_version"
|
#"os_version"
|
||||||
#"disableip6"
|
|
||||||
#"nsapp"
|
#"nsapp"
|
||||||
#"method"
|
#"method"
|
||||||
#"pve_version"
|
#"pve_version"
|
||||||
@@ -842,7 +843,6 @@ DIAGNOSTICS=no
|
|||||||
#"ram_size"
|
#"ram_size"
|
||||||
#"os_type"
|
#"os_type"
|
||||||
#"os_version"
|
#"os_version"
|
||||||
#"disableip6"
|
|
||||||
#"nsapp"
|
#"nsapp"
|
||||||
#"method"
|
#"method"
|
||||||
#"pve_version"
|
#"pve_version"
|
||||||
@@ -875,20 +875,24 @@ install_script() {
|
|||||||
header_info
|
header_info
|
||||||
while true; do
|
while true; do
|
||||||
|
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \
|
TMP_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||||
18 60 6 \
|
--title "SETTINGS" \
|
||||||
|
--menu "Choose an option:" 20 60 6 \
|
||||||
"1" "Default Settings" \
|
"1" "Default Settings" \
|
||||||
"2" "Default Settings (with verbose)" \
|
"2" "Default Settings (with verbose)" \
|
||||||
"3" "Advanced Settings" \
|
"3" "Advanced Settings" \
|
||||||
"4" "Use Config File" \
|
"4" "Use Config File" \
|
||||||
"5" "Diagnostic Settings" \
|
"5" "Diagnostic Settings" \
|
||||||
"6" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3)
|
"6" "Exit" \
|
||||||
|
--default-item "1" 3>&1 1>&2 2>&3) || true
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ -z "$TMP_CHOICE" ]; then
|
||||||
echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}"
|
echo -e "\n${CROSS}${RD}Menu canceled. Exiting script.${CL}\n"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
CHOICE="$TMP_CHOICE"
|
||||||
|
|
||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
header_info
|
header_info
|
||||||
@@ -943,11 +947,11 @@ install_script() {
|
|||||||
|
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
echo -e "${CROSS}${RD}Exiting.${CL}"
|
echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e "${CROSS}${RD}Invalid option, please try again.${CL}"
|
echo -e "\n${CROSS}${RD}Invalid option, please try again.${CL}\n"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -1064,7 +1068,6 @@ build_container() {
|
|||||||
export CACHER="$APT_CACHER"
|
export CACHER="$APT_CACHER"
|
||||||
export CACHER_IP="$APT_CACHER_IP"
|
export CACHER_IP="$APT_CACHER_IP"
|
||||||
export tz="$timezone"
|
export tz="$timezone"
|
||||||
#export DISABLEIPV6="$DISABLEIP6"
|
|
||||||
export APPLICATION="$APP"
|
export APPLICATION="$APP"
|
||||||
export app="$NSAPP"
|
export app="$NSAPP"
|
||||||
export PASSWORD="$PW"
|
export PASSWORD="$PW"
|
||||||
@@ -1198,7 +1201,52 @@ EOF
|
|||||||
# This starts the container and executes <app>-install.sh
|
# This starts the container and executes <app>-install.sh
|
||||||
msg_info "Starting LXC Container"
|
msg_info "Starting LXC Container"
|
||||||
pct start "$CTID"
|
pct start "$CTID"
|
||||||
msg_ok "Started LXC Container"
|
|
||||||
|
# wait for status 'running'
|
||||||
|
for i in {1..10}; do
|
||||||
|
if pct status "$CTID" | grep -q "status: running"; then
|
||||||
|
msg_ok "Started LXC Container"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
if [ "$i" -eq 10 ]; then
|
||||||
|
msg_error "LXC Container did not reach running state"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$var_os" != "alpine" ]; then
|
||||||
|
msg_info "Waiting for network in LXC container"
|
||||||
|
for i in {1..10}; do
|
||||||
|
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
|
||||||
|
msg_ok "Network in LXC is reachable"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if [ "$i" -lt 10 ]; then
|
||||||
|
msg_warn "No network yet in LXC (try $i/10) – waiting..."
|
||||||
|
sleep 3
|
||||||
|
else
|
||||||
|
msg_error "No network in LXC after waiting."
|
||||||
|
read -r -p "Set fallback DNS (1.1.1.1/8.8.8.8)? [y/N]: " choice
|
||||||
|
case "$choice" in
|
||||||
|
[yY]*)
|
||||||
|
pct set "$CTID" --nameserver 1.1.1.1
|
||||||
|
pct set "$CTID" --nameserver 8.8.8.8
|
||||||
|
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
|
||||||
|
msg_ok "Network reachable after DNS fallback"
|
||||||
|
else
|
||||||
|
msg_error "Still no network/DNS in LXC! Aborting customization."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
msg_error "Aborted by user – no DNS fallback set."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Customizing LXC Container"
|
msg_info "Customizing LXC Container"
|
||||||
: "${tz:=Etc/UTC}"
|
: "${tz:=Etc/UTC}"
|
||||||
@@ -1208,7 +1256,7 @@ EOF
|
|||||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
||||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
||||||
EOF'
|
EOF'
|
||||||
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses >/dev/null"
|
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq >/dev/null"
|
||||||
else
|
else
|
||||||
sleep 3
|
sleep 3
|
||||||
pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen"
|
pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen"
|
||||||
@@ -1226,7 +1274,7 @@ EOF'
|
|||||||
msg_warn "Skipping timezone setup – zone '$tz' not found in container"
|
msg_warn "Skipping timezone setup – zone '$tz' not found in container"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null"
|
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 jq >/dev/null"
|
||||||
fi
|
fi
|
||||||
msg_ok "Customized LXC Container"
|
msg_ok "Customized LXC Container"
|
||||||
|
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ config_file() {
|
|||||||
if [ "$NET" == "dhcp" ]; then
|
if [ "$NET" == "dhcp" ]; then
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
|
||||||
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
|
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
|
||||||
|
GATE=""
|
||||||
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
|
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
|
||||||
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
|
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
|
||||||
if [ ! -z "$GATE" ]; then
|
if [ ! -z "$GATE" ]; then
|
||||||
@@ -446,6 +447,22 @@ config_file() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$IPV6_METHOD" == "static" ]]; then
|
||||||
|
if [[ -n "$IPV6STATIC" ]]; then
|
||||||
|
IP6=",ip6=${IPV6STATIC}"
|
||||||
|
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}${IPV6STATIC}${CL}"
|
||||||
|
else
|
||||||
|
msg_error "IPV6_METHOD is set to static but IPV6STATIC is empty"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
elif [[ "$IPV6_METHOD" == "auto" ]]; then
|
||||||
|
IP6=",ip6=auto"
|
||||||
|
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}auto${CL}"
|
||||||
|
else
|
||||||
|
IP6=""
|
||||||
|
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}none${CL}"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -n "${SD-}" ]]; then
|
if [[ -n "${SD-}" ]]; then
|
||||||
if [[ "$SD" == "none" ]]; then
|
if [[ "$SD" == "none" ]]; then
|
||||||
SD=""
|
SD=""
|
||||||
@@ -622,6 +639,24 @@ config_file() {
|
|||||||
echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}"
|
echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$ENABLE_TUN" ]]; then
|
||||||
|
if [[ "$ENABLE_TUN" == "yes" ]]; then
|
||||||
|
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}Yes${CL}"
|
||||||
|
elif [[ "$ENABLE_TUN" == "no" ]]; then
|
||||||
|
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}No${CL}"
|
||||||
|
else
|
||||||
|
msg_error "Enable TUN needs to be 'yes' or 'no', was ${ENABLE_TUN}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "TUN" --yesno "Enable TUN?" 10 58); then
|
||||||
|
ENABLE_TUN="yes"
|
||||||
|
else
|
||||||
|
ENABLE_TUN="no"
|
||||||
|
fi
|
||||||
|
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}$ENABLE_TUN${CL}"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -n "${VERBOSE-}" ]]; then
|
if [[ -n "${VERBOSE-}" ]]; then
|
||||||
if [[ "$VERBOSE" == "yes" ]]; then
|
if [[ "$VERBOSE" == "yes" ]]; then
|
||||||
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"
|
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"
|
||||||
|
|||||||
@@ -396,9 +396,10 @@ function setup_php() {
|
|||||||
COMBINED_MODULES="${DEFAULT_MODULES}"
|
COMBINED_MODULES="${DEFAULT_MODULES}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Deduplicate modules
|
# Deduplicate
|
||||||
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
|
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
|
||||||
|
|
||||||
|
# Get current PHP-CLI version
|
||||||
local CURRENT_PHP=""
|
local CURRENT_PHP=""
|
||||||
if command -v php >/dev/null 2>&1; then
|
if command -v php >/dev/null 2>&1; then
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
@@ -420,53 +421,44 @@ function setup_php() {
|
|||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Build module list
|
||||||
local MODULE_LIST="php${PHP_VERSION}"
|
local MODULE_LIST="php${PHP_VERSION}"
|
||||||
for pkg in $MODULE_LIST; do
|
|
||||||
if ! apt-cache show "$pkg" >/dev/null 2>&1; then
|
|
||||||
msg_error "Package not found: $pkg"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
|
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
|
||||||
for mod in "${MODULES[@]}"; do
|
for mod in "${MODULES[@]}"; do
|
||||||
MODULE_LIST+=" php${PHP_VERSION}-${mod}"
|
if apt-cache show "php${PHP_VERSION}-${mod}" >/dev/null 2>&1; then
|
||||||
|
MODULE_LIST+=" php${PHP_VERSION}-${mod}"
|
||||||
|
else
|
||||||
|
msg_warn "PHP-Module ${mod} for PHP ${PHP_VERSION} not found – skipping"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ "$PHP_FPM" == "YES" ]]; then
|
if [[ "$PHP_FPM" == "YES" ]]; then
|
||||||
MODULE_LIST+=" php${PHP_VERSION}-fpm"
|
MODULE_LIST+=" php${PHP_VERSION}-fpm"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# install apache2 with PHP support if requested
|
||||||
if [[ "$PHP_APACHE" == "YES" ]]; then
|
if [[ "$PHP_APACHE" == "YES" ]]; then
|
||||||
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
|
if ! dpkg -l | grep -q "libapache2-mod-php${PHP_VERSION}"; then
|
||||||
$STD systemctl restart apache2 || true
|
msg_info "Installing Apache with PHP${PHP_VERSION} support"
|
||||||
fi
|
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
|
||||||
|
else
|
||||||
if [[ "$PHP_APACHE" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
|
msg_info "Apache with PHP${PHP_VERSION} already installed – skipping install"
|
||||||
if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then
|
|
||||||
$STD a2dismod php${CURRENT_PHP} || true
|
|
||||||
fi
|
fi
|
||||||
$STD a2enmod php${PHP_VERSION}
|
|
||||||
$STD systemctl restart apache2 || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$PHP_FPM" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
|
|
||||||
$STD systemctl stop php${CURRENT_PHP}-fpm || true
|
|
||||||
$STD systemctl disable php${CURRENT_PHP}-fpm || true
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# setup / update PHP modules
|
||||||
$STD apt-get install -y $MODULE_LIST
|
$STD apt-get install -y $MODULE_LIST
|
||||||
msg_ok "Setup PHP $PHP_VERSION"
|
msg_ok "Setup PHP $PHP_VERSION"
|
||||||
|
|
||||||
if [[ "$PHP_FPM" == "YES" ]]; then
|
# optional stop old PHP-FPM service
|
||||||
$STD systemctl enable php${PHP_VERSION}-fpm
|
if [[ "$PHP_FPM" == "YES" && -n "$CURRENT_PHP" && "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
|
||||||
$STD systemctl restart php${PHP_VERSION}-fpm
|
$STD systemctl stop php"${CURRENT_PHP}"-fpm || true
|
||||||
|
$STD systemctl disable php"${CURRENT_PHP}"-fpm || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Patch all relevant php.ini files
|
# Patch all relevant php.ini files
|
||||||
local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini")
|
local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini")
|
||||||
[[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini")
|
[[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini")
|
||||||
[[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini")
|
[[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini")
|
||||||
|
|
||||||
for ini in "${PHP_INI_PATHS[@]}"; do
|
for ini in "${PHP_INI_PATHS[@]}"; do
|
||||||
if [[ -f "$ini" ]]; then
|
if [[ -f "$ini" ]]; then
|
||||||
$STD msg_info "Patching $ini"
|
$STD msg_info "Patching $ini"
|
||||||
@@ -477,8 +469,29 @@ function setup_php() {
|
|||||||
$STD msg_ok "Patched $ini"
|
$STD msg_ok "Patched $ini"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
|
||||||
|
|
||||||
|
# patch Apache configuration if needed
|
||||||
|
if [[ "$PHP_APACHE" == "YES" ]]; then
|
||||||
|
for mod in $(ls /etc/apache2/mods-enabled/ 2>/dev/null | grep -E '^php[0-9]\.[0-9]\.conf$' | sed 's/\.conf//'); do
|
||||||
|
if [[ "$mod" != "php${PHP_VERSION}" ]]; then
|
||||||
|
$STD a2dismod "$mod" || true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
$STD a2enmod mpm_prefork
|
||||||
|
$STD a2enmod "php${PHP_VERSION}"
|
||||||
|
$STD systemctl restart apache2 || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# enable and restart PHP-FPM if requested
|
||||||
|
if [[ "$PHP_FPM" == "YES" ]]; then
|
||||||
|
if systemctl list-unit-files | grep -q "php${PHP_VERSION}-fpm.service"; then
|
||||||
|
$STD systemctl enable php${PHP_VERSION}-fpm
|
||||||
|
$STD systemctl restart php${PHP_VERSION}-fpm
|
||||||
|
else
|
||||||
|
msg_warn "FPM requested but service php${PHP_VERSION}-fpm not found"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Installs or updates Composer globally.
|
# Installs or updates Composer globally.
|
||||||
#
|
#
|
||||||
@@ -1772,6 +1785,7 @@ function setup_ffmpeg() {
|
|||||||
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
|
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
|
||||||
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
|
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
|
||||||
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
|
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
|
||||||
|
libva-dev libdrm-dev
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -1808,6 +1822,7 @@ function setup_ffmpeg() {
|
|||||||
|
|
||||||
if [[ "$TYPE" == "full" ]]; then
|
if [[ "$TYPE" == "full" ]]; then
|
||||||
args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
|
args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
|
||||||
|
args+=(--enable-vaapi --enable-libdrm)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${#args[@]} -eq 0 ]]; then
|
if [[ ${#args[@]} -eq 0 ]]; then
|
||||||
|
|||||||
@@ -113,24 +113,22 @@ EOF
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
|
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
|
"yes" " " \
|
||||||
"yes" " " \
|
"no" " " 3>&2 2>&1 1>&3)
|
||||||
"no" " " 3>&2 2>&1 1>&3)
|
case $CHOICE in
|
||||||
case $CHOICE in
|
yes)
|
||||||
yes)
|
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
msg_info "Disabling subscription nag"
|
||||||
msg_info "Disabling subscription nag"
|
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
|
||||||
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
|
msg_ok "Disabled subscription nag (Delete browser cache)"
|
||||||
apt --reinstall install proxmox-widget-toolkit &>/dev/null
|
;;
|
||||||
msg_ok "Disabled subscription nag (Delete browser cache)"
|
no)
|
||||||
;;
|
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
||||||
no)
|
msg_error "Selected no to Disabling subscription nag"
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
;;
|
||||||
msg_error "Selected no to Disabling subscription nag"
|
esac
|
||||||
;;
|
apt --reinstall install proxmox-widget-toolkit &>/dev/null
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
|
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
|
||||||
"yes" " " \
|
"yes" " " \
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user