mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-07-09 15:37:37 +00:00
Compare commits
33 Commits
2025-07-08
...
main
Author | SHA1 | Date | |
---|---|---|---|
6acf854f3e | |||
b565048985 | |||
24eff9dbbd | |||
24be3b43b1 | |||
54d534a5d2 | |||
5bad80e148 | |||
89498f4205 | |||
661a58ae29 | |||
acc500fe9d | |||
0a37d1b004 | |||
8c09216691 | |||
54cd7dd669 | |||
2ff778db9a | |||
5d1f0ab13e | |||
b306a31235 | |||
c8797ba135 | |||
b9ec651a8b | |||
475c666eb0 | |||
8d419616a6 | |||
d087719571 | |||
df52a2d057 | |||
4886196cfa | |||
1f37fbb83e | |||
387f2c7bd1 | |||
0b949c8151 | |||
fd248e072c | |||
e58e50fc15 | |||
5b869b61fc | |||
0e2c793f92 | |||
96a8f9df89 | |||
4f569c67eb | |||
e856b36306 | |||
42e8623f39 |
43
.github/autolabeler-config.json
generated
vendored
43
.github/autolabeler-config.json
generated
vendored
@ -4,6 +4,7 @@
|
||||
"fileStatus": "added",
|
||||
"includeGlobs": [
|
||||
"ct/**",
|
||||
"tools/**",
|
||||
"install/**",
|
||||
"misc/**",
|
||||
"turnkey/**",
|
||||
@ -17,16 +18,13 @@
|
||||
"fileStatus": "modified",
|
||||
"includeGlobs": [
|
||||
"ct/**",
|
||||
"tools/**",
|
||||
"install/**",
|
||||
"misc/**",
|
||||
"turnkey/**",
|
||||
"vm/**"
|
||||
],
|
||||
"excludeGlobs": [
|
||||
"misc/build.func",
|
||||
"misc/install.func",
|
||||
"misc/api.func"
|
||||
]
|
||||
"excludeGlobs": []
|
||||
}
|
||||
],
|
||||
"delete script": [
|
||||
@ -34,6 +32,7 @@
|
||||
"fileStatus": "removed",
|
||||
"includeGlobs": [
|
||||
"ct/**",
|
||||
"tools/**",
|
||||
"install/**",
|
||||
"misc/**",
|
||||
"turnkey/**",
|
||||
@ -46,11 +45,7 @@
|
||||
{
|
||||
"fileStatus": null,
|
||||
"includeGlobs": [
|
||||
"*.md",
|
||||
".github/**",
|
||||
"misc/*.func",
|
||||
"misc/create_lxc.sh",
|
||||
"api/**"
|
||||
"*.md"
|
||||
],
|
||||
"excludeGlobs": []
|
||||
}
|
||||
@ -62,7 +57,9 @@
|
||||
"misc/*.func",
|
||||
"misc/create_lxc.sh"
|
||||
],
|
||||
"excludeGlobs": []
|
||||
"excludeGlobs": [
|
||||
"misc/api.func"
|
||||
]
|
||||
}
|
||||
],
|
||||
"website": [
|
||||
@ -71,7 +68,9 @@
|
||||
"includeGlobs": [
|
||||
"frontend/**"
|
||||
],
|
||||
"excludeGlobs": []
|
||||
"excludeGlobs": [
|
||||
"frontend/public/json/**"
|
||||
]
|
||||
}
|
||||
],
|
||||
"api": [
|
||||
@ -102,26 +101,6 @@
|
||||
"excludeGlobs": []
|
||||
}
|
||||
],
|
||||
"high risk": [
|
||||
{
|
||||
"fileStatus": null,
|
||||
"includeGlobs": [
|
||||
"misc/build.func",
|
||||
"misc/install.func",
|
||||
"misc/create_lxc.sh"
|
||||
],
|
||||
"excludeGlobs": []
|
||||
}
|
||||
],
|
||||
"documentation": [
|
||||
{
|
||||
"fileStatus": null,
|
||||
"includeGlobs": [
|
||||
"*.md"
|
||||
],
|
||||
"excludeGlobs": []
|
||||
}
|
||||
],
|
||||
"addon": [
|
||||
{
|
||||
"fileStatus": null,
|
||||
|
120
.github/changelog-pr-config.json
generated
vendored
120
.github/changelog-pr-config.json
generated
vendored
@ -1,112 +1,148 @@
|
||||
[
|
||||
{
|
||||
"title": "🆕 New Scripts",
|
||||
"labels": ["new script"]
|
||||
"labels": [
|
||||
"new script"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "🚀 Updated Scripts",
|
||||
"labels": ["update script"],
|
||||
"labels": [
|
||||
"update script"
|
||||
],
|
||||
"subCategories": [
|
||||
{
|
||||
"title": "🐞 Bug Fixes",
|
||||
"labels": ["bugfix"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"bugfix"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "✨ New Features",
|
||||
"labels": ["feature"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"feature"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "💥 Breaking Changes",
|
||||
"labels": ["breaking change"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"breaking change"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "🔧 Refactor",
|
||||
"labels": ["refactor"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"refactor"
|
||||
],
|
||||
"notes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "🧰 Maintenance",
|
||||
"labels": ["maintenance"],
|
||||
"labels": [
|
||||
"maintenance"
|
||||
],
|
||||
"subCategories": [
|
||||
{
|
||||
"title": "🐞 Bug Fixes",
|
||||
"labels": ["bugfix"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"bugfix"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "✨ New Features",
|
||||
"labels": ["feature"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"feature"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "💥 Breaking Changes",
|
||||
"labels": ["breaking change"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"breaking change"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "📡 API",
|
||||
"labels": ["api"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"api"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "💾 Core",
|
||||
"labels": ["core"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"core"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "📂 Github",
|
||||
"labels": ["github"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"github"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title" :"📝 Documentation",
|
||||
"labels": ["documentation"],
|
||||
"notes" : []
|
||||
"title": "📝 Documentation",
|
||||
"labels": [
|
||||
"maintenance"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title" :"🔧 Refactor",
|
||||
"labels": ["refactor"],
|
||||
"notes" : []
|
||||
"title": "🔧 Refactor",
|
||||
"labels": [
|
||||
"refactor"
|
||||
],
|
||||
"notes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "🌐 Website",
|
||||
"labels": ["website"],
|
||||
"labels": [
|
||||
"website"
|
||||
],
|
||||
"subCategories": [
|
||||
{
|
||||
"title": "🐞 Bug Fixes",
|
||||
"labels": ["bugfix"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"bugfix"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "✨ New Features",
|
||||
"labels": ["feature"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"feature"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "💥 Breaking Changes",
|
||||
"labels": ["breaking change"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"breaking change"
|
||||
],
|
||||
"notes": []
|
||||
},
|
||||
{
|
||||
"title": "📝 Script Information",
|
||||
"labels": ["json"],
|
||||
"notes" : []
|
||||
"labels": [
|
||||
"json"
|
||||
],
|
||||
"notes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "❔ Unlabelled",
|
||||
"labels": []
|
||||
},
|
||||
{
|
||||
"title": "💥 Breaking Changes",
|
||||
"labels": ["breaking change"]
|
||||
}
|
||||
]
|
||||
|
27
.github/workflows/autolabeler.yml
generated
vendored
27
.github/workflows/autolabeler.yml
generated
vendored
@ -1,6 +1,7 @@
|
||||
name: Auto Label Pull Requests
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request_target:
|
||||
branches: ["main"]
|
||||
types: [opened, synchronize, reopened, edited]
|
||||
@ -33,7 +34,7 @@ jobs:
|
||||
const autolabelerConfig = JSON.parse(fileContent);
|
||||
|
||||
const prNumber = context.payload.pull_request.number;
|
||||
const prBody = context.payload.pull_request.body.toLowerCase();
|
||||
const prBody = context.payload.pull_request.body || "";
|
||||
|
||||
let labelsToAdd = new Set();
|
||||
|
||||
@ -73,19 +74,35 @@ jobs:
|
||||
"✨ **New feature**": "feature",
|
||||
"💥 **Breaking change**": "breaking change",
|
||||
"🆕 **New script**": "new script",
|
||||
"🌍 **Website update**": "website",
|
||||
"🌍 **Website update**": "website", // handled special
|
||||
"🔧 **Refactoring / Code Cleanup**": "refactor",
|
||||
"📝 **Documentation update**": "documentation"
|
||||
"📝 **Documentation update**": "documentation" // mapped to maintenance
|
||||
};
|
||||
|
||||
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
|
||||
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
|
||||
const regex = new RegExp(`- \[(x|X)\]\s*.*${escapedCheckbox}`, "i");
|
||||
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
|
||||
|
||||
if (regex.test(prBody)) {
|
||||
labelsToAdd.add(label);
|
||||
if (label === "website") {
|
||||
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
|
||||
const hasUpdateScript = labelsToAdd.has("update script");
|
||||
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
|
||||
|
||||
if (!(hasUpdateScript && hasContentLabel)) {
|
||||
labelsToAdd.add(hasJson ? "json" : "website");
|
||||
}
|
||||
} else if (label === "documentation") {
|
||||
labelsToAdd.add("maintenance");
|
||||
} else {
|
||||
labelsToAdd.add(label);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (labelsToAdd.size === 0) {
|
||||
labelsToAdd.add("needs triage");
|
||||
}
|
||||
|
||||
if (labelsToAdd.size > 0) {
|
||||
await github.rest.issues.addLabels({
|
||||
|
2
.github/workflows/changelog-pr.yml
generated
vendored
2
.github/workflows/changelog-pr.yml
generated
vendored
@ -80,7 +80,7 @@ jobs:
|
||||
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
|
||||
{ title: "📡 API", labels: ["api"], notes: [] },
|
||||
{ title: "Github", labels: ["github"], notes: [] },
|
||||
{ title: "📝 Documentation", labels: ["documentation"], notes: [] },
|
||||
{ title: "📝 Documentation", labels: ["maintenance"], notes: [] },
|
||||
{ title: "🔧 Refactor", labels: ["refactor"], notes: [] }
|
||||
] :
|
||||
obj.labels.includes("website") ? [
|
||||
|
30
CHANGELOG.md
30
CHANGELOG.md
@ -12,6 +12,36 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
## 2025-07-09
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: Fix VAAPI passthrough for unprivileged LXC containers via devX [@MickLesk](https://github.com/MickLesk) ([#5875](https://github.com/community-scripts/ProxmoxVE/pull/5875))
|
||||
- tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857))
|
||||
- BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874))
|
||||
- Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802))
|
||||
- Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845))
|
||||
- Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876))
|
||||
- Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847))
|
||||
- Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846))
|
||||
- Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840))
|
||||
- Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841))
|
||||
- Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- #### 📂 Github
|
||||
|
||||
- Github: AutoLabler | ChangeLog (Refactor) [@MickLesk](https://github.com/MickLesk) ([#5868](https://github.com/community-scripts/ProxmoxVE/pull/5868))
|
||||
|
||||
## 2025-07-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
@ -38,7 +38,7 @@ function update_script() {
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Cleaning old files"
|
||||
cp babybuddy/settings/production.py /tmp/production.py.bak
|
||||
cp /opt/babybuddy/babybuddy/settings/production.py /tmp/production.py.bak
|
||||
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
|
||||
msg_ok "Cleaned old files"
|
||||
|
||||
@ -46,7 +46,7 @@ function update_script() {
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt/babybuddy
|
||||
mv /tmp/production.py.bak babybuddy/settings/production.py
|
||||
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
|
||||
source .venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD python manage.py migrate
|
||||
|
@ -23,12 +23,13 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/commafeed ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.commafeed 2>/dev/null)" ]] || [[ ! -f ~/.commafeed ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop commafeed
|
||||
msg_ok "Stopped ${APP}"
|
||||
@ -39,13 +40,15 @@ function update_script() {
|
||||
$STD apt-get install -y rsync
|
||||
msg_ok "Installed Dependencies"
|
||||
fi
|
||||
|
||||
if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
|
||||
mv /opt/commafeed/data /opt/data.bak
|
||||
fi
|
||||
fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
|
||||
|
||||
msg_info "Updating ${APP} to ${RELEASE}"
|
||||
curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o $(basename "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip")
|
||||
$STD unzip commafeed-"${RELEASE}"-h2-jvm.zip
|
||||
rsync -a --exclude 'data/' commafeed-"${RELEASE}"-h2/ /opt/commafeed/
|
||||
rm -rf commafeed-"${RELEASE}"-h2 commafeed-"${RELEASE}"-h2-jvm.zip
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then
|
||||
mv /opt/commafeed/data.bak /opt/commafeed/data
|
||||
fi
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
|
@ -28,20 +28,16 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.excalidraw 2>/dev/null)" ]] || [[ ! -f ~/.excalidraw ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop excalidraw
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
cd /tmp
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar xzf $temp_file
|
||||
rm -rf /opt/excalidraw
|
||||
mv excalidraw-${RELEASE} /opt/excalidraw
|
||||
fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
cd /opt/excalidraw
|
||||
$STD yarn
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
@ -50,11 +46,6 @@ function update_script() {
|
||||
systemctl start excalidraw
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf $temp_file
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
echo "${RELEASE}" >/opt/excalidraw_version.txt
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
@ -23,20 +23,23 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Updating $APP LXC"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FlareSolverr/FlareSolverr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.flaresolverr 2>/dev/null)" ]] || [[ ! -f ~/.flaresolverr ]]; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop flaresolverr
|
||||
curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o $(basename "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz")
|
||||
tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
|
||||
rm flaresolverr_linux_x64.tar.gz
|
||||
msg_ok "Stopped service"
|
||||
|
||||
rm -rf /opt/flaresolverr
|
||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start flaresolverr
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP LXC"
|
||||
msg_ok "Started service"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
@ -20,51 +20,43 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/fluid-calendar ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop fluid-calendar.service
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
cp /opt/fluid-calendar/.env /opt/fluid.env
|
||||
rm -rf /opt/fluid-calendar
|
||||
tmp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file"
|
||||
$STD unzip $tmp_file
|
||||
mv ${APP}-${RELEASE}/ /opt/fluid-calendar
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
cd /opt/fluid-calendar
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start fluid-calendar.service
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf $tmp_file
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
if [[ ! -d /opt/fluid-calendar ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.fluid-calendar 2>/dev/null)" ]] || [[ ! -f ~/.fluid-calendar ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop fluid-calendar
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
cp /opt/fluid-calendar/.env /opt/fluid.env
|
||||
rm -rf /opt/fluid-calendar
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
mv /opt/fluid.env /opt/fluid-calendar/.env
|
||||
cd /opt/fluid-calendar
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start fluid-calendar
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
16
ct/gatus.sh
16
ct/gatus.sh
@ -29,35 +29,29 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.gatus 2>/dev/null)" ]] || [[ ! -f ~/.gatus ]]; then
|
||||
msg_info "Updating $APP"
|
||||
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop gatus
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
mv /opt/gatus/config/config.yaml /opt
|
||||
rm -rf /opt/gatus/*
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||
rm -rf /opt/gatus
|
||||
fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
cd /opt/gatus
|
||||
$STD go mod tidy
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||
setcap CAP_NET_RAW+ep gatus
|
||||
mv /opt/config.yaml config
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start gatus
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
45
ct/gitea.sh
45
ct/gitea.sh
@ -20,24 +20,33 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /usr/local/bin/gitea ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
FILENAME="gitea-$RELEASE-linux-amd64"
|
||||
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $FILENAME
|
||||
systemctl stop gitea
|
||||
rm -rf /usr/local/bin/gitea
|
||||
mv $FILENAME /usr/local/bin/gitea
|
||||
chmod +x /usr/local/bin/gitea
|
||||
systemctl start gitea
|
||||
msg_ok "Updated $APP Successfully"
|
||||
exit
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /usr/local/bin/gitea ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.gitea 2>/dev/null)" ]] || [[ ! -f ~/.gitea ]]; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop gitea
|
||||
msg_ok "Service stopped"
|
||||
|
||||
rm -rf /usr/local/bin/gitea
|
||||
fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64"
|
||||
chmod +x /usr/local/bin/gitea
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start gitea
|
||||
msg_ok "Started service"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
15
ct/glance.sh
15
ct/glance.sh
@ -28,28 +28,19 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/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 [[ "${RELEASE}" != "$(cat ~/.glance 2>/dev/null)" ]] || [[ ! -f ~/.glance ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop glance
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o $(basename "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz")
|
||||
rm -rf /opt/glance/glance
|
||||
tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
|
||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
rm -f /opt/glance/glance
|
||||
fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start glance
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/glance-linux-amd64.tar.gz
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||
|
4
frontend/public/json/emqx.json
generated
4
frontend/public/json/emqx.json
generated
@ -35,10 +35,6 @@
|
||||
{
|
||||
"text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
110
frontend/public/json/versions.json
generated
110
frontend/public/json/versions.json
generated
@ -1,4 +1,54 @@
|
||||
[
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.102.0",
|
||||
"date": "2025-07-07T15:32:29Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.70.3",
|
||||
"date": "2025-07-09T10:02:39Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-ui@15.6.3",
|
||||
"date": "2025-07-09T09:28:42Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "342",
|
||||
"date": "2025-07-09T08:48:21Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.6.3",
|
||||
"date": "2025-07-03T01:07:26Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2135",
|
||||
"date": "2025-07-09T05:58:50Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "NginxProxyManager/nginx-proxy-manager",
|
||||
"version": "v2.14.5",
|
||||
"date": "2025-07-09T04:41:02Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.11.1",
|
||||
"date": "2025-04-29T01:14:35Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.4.1",
|
||||
"date": "2025-06-11T07:53:44Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.37.0.5076",
|
||||
@ -14,11 +64,6 @@
|
||||
"version": "v0.35.0",
|
||||
"date": "2025-05-21T18:00:32Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.4.1",
|
||||
"date": "2025-06-11T07:53:44Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v3.40.1",
|
||||
@ -34,16 +79,16 @@
|
||||
"version": "v1.0.2",
|
||||
"date": "2025-07-08T19:14:31Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.3.0",
|
||||
"date": "2025-07-02T12:26:44Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.20.0",
|
||||
"date": "2025-07-08T16:27:11Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "create-fumadocs-app@15.6.2",
|
||||
"date": "2025-07-08T14:26:05Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.518",
|
||||
@ -64,11 +109,6 @@
|
||||
"version": "v2.38.2",
|
||||
"date": "2025-07-08T09:35:14Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2132",
|
||||
"date": "2025-07-08T05:52:22Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p7",
|
||||
@ -84,11 +124,6 @@
|
||||
"version": "r8.0.12-rc0",
|
||||
"date": "2025-07-07T23:35:35Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.3.0",
|
||||
"date": "2025-07-02T12:26:44Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.0.122-2.1.0.122_canary_2025-07-07",
|
||||
@ -109,11 +144,6 @@
|
||||
"version": "pmm-6401-v1.121.0",
|
||||
"date": "2025-07-07T16:16:13Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.100.0",
|
||||
"date": "2025-06-23T12:48:35Z"
|
||||
},
|
||||
{
|
||||
"name": "photoprism/photoprism",
|
||||
"version": "250707-d28b3101e",
|
||||
@ -154,11 +184,6 @@
|
||||
"version": "v1.5.2",
|
||||
"date": "2025-05-11T16:40:55Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.2.20",
|
||||
@ -304,21 +329,11 @@
|
||||
"version": "v3.2.1",
|
||||
"date": "2025-07-03T16:09:19Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "310.5",
|
||||
"date": "2025-07-03T14:05:25Z"
|
||||
},
|
||||
{
|
||||
"name": "Dolibarr/dolibarr",
|
||||
"version": "18.0.7",
|
||||
"date": "2025-07-03T08:57:21Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.6.3",
|
||||
"date": "2025-07-03T01:07:26Z"
|
||||
},
|
||||
{
|
||||
"name": "actualbudget/actual",
|
||||
"version": "v25.7.1",
|
||||
@ -404,11 +419,6 @@
|
||||
"version": "v0.15.0-rc3",
|
||||
"date": "2025-07-01T04:09:37Z"
|
||||
},
|
||||
{
|
||||
"name": "NginxProxyManager/nginx-proxy-manager",
|
||||
"version": "v2.12.4",
|
||||
"date": "2025-07-01T01:45:42Z"
|
||||
},
|
||||
{
|
||||
"name": "MagicMirrorOrg/MagicMirror",
|
||||
"version": "v2.32.0",
|
||||
@ -459,11 +469,6 @@
|
||||
"version": "version/2025.6.3",
|
||||
"date": "2025-06-27T14:01:06Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.70.2",
|
||||
"date": "2025-06-27T13:21:17Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.1",
|
||||
@ -974,11 +979,6 @@
|
||||
"version": "6.8.1",
|
||||
"date": "2025-04-30T16:44:16Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.11.1",
|
||||
"date": "2025-04-29T01:14:35Z"
|
||||
},
|
||||
{
|
||||
"name": "deluge-torrent/deluge",
|
||||
"version": "deluge-2.2.0",
|
||||
|
@ -17,22 +17,8 @@ msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y rsync
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Azul Zulu"
|
||||
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc"
|
||||
curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o "zulu-repo_1.0.0-3_all.deb"
|
||||
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
|
||||
$STD apt-get update
|
||||
$STD apt-get -y install zulu17-jdk
|
||||
msg_ok "Installed Azul Zulu"
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
msg_info "Installing CommaFeed ${RELEASE}"
|
||||
mkdir /opt/commafeed
|
||||
curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o "commafeed-${RELEASE}-h2-jvm.zip"
|
||||
$STD unzip commafeed-${RELEASE}-h2-jvm.zip
|
||||
mv commafeed-${RELEASE}-h2/* /opt/commafeed/
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed CommaFeed ${RELEASE}"
|
||||
JAVA_VERSION="17" setup_java
|
||||
fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/commafeed.service
|
||||
@ -55,7 +41,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf commafeed-${RELEASE}-h2 commafeed-${RELEASE}-h2-jvm.zip zulu-repo_1.0.0-3_all.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -13,16 +13,23 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt-get install -y \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
lsb-release
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Installing EMQX"
|
||||
$STD bash <(curl -fsSL https://packagecloud.io/install/repositories/emqx/emqx/script.deb.sh)
|
||||
curl -fsSL https://packagecloud.io/emqx/emqx/gpgkey | gpg --dearmor -o /usr/share/keyrings/emqx-archive-keyring.gpg
|
||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/emqx-archive-keyring.gpg] https://packagecloud.io/emqx/emqx/debian/ bookworm main" >/etc/apt/sources.list.d/emqx.list
|
||||
$STD apt-get install -y emqx
|
||||
$STD systemctl enable --now emqx
|
||||
msg_ok "Installed EMQX"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
apt-get autoremove >/dev/null
|
||||
apt-get autoclean >/dev/null
|
||||
$STD apt-get autoremove
|
||||
$STD apt-get autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -14,21 +14,15 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
xdg-utils
|
||||
$STD apt-get install -y xdg-utils
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw"
|
||||
|
||||
msg_info "Setup Excalidraw"
|
||||
temp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar xzf $temp_file
|
||||
mv excalidraw-${RELEASE} /opt/excalidraw
|
||||
msg_info "Configuring Excalidraw"
|
||||
cd /opt/excalidraw
|
||||
$STD yarn
|
||||
echo "${RELEASE}" >/opt/excalidraw_version.txt
|
||||
msg_ok "Setup Excalidraw"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@ -53,7 +47,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f $temp_file
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -15,8 +15,9 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y apt-transport-https
|
||||
$STD apt-get install -y xvfb
|
||||
$STD apt-get install -y \
|
||||
apt-transport-https \
|
||||
xvfb
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Chrome"
|
||||
@ -26,13 +27,7 @@ $STD apt update
|
||||
$STD apt install -y google-chrome-stable
|
||||
msg_ok "Installed Chrome"
|
||||
|
||||
msg_info "Installing FlareSolverr"
|
||||
RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4)
|
||||
$STD curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o "flaresolverr_linux_x64.tar.gz"
|
||||
$STD tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
|
||||
$STD rm flaresolverr_linux_x64.tar.gz
|
||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
||||
msg_ok "Installed FlareSolverr"
|
||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/flaresolverr.service
|
||||
|
@ -14,17 +14,11 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
zip \
|
||||
postgresql-common
|
||||
$STD apt-get install -y zip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Additional Dependencies"
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
echo "YES" | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh &>/dev/null
|
||||
$STD apt-get install -y postgresql-17 nodejs
|
||||
msg_ok "Installed Additional Dependencies"
|
||||
PG_VERSION="17" setup_postgresql
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
|
||||
msg_info "Setting up Postgresql Database"
|
||||
DB_NAME="fluiddb"
|
||||
@ -44,14 +38,9 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||
} >>~/$APPLICATION.creds
|
||||
msg_ok "Set up Postgresql Database"
|
||||
|
||||
msg_info "Setup ${APPLICATION}"
|
||||
tmp_file=$(mktemp)
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file"
|
||||
$STD unzip $tmp_file
|
||||
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"
|
||||
|
||||
msg_info "Configuring ${APPLICATION}"
|
||||
cat <<EOF >/opt/fluid-calendar/.env
|
||||
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
||||
|
||||
@ -72,7 +61,7 @@ $STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Setup ${APPLICATION}"
|
||||
msg_ok "Configuring ${APPLICATION}"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/fluid-calendar.service
|
||||
@ -95,7 +84,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f $tmp_file
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -13,13 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
apache2 \
|
||||
php-{curl,dom,json,ctype,pgsql,gmp,mbstring,iconv,zip} \
|
||||
libapache2-mod-php
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.2" PHP_MODULE="dom,json,ctype,pgsql,gmp,iconv" PHP_APACHE="YES" setup_php
|
||||
PG_VERSION="16" setup_postgresql
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
@ -36,17 +30,14 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
|
||||
} >>~/freshrss.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Installing FreshRSS"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}.zip"
|
||||
$STD unzip "${RELEASE}.zip"
|
||||
mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss
|
||||
fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS"
|
||||
|
||||
msg_info "Configuring FreshRSS"
|
||||
cd /opt/freshrss
|
||||
chown -R www-data:www-data /opt/freshrss
|
||||
chmod -R g+rX /opt/freshrss
|
||||
chmod -R g+w /opt/freshrss/data/
|
||||
msg_ok "Installed FreshRSS"
|
||||
msg_ok "Configured FreshRSS"
|
||||
|
||||
msg_info "Setting up cron job for feed refresh"
|
||||
cat <<EOF >/etc/cron.d/freshrss-actualize
|
||||
@ -83,7 +74,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf "/opt/${RELEASE}.zip"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -20,20 +20,15 @@ $STD apt-get install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_go
|
||||
fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
|
||||
|
||||
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
msg_info "Setting up gatus v${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
mkdir -p /opt/gatus
|
||||
curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
|
||||
msg_info "Configuring gatus"
|
||||
cd /opt/gatus
|
||||
$STD go mod tidy
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
|
||||
setcap CAP_NET_RAW+ep gatus
|
||||
mv config.yaml config
|
||||
echo "${RELEASE}" >/opt/gatus_version.txt
|
||||
msg_ok "Done setting up gatus"
|
||||
msg_ok "Configured gatus"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/gatus.service
|
||||
@ -58,10 +53,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
@ -19,10 +19,9 @@ $STD apt-get install -y git
|
||||
$STD apt-get install -y sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Gitea"
|
||||
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
|
||||
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o "gitea-$RELEASE-linux-amd64"
|
||||
mv gitea* /usr/local/bin/gitea
|
||||
fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64"
|
||||
|
||||
msg_info "Configuring Gitea"
|
||||
chmod +x /usr/local/bin/gitea
|
||||
adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea >/dev/null
|
||||
mkdir -p /var/lib/gitea/{custom,data,log}
|
||||
@ -31,7 +30,7 @@ chmod -R 750 /var/lib/gitea/
|
||||
chown root:gitea /etc/gitea
|
||||
chmod 770 /etc/gitea
|
||||
sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh
|
||||
msg_ok "Installed Gitea"
|
||||
msg_ok "Configured Gitea"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/gitea.service
|
||||
|
@ -13,12 +13,9 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Glance"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o "glance-linux-amd64.tar.gz"
|
||||
mkdir -p /opt/glance
|
||||
tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
|
||||
fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz"
|
||||
|
||||
msg_info "Configuring Glance"
|
||||
cat <<EOF >/opt/glance/glance.yml
|
||||
pages:
|
||||
- name: Startpage
|
||||
@ -39,9 +36,7 @@ pages:
|
||||
- title: Helper Scripts
|
||||
url: https://github.com/community-scripts/ProxmoxVE
|
||||
EOF
|
||||
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Glance"
|
||||
msg_ok "Configured Glance"
|
||||
|
||||
msg_info "Creating Service"
|
||||
service_path="/etc/systemd/system/glance.service"
|
||||
@ -67,7 +62,6 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/glance-linux-amd64.tar.gz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -1142,64 +1142,48 @@ EOF
|
||||
|
||||
echo ""
|
||||
msg_custom "⚙️ " "\e[96m" "Configuring VAAPI passthrough for LXC container"
|
||||
|
||||
if [ "$CT_TYPE" != "0" ]; then
|
||||
msg_custom "⚠️ " "\e[33m" "Container is unprivileged – VAAPI passthrough may not work without additional host configuration (e.g., idmap)."
|
||||
fi
|
||||
|
||||
msg_custom "ℹ️ " "\e[96m" "VAAPI enables GPU hardware acceleration (e.g., for video transcoding in Jellyfin or Plex)."
|
||||
|
||||
echo ""
|
||||
read -rp "➤ Automatically mount all available VAAPI devices? [Y/n]: " VAAPI_ALL
|
||||
|
||||
if [[ "$VAAPI_ALL" =~ ^[Yy]$|^$ ]]; then
|
||||
# Mount all devices automatically
|
||||
if [[ -e /dev/dri/renderD128 ]]; then
|
||||
echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG"
|
||||
echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG"
|
||||
fi
|
||||
if [[ -e /dev/dri/card0 ]]; then
|
||||
echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG"
|
||||
|
||||
echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG"
|
||||
fi
|
||||
if [[ -e /dev/fb0 ]]; then
|
||||
echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG"
|
||||
echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG"
|
||||
fi
|
||||
if [[ -d /dev/dri ]]; then
|
||||
echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG"
|
||||
fi
|
||||
else
|
||||
# Manual selection per device
|
||||
if [[ -e /dev/dri/renderD128 ]]; then
|
||||
read -rp "➤ Mount /dev/dri/renderD128 (GPU rendering)? [y/N]: " MOUNT_D128
|
||||
if [[ "$MOUNT_D128" =~ ^[Yy]$ ]]; then
|
||||
if [ "$CT_TYPE" == "0" ]; then
|
||||
# PRV Container → alles zulässig
|
||||
[[ -e /dev/dri/renderD128 ]] && {
|
||||
echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG"
|
||||
echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -e /dev/dri/card0 ]]; then
|
||||
read -rp "➤ Mount /dev/dri/card0 (GPU hardware interface)? [y/N]: " MOUNT_CARD0
|
||||
if [[ "$MOUNT_CARD0" =~ ^[Yy]$ ]]; then
|
||||
}
|
||||
[[ -e /dev/dri/card0 ]] && {
|
||||
echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG"
|
||||
echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG"
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -e /dev/fb0 ]]; then
|
||||
read -rp "➤ Mount /dev/fb0 (Framebuffer, GUI)? [y/N]: " MOUNT_FB0
|
||||
if [[ "$MOUNT_FB0" =~ ^[Yy]$ ]]; then
|
||||
}
|
||||
[[ -e /dev/fb0 ]] && {
|
||||
echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG"
|
||||
echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG"
|
||||
fi
|
||||
}
|
||||
[[ -d /dev/dri ]] && {
|
||||
echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG"
|
||||
}
|
||||
else
|
||||
# UNPRV Container → nur devX für UI
|
||||
[[ -e /dev/dri/card0 ]] && echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG"
|
||||
[[ -e /dev/dri/card1 ]] && echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG"
|
||||
[[ -e /dev/dri/renderD128 ]] && echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -d /dev/dri ]]; then
|
||||
echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG"
|
||||
fi
|
||||
fi
|
||||
if [ "$CT_TYPE" == "1" ] && [ "$is_vaapi_app" == "true" ]; then
|
||||
if [[ -e /dev/dri/card0 ]]; then
|
||||
echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG"
|
||||
elif [[ -e /dev/dri/card1 ]]; then
|
||||
echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG"
|
||||
fi
|
||||
if [[ -e /dev/dri/renderD128 ]]; then
|
||||
echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -355,7 +355,6 @@ msg_custom() {
|
||||
[[ -z "$msg" ]] && return
|
||||
stop_spinner
|
||||
echo -e "${BFR:-} ${symbol} ${color}${msg}${CL:-\e[0m}"
|
||||
printf "\r\033[K\e[?25h\n"
|
||||
}
|
||||
|
||||
run_container_safe() {
|
||||
|
@ -368,25 +368,6 @@ function setup_mysql() {
|
||||
# PHP_MAX_EXECUTION_TIME - (default: 300)
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Installs PHP with selected modules and configures Apache/FPM support.
|
||||
#
|
||||
# Description:
|
||||
# - Adds Sury PHP repo if needed
|
||||
# - Installs default and user-defined modules
|
||||
# - Patches php.ini for CLI, Apache, and FPM as needed
|
||||
#
|
||||
# Variables:
|
||||
# PHP_VERSION - PHP version to install (default: 8.4)
|
||||
# PHP_MODULE - Additional comma-separated modules
|
||||
# PHP_APACHE - Set YES to enable PHP with Apache
|
||||
# PHP_FPM - Set YES to enable PHP-FPM
|
||||
# PHP_MEMORY_LIMIT - (default: 512M)
|
||||
# PHP_UPLOAD_MAX_FILESIZE - (default: 128M)
|
||||
# PHP_POST_MAX_SIZE - (default: 128M)
|
||||
# PHP_MAX_EXECUTION_TIME - (default: 300)
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
function setup_php() {
|
||||
local PHP_VERSION="${PHP_VERSION:-8.4}"
|
||||
local PHP_MODULE="${PHP_MODULE:-}"
|
||||
@ -451,7 +432,7 @@ function setup_php() {
|
||||
MODULE_LIST+=" php${PHP_VERSION}-fpm"
|
||||
fi
|
||||
if [[ "$PHP_APACHE" == "YES" ]]; then
|
||||
$STD apt-get install -y apache2
|
||||
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
|
||||
$STD systemctl restart apache2 || true
|
||||
fi
|
||||
|
||||
@ -459,6 +440,8 @@ function setup_php() {
|
||||
if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then
|
||||
$STD a2dismod php${CURRENT_PHP} || true
|
||||
fi
|
||||
$STD a2enmod php${PHP_VERSION}
|
||||
$STD systemctl restart apache2 || true
|
||||
fi
|
||||
|
||||
if [[ "$PHP_FPM" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
|
||||
@ -915,7 +898,7 @@ function fetch_and_deploy_gh_release() {
|
||||
}
|
||||
}
|
||||
|
||||
### Prebuild Mode ###
|
||||
### Prebuild Mode ###
|
||||
elif [[ "$mode" == "prebuild" ]]; then
|
||||
local pattern="${6%\"}"
|
||||
pattern="${pattern#\"}"
|
||||
@ -934,7 +917,6 @@ function fetch_and_deploy_gh_release() {
|
||||
break
|
||||
;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
[[ -z "$asset_url" ]] && {
|
||||
@ -950,39 +932,42 @@ function fetch_and_deploy_gh_release() {
|
||||
return 1
|
||||
}
|
||||
|
||||
local unpack_tmp
|
||||
unpack_tmp=$(mktemp -d)
|
||||
mkdir -p "$target"
|
||||
|
||||
if [[ "$filename" == *.zip ]]; then
|
||||
if ! command -v unzip &>/dev/null; then
|
||||
$STD apt-get install -y unzip
|
||||
fi
|
||||
|
||||
local top_level_entries
|
||||
top_level_entries=$(unzip -l "$tmpdir/$filename" | awk '{print $4}' | grep -v '^$' | cut -d/ -f1 | sort -u)
|
||||
|
||||
if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then
|
||||
unzip -q "$tmpdir/$filename" -d "$tmpdir/unzip"
|
||||
shopt -s dotglob nullglob
|
||||
cp -r "$tmpdir/unzip/"* "$target/"
|
||||
shopt -u dotglob nullglob
|
||||
else
|
||||
unzip -q "$tmpdir/$filename" -d "$target"
|
||||
fi
|
||||
|
||||
unzip -q "$tmpdir/$filename" -d "$unpack_tmp"
|
||||
elif [[ "$filename" == *.tar.* ]]; then
|
||||
local top_level_entries
|
||||
top_level_entries=$(tar -tf "$tmpdir/$filename" | cut -d/ -f1 | sort -u)
|
||||
|
||||
if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then
|
||||
tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
|
||||
else
|
||||
tar -xf "$tmpdir/$filename" -C "$target"
|
||||
fi
|
||||
tar -xf "$tmpdir/$filename" -C "$unpack_tmp"
|
||||
else
|
||||
msg_error "Unsupported archive format: $filename"
|
||||
rm -rf "$tmpdir"
|
||||
rm -rf "$tmpdir" "$unpack_tmp"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local top_dirs
|
||||
top_dirs=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d | wc -l)
|
||||
|
||||
if [[ "$top_dirs" -eq 1 ]]; then
|
||||
# Strip leading folder
|
||||
local inner_dir
|
||||
inner_dir=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d)
|
||||
shopt -s dotglob nullglob
|
||||
cp -r "$inner_dir"/* "$target/"
|
||||
shopt -u dotglob nullglob
|
||||
else
|
||||
# Copy all contents
|
||||
shopt -s dotglob nullglob
|
||||
cp -r "$unpack_tmp"/* "$target/"
|
||||
shopt -u dotglob nullglob
|
||||
fi
|
||||
|
||||
rm -rf "$unpack_tmp"
|
||||
|
||||
### Singlefile Mode ###
|
||||
elif [[ "$mode" == "singlefile" ]]; then
|
||||
local pattern="${6%\"}"
|
||||
|
Reference in New Issue
Block a user