Compare commits

..

27 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
bf99523a94 Update CHANGELOG.md (#7041)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-21 00:11:36 +00:00
community-scripts-pr-app[bot]
c1b3321801 Update versions.json (#7040)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-21 02:11:13 +02:00
community-scripts-pr-app[bot]
beb9189c72 Update CHANGELOG.md (#7038)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 20:23:50 +00:00
community-scripts-pr-app[bot]
186c82d156 Update CHANGELOG.md (#7036)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 19:48:09 +00:00
Chris
9d431458ca Immich: fix small issue with immich-admin "start" script (#7035) 2025-08-20 21:47:44 +02:00
community-scripts-pr-app[bot]
9c86eea347 Update CHANGELOG.md (#7034)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 18:49:44 +00:00
Tobias
e20af295f0 fix: verbose (#7023) 2025-08-20 20:49:17 +02:00
community-scripts-pr-app[bot]
68832d71fa Update CHANGELOG.md (#7033)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 18:19:08 +00:00
CanbiZ
2e13483f19 Post-Install, change pve-test for trixie (#7031)
* Postinstall, Change pve-test

* MSG improved
2025-08-20 20:18:48 +02:00
community-scripts-pr-app[bot]
c7643ae88c Update CHANGELOG.md (#7032)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 18:08:55 +00:00
Slaviša Arežina
f16f7a130a Fix update (#7027) 2025-08-20 20:08:33 +02:00
community-scripts-pr-app[bot]
94a8fe7132 Update CHANGELOG.md (#7029)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 15:29:42 +00:00
CanbiZ
059d297305 remove unneeded line in paperless 2025-08-20 17:29:21 +02:00
CanbiZ
2bd2a763a1 merge setup_gs from VED to VE 2025-08-20 17:27:19 +02:00
Slaviša Arežina
452ba92a6f Update wastebin.sh (#7024) 2025-08-20 15:54:53 +02:00
community-scripts-pr-app[bot]
d27a875987 Update CHANGELOG.md (#7022)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 13:34:07 +00:00
Slaviša Arežina
14418411f6 Bugfix (#7018) 2025-08-20 15:33:44 +02:00
community-scripts-pr-app[bot]
f13c8ff3ce Update CHANGELOG.md (#7021)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 13:31:06 +00:00
Slaviša Arežina
28dc145811 Update barcode-buddy-install.sh (#7020) 2025-08-20 15:30:43 +02:00
community-scripts-pr-app[bot]
170543bb66 Update CHANGELOG.md (#7019)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 13:18:33 +00:00
CanbiZ
c783024ef0 Refactor: Paperless-ngx (#6938)
* Refactor: Paperless-NGX

* Refactor: Paperless-ngx

* Update paperless-ngx.json

* VED -> VE

* harmonize with VED

* finalize

* Update paperless-ngx.json

* finalize

* fix: casing

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-08-20 15:18:05 +02:00
community-scripts-pr-app[bot]
19403a627b Update CHANGELOG.md (#7016)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 12:00:35 +00:00
CanbiZ
cc08395a1d Feature: Netdata support PVE9 (#7012) 2025-08-20 14:00:10 +02:00
community-scripts-pr-app[bot]
d5093a3d9d Update CHANGELOG.md (#7015)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 11:59:55 +00:00
Slaviša Arežina
52c4f3e0c2 Refactor (#7008) 2025-08-20 13:59:32 +02:00
community-scripts-pr-app[bot]
76a4ec9e06 Update CHANGELOG.md (#7014)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-20 11:07:20 +00:00
CanbiZ
bebf6f65aa PBS: ifupdown2 reload (#7013) 2025-08-20 13:06:54 +02:00
17 changed files with 408 additions and 337 deletions

View File

@@ -10,8 +10,31 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-08-21
## 2025-08-20 ## 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 ## 2025-08-19
### 🆕 New Scripts ### 🆕 New Scripts

View File

@@ -109,10 +109,10 @@ function update_script() {
#!/usr/bin/env bash #!/usr/bin/env bash
set -a set -a
. "$INSTALL_DIR"/.env . ${INSTALL_DIR}/.env
set +a set +a
/usr/bin/node "$APP_DIR"/dist/main.js "\$@" /usr/bin/node ${APP_DIR}/dist/main.js "\$@"
EOF EOF
chmod +x "$INSTALL_DIR"/start.sh chmod +x "$INSTALL_DIR"/start.sh
fi fi
@@ -148,6 +148,7 @@ EOF
export SHARP_FORCE_GLOBAL_LIBVIPS=true export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD npm install sharp $STD npm install sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64} 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" msg_ok "Updated ${APP} web and microservices"
cd "$SRC_DIR"/machine-learning cd "$SRC_DIR"/machine-learning

View File

@@ -29,7 +29,7 @@ function update_script() {
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') 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}" msg_info "Stopping ${APP}"
systemctl stop komga systemctl stop komga
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"

View File

@@ -9,7 +9,7 @@ APP="Paperless-ngx"
var_tags="${var_tags:-document;management}" var_tags="${var_tags:-document;management}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}" var_disk="${var_disk:-12}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -20,70 +20,115 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/paperless ]]; then if [[ ! -d /opt/paperless ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if ! command -v jq &>/dev/null; then
$STD apt-get install -y jq
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"
fi 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" 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_ok "Stopped all Paperless-ngx Services"
msg_info "Updating to ${RELEASE}" if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
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}"
msg_info "Cleaning up" msg_info "Backing up data"
cd ~ mkdir -p /opt/paperless/backup
rm paperless-ngx-$RELEASE.tar.xz cp -r /opt/paperless/data /opt/paperless/backup/
rm -rf paperless-ngx cp -r /opt/paperless/media /opt/paperless/backup/
msg_ok "Cleaned" 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" 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 sleep 1
msg_ok "Started all Paperless-ngx Services" msg_ok "Started all Paperless-ngx Services"
msg_ok "Updated Successfully!\n" msg_ok "Updated Successfully!\n"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
fi
if [ "$UPD" == "2" ]; then
cat paperless.creds
exit
fi
} }
start start
@@ -94,3 +139,4 @@ msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"

View File

@@ -28,13 +28,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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) }') 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) }') 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" msg_info "Stopping $APP"
systemctl stop rustdesk-hbbr systemctl stop rustdesk-hbbr
systemctl stop rustdesk-hbbs systemctl stop rustdesk-hbbs
@@ -43,28 +40,15 @@ function update_script() {
fi fi
msg_ok "Stopped $APP" msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}" fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
TEMPDIR=$(mktemp -d) fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \ fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*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"
msg_info "Starting services" msg_info "Starting services"
systemctl start -q rustdesk-* --all systemctl start -q rustdesk-* --all
msg_ok "Services started" msg_ok "Services started"
msg_ok "Update Successful" msg_ok "Update Successful"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@@ -27,6 +27,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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) }') 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 # Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
msg_info "Running Migration" msg_info "Running Migration"
@@ -66,8 +70,9 @@ EOF
temp_file=$(mktemp) 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" 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 tar -xf $temp_file
cp -f wastebin /opt/wastebin/ cp -f wastebin* /opt/wastebin/
chmod +x /opt/wastebin/wastebin chmod +x /opt/wastebin/wastebin
chmod +x /opt/wastebin/wastebin-ctl
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Wastebin" msg_ok "Updated Wastebin"

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8000, "interface_port": 8000,
"documentation": null, "documentation": "https://docs.paperless-ngx.com/",
"website": "https://docs.paperless-ngx.com/", "website": "https://docs.paperless-ngx.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
"config_path": "/opt/paperless/paperless.conf", "config_path": "/opt/paperless/paperless.conf",
@@ -21,19 +21,19 @@
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 2048, "ram": 2048,
"hdd": 10, "hdd": 12,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": "admin",
"password": null "password": null
}, },
"notes": [ "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" "type": "info"
}, },
{ {

View File

@@ -1,13 +1,113 @@
[ [
{ {
"name": "gtsteffaniak/filebrowser", "name": "ollama/ollama",
"version": "v0.8.0-beta", "version": "v0.11.5-rc5",
"date": "2025-08-19T23:00:51Z" "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", "name": "esphome/esphome",
"version": "2025.7.5", "version": "2025.8.0",
"date": "2025-08-05T03:37:52Z" "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", "name": "TwiN/gatus",
@@ -19,16 +119,6 @@
"version": "v3.1.1", "version": "v3.1.1",
"date": "2025-08-19T20:23:43Z" "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", "name": "HabitRPG/habitica",
"version": "v5.38.4", "version": "v5.38.4",
@@ -64,36 +154,16 @@
"version": "v5.8.0", "version": "v5.8.0",
"date": "2025-08-19T16:46:00Z" "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", "name": "sabnzbd/sabnzbd",
"version": "4.5.2", "version": "4.5.2",
"date": "2025-07-09T19:08:28Z" "date": "2025-07-09T19:08:28Z"
}, },
{
"name": "openhab/openhab-core",
"version": "5.0.1",
"date": "2025-08-19T14:25:29Z"
},
{ {
"name": "traccar/traccar", "name": "traccar/traccar",
"version": "v6.9.0", "version": "v6.9.0",
"date": "2025-08-19T14:22:26Z" "date": "2025-08-19T14:22:26Z"
}, },
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.11",
"date": "2025-08-19T13:49:52Z"
},
{ {
"name": "fallenbagel/jellyseerr", "name": "fallenbagel/jellyseerr",
"version": "preview-dns-cache-manager", "version": "preview-dns-cache-manager",
@@ -109,11 +179,6 @@
"version": "7.2.12", "version": "7.2.12",
"date": "2025-08-19T11:16:17Z" "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", "name": "crowdsecurity/crowdsec",
"version": "v1.6.11", "version": "v1.6.11",
@@ -129,11 +194,6 @@
"version": "v7.12.0", "version": "v7.12.0",
"date": "2025-08-19T06:57:20Z" "date": "2025-08-19T06:57:20Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.22.2311",
"date": "2025-08-19T06:11:09Z"
},
{ {
"name": "morpheus65535/bazarr", "name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10", "version": "v1.5.3-beta.10",
@@ -144,31 +204,11 @@
"version": "v6.3.2", "version": "v6.3.2",
"date": "2025-08-19T04:08:36Z" "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", "name": "plexguide/Huntarr.io",
"version": "8.2.6", "version": "8.2.6",
"date": "2025-08-18T23:31:31Z" "date": "2025-08-18T23:31:31Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.2.7",
"date": "2025-08-07T08:19:29Z"
},
{ {
"name": "bunkerity/bunkerweb", "name": "bunkerity/bunkerweb",
"version": "v1.6.4", "version": "v1.6.4",
@@ -179,16 +219,6 @@
"version": "v1.138.1", "version": "v1.138.1",
"date": "2025-08-18T18:51:50Z" "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", "name": "ventoy/Ventoy",
"version": "v1.1.07", "version": "v1.1.07",
@@ -219,11 +249,6 @@
"version": "pmm-6401-v1.124.0", "version": "pmm-6401-v1.124.0",
"date": "2025-08-18T12:14:50Z" "date": "2025-08-18T12:14:50Z"
}, },
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p10-rc1",
"date": "2025-08-18T09:07:06Z"
},
{ {
"name": "jupyter/notebook", "name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.2", "version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
@@ -311,8 +336,8 @@
}, },
{ {
"name": "runtipi/runtipi", "name": "runtipi/runtipi",
"version": "v4.3.0", "version": "nightly",
"date": "2025-07-05T12:14:52Z" "date": "2025-08-16T16:04:53Z"
}, },
{ {
"name": "blakeblackshear/frigate", "name": "blakeblackshear/frigate",
@@ -374,11 +399,6 @@
"version": "v4.0.2", "version": "v4.0.2",
"date": "2025-08-15T14:12:26Z" "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", "name": "intri-in/manage-my-damn-life-nextjs",
"version": "v0.8.0-release", "version": "v0.8.0-release",
@@ -399,16 +419,6 @@
"version": "v2.11.7", "version": "v2.11.7",
"date": "2025-08-14T17:14:33Z" "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", "name": "booklore-app/booklore",
"version": "v0.37.0", "version": "v0.37.0",
@@ -629,11 +639,6 @@
"version": "6.1.14", "version": "6.1.14",
"date": "2025-08-06T14:24:58Z" "date": "2025-08-06T14:24:58Z"
}, },
{
"name": "cockpit-project/cockpit",
"version": "344",
"date": "2025-08-06T13:09:25Z"
},
{ {
"name": "TryGhost/Ghost-CLI", "name": "TryGhost/Ghost-CLI",
"version": "v1.28.3", "version": "v1.28.3",
@@ -669,11 +674,6 @@
"version": "v25.4.0", "version": "v25.4.0",
"date": "2025-08-05T17:10:01Z" "date": "2025-08-05T17:10:01Z"
}, },
{
"name": "apache/cassandra",
"version": "cassandra-5.0.5",
"date": "2025-08-05T12:08:49Z"
},
{ {
"name": "binwiederhier/ntfy", "name": "binwiederhier/ntfy",
"version": "v2.14.0", "version": "v2.14.0",

View File

@@ -14,7 +14,9 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y redis $STD apt-get install -y \
redis \
sqlite3
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php

View File

@@ -50,7 +50,7 @@ echo "ghost-user ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ghost-user
mkdir -p /var/www/ghost mkdir -p /var/www/ghost
chown -R ghost-user:ghost-user /var/www/ghost chown -R ghost-user:ghost-user /var/www/ghost
chmod 775 /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 rm /etc/sudoers.d/ghost-user
msg_ok "Creating Service" msg_ok "Creating Service"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster) | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://docs.paperless-ngx.com/ # Source: https://docs.paperless-ngx.com/
@@ -29,22 +29,16 @@ $STD apt-get install -y \
automake \ automake \
libtool \ libtool \
pkg-config \ pkg-config \
git \
libtiff-dev \ libtiff-dev \
libpng-dev \ libpng-dev \
libleptonica-dev libleptonica-dev
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PG_VERSION="16" setup_postgresql PG_VERSION="16" setup_postgresql
PYTHON_VERSION="3.13" setup_uv
msg_info "Setup Python3" fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
$STD apt-get install -y \ fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
python3 \ setup_gs
python3-pip \
python3-dev \
python3-setuptools \
python3-wheel
msg_ok "Setup Python3"
msg_info "Installing OCR Dependencies (Patience)" msg_info "Installing OCR Dependencies (Patience)"
$STD apt-get install -y \ $STD apt-get install -y \
@@ -57,18 +51,9 @@ $STD apt-get install -y \
zlib1g \ zlib1g \
tesseract-ocr \ tesseract-ocr \
tesseract-ocr-eng 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_ok "Installed OCR Dependencies"
msg_info "Installing JBIG2" msg_info "Setup JBIG2"
$STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc
cd /opt/jbig2enc cd /opt/jbig2enc
$STD bash ./autogen.sh $STD bash ./autogen.sh
$STD bash ./configure $STD bash ./configure
@@ -77,30 +62,6 @@ $STD make install
rm -rf /opt/jbig2enc rm -rf /opt/jbig2enc
msg_ok "Installed JBIG2" 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" msg_info "Setting up PostgreSQL database"
DB_NAME=paperlessdb DB_NAME=paperlessdb
DB_USER=paperless 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 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 Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\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 msg_info "Installing Natural Language Toolkit (Patience)"
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then $STD uv run -- python -m nltk.downloader -d /usr/share/nltk_data all
msg_info "Installing Adminer" sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
$STD apt install -y adminer msg_ok "Installed Natural Language Toolkit"
$STD a2enconf adminer
systemctl reload apache2 msg_info "Setup Paperless-ngx"
IP=$(hostname -I | awk '{print $1}') cd /opt/paperless
echo "" >>~/paperless.creds $STD uv sync --all-extras
echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds mkdir -p {consume,data,media,static}
echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds sed -i \
echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds -e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' \
echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
msg_ok "Installed Adminer" -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
fi -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" 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 | uv run -- python /opt/paperless/src/manage.py shell
cat <<EOF | python3 /opt/paperless/src/manage.py shell
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
UserModel = get_user_model() UserModel = get_user_model()
user = UserModel.objects.create_user('admin', password='$DB_PASS') user = UserModel.objects.create_user('admin', password='$DB_PASS')
@@ -152,10 +113,15 @@ user.is_superuser = True
user.is_staff = True user.is_staff = True
user.save() user.save()
EOF EOF
echo "" >>~/paperless.creds {
echo -e "Paperless-ngx WebUI User: \e[32madmin\e[0m" >>~/paperless.creds echo "Paperless-ngx-Credentials"
echo -e "Paperless-ngx WebUI Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds echo "Paperless-ngx Database Name: $DB_NAME"
echo "" >>~/paperless.creds 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_ok "Set up admin Paperless-ngx User & Password"
msg_info "Creating Services" msg_info "Creating Services"
@@ -166,7 +132,7 @@ Requires=redis.service
[Service] [Service]
WorkingDirectory=/opt/paperless/src WorkingDirectory=/opt/paperless/src
ExecStart=celery --app paperless beat --loglevel INFO ExecStart=uv run -- celery --app paperless beat --loglevel INFO
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
@@ -180,7 +146,7 @@ After=postgresql.service
[Service] [Service]
WorkingDirectory=/opt/paperless/src WorkingDirectory=/opt/paperless/src
ExecStart=celery --app paperless worker --loglevel INFO ExecStart=uv run -- celery --app paperless worker --loglevel INFO
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
@@ -194,7 +160,7 @@ Requires=redis.service
[Service] [Service]
WorkingDirectory=/opt/paperless/src WorkingDirectory=/opt/paperless/src
ExecStartPre=/bin/sleep 2 ExecStartPre=/bin/sleep 2
ExecStart=python3 manage.py document_consumer ExecStart=uv run -- python manage.py document_consumer
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
@@ -209,7 +175,7 @@ Requires=redis.service
[Service] [Service]
WorkingDirectory=/opt/paperless/src 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_HOST=::
Environment=GRANIAN_PORT=8000 Environment=GRANIAN_PORT=8000
Environment=GRANIAN_WORKERS=1 Environment=GRANIAN_WORKERS=1
@@ -217,13 +183,14 @@ Environment=GRANIAN_WORKERS=1
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
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
msg_ok "Created Services" 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 motd_ssh
customize customize

View File

@@ -19,6 +19,8 @@ cat <<EOF >>/etc/apt/sources.list
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
EOF EOF
$STD apt-get update $STD apt-get update
export DEBIAN_FRONTEND=noninteractive
export IFUPDOWN2_NO_IFRELOAD=1
$STD apt-get install -y proxmox-backup-server $STD apt-get install -y proxmox-backup-server
msg_ok "Installed Proxmox Backup Server" msg_ok "Installed Proxmox Backup Server"

View File

@@ -13,21 +13,12 @@ setting_up_container
network_check network_check
update_os 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}') msg_info "Configuring RustDesk Server"
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
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
cd /var/lib/rustdesk-api cd /var/lib/rustdesk-api
$STD rustdesk-api reset-admin-pwd $ADMINPASS $STD rustdesk-api reset-admin-pwd $ADMINPASS
@@ -37,14 +28,12 @@ $STD rustdesk-api reset-admin-pwd $ADMINPASS
echo "Username: admin" echo "Username: admin"
echo "Password: $ADMINPASS" echo "Password: $ADMINPASS"
} >>~/rustdesk.creds } >>~/rustdesk.creds
echo "${RELEASE}" >/opt/rustdesk_version.txt msg_ok "Configured RustDesk Server"
msg_ok "Setup RustDesk"
motd_ssh motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf $TEMPDIR
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -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" 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 tar -xf $temp_file
mkdir -p /opt/wastebin mkdir -p /opt/wastebin
mv wastebin /opt/wastebin/ mv wastebin* /opt/wastebin/
chmod +x /opt/wastebin/wastebin chmod +x /opt/wastebin/wastebin
chmod +x /opt/wastebin/wastebin-ctl
mkdir -p /opt/wastebin-data mkdir -p /opt/wastebin-data
cat <<EOF >/opt/wastebin-data/.env cat <<EOF >/opt/wastebin-data/.env

View File

@@ -1407,7 +1407,9 @@ function setup_gs() {
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
} }
$STD apt-get install -y build-essential libpng-dev zlib1g-dev $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=$? local EXIT_CODE=$?
hash -r hash -r
if [[ ! -x "$(command -v gs)" ]]; then if [[ ! -x "$(command -v gs)" ]]; then

View File

@@ -39,30 +39,93 @@ function msg_ok() {
echo -e "${BFR} ${CM} ${GN}${msg}${CL}" 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() { install() {
header_info header_info
while true; do while true; do
read -p "Are you sure you want to install NetData on Proxmox VE host. Proceed(y/n)?" yn read -p "Are you sure you want to install NetData on Proxmox VE host. Proceed(y/n)? " yn
case $yn in case $yn in
[Yy]*) break ;; [Yy]*) break ;;
[Nn]*) exit ;; [Nn]*) exit ;;
*) echo "Please answer yes or no." ;; *) echo "Please answer yes or no." ;;
esac esac
done done
header_info
read -r -p "Verbose mode? <y/N> " prompt read -r -p "Verbose mode? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then [[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent"
STD=""
else CODENAME=$(detect_codename)
STD="silent" REPO_URL="https://repo.netdata.cloud/repos/repoconfig/debian/${CODENAME}/"
fi
header_info
msg_info "Setting up repository" msg_info "Setting up repository"
$STD apt-get install -y debian-keyring $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") PKG=$(get_latest_repo_pkg "$REPO_URL")
$STD dpkg -i netdata-repo_5-1+debian12_all.deb if [[ -z "$PKG" ]]; then
rm -rf netdata-repo_5-1+debian12_all.deb 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_ok "Set up repository"
msg_info "Installing Netdata" msg_info "Installing Netdata"
@@ -76,46 +139,32 @@ install() {
uninstall() { uninstall() {
header_info header_info
read -r -p "Verbose mode? <y/N> " prompt read -r -p "Verbose mode? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then [[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent"
STD=""
else
STD="silent"
fi
header_info
msg_info "Uninstalling Netdata" 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 /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 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 $STD apt-get remove --purge -y netdata netdata-repo
systemctl daemon-reload systemctl daemon-reload
$STD apt autoremove -y $STD apt autoremove -y
$STD userdel netdata $STD userdel netdata || true
msg_ok "Uninstalled Netdata" msg_ok "Uninstalled Netdata"
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
} }
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then header_info
echo -e "This version of Proxmox Virtual Environment is not supported" pve_check
echo -e "Requires PVE Version 8.0 or higher"
echo -e "Exiting..."
sleep 2
exit
fi
OPTIONS=(Install "Install NetData on Proxmox VE" OPTIONS=(Install "Install NetData on Proxmox VE"
Uninstall "Uninstall NetData from Proxmox VE") Uninstall "Uninstall NetData from Proxmox VE")
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" --menu "Select an option:" 10 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" \
"${OPTIONS[@]}" 3>&1 1>&2 2>&3) --menu "Select an option:" 10 58 2 "${OPTIONS[@]}" 3>&1 1>&2 2>&3)
case $CHOICE in case $CHOICE in
"Install") "Install") install ;;
install "Uninstall") uninstall ;;
;;
"Uninstall")
uninstall
;;
*) *)
echo "Exiting..." echo "Exiting..."
exit 0 exit 0

View File

@@ -480,24 +480,24 @@ EOF
fi fi
# ---- PVETEST ---- # ---- PVETEST ----
if component_exists_in_sources "pvetest"; then if component_exists_in_sources "pve-test"; then
msg_ok "'pvetest' repository already exists (skipped)" msg_ok "'pve-test' repository already exists (skipped)"
else else
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVETEST" \ 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" " " \ "yes" " " \
"no" " " 3>&2 2>&1 1>&3) "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Adding 'pvetest' repository (deb822, disabled)" msg_info "Adding 'pve-test' repository (deb822, disabled)"
cat >/etc/apt/sources.list.d/pvetest.sources <<EOF cat >/etc/apt/sources.list.d/pve-test.sources <<EOF
# Types: deb # Types: deb
# URIs: http://download.proxmox.com/debian/pve # URIs: http://download.proxmox.com/debian/pve
# Suites: trixie # Suites: trixie
# Components: pvetest # Components: pve-test
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg # Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF EOF
msg_ok "Added 'pvetest' repository" msg_ok "Added 'pve-test' repository"
;; ;;
no) msg_error "Selected no to Adding 'pvetest' repository" ;; no) msg_error "Selected no to Adding 'pvetest' repository" ;;
esac esac