Merge branch 'main' into lxc-fileflows
This commit is contained in:
commit
44ae4b06ec
88
.github/workflows/delete_new_script.yaml
vendored
Normal file
88
.github/workflows/delete_new_script.yaml
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
name: Delete Files on Issue Close
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [closed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
delete-files:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: contains(github.event.issue.labels.*.name, 'Migration To ProxmoxVE')
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Extract Issue Title (Lowercase & Underscores)
|
||||||
|
id: extract_title
|
||||||
|
run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Check if Files Exist in community-scripts/ProxmoxVE
|
||||||
|
id: check_files
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
REPO="community-scripts/ProxmoxVE"
|
||||||
|
API_URL="https://api.github.com/repos/$REPO/contents"
|
||||||
|
|
||||||
|
FILES=(
|
||||||
|
"ct/${TITLE}.sh"
|
||||||
|
"install/${TITLE}-install.sh"
|
||||||
|
"json/${TITLE}.json"
|
||||||
|
)
|
||||||
|
|
||||||
|
EXISTS=false
|
||||||
|
for FILE in "${FILES[@]}"; do
|
||||||
|
STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $GH_TOKEN" "$API_URL/$FILE")
|
||||||
|
if [ "$STATUS" -eq 200 ]; then
|
||||||
|
EXISTS=true
|
||||||
|
echo "$FILE exists in $REPO"
|
||||||
|
else
|
||||||
|
echo "$FILE does NOT exist in $REPO"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$EXISTS" = false ]; then
|
||||||
|
echo "No matching files found in $REPO. Exiting..."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Commit and Push Changes
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
branch=$(echo "delete-files_${{ github.event.issue.number }}_${TITLE}" | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git checkout -b $branch
|
||||||
|
rm -f ct/${TITLE}.sh
|
||||||
|
rm -f install/${TITLE}-install.sh
|
||||||
|
rm -f json/${TITLE}.json
|
||||||
|
git add .
|
||||||
|
if git diff --staged --quiet; then
|
||||||
|
echo "No files to delete. Exiting..."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git commit -m "Deleted files for issue: ${{ github.event.issue.title }}"
|
||||||
|
git push origin $branch
|
||||||
|
gh pr create --title "Delete Files for ${{ github.event.issue.title }} after Merge to Main" --body "Delete files after merge in main repo." --base main --head $branch
|
||||||
|
|
||||||
|
pr_number=$(gh pr list | grep -m 1 $branch | awk '{print $1}')
|
||||||
|
#gh pr merge $pr_number --squash
|
||||||
|
echo pr_number=$pr_number >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Comment on Issue
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const issue_number = context.payload.issue.number;
|
||||||
|
|
||||||
|
const message = `Files deleted with PR #${process.env.pr_number}`;
|
||||||
|
github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: issue_number,
|
||||||
|
body: message
|
||||||
|
});
|
74
.github/workflows/get-versions-from-newreleases.yaml
vendored
Normal file
74
.github/workflows/get-versions-from-newreleases.yaml
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
name: Crawl Versions from newreleases.io
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
move-to-main-repo:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: community-scripts/ProxmoxVED
|
||||||
|
ref: main
|
||||||
|
|
||||||
|
- name: Crawl from newreleases.io
|
||||||
|
env:
|
||||||
|
token: ${{ secrets.NEWRELEASES_TOKEN }}
|
||||||
|
run: |
|
||||||
|
page=1
|
||||||
|
projects_file="project_json"
|
||||||
|
output_file="json/versions.json"
|
||||||
|
|
||||||
|
echo "[]" > $output_file
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
|
||||||
|
echo "Start loop on page: $page"
|
||||||
|
|
||||||
|
projects=$(curl -s -H "X-Key: $token" "https://api.newreleases.io/v1/projects?page=$page")
|
||||||
|
total_pages=$(echo "$projects" | jq -r '.total_pages')
|
||||||
|
|
||||||
|
if [ -z "$total_pages" ] || [ "$total_pages" -eq 0 ]; then
|
||||||
|
echo "No pages available. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ $page == $total_pages ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$projects" ] || ! echo "$projects" | jq -e '.projects' > /dev/null; then
|
||||||
|
echo "No more projects or invalid response. Exiting."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$projects" > "$projects_file"
|
||||||
|
|
||||||
|
jq -r '.projects[] | "\(.id) \(.name)"' "$projects_file" | while read -r id name; do
|
||||||
|
version=$(curl -s -H "X-Key: $token" "https://api.newreleases.io/v1/projects/$id/latest-release")
|
||||||
|
version_data=$(echo "$version" | jq -r '.version // empty')
|
||||||
|
if [ -n "$version_data" ]; then
|
||||||
|
jq --arg name "$name" --arg version "$version_data" \
|
||||||
|
'. += [{"name": $name, "version": $version}]' "$output_file" > "$output_file.tmp" && mv "$output_file.tmp" "$output_file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
((page++))
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Commit JSON
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git config --global user.name "GitHub Actions[bot]"
|
||||||
|
git checkout -b update_versions || git checkout update_versions
|
||||||
|
git add json/versions.json
|
||||||
|
git commit -m "Update versions.json"
|
||||||
|
git push origin update_versions --force
|
||||||
|
gh pr create --title "[AUTOMATIC PR]Update versions.json" --body "Update versions.json, crawled from newreleases.io" --base main --head update_versions
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -26,8 +26,6 @@
|
|||||||
"--rcfile",
|
"--rcfile",
|
||||||
".vscode/.shellcheckrc"
|
".vscode/.shellcheckrc"
|
||||||
],
|
],
|
||||||
"workbench.colorTheme": "Default Dark+",
|
|
||||||
"workbench.iconTheme": "vscode-icons",
|
|
||||||
"git.autofetch": true,
|
"git.autofetch": true,
|
||||||
"git.confirmSync": false,
|
"git.confirmSync": false,
|
||||||
"git.enableSmartCommit": true,
|
"git.enableSmartCommit": true,
|
||||||
|
65
ct/cryptpad.sh
Normal file
65
ct/cryptpad.sh
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/cryptpad/cryptpad
|
||||||
|
|
||||||
|
APP="CryptPad"
|
||||||
|
var_tags="docs;office"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="8"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d "/opt/cryptpad" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop cryptpad
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
cd /opt/cryptpad
|
||||||
|
$STD git fetch origin --tags
|
||||||
|
$STD git checkout $RELEASE
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run install:components
|
||||||
|
$STD npm run build
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start cryptpad
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
@ -1,78 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://fluidcalendar.com
|
|
||||||
|
|
||||||
APP="fluid-calendar"
|
|
||||||
var_tags="calendar,tasks"
|
|
||||||
var_cpu="3"
|
|
||||||
var_ram="4096"
|
|
||||||
var_disk="7"
|
|
||||||
var_os="debian"
|
|
||||||
var_version="12"
|
|
||||||
var_unprivileged="1"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/fluid-calendar ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE=$(curl -s 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 "Creating Backup"
|
|
||||||
$STD tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/fluid-calendar
|
|
||||||
msg_ok "Backup Created"
|
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
tmp_file=$(mktemp)
|
|
||||||
wget -q "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -O $tmp_file
|
|
||||||
unzip -q $tmp_file
|
|
||||||
cp -rf ${APP}-${RELEASE}/* /opt/fluid-calendar
|
|
||||||
cd /opt/fluid-calendar
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
$STD npm run setup
|
|
||||||
$STD npm run build
|
|
||||||
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
|
|
||||||
rm -rf "/opt/${APP}_backup_$(date +%F).tar.gz"
|
|
||||||
rm -rf /tmp/${APP}-${RELEASE}
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
70
ct/gomft.sh
Normal file
70
ct/gomft.sh
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/StarFleetCPTN/GoMFT
|
||||||
|
|
||||||
|
APP="GoMFT"
|
||||||
|
var_tags="backup"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="8"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d "/opt/gomft" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/StarFleetCPTN/GoMFT/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 gomft
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
rm -f /opt/gomft/gomft
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
wget -q "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
|
||||||
|
tar -xzf $temp_file
|
||||||
|
cp -rf GoMFT-${RELEASE}/* /opt/gomft
|
||||||
|
wget -q "https://github.com/StarFleetCPTN/GoMFT/releases/download/v${RELEASE}/gomft-v${RELEASE}-linux-amd64" -O /opt/gomft/gomft
|
||||||
|
chmod +x /opt/gomft/gomft
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -f $temp_file
|
||||||
|
msg_ok "Cleanup Complete"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start gomft
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
@ -1,41 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
|
||||||
# Source: https://alpinelinux.org/
|
|
||||||
|
|
||||||
APP="NPMplus"
|
|
||||||
var_tags="proxy;nginx"
|
|
||||||
var_cpu="1"
|
|
||||||
var_ram="512"
|
|
||||||
var_disk="3"
|
|
||||||
var_os="alpine"
|
|
||||||
var_version="3.21"
|
|
||||||
var_unprivileged="1"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
|
|
||||||
"1" "Check for Alpine Updates" ON \
|
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
header_info
|
|
||||||
if [ "$UPD" == "1" ]; then
|
|
||||||
apk update && apk upgrade
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:81${CL}"
|
|
@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: dave-yap (dave-yap)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://seafile.com/
|
|
||||||
|
|
||||||
APP="Seafile"
|
|
||||||
var_tags="documents"
|
|
||||||
var_cpu="2"
|
|
||||||
var_ram="2048"
|
|
||||||
var_disk="20"
|
|
||||||
var_os="debian"
|
|
||||||
var_version="12"
|
|
||||||
var_unprivileged="1"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
base_settings
|
|
||||||
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /etc/systemd/system/seafile.service ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_ok "No upgrade path available now."
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
|
82
ct/slskd.sh
Normal file
82
ct/slskd.sh
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/slskd/slskd, https://soularr.net
|
||||||
|
|
||||||
|
APP="slskd"
|
||||||
|
var_tags="arr,p2p"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="512"
|
||||||
|
var_disk="4"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/slskd ]] || [[ ! -d /opt/soularr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Stopping $APP and Soularr"
|
||||||
|
systemctl stop slskd soularr.timer soularr.service
|
||||||
|
msg_ok "Stopped $APP and Soularr"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
wget -q "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -O $tmp_file
|
||||||
|
unzip -q -oj $tmp_file slskd -d /opt/${APP}
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf $tmp_file
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "$APP updated"
|
||||||
|
msg_info "Updating Soularr"
|
||||||
|
cp /opt/soularr/config.ini /opt/soularrconfig.ini
|
||||||
|
cp /opt/soularr/run.sh /opt/soularrscript.sh
|
||||||
|
cd /tmp
|
||||||
|
rm -rf /opt/soularr
|
||||||
|
wget -q https://github.com/mrusse/soularr/archive/refs/heads/main.zip
|
||||||
|
unzip -q main.zip
|
||||||
|
mv soularr-main /opt/soularr
|
||||||
|
cd /opt/soularr
|
||||||
|
$STD pip install -r requirements.txt
|
||||||
|
mv /opt/soularrconfig.ini /opt/soularr/config.ini
|
||||||
|
mv /opt/soularrscript.sh /opt/soularr/run.sh
|
||||||
|
msg_ok "Soularr updated"
|
||||||
|
msg_info "Starting $APP and Soularr"
|
||||||
|
systemctl start slskd soularr.timer
|
||||||
|
msg_ok "Started $APP and Soularr"
|
||||||
|
|
||||||
|
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}:5030${CL}"
|
||||||
|
echo -e "${RAMSIZE}${BL} ${BOLD}Finish configuring Soularr at /opt/soularr/config.ini${CL}"
|
||||||
|
echo -e "${ADVANCED}${DGN} Then start with${CL} ${BOLD}${UL}systemctl start soularr.timer${CL}"
|
1
ct/snipeit.sh
Normal file
1
ct/snipeit.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
@ -6,10 +6,11 @@ import { Metadata } from "@/lib/types";
|
|||||||
console.log('Current directory: ' + process.cwd());
|
console.log('Current directory: ' + process.cwd());
|
||||||
const jsonDir = "../json";
|
const jsonDir = "../json";
|
||||||
const metadataFileName = "metadata.json";
|
const metadataFileName = "metadata.json";
|
||||||
|
const versionsFileName = "versions.json";
|
||||||
const encoding = "utf-8";
|
const encoding = "utf-8";
|
||||||
|
|
||||||
const fileNames = (await fs.readdir(jsonDir))
|
const fileNames = (await fs.readdir(jsonDir))
|
||||||
.filter((fileName) => fileName !== metadataFileName)
|
.filter((fileName) => fileName !== metadataFileName && fileName !== versionsFileName);
|
||||||
|
|
||||||
describe.each(fileNames)("%s", async (fileName) => {
|
describe.each(fileNames)("%s", async (fileName) => {
|
||||||
let script: Script;
|
let script: Script;
|
||||||
@ -20,6 +21,7 @@ describe.each(fileNames)("%s", async (fileName) => {
|
|||||||
script = JSON.parse(fileContent);
|
script = JSON.parse(fileContent);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
it("should have valid json according to script schema", () => {
|
it("should have valid json according to script schema", () => {
|
||||||
ScriptSchema.parse(script);
|
ScriptSchema.parse(script);
|
||||||
});
|
});
|
||||||
@ -40,7 +42,6 @@ describe(`${metadataFileName}`, async () => {
|
|||||||
const fileContent = await fs.readFile(filePath, encoding)
|
const fileContent = await fs.readFile(filePath, encoding)
|
||||||
metadata = JSON.parse(fileContent);
|
metadata = JSON.parse(fileContent);
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should have valid json according to metadata schema", () => {
|
it("should have valid json according to metadata schema", () => {
|
||||||
// TODO: create zod schema for metadata. Move zod schemas to /lib/types.ts
|
// TODO: create zod schema for metadata. Move zod schemas to /lib/types.ts
|
||||||
assert(metadata.categories.length > 0);
|
assert(metadata.categories.length > 0);
|
||||||
|
86
install/cryptpad-install.sh
Normal file
86
install/cryptpad-install.sh
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/cryptpad/cryptpad
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
gnupg \
|
||||||
|
git
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Node.js Repository"
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
|
msg_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
|
msg_info "Setup Node.js"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
msg_ok "Setup Node.js"
|
||||||
|
|
||||||
|
read -p "Do you want to install OnlyOffice components? (Y/N): " onlyoffice
|
||||||
|
|
||||||
|
msg_info "Setup ${APPLICATION}"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
cd /opt
|
||||||
|
$STD git clone https://github.com/cryptpad/cryptpad.git cryptpad
|
||||||
|
cd cryptpad
|
||||||
|
$STD git checkout $RELEASE
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run install:components
|
||||||
|
$STD npm run build
|
||||||
|
cp config/config.example.js config/config.js
|
||||||
|
IP=$(hostname -I | awk '{print $1}')
|
||||||
|
sed -i "51s/localhost/${IP}/g" /opt/cryptpad/config/config.js
|
||||||
|
sed -i "80s#//httpAddress: 'localhost'#httpAddress: '0.0.0.0'#g" /opt/cryptpad/config/config.js
|
||||||
|
if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
|
||||||
|
$STD bash -c "./install-onlyoffice.sh --accept-license"
|
||||||
|
fi
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/cryptpad.service
|
||||||
|
[Unit]
|
||||||
|
Description=CryptPad Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/cryptpad
|
||||||
|
ExecStart=/usr/bin/node server
|
||||||
|
Environment='PWD="/opt/cryptpad"'
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal+console
|
||||||
|
LimitNOFILE=1000000
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now cryptpad
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
@ -1,112 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/dotnetfactory/fluid-calendar
|
|
||||||
|
|
||||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
curl \
|
|
||||||
sudo \
|
|
||||||
mc \
|
|
||||||
zip \
|
|
||||||
gnupg \
|
|
||||||
postgresql-common
|
|
||||||
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"
|
|
||||||
|
|
||||||
msg_info "Setting up Postgresql Database"
|
|
||||||
DB_NAME="fluiddb"
|
|
||||||
DB_USER="fluiduser"
|
|
||||||
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)"
|
|
||||||
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED 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 "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
|
||||||
{
|
|
||||||
echo "${APPLICATION} Credentials"
|
|
||||||
echo "Database User: $DB_USER"
|
|
||||||
echo "Database Password: $DB_PASS"
|
|
||||||
echo "Database Name: $DB_NAME"
|
|
||||||
echo "NextAuth Secret: $NEXTAUTH_SECRET"
|
|
||||||
} >> ~/$APPLICATION.creds
|
|
||||||
msg_ok "Set up Postgresql Database"
|
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
|
||||||
tmp_file=$(mktemp)
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
wget -q "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -O $tmp_file
|
|
||||||
unzip -q $tmp_file
|
|
||||||
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
|
|
||||||
cat <<EOF >/opt/fluid-calendar/.env
|
|
||||||
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
|
|
||||||
|
|
||||||
# For OAuth integration with Google Calendar
|
|
||||||
# See https://console.cloud.google.com
|
|
||||||
GOOGLE_CLIENT_ID=""
|
|
||||||
GOOGLE_CLIENT_SECRET=""
|
|
||||||
|
|
||||||
# Change the URL below to your external URL
|
|
||||||
NEXTAUTH_URL="http://localhost:3000"
|
|
||||||
NEXTAUTH_SECRET="${NEXTAUTH_SECRET}"
|
|
||||||
|
|
||||||
# For optional Outlook Calendar Integration
|
|
||||||
# Create at https://portal.azure.com
|
|
||||||
AZURE_AD_CLIENT_ID=""
|
|
||||||
AZURE_AD_CLIENT_SECRET=""
|
|
||||||
AZURE_AD_TENANT_ID=""
|
|
||||||
|
|
||||||
# Logging configuration
|
|
||||||
# Options: debug, none (check logger.js for more details)
|
|
||||||
LOG_LEVEL="none"
|
|
||||||
DEBUG_ENABLED=0
|
|
||||||
EOF
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
cd /opt/fluid-calendar
|
|
||||||
$STD npm run setup
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/fluid-calendar.service
|
|
||||||
[Unit]
|
|
||||||
Description=Fluid Calendar Application
|
|
||||||
After=network.target postgresql.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Restart=always
|
|
||||||
WorkingDirectory=/opt/fluid-calendar
|
|
||||||
ExecStart=/usr/bin/npm run start
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now fluid-calendar.service
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f $tmp_file
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
103
install/gomft-install.sh
Normal file
103
install/gomft-install.sh
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: tremor021
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/StarFleetCPTN/GoMFT
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
sqlite3 \
|
||||||
|
rclone \
|
||||||
|
tzdata \
|
||||||
|
ca-certificates
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Golang"
|
||||||
|
set +o pipefail
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
|
tar -C /usr/local -xzf "$temp_file"
|
||||||
|
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||||
|
set -o pipefail
|
||||||
|
msg_ok "Setup Golang"
|
||||||
|
|
||||||
|
msg_info "Setup ${APPLICATION}"
|
||||||
|
temp_file2=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file2
|
||||||
|
tar -xzf $temp_file2
|
||||||
|
mv GoMFT-${RELEASE}/ /opt/gomft
|
||||||
|
cd /opt/gomft
|
||||||
|
$STD go install github.com/a-h/templ/cmd/templ@latest
|
||||||
|
wget -q "https://github.com/StarFleetCPTN/GoMFT/releases/download/v${RELEASE}/gomft-v${RELEASE}-linux-amd64" -O gomft
|
||||||
|
$STD $HOME/go/bin/templ generate
|
||||||
|
chmod +x gomft
|
||||||
|
JWT_SECRET_KEY=$(openssl rand -base64 24 | tr -d '/+=')
|
||||||
|
|
||||||
|
cat <<EOF >/opt/gomft/.env
|
||||||
|
SERVER_ADDRESS=:8080
|
||||||
|
DATA_DIR=/opt/gomft/data/gomft
|
||||||
|
BACKUP_DIR=/opt/gomft/data/gomft/backups
|
||||||
|
JWT_SECRET=$JWT_SECRET_KEY
|
||||||
|
BASE_URL=http://localhost:8080
|
||||||
|
|
||||||
|
# Email configuration
|
||||||
|
EMAIL_ENABLED=false
|
||||||
|
EMAIL_HOST=smtp.example.com
|
||||||
|
EMAIL_PORT=587
|
||||||
|
EMAIL_FROM_EMAIL=gomft@example.com
|
||||||
|
EMAIL_FROM_NAME=GoMFT
|
||||||
|
EMAIL_REPLY_TO=
|
||||||
|
EMAIL_ENABLE_TLS=true
|
||||||
|
EMAIL_REQUIRE_AUTH=true
|
||||||
|
EMAIL_USERNAME=smtp_username
|
||||||
|
EMAIL_PASSWORD=smtp_password
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/gomft.service
|
||||||
|
[Unit]
|
||||||
|
Description=GoMFT Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/gomft
|
||||||
|
ExecStart=/opt/gomft/./gomft
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now gomft
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f $temp_file $temp_file2
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
@ -1,111 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/ZoeyVid/NPMplus
|
|
||||||
|
|
||||||
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 \
|
|
||||||
newt \
|
|
||||||
curl \
|
|
||||||
openssh \
|
|
||||||
tzdata \
|
|
||||||
nano \
|
|
||||||
gawk \
|
|
||||||
yq \
|
|
||||||
mc
|
|
||||||
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Installing Docker & Compose"
|
|
||||||
$STD apk add docker
|
|
||||||
$STD rc-service docker start
|
|
||||||
$STD rc-update add docker default
|
|
||||||
|
|
||||||
get_latest_release() {
|
|
||||||
curl -sL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4
|
|
||||||
}
|
|
||||||
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose")
|
|
||||||
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
|
|
||||||
mkdir -p $DOCKER_CONFIG/cli-plugins
|
|
||||||
curl -sSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
|
|
||||||
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
|
|
||||||
msg_ok "Installed Docker & Compose"
|
|
||||||
|
|
||||||
msg_info "Get NPMplus"
|
|
||||||
cd /opt
|
|
||||||
wget -q https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml
|
|
||||||
msg_ok "Get NPMplus"
|
|
||||||
|
|
||||||
attempts=0
|
|
||||||
while true; do
|
|
||||||
read -r -p "Enter your TZ Identifier (e.g., Europe/Berlin): " TZ_INPUT
|
|
||||||
if validate_tz "$TZ_INPUT"; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
msg_error "Invalid timezone! Please enter a valid TZ identifier."
|
|
||||||
|
|
||||||
attempts=$((attempts + 1))
|
|
||||||
if [[ "$attempts" -ge 3 ]]; then
|
|
||||||
msg_error "Maximum attempts reached. Exiting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
read -r -p "Enter your ACME Email: " ACME_EMAIL_INPUT
|
|
||||||
|
|
||||||
yq -i "
|
|
||||||
.services.npmplus.environment |=
|
|
||||||
(map(select(. != \"TZ=*\" and . != \"ACME_EMAIL=*\")) +
|
|
||||||
[\"TZ=$TZ_INPUT\", \"ACME_EMAIL=$ACME_EMAIL_INPUT\"])
|
|
||||||
" /opt/compose.yaml
|
|
||||||
|
|
||||||
msg_info "Starting NPMplus"
|
|
||||||
$STD docker compose up -d
|
|
||||||
CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=npmplus")
|
|
||||||
|
|
||||||
if [[ -z "$CONTAINER_ID" ]]; then
|
|
||||||
msg_error "NPMplus container not found."
|
|
||||||
fi
|
|
||||||
|
|
||||||
TIMEOUT=60
|
|
||||||
while [[ $TIMEOUT -gt 0 ]]; do
|
|
||||||
STATUS=$(docker inspect --format '{{.State.Health.Status}}' "$CONTAINER_ID" 2>/dev/null)
|
|
||||||
sleep 2
|
|
||||||
((TIMEOUT--))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "$STATUS" != "healthy" ]]; then
|
|
||||||
msg_error "NPMplus container did not reach a healthy state."
|
|
||||||
fi
|
|
||||||
msg_ok "Started NPMplus"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Get Default Login (Patience)"
|
|
||||||
TIMEOUT=60
|
|
||||||
while [[ $TIMEOUT -gt 0 ]]; do
|
|
||||||
PASSWORD_LINE=$(docker logs "$CONTAINER_ID" 2>&1 | awk '/Creating a new user:/ {print; exit}')
|
|
||||||
if [[ -n "$PASSWORD_LINE" ]]; then
|
|
||||||
PASSWORD=$(echo "$PASSWORD_LINE" | awk -F 'password: ' '{print $2}')
|
|
||||||
echo -e "username: admin@example.org\npassword: $PASSWORD" >/opt/.npm_pwd
|
|
||||||
msg_ok "Saved default login to /opt/.npm_pwd"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 2
|
|
||||||
((TIMEOUT--))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ $TIMEOUT -eq 0 ]]; then
|
|
||||||
msg_error "Failed to retrieve default login credentials."
|
|
||||||
fi
|
|
122
install/slskd-install.sh
Normal file
122
install/slskd-install.sh
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/slskd/slskd/, https://soularr.net
|
||||||
|
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
unzip \
|
||||||
|
python3-pip
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup ${APPLICATION}"
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
wget -q "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -O $tmp_file
|
||||||
|
unzip -q $tmp_file -d /opt/${APPLICATION}
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
JWT_KEY=$(openssl rand -base64 44)
|
||||||
|
SLSKD_API_KEY=$(openssl rand -base64 44)
|
||||||
|
cp /opt/${APPLICATION}/config/slskd.example.yml /opt/${APPLICATION}/config/slskd.yml
|
||||||
|
sed -i \
|
||||||
|
-e "\|web:|,\|cidr|s|^#||" \
|
||||||
|
-e "\|https:|,\|5031|s|false|true|" \
|
||||||
|
-e "\|api_keys|,\|cidr|s|<some.*$|$SLSKD_API_KEY|; \
|
||||||
|
s|role: readonly|role: readwrite|; \
|
||||||
|
s|0.0.0.0/0,::/0|& # Replace this with your subnet|" \
|
||||||
|
-e "\|soulseek|,\|write_queue|s|^#||" \
|
||||||
|
-e "\|jwt:|,\|ttl|s|key: ~|key: $JWT_KEY|" \
|
||||||
|
/opt/${APPLICATION}/config/slskd.yml
|
||||||
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
|
msg_info "Installing Soularr"
|
||||||
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
|
cd /tmp
|
||||||
|
wget -q https://github.com/mrusse/soularr/archive/refs/heads/main.zip
|
||||||
|
unzip -q main.zip
|
||||||
|
mv soularr-main /opt/soularr
|
||||||
|
cd /opt/soularr
|
||||||
|
$STD pip install -r requirements.txt
|
||||||
|
sed -i \
|
||||||
|
-e "\|[Slskd]|,\|host_url|s|yourslskdapikeygoeshere|$SLSKD_API_KEY|" \
|
||||||
|
-e "/host_url/s/slskd/localhost/" \
|
||||||
|
/opt/soularr/config.ini
|
||||||
|
sed -i \
|
||||||
|
-e "/^#This\|^#Default\|^INTERVAL/{N;d;}" \
|
||||||
|
-e "\|python|s|app|opt/soularr|; s|python|python3|" \
|
||||||
|
-e "/dt/,+2d" \
|
||||||
|
/opt/soularr/run.sh
|
||||||
|
chmod +x /opt/soularr/run.sh
|
||||||
|
msg_ok "Installed Soularr"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
|
||||||
|
[Unit]
|
||||||
|
Description=${APPLICATION} Service
|
||||||
|
After=network.target
|
||||||
|
Wants=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/${APPLICATION}
|
||||||
|
ExecStart=/opt/${APPLICATION}/slskd --config /opt/${APPLICATION}/config/slskd.yml
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/soularr.timer
|
||||||
|
[Unit]
|
||||||
|
Description=Soularr service timer
|
||||||
|
RefuseManualStart=no
|
||||||
|
RefuseManualStop=no
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
Persistent=true
|
||||||
|
# run every 5 minutes
|
||||||
|
OnCalendar=*-*-* *:0/5:00
|
||||||
|
Unit=soularr.service
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/soularr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Soularr service
|
||||||
|
After=network.target slskd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/soularr
|
||||||
|
ExecStart=/bin/bash -c /opt/soularr/run.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now ${APPLICATION}.service
|
||||||
|
systemctl enable -q soularr.timer
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf $tmp_file
|
||||||
|
rm -rf /tmp/main.zip
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
1
install/snipeit-install.sh
Normal file
1
install/snipeit-install.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Fluid-Calendar",
|
|
||||||
"slug": "fluid-calendar",
|
|
||||||
"categories": [
|
|
||||||
19,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"date_created": "2025-03-04",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3000,
|
|
||||||
"documentation": "https://github.com/dotnetfactory/fluid-calendar/tree/main/docs",
|
|
||||||
"website": "https://github.com/dotnetfactory/fluid-calendar",
|
|
||||||
"logo": "https://raw.githubusercontent.com/dotnetfactory/fluid-calendar/refs/heads/main/src/app/favicon.ico",
|
|
||||||
"description": "The open-source intelligent calendar that adapts to your workflow. Experience seamless task scheduling powered by AI, designed to make your time management effortless.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/fluid-calendar.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 3,
|
|
||||||
"ram": 4096,
|
|
||||||
"hdd": 7,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "12"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "Creds: cat ~/fluid-calendar.creds",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
43
json/slskd.json
Normal file
43
json/slskd.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "slskd",
|
||||||
|
"slug": "slskd",
|
||||||
|
"categories": [
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2025-03-11",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 5030,
|
||||||
|
"documentation": "https://github.com/slskd/slskd/tree/master/docs",
|
||||||
|
"website": "https://github.com/slskd/slskd",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/slskd.png",
|
||||||
|
"description": "A modern client-server application for the Soulseek file sharing network. ",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/slskd.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "slskd",
|
||||||
|
"password": "slskd"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "See /opt/slskd/config/sksld.yml to add your Soulseek credentials",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "This LXC includes Soularr; it needs to be configured (/opt/soularr/config.ini) before it will work",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
558
json/versions.json
Normal file
558
json/versions.json
Normal file
@ -0,0 +1,558 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "msgbyte/tianji",
|
||||||
|
"version": "v1.18.21"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "semaphoreui/semaphore",
|
||||||
|
"version": "v2.13.0-beta3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "usememos/memos",
|
||||||
|
"version": "v0.24.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "morpheus65535/bazarr",
|
||||||
|
"version": "v1.5.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jackett/Jackett",
|
||||||
|
"version": "v0.22.1595"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "openobserve/openobserve",
|
||||||
|
"version": "v0.14.5-rc3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NodeBB/NodeBB",
|
||||||
|
"version": "v4.1.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||||
|
"version": "v1.16.0-victorialogs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "diced/zipline",
|
||||||
|
"version": "v4.0.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Threadfin/Threadfin",
|
||||||
|
"version": "1.2.30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "minio/minio",
|
||||||
|
"version": "RELEASE.2025-03-12T18-04-18Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "glanceapp/glance",
|
||||||
|
"version": "v0.7.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "keycloak/keycloak",
|
||||||
|
"version": "26.1.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zwave-js/zwave-js-ui",
|
||||||
|
"version": "v9.33.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zitadel/zitadel",
|
||||||
|
"version": "v2.71.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cockpit-project/cockpit",
|
||||||
|
"version": "335"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gotson/komga",
|
||||||
|
"version": "1.21.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ollama/ollama",
|
||||||
|
"version": "v0.6.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fallenbagel/jellyseerr",
|
||||||
|
"version": "preview-fix-proxy-undici-v7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pocket-id/pocket-id",
|
||||||
|
"version": "v0.39.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "benjaminjonard/koillection",
|
||||||
|
"version": "1.6.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "excalidraw/excalidraw",
|
||||||
|
"version": "v0.18.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ombi-app/Ombi",
|
||||||
|
"version": "v4.47.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mylar3/mylar3",
|
||||||
|
"version": "v0.8.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Stirling-Tools/Stirling-PDF",
|
||||||
|
"version": "v0.44.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stonith404/pingvin-share",
|
||||||
|
"version": "v1.10.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AdguardTeam/AdGuardHome",
|
||||||
|
"version": "v0.107.57"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Luligu/matterbridge",
|
||||||
|
"version": "2.2.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "evcc-io/evcc",
|
||||||
|
"version": "0.200.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AlexxIT/go2rtc",
|
||||||
|
"version": "v1.9.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "navidrome/navidrome",
|
||||||
|
"version": "v0.55.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "clusterzx/paperless-ai",
|
||||||
|
"version": "v2.7.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kareadita/Kavita",
|
||||||
|
"version": "v0.8.5.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "YuukanOO/seelf",
|
||||||
|
"version": "v2.4.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "umami-software/umami",
|
||||||
|
"version": "v2.17.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "documenso/documenso",
|
||||||
|
"version": "v1.9.1-rc.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TriliumNext/Notes",
|
||||||
|
"version": "v0.91.6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rogerfar/rdt-client",
|
||||||
|
"version": "v2.0.102"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "homarr-labs/homarr",
|
||||||
|
"version": "v1.10.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prometheus/alertmanager",
|
||||||
|
"version": "v0.28.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hargata/lubelog",
|
||||||
|
"version": "v1.4.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ellite/Wallos",
|
||||||
|
"version": "v2.46.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Dolibarr/dolibarr",
|
||||||
|
"version": "21.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "netbox-community/netbox",
|
||||||
|
"version": "v4.2.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "henrygd/beszel",
|
||||||
|
"version": "v0.10.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "open-webui/open-webui",
|
||||||
|
"version": "v0.5.20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ipfs/kubo",
|
||||||
|
"version": "v0.33.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pocketbase/pocketbase",
|
||||||
|
"version": "v0.25.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "matze/wastebin",
|
||||||
|
"version": "3.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "immich-app/immich",
|
||||||
|
"version": "v1.129.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "snipe/snipe-it",
|
||||||
|
"version": "v8.0.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "toniebox-reverse-engineering/teddycloud",
|
||||||
|
"version": "tc_v0.6.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "firefly-iii/firefly-iii",
|
||||||
|
"version": "develop-20250222.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "go-gitea/gitea",
|
||||||
|
"version": "v1.23.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "duplicati/duplicati",
|
||||||
|
"version": "v2.1.0.5_stable_2025-03-04"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bastienwirtz/homer",
|
||||||
|
"version": "v25.03.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sysadminsmedia/homebox",
|
||||||
|
"version": "v0.18.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Koenkk/zigbee2mqtt",
|
||||||
|
"version": "2.1.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "heiher/hev-socks5-server",
|
||||||
|
"version": "2.8.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inspircd/inspircd",
|
||||||
|
"version": "v4.6.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tobychui/zoraxy",
|
||||||
|
"version": "v3.1.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "grocy/grocy",
|
||||||
|
"version": "v4.4.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jhuckaby/Cronicle",
|
||||||
|
"version": "v0.9.76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "docmost/docmost",
|
||||||
|
"version": "v0.8.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BookStackApp/BookStack",
|
||||||
|
"version": "v25.02"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Part-DB/Part-DB-server",
|
||||||
|
"version": "v1.16.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prometheus/prometheus",
|
||||||
|
"version": "v3.2.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "silverbulletmd/silverbullet",
|
||||||
|
"version": "0.10.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "juanfont/headscale",
|
||||||
|
"version": "v0.25.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "benzino77/tasmocompiler",
|
||||||
|
"version": "v12.5.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "traefik/traefik",
|
||||||
|
"version": "v3.3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "schlagmichdoch/PairDrop",
|
||||||
|
"version": "v1.11.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "advplyr/audiobookshelf",
|
||||||
|
"version": "v2.19.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Athou/commafeed",
|
||||||
|
"version": "5.6.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FreshRSS/FreshRSS",
|
||||||
|
"version": "1.26.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kimai/kimai",
|
||||||
|
"version": "2.30.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "azukaar/Cosmos-Server",
|
||||||
|
"version": "v0.18.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wavelog/wavelog",
|
||||||
|
"version": "2.0.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "docker/compose",
|
||||||
|
"version": "v2.33.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sabnzbd/sabnzbd",
|
||||||
|
"version": "4.4.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "grafana/grafana",
|
||||||
|
"version": "v11.5.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gristlabs/grist-core",
|
||||||
|
"version": "v1.4.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||||
|
"version": "v3.5.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sbondCo/Watcharr",
|
||||||
|
"version": "v2.0.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "authelia/authelia",
|
||||||
|
"version": "v4.38.19"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "glpi-project/glpi",
|
||||||
|
"version": "10.0.18"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TasmoAdmin/TasmoAdmin",
|
||||||
|
"version": "v4.2.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dani-garcia/vaultwarden",
|
||||||
|
"version": "1.33.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "blakeblackshear/frigate",
|
||||||
|
"version": "v0.15.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bluenviron/mediamtx",
|
||||||
|
"version": "v1.11.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "actualbudget/actual-server",
|
||||||
|
"version": "v25.2.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NginxProxyManager/nginx-proxy-manager",
|
||||||
|
"version": "v2.12.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thomiceli/opengist",
|
||||||
|
"version": "v1.9.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Forceu/Gokapi",
|
||||||
|
"version": "v1.9.6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hoarder-app/hoarder",
|
||||||
|
"version": "sdk/v0.22.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "PrivateBin/PrivateBin",
|
||||||
|
"version": "1.7.6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "paperless-ngx/paperless-ngx",
|
||||||
|
"version": "v2.14.7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hivemq/hivemq-community-edition",
|
||||||
|
"version": "2025.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kozea/Radicale",
|
||||||
|
"version": "v3.4.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rustdesk/rustdesk-server",
|
||||||
|
"version": "1.1.14"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hansmi/prometheus-paperless-exporter",
|
||||||
|
"version": "v0.0.6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "donaldzou/WGDashboard",
|
||||||
|
"version": "v4.1.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "0xERR0R/blocky",
|
||||||
|
"version": "v0.25"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "linkwarden/linkwarden",
|
||||||
|
"version": "v2.9.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tautulli/Tautulli",
|
||||||
|
"version": "v2.15.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "traccar/traccar",
|
||||||
|
"version": "v6.6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ErsatzTV/ErsatzTV",
|
||||||
|
"version": "v25.1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "seanmorley15/AdventureLog",
|
||||||
|
"version": "v0.8.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gethomepage/homepage",
|
||||||
|
"version": "v0.10.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MagicMirrorOrg/MagicMirror",
|
||||||
|
"version": "v2.30.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "louislam/uptime-kuma",
|
||||||
|
"version": "2.0.0-beta.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pymedusa/Medusa",
|
||||||
|
"version": "v1.0.22"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Donkie/Spoolman",
|
||||||
|
"version": "v0.21.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "phpipam/phpipam",
|
||||||
|
"version": "v1.7.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Bubka/2FAuth",
|
||||||
|
"version": "v5.4.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gotify/server",
|
||||||
|
"version": "v2.6.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "janeczku/calibre-web",
|
||||||
|
"version": "0.6.24"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sabre-io/Baikal",
|
||||||
|
"version": "0.10.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "caddyserver/xcaddy",
|
||||||
|
"version": "v0.4.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "linuxserver/Heimdall",
|
||||||
|
"version": "v2.6.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "aceberg/WatchYourLAN",
|
||||||
|
"version": "2.0.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kometa-Team/Kometa",
|
||||||
|
"version": "v2.1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FunkeyFlo/ps5-mqtt",
|
||||||
|
"version": "v1.4.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "projectsend/projectsend",
|
||||||
|
"version": "r1720"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pf2eToolsOrg/Pf2eTools",
|
||||||
|
"version": "v0.8.13"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Paymenter/Paymenter",
|
||||||
|
"version": "v0.9.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hywax/mafl",
|
||||||
|
"version": "v0.15.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FlareSolverr/FlareSolverr",
|
||||||
|
"version": "v3.3.21"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Suwayomi/Suwayomi-Server",
|
||||||
|
"version": "v1.1.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Forceu/barcodebuddy",
|
||||||
|
"version": "v1.8.1.8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lissy93/dashy",
|
||||||
|
"version": "3.1.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gnmyt/myspeed",
|
||||||
|
"version": "v1.0.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "monicahq/monica",
|
||||||
|
"version": "v4.1.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thelounge/thelounge-deb",
|
||||||
|
"version": "v4.4.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wger-project/wger",
|
||||||
|
"version": "2.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sct/overseerr",
|
||||||
|
"version": "preview-test-node-18"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deepch/RTSPtoWeb",
|
||||||
|
"version": "v2.4.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "searxng/searxng",
|
||||||
|
"version": "v1.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MediaBrowser/Emby",
|
||||||
|
"version": "3.5.2.0"
|
||||||
|
}
|
||||||
|
]
|
@ -59,6 +59,9 @@ color() {
|
|||||||
ROOTSSH="${TAB}🔑${TAB}${CL}"
|
ROOTSSH="${TAB}🔑${TAB}${CL}"
|
||||||
CREATING="${TAB}🚀${TAB}${CL}"
|
CREATING="${TAB}🚀${TAB}${CL}"
|
||||||
ADVANCED="${TAB}🧩${TAB}${CL}"
|
ADVANCED="${TAB}🧩${TAB}${CL}"
|
||||||
|
CIFS="${TAB}🔌${TAB}${CL}"
|
||||||
|
FUSE="${TAB}🔧${TAB}${CL}"
|
||||||
|
NFS="${TAB}📂${TAB}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function enables error handling in the script by setting options and defining a trap for the ERR signal.
|
# This function enables error handling in the script by setting options and defining a trap for the ERR signal.
|
||||||
@ -347,6 +350,9 @@ base_settings() {
|
|||||||
SSH="no"
|
SSH="no"
|
||||||
SSH_AUTHORIZED_KEY=""
|
SSH_AUTHORIZED_KEY=""
|
||||||
TAGS="community-script-dev;"
|
TAGS="community-script-dev;"
|
||||||
|
ENABLE_NFS="no"
|
||||||
|
ENABLE_CIFS="no"
|
||||||
|
ENABLE_FUSE="no"
|
||||||
|
|
||||||
# Override default settings with variables from ct script
|
# Override default settings with variables from ct script
|
||||||
CT_TYPE=${var_unprivileged:-$CT_TYPE}
|
CT_TYPE=${var_unprivileged:-$CT_TYPE}
|
||||||
@ -355,6 +361,7 @@ base_settings() {
|
|||||||
RAM_SIZE=${var_ram:-$RAM_SIZE}
|
RAM_SIZE=${var_ram:-$RAM_SIZE}
|
||||||
VERB=${var_verbose:-$VERBOSE}
|
VERB=${var_verbose:-$VERBOSE}
|
||||||
TAGS="${TAGS}${var_tags:-}"
|
TAGS="${TAGS}${var_tags:-}"
|
||||||
|
ENABLE_FUSE=${var_fuse:-$ENABLE_FUSE}
|
||||||
|
|
||||||
# Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts
|
# Since these 2 are only defined outside of default_settings function, we add a temporary fallback. TODO: To align everything, we should add these as constant variables (e.g. OSTYPE and OSVERSION), but that would currently require updating the default_settings function for all existing scripts
|
||||||
if [ -z "$var_os" ]; then
|
if [ -z "$var_os" ]; then
|
||||||
@ -811,6 +818,14 @@ advanced_settings() {
|
|||||||
else
|
else
|
||||||
SSH_AUTHORIZED_KEY=""
|
SSH_AUTHORIZED_KEY=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if (whiptail --backtitle "[dev] Proxmox VE Helper Scripts" --defaultno --title "FUSE Support" --yesno "Enable FUSE (Filesystem in Userspace) support in the container?" 10 58); then
|
||||||
|
ENABLE_FUSE="yes"
|
||||||
|
else
|
||||||
|
ENABLE_FUSE="no"
|
||||||
|
fi
|
||||||
|
echo -e "${FUSE}${BOLD}${DGN}FUSE (Filesystem in Userspace) Support: ${BGN}$ENABLE_FUSE${CL}"
|
||||||
|
|
||||||
if (whiptail --backtitle "[dev] Proxmox VE Helper Scripts" --defaultno --title "VERBOSE MODE" --yesno "Enable Verbose Mode?" 10 58); then
|
if (whiptail --backtitle "[dev] Proxmox VE Helper Scripts" --defaultno --title "VERBOSE MODE" --yesno "Enable Verbose Mode?" 10 58); then
|
||||||
VERB="yes"
|
VERB="yes"
|
||||||
else
|
else
|
||||||
@ -1077,10 +1092,15 @@ build_container() {
|
|||||||
FEATURES="nesting=1"
|
FEATURES="nesting=1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ENABLE_FUSE" == "yes" ]; then
|
||||||
|
FEATURES+=",fuse=1"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $DIAGNOSTICS == "yes" ]]; then
|
if [[ $DIAGNOSTICS == "yes" ]]; then
|
||||||
post_to_api
|
post_to_api
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
FEATURES="${FEATURES#,}"
|
||||||
TEMP_DIR=$(mktemp -d)
|
TEMP_DIR=$(mktemp -d)
|
||||||
pushd $TEMP_DIR >/dev/null
|
pushd $TEMP_DIR >/dev/null
|
||||||
if [ "$var_os" == "alpine" ]; then
|
if [ "$var_os" == "alpine" ]; then
|
||||||
@ -1119,7 +1139,6 @@ build_container() {
|
|||||||
$PW
|
$PW
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|
||||||
# This executes create_lxc.sh and creates the container and .conf file
|
# This executes create_lxc.sh and creates the container and .conf file
|
||||||
bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/create_lxc.sh)" || exit $?
|
bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/create_lxc.sh)" || exit $?
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user