mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-04 18:32:51 +00:00
Compare commits
27 Commits
2025-08-19
...
2025-08-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf99523a94 | ||
|
|
c1b3321801 | ||
|
|
beb9189c72 | ||
|
|
186c82d156 | ||
|
|
9d431458ca | ||
|
|
9c86eea347 | ||
|
|
e20af295f0 | ||
|
|
68832d71fa | ||
|
|
2e13483f19 | ||
|
|
c7643ae88c | ||
|
|
f16f7a130a | ||
|
|
94a8fe7132 | ||
|
|
059d297305 | ||
|
|
2bd2a763a1 | ||
|
|
452ba92a6f | ||
|
|
d27a875987 | ||
|
|
14418411f6 | ||
|
|
f13c8ff3ce | ||
|
|
28dc145811 | ||
|
|
170543bb66 | ||
|
|
c783024ef0 | ||
|
|
19403a627b | ||
|
|
cc08395a1d | ||
|
|
d5093a3d9d | ||
|
|
52c4f3e0c2 | ||
|
|
76a4ec9e06 | ||
|
|
bebf6f65aa |
23
CHANGELOG.md
23
CHANGELOG.md
@@ -10,8 +10,31 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-08-21
|
||||
|
||||
## 2025-08-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Post-Install, change pve-test for trixie [@MickLesk](https://github.com/MickLesk) ([#7031](https://github.com/community-scripts/ProxmoxVE/pull/7031))
|
||||
- Immich: fix small issue with immich-admin "start" script [@vhsdream](https://github.com/vhsdream) ([#7035](https://github.com/community-scripts/ProxmoxVE/pull/7035))
|
||||
- WasteBin: Small fixes [@tremor021](https://github.com/tremor021) ([#7018](https://github.com/community-scripts/ProxmoxVE/pull/7018))
|
||||
- Komga: Fix update [@tremor021](https://github.com/tremor021) ([#7027](https://github.com/community-scripts/ProxmoxVE/pull/7027))
|
||||
- Barcode Buddy: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#7020](https://github.com/community-scripts/ProxmoxVE/pull/7020))
|
||||
- PBS: ifupdown2 reload [@MickLesk](https://github.com/MickLesk) ([#7013](https://github.com/community-scripts/ProxmoxVE/pull/7013))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Feature: Netdata support PVE9 (Debian 13 Trixie) [@MickLesk](https://github.com/MickLesk) ([#7012](https://github.com/community-scripts/ProxmoxVE/pull/7012))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: RustDesk Server [@tremor021](https://github.com/tremor021) ([#7008](https://github.com/community-scripts/ProxmoxVE/pull/7008))
|
||||
- ghost: fix: verbose [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7023](https://github.com/community-scripts/ProxmoxVE/pull/7023))
|
||||
- Refactor: Paperless-ngx [@MickLesk](https://github.com/MickLesk) ([#6938](https://github.com/community-scripts/ProxmoxVE/pull/6938))
|
||||
|
||||
## 2025-08-19
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
@@ -109,10 +109,10 @@ function update_script() {
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -a
|
||||
. "$INSTALL_DIR"/.env
|
||||
. ${INSTALL_DIR}/.env
|
||||
set +a
|
||||
|
||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
|
||||
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
|
||||
EOF
|
||||
chmod +x "$INSTALL_DIR"/start.sh
|
||||
fi
|
||||
@@ -148,6 +148,7 @@ EOF
|
||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||
$STD npm install sharp
|
||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
||||
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
||||
msg_ok "Updated ${APP} web and microservices"
|
||||
|
||||
cd "$SRC_DIR"/machine-learning
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
|
||||
if [[ ! -f ~/.komga-org ]] || [[ "${RELEASE}" != "$(cat ~/.komga-org)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop komga
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
@@ -9,7 +9,7 @@ APP="Paperless-ngx"
|
||||
var_tags="${var_tags:-document;management}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_disk="${var_disk:-12}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
@@ -20,70 +20,115 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/paperless ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
||||
"1" "Update Paperless-ngx to $RELEASE" ON \
|
||||
"2" "Paperless-ngx Credentials" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
|
||||
msg_info "Updating Ghostscript (Patience)"
|
||||
cd /tmp
|
||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz")
|
||||
tar -xzf ghostscript-10.04.0.tar.gz
|
||||
cd ghostscript-10.04.0
|
||||
$STD ./configure
|
||||
$STD make
|
||||
$STD sudo make install
|
||||
rm -rf /tmp/ghostscript*
|
||||
msg_ok "Ghostscript updated to 10.04.0"
|
||||
if ! command -v jq &>/dev/null; then
|
||||
$STD apt-get install -y jq
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
if [[ "${RELEASE}" != "$(cat ~/.paperless 2>/dev/null)" ]] || [[ ! -f ~/.paperless ]]; then
|
||||
msg_info "Stopping all Paperless-ngx Services"
|
||||
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
||||
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||
msg_ok "Stopped all Paperless-ngx Services"
|
||||
|
||||
msg_info "Updating to ${RELEASE}"
|
||||
cd ~
|
||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o $(basename "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz")
|
||||
tar -xf paperless-ngx-$RELEASE.tar.xz
|
||||
cp -r /opt/paperless/paperless.conf paperless-ngx/
|
||||
cp -r paperless-ngx/* /opt/paperless/
|
||||
cd /opt/paperless
|
||||
$STD pip install -r requirements.txt
|
||||
cd /opt/paperless/src
|
||||
$STD /usr/bin/python3 manage.py migrate
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated to ${RELEASE}"
|
||||
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
|
||||
|
||||
msg_info "Cleaning up"
|
||||
cd ~
|
||||
rm paperless-ngx-$RELEASE.tar.xz
|
||||
rm -rf paperless-ngx
|
||||
msg_ok "Cleaned"
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/paperless/backup
|
||||
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
|
||||
msg_info "Updating to ${RELEASE}"
|
||||
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/paperless/src
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Updated to ${RELEASE}"
|
||||
else
|
||||
msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
|
||||
msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
|
||||
echo -e " 1. Stop the container: pct stop <CTID>"
|
||||
echo -e " 2. Create a snapshot: pct snapshot <CTID> pre-paperless-uv-migration"
|
||||
echo -e " 3. Start the container again\n"
|
||||
|
||||
read -rp "Have you created a snapshot? [y/N]: " confirm
|
||||
if [[ ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then
|
||||
msg_error "Migration aborted. Please create a snapshot first."
|
||||
exit 1
|
||||
fi
|
||||
msg_info "Migrating old Paperless-ngx installation to uv"
|
||||
rm -rf /opt/paperless/venv
|
||||
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
|
||||
|
||||
declare -A PATCHES=(
|
||||
["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer"
|
||||
["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO"
|
||||
["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO"
|
||||
["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\""
|
||||
)
|
||||
|
||||
for svc in "${!PATCHES[@]}"; do
|
||||
path=$(systemctl show -p FragmentPath "$svc" | cut -d= -f2)
|
||||
if [[ -n "$path" && -f "$path" ]]; then
|
||||
sed -i "s|^ExecStart=.*|${PATCHES[$svc]}|" "$path"
|
||||
if [[ "$svc" == "paperless-webserver.service" ]]; then
|
||||
grep -q "^Environment=GRANIAN_HOST=" "$path" ||
|
||||
sed -i '/^\[Service\]/a Environment=GRANIAN_HOST=::' "$path"
|
||||
grep -q "^Environment=GRANIAN_PORT=" "$path" ||
|
||||
sed -i '/^\[Service\]/a Environment=GRANIAN_PORT=8000' "$path"
|
||||
grep -q "^Environment=GRANIAN_WORKERS=" "$path" ||
|
||||
sed -i '/^\[Service\]/a Environment=GRANIAN_WORKERS=1' "$path"
|
||||
fi
|
||||
msg_ok "Patched $svc"
|
||||
else
|
||||
msg_error "Service file for $svc not found!"
|
||||
fi
|
||||
done
|
||||
|
||||
$STD systemctl daemon-reload
|
||||
msg_info "Backing up data"
|
||||
mkdir -p /opt/paperless/backup
|
||||
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||
msg_ok "Backup completed"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
|
||||
msg_info "Updating Paperless-ngx"
|
||||
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
cd /opt/paperless/src
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Paperless-ngx migration and update to ${RELEASE} completed"
|
||||
fi
|
||||
|
||||
msg_info "Starting all Paperless-ngx Services"
|
||||
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
||||
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||
sleep 1
|
||||
msg_ok "Started all Paperless-ngx Services"
|
||||
msg_ok "Updated Successfully!\n"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "2" ]; then
|
||||
cat paperless.creds
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
@@ -94,3 +139,4 @@ 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}"
|
||||
|
||||
|
||||
@@ -28,13 +28,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
||||
touch /opt/rustdeskapi_version.txt
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ "${APIRELEASE}" != "$(cat /opt/rustdeskapi_version.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]] || [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
||||
if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop rustdesk-hbbr
|
||||
systemctl stop rustdesk-hbbs
|
||||
@@ -43,28 +40,15 @@ function update_script() {
|
||||
fi
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
TEMPDIR=$(mktemp -d)
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
||||
$STD dpkg -i $TEMPDIR/*.deb
|
||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
||||
echo "${APIRELEASE}" >/opt/rustdeskapi_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf $TEMPDIR
|
||||
msg_ok "Cleanup Completed"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||
|
||||
msg_info "Starting services"
|
||||
systemctl start -q rustdesk-* --all
|
||||
msg_ok "Services started"
|
||||
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
|
||||
@@ -27,6 +27,10 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y zstd
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
||||
msg_info "Running Migration"
|
||||
@@ -66,8 +70,9 @@ EOF
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
||||
tar -xf $temp_file
|
||||
cp -f wastebin /opt/wastebin/
|
||||
cp -f wastebin* /opt/wastebin/
|
||||
chmod +x /opt/wastebin/wastebin
|
||||
chmod +x /opt/wastebin/wastebin-ctl
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated Wastebin"
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": null,
|
||||
"documentation": "https://docs.paperless-ngx.com/",
|
||||
"website": "https://docs.paperless-ngx.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
|
||||
"config_path": "/opt/paperless/paperless.conf",
|
||||
@@ -21,19 +21,19 @@
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 10,
|
||||
"hdd": 12,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"username": "admin",
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Show Login Credentials, type `update` in the LXC console",
|
||||
"text": "Show Login Credentials, type `cat ~/paperless.creds` in the LXC console",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,13 +1,113 @@
|
||||
[
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v0.8.0-beta",
|
||||
"date": "2025-08-19T23:00:51Z"
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.11.5-rc5",
|
||||
"date": "2025-08-19T00:45:40Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v4.6.0",
|
||||
"date": "2025-08-20T20:53:43Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
"version": "debian/12.1.14",
|
||||
"date": "2025-08-20T20:52:44Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.8.0",
|
||||
"date": "2025-08-20T18:09:17Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e6.0.0-M2.202508-rc.1",
|
||||
"date": "2025-08-20T18:02:55Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.516.2",
|
||||
"date": "2025-08-20T17:15:26Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p10",
|
||||
"date": "2025-08-20T14:05:06Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.65",
|
||||
"date": "2025-08-20T14:02:28Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.107.4",
|
||||
"date": "2025-08-20T12:23:06Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "345",
|
||||
"date": "2025-08-20T11:52:24Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "4.3.7",
|
||||
"date": "2025-08-20T10:26:21Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "4.1.10-tentative",
|
||||
"date": "2025-08-20T10:20:25Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.3.3",
|
||||
"date": "2025-08-20T10:12:51Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
||||
"date": "2025-08-20T08:15:46Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.7.5",
|
||||
"date": "2025-08-05T03:37:52Z"
|
||||
"version": "2025.8.0",
|
||||
"date": "2025-08-20T07:58:12Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.2.3",
|
||||
"date": "2025-08-20T07:57:58Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.5.10",
|
||||
"date": "2025-08-15T12:12:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2315",
|
||||
"date": "2025-08-20T05:53:14Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v0.8.0-beta",
|
||||
"date": "2025-08-20T01:02:10Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.19",
|
||||
"date": "2025-08-20T00:27:12Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.6.2",
|
||||
"date": "2025-07-17T12:08:03Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
@@ -19,16 +119,6 @@
|
||||
"version": "v3.1.1",
|
||||
"date": "2025-08-19T20:23:43Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v4.4.0",
|
||||
"date": "2025-08-17T18:47:35Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.38.4",
|
||||
@@ -64,36 +154,16 @@
|
||||
"version": "v5.8.0",
|
||||
"date": "2025-08-19T16:46:00Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.524",
|
||||
"date": "2025-08-19T16:39:43Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "v5.8.8-beta.2",
|
||||
"date": "2025-08-19T15:40:26Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.2",
|
||||
"date": "2025-07-09T19:08:28Z"
|
||||
},
|
||||
{
|
||||
"name": "openhab/openhab-core",
|
||||
"version": "5.0.1",
|
||||
"date": "2025-08-19T14:25:29Z"
|
||||
},
|
||||
{
|
||||
"name": "traccar/traccar",
|
||||
"version": "v6.9.0",
|
||||
"date": "2025-08-19T14:22:26Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
"version": "debian/12.1.11",
|
||||
"date": "2025-08-19T13:49:52Z"
|
||||
},
|
||||
{
|
||||
"name": "fallenbagel/jellyseerr",
|
||||
"version": "preview-dns-cache-manager",
|
||||
@@ -109,11 +179,6 @@
|
||||
"version": "7.2.12",
|
||||
"date": "2025-08-19T11:16:17Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.1.101-2.1.1.101_canary_2025-08-19",
|
||||
"date": "2025-08-19T10:45:40Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.11",
|
||||
@@ -129,11 +194,6 @@
|
||||
"version": "v7.12.0",
|
||||
"date": "2025-08-19T06:57:20Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.2311",
|
||||
"date": "2025-08-19T06:11:09Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3-beta.10",
|
||||
@@ -144,31 +204,11 @@
|
||||
"version": "v6.3.2",
|
||||
"date": "2025-08-19T04:08:36Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.11.5-rc5",
|
||||
"date": "2025-08-19T00:45:40Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.19",
|
||||
"date": "2025-08-19T00:27:08Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.6.2",
|
||||
"date": "2025-07-17T12:08:03Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.6",
|
||||
"date": "2025-08-18T23:31:31Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.2.7",
|
||||
"date": "2025-08-07T08:19:29Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.4",
|
||||
@@ -179,16 +219,6 @@
|
||||
"version": "v1.138.1",
|
||||
"date": "2025-08-18T18:51:50Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.8.0-rc2",
|
||||
"date": "2025-08-12T21:12:08Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.107.3",
|
||||
"date": "2025-08-18T18:40:54Z"
|
||||
},
|
||||
{
|
||||
"name": "ventoy/Ventoy",
|
||||
"version": "v1.1.07",
|
||||
@@ -219,11 +249,6 @@
|
||||
"version": "pmm-6401-v1.124.0",
|
||||
"date": "2025-08-18T12:14:50Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p10-rc1",
|
||||
"date": "2025-08-18T09:07:06Z"
|
||||
},
|
||||
{
|
||||
"name": "jupyter/notebook",
|
||||
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
|
||||
@@ -311,8 +336,8 @@
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.3.0",
|
||||
"date": "2025-07-05T12:14:52Z"
|
||||
"version": "nightly",
|
||||
"date": "2025-08-16T16:04:53Z"
|
||||
},
|
||||
{
|
||||
"name": "blakeblackshear/frigate",
|
||||
@@ -374,11 +399,6 @@
|
||||
"version": "v4.0.2",
|
||||
"date": "2025-08-15T14:12:26Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.5.10",
|
||||
"date": "2025-08-15T12:12:06Z"
|
||||
},
|
||||
{
|
||||
"name": "intri-in/manage-my-damn-life-nextjs",
|
||||
"version": "v0.8.0-release",
|
||||
@@ -399,16 +419,6 @@
|
||||
"version": "v2.11.7",
|
||||
"date": "2025-08-14T17:14:33Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.64",
|
||||
"date": "2025-07-28T14:24:56Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "Matter-1.4.1",
|
||||
"date": "2025-08-14T07:37:23Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v0.37.0",
|
||||
@@ -629,11 +639,6 @@
|
||||
"version": "6.1.14",
|
||||
"date": "2025-08-06T14:24:58Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "344",
|
||||
"date": "2025-08-06T13:09:25Z"
|
||||
},
|
||||
{
|
||||
"name": "TryGhost/Ghost-CLI",
|
||||
"version": "v1.28.3",
|
||||
@@ -669,11 +674,6 @@
|
||||
"version": "v25.4.0",
|
||||
"date": "2025-08-05T17:10:01Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "cassandra-5.0.5",
|
||||
"date": "2025-08-05T12:08:49Z"
|
||||
},
|
||||
{
|
||||
"name": "binwiederhier/ntfy",
|
||||
"version": "v2.14.0",
|
||||
|
||||
@@ -14,7 +14,9 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y redis
|
||||
$STD apt-get install -y \
|
||||
redis \
|
||||
sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
|
||||
|
||||
@@ -50,7 +50,7 @@ echo "ghost-user ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ghost-user
|
||||
mkdir -p /var/www/ghost
|
||||
chown -R ghost-user:ghost-user /var/www/ghost
|
||||
chmod 775 /var/www/ghost
|
||||
sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0"
|
||||
$STD sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0"
|
||||
rm /etc/sudoers.d/ghost-user
|
||||
msg_ok "Creating Service"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# Author: tteck (tteckster) | MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://docs.paperless-ngx.com/
|
||||
|
||||
@@ -29,22 +29,16 @@ $STD apt-get install -y \
|
||||
automake \
|
||||
libtool \
|
||||
pkg-config \
|
||||
git \
|
||||
libtiff-dev \
|
||||
libpng-dev \
|
||||
libleptonica-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-wheel
|
||||
msg_ok "Setup Python3"
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
setup_gs
|
||||
|
||||
msg_info "Installing OCR Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
@@ -57,18 +51,9 @@ $STD apt-get install -y \
|
||||
zlib1g \
|
||||
tesseract-ocr \
|
||||
tesseract-ocr-eng
|
||||
|
||||
cd /tmp
|
||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o "ghostscript-10.04.0.tar.gz"
|
||||
$STD tar -xzf ghostscript-10.04.0.tar.gz
|
||||
cd ghostscript-10.04.0
|
||||
$STD ./configure
|
||||
$STD make
|
||||
$STD sudo make install
|
||||
msg_ok "Installed OCR Dependencies"
|
||||
|
||||
msg_info "Installing JBIG2"
|
||||
$STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc
|
||||
msg_info "Setup JBIG2"
|
||||
cd /opt/jbig2enc
|
||||
$STD bash ./autogen.sh
|
||||
$STD bash ./configure
|
||||
@@ -77,30 +62,6 @@ $STD make install
|
||||
rm -rf /opt/jbig2enc
|
||||
msg_ok "Installed JBIG2"
|
||||
|
||||
msg_info "Installing Paperless-ngx (Patience)"
|
||||
Paperlessngx=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5)
|
||||
cd /opt
|
||||
$STD curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz" -o "paperless-ngx-$Paperlessngx.tar.xz"
|
||||
$STD tar -xf "paperless-ngx-$Paperlessngx.tar.xz" -C /opt/
|
||||
mv paperless-ngx paperless
|
||||
rm "paperless-ngx-$Paperlessngx.tar.xz"
|
||||
cd /opt/paperless
|
||||
$STD pip install --upgrade pip
|
||||
$STD pip install -r requirements.txt
|
||||
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
|
||||
mkdir -p {consume,data,media,static}
|
||||
sed -i -e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" /opt/paperless/paperless.conf
|
||||
echo "${Paperlessngx}" >/opt/"${APPLICATION}"_version.txt
|
||||
msg_ok "Installed Paperless-ngx"
|
||||
|
||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
||||
$STD python3 -m nltk.downloader -d /usr/share/nltk_data all
|
||||
msg_ok "Installed Natural Language Toolkit"
|
||||
|
||||
msg_info "Setting up PostgreSQL database"
|
||||
DB_NAME=paperlessdb
|
||||
DB_USER=paperless
|
||||
@@ -115,36 +76,36 @@ echo "" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx Database User: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx Database Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
||||
sed -i -e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' /opt/paperless/paperless.conf
|
||||
sed -i -e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" /opt/paperless/paperless.conf
|
||||
sed -i -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" /opt/paperless/paperless.conf
|
||||
cd /opt/paperless/src
|
||||
$STD python3 manage.py migrate
|
||||
msg_ok "Set up PostgreSQL database"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Adminer"
|
||||
$STD apt install -y adminer
|
||||
$STD a2enconf adminer
|
||||
systemctl reload apache2
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
echo "" >>~/paperless.creds
|
||||
echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
||||
echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
||||
msg_ok "Installed Adminer"
|
||||
fi
|
||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
||||
$STD uv run -- python -m nltk.downloader -d /usr/share/nltk_data all
|
||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
||||
msg_ok "Installed Natural Language Toolkit"
|
||||
|
||||
msg_info "Setup Paperless-ngx"
|
||||
cd /opt/paperless
|
||||
$STD uv sync --all-extras
|
||||
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
|
||||
mkdir -p {consume,data,media,static}
|
||||
sed -i \
|
||||
-e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' \
|
||||
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
|
||||
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
|
||||
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
|
||||
-e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \
|
||||
-e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \
|
||||
-e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \
|
||||
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" \
|
||||
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" \
|
||||
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" \
|
||||
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
|
||||
/opt/paperless/paperless.conf
|
||||
cd /opt/paperless/src
|
||||
$STD uv run -- python manage.py migrate
|
||||
msg_ok "Setup Paperless-ngx"
|
||||
|
||||
msg_info "Setting up admin Paperless-ngx User & Password"
|
||||
## From https://github.com/linuxserver/docker-paperless-ngx/blob/main/root/etc/cont-init.d/99-migrations
|
||||
cat <<EOF | python3 /opt/paperless/src/manage.py shell
|
||||
cat <<EOF | uv run -- python /opt/paperless/src/manage.py shell
|
||||
from django.contrib.auth import get_user_model
|
||||
UserModel = get_user_model()
|
||||
user = UserModel.objects.create_user('admin', password='$DB_PASS')
|
||||
@@ -152,10 +113,15 @@ user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.save()
|
||||
EOF
|
||||
echo "" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx WebUI User: \e[32madmin\e[0m" >>~/paperless.creds
|
||||
echo -e "Paperless-ngx WebUI Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
||||
echo "" >>~/paperless.creds
|
||||
{
|
||||
echo "Paperless-ngx-Credentials"
|
||||
echo "Paperless-ngx Database Name: $DB_NAME"
|
||||
echo "Paperless-ngx Database User: $DB_USER"
|
||||
echo "Paperless-ngx Database Password: $DB_PASS"
|
||||
echo "Paperless-ngx Secret Key: $SECRET_KEY\n"
|
||||
echo "Paperless-ngx WebUI User: admin"
|
||||
echo "Paperless-ngx WebUI Password: $DB_PASS"
|
||||
} >>~/paperless-ngx.creds
|
||||
msg_ok "Set up admin Paperless-ngx User & Password"
|
||||
|
||||
msg_info "Creating Services"
|
||||
@@ -166,7 +132,7 @@ Requires=redis.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStart=celery --app paperless beat --loglevel INFO
|
||||
ExecStart=uv run -- celery --app paperless beat --loglevel INFO
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -180,7 +146,7 @@ After=postgresql.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStart=celery --app paperless worker --loglevel INFO
|
||||
ExecStart=uv run -- celery --app paperless worker --loglevel INFO
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -194,7 +160,7 @@ Requires=redis.service
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStartPre=/bin/sleep 2
|
||||
ExecStart=python3 manage.py document_consumer
|
||||
ExecStart=uv run -- python manage.py document_consumer
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -209,7 +175,7 @@ Requires=redis.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/paperless/src
|
||||
ExecStart=granian --interface asginl --ws "paperless.asgi:application"
|
||||
ExecStart=uv run -- granian --interface asginl --ws "paperless.asgi:application"
|
||||
Environment=GRANIAN_HOST=::
|
||||
Environment=GRANIAN_PORT=8000
|
||||
Environment=GRANIAN_WORKERS=1
|
||||
@@ -217,13 +183,14 @@ Environment=GRANIAN_WORKERS=1
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
||||
|
||||
systemctl daemon-reload
|
||||
$STD systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
||||
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
||||
msg_ok "Created Services"
|
||||
|
||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
setup_adminer
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
|
||||
@@ -19,6 +19,8 @@ cat <<EOF >>/etc/apt/sources.list
|
||||
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
|
||||
EOF
|
||||
$STD apt-get update
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export IFUPDOWN2_NO_IFRELOAD=1
|
||||
$STD apt-get install -y proxmox-backup-server
|
||||
msg_ok "Installed Proxmox Backup Server"
|
||||
|
||||
|
||||
@@ -13,21 +13,12 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Setup RustDesk"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
|
||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
TEMPDIR=$(mktemp -d)
|
||||
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
||||
$STD dpkg -i "${TEMPDIR}"/*.deb
|
||||
msg_info "Configuring RustDesk Server"
|
||||
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
cd /var/lib/rustdesk-api
|
||||
$STD rustdesk-api reset-admin-pwd $ADMINPASS
|
||||
@@ -37,14 +28,12 @@ $STD rustdesk-api reset-admin-pwd $ADMINPASS
|
||||
echo "Username: admin"
|
||||
echo "Password: $ADMINPASS"
|
||||
} >>~/rustdesk.creds
|
||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
||||
msg_ok "Setup RustDesk"
|
||||
msg_ok "Configured RustDesk Server"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf $TEMPDIR
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -23,8 +23,9 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest
|
||||
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
||||
tar -xf $temp_file
|
||||
mkdir -p /opt/wastebin
|
||||
mv wastebin /opt/wastebin/
|
||||
mv wastebin* /opt/wastebin/
|
||||
chmod +x /opt/wastebin/wastebin
|
||||
chmod +x /opt/wastebin/wastebin-ctl
|
||||
|
||||
mkdir -p /opt/wastebin-data
|
||||
cat <<EOF >/opt/wastebin-data/.env
|
||||
|
||||
@@ -1407,7 +1407,9 @@ function setup_gs() {
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
$STD apt-get install -y build-essential libpng-dev zlib1g-dev
|
||||
./configure >/dev/null && make && sudo make install >/dev/null
|
||||
$STD ./configure >/dev/null
|
||||
$STD make
|
||||
$STD sudo make install
|
||||
local EXIT_CODE=$?
|
||||
hash -r
|
||||
if [[ ! -x "$(command -v gs)" ]]; then
|
||||
|
||||
@@ -39,6 +39,66 @@ function msg_ok() {
|
||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||
}
|
||||
|
||||
function msg_error() { echo -e "${RD}✗ $1${CL}"; }
|
||||
|
||||
pve_check() {
|
||||
if ! command -v pveversion >/dev/null 2>&1; then
|
||||
msg_error "This script can only be run on a Proxmox VE host."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local PVE_VER
|
||||
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
|
||||
|
||||
# Proxmox VE 8.x: allow 8.0 – 8.9
|
||||
if [[ "$PVE_VER" =~ ^9\.([0-9]+)(\.[0-9]+)?$ ]]; then
|
||||
local MINOR="${BASH_REMATCH[1]}"
|
||||
if ((MINOR != 0)); then
|
||||
msg_error "Unsupported Proxmox VE version: $PVE_VER"
|
||||
msg_error "Supported versions: 8.0 – 8.9 or 9.0.x"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Proxmox VE 9.x: allow only 9.0
|
||||
if [[ "$PVE_VER" =~ ^9\.([0-9]+)$ ]]; then
|
||||
local MINOR="${BASH_REMATCH[1]}"
|
||||
if ((MINOR != 0)); then
|
||||
msg_error "Unsupported Proxmox VE version: $PVE_VER"
|
||||
msg_error "Supported versions: 8.0 – 8.9 or 9.0"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
msg_error "Unsupported Proxmox VE version: $PVE_VER"
|
||||
msg_error "Supported versions: 8.0 – 8.9 or 9.0"
|
||||
exit 1
|
||||
}
|
||||
|
||||
detect_codename() {
|
||||
source /etc/os-release
|
||||
if [[ "$ID" != "debian" ]]; then
|
||||
msg_error "Unsupported base OS: $ID (only Proxmox VE / Debian supported)."
|
||||
exit 1
|
||||
fi
|
||||
CODENAME="${VERSION_CODENAME:-}"
|
||||
if [[ -z "$CODENAME" ]]; then
|
||||
msg_error "Could not detect Debian codename."
|
||||
exit 1
|
||||
fi
|
||||
echo "$CODENAME"
|
||||
}
|
||||
|
||||
get_latest_repo_pkg() {
|
||||
local REPO_URL=$1
|
||||
curl -fsSL "$REPO_URL" |
|
||||
grep -oP 'netdata-repo_[^"]+all\.deb' |
|
||||
sort -V |
|
||||
tail -n1
|
||||
}
|
||||
|
||||
install() {
|
||||
header_info
|
||||
while true; do
|
||||
@@ -49,20 +109,23 @@ install() {
|
||||
*) echo "Please answer yes or no." ;;
|
||||
esac
|
||||
done
|
||||
header_info
|
||||
|
||||
read -r -p "Verbose mode? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
STD=""
|
||||
else
|
||||
STD="silent"
|
||||
fi
|
||||
header_info
|
||||
[[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent"
|
||||
|
||||
CODENAME=$(detect_codename)
|
||||
REPO_URL="https://repo.netdata.cloud/repos/repoconfig/debian/${CODENAME}/"
|
||||
|
||||
msg_info "Setting up repository"
|
||||
$STD apt-get install -y debian-keyring
|
||||
curl -fsSL "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb" -o $(basename "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb")
|
||||
$STD dpkg -i netdata-repo_5-1+debian12_all.deb
|
||||
rm -rf netdata-repo_5-1+debian12_all.deb
|
||||
PKG=$(get_latest_repo_pkg "$REPO_URL")
|
||||
if [[ -z "$PKG" ]]; then
|
||||
msg_error "Could not find netdata-repo package for Debian $CODENAME"
|
||||
exit 1
|
||||
fi
|
||||
curl -fsSL "${REPO_URL}${PKG}" -o "$PKG"
|
||||
$STD dpkg -i "$PKG"
|
||||
rm -f "$PKG"
|
||||
msg_ok "Set up repository"
|
||||
|
||||
msg_info "Installing Netdata"
|
||||
@@ -76,46 +139,32 @@ install() {
|
||||
uninstall() {
|
||||
header_info
|
||||
read -r -p "Verbose mode? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
STD=""
|
||||
else
|
||||
STD="silent"
|
||||
fi
|
||||
header_info
|
||||
[[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent"
|
||||
|
||||
msg_info "Uninstalling Netdata"
|
||||
systemctl stop netdata
|
||||
systemctl stop netdata || true
|
||||
rm -rf /var/log/netdata /var/lib/netdata /var/cache/netdata /etc/netdata/go.d
|
||||
rm -rf /etc/apt/trusted.gpg.d/netdata-archive-keyring.gpg /etc/apt/sources.list.d/netdata.list
|
||||
$STD apt-get remove --purge -y netdata netdata-repo
|
||||
systemctl daemon-reload
|
||||
$STD apt autoremove -y
|
||||
$STD userdel netdata
|
||||
$STD userdel netdata || true
|
||||
msg_ok "Uninstalled Netdata"
|
||||
msg_ok "Completed Successfully!\n"
|
||||
}
|
||||
|
||||
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
|
||||
echo -e "This version of Proxmox Virtual Environment is not supported"
|
||||
echo -e "Requires PVE Version 8.0 or higher"
|
||||
echo -e "Exiting..."
|
||||
sleep 2
|
||||
exit
|
||||
fi
|
||||
header_info
|
||||
pve_check
|
||||
|
||||
OPTIONS=(Install "Install NetData on Proxmox VE"
|
||||
Uninstall "Uninstall NetData from Proxmox VE")
|
||||
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" --menu "Select an option:" 10 58 2 \
|
||||
"${OPTIONS[@]}" 3>&1 1>&2 2>&3)
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" \
|
||||
--menu "Select an option:" 10 58 2 "${OPTIONS[@]}" 3>&1 1>&2 2>&3)
|
||||
|
||||
case $CHOICE in
|
||||
"Install")
|
||||
install
|
||||
;;
|
||||
"Uninstall")
|
||||
uninstall
|
||||
;;
|
||||
"Install") install ;;
|
||||
"Uninstall") uninstall ;;
|
||||
*)
|
||||
echo "Exiting..."
|
||||
exit 0
|
||||
|
||||
@@ -480,24 +480,24 @@ EOF
|
||||
fi
|
||||
|
||||
# ---- PVETEST ----
|
||||
if component_exists_in_sources "pvetest"; then
|
||||
msg_ok "'pvetest' repository already exists (skipped)"
|
||||
if component_exists_in_sources "pve-test"; then
|
||||
msg_ok "'pve-test' repository already exists (skipped)"
|
||||
else
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVETEST" \
|
||||
--menu "The 'pvetest' repository can give advanced users access to new features and updates before they are officially released.\n\nAdd (Disabled) 'pvetest' repository (deb822)?" 14 58 2 \
|
||||
--menu "The 'pve-test' repository can give advanced users access to new features and updates before they are officially released.\n\nAdd (Disabled) 'pvetest' repository (deb822)?" 14 58 2 \
|
||||
"yes" " " \
|
||||
"no" " " 3>&2 2>&1 1>&3)
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Adding 'pvetest' repository (deb822, disabled)"
|
||||
cat >/etc/apt/sources.list.d/pvetest.sources <<EOF
|
||||
msg_info "Adding 'pve-test' repository (deb822, disabled)"
|
||||
cat >/etc/apt/sources.list.d/pve-test.sources <<EOF
|
||||
# Types: deb
|
||||
# URIs: http://download.proxmox.com/debian/pve
|
||||
# Suites: trixie
|
||||
# Components: pvetest
|
||||
# Components: pve-test
|
||||
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||
EOF
|
||||
msg_ok "Added 'pvetest' repository"
|
||||
msg_ok "Added 'pve-test' repository"
|
||||
;;
|
||||
no) msg_error "Selected no to Adding 'pvetest' repository" ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user