Compare commits

..

9 Commits

Author SHA1 Message Date
MickLesk 51a1b55c9e Termix: precreate db/data directory on fresh installs 2026-07-24 08:55:03 +02:00
MickLesk 4de49c464b Termix: migrate database to new db/data layout introduced in 2.5.1, fail fast on backend build errors 2026-07-24 08:52:53 +02:00
community-scripts-pr-app[bot] 673cab07df Update CHANGELOG.md (#15988)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-23 21:19:23 +00:00
CanbiZ (MickLesk) d2b75f4c5d IronClaw: pin to v0.29.1, 1.0 Reborn CLI/config is incompatible (#15982) 2026-07-23 23:19:05 +02:00
community-scripts-pr-app[bot] d599a3cad4 Update CHANGELOG.md (#15987)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-23 21:18:53 +00:00
community-scripts-pr-app[bot] 956d30329d Update CHANGELOG.md (#15986)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-23 21:18:41 +00:00
CanbiZ (MickLesk) b2f3e192af Cockpit: default to Debian 13, 45Drives now ships Trixie packages | little refactor (#15984) 2026-07-23 23:18:28 +02:00
community-scripts-pr-app[bot] 89f9a40296 Update CHANGELOG.md (#15985)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-23 21:18:18 +00:00
Tom Frenzel d3b3c402e4 Paperless-ngx: Support v3 (#15221) 2026-07-23 23:17:55 +02:00
12 changed files with 176 additions and 54 deletions
+6
View File
@@ -511,8 +511,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- IronClaw: pin to v0.29.1, 1.0 Reborn CLI/config is incompatible [@MickLesk](https://github.com/MickLesk) ([#15982](https://github.com/community-scripts/ProxmoxVE/pull/15982))
- update authentik to 2026.5.6 [@thieneret](https://github.com/thieneret) ([#15973](https://github.com/community-scripts/ProxmoxVE/pull/15973)) - update authentik to 2026.5.6 [@thieneret](https://github.com/thieneret) ([#15973](https://github.com/community-scripts/ProxmoxVE/pull/15973))
- #### ✨ New Features
- Cockpit: default to Debian 13, 45Drives now ships Trixie packages | little refactor [@MickLesk](https://github.com/MickLesk) ([#15984](https://github.com/community-scripts/ProxmoxVE/pull/15984))
- Paperless-ngx: Support v3 [@tomfrenzel](https://github.com/tomfrenzel) ([#15221](https://github.com/community-scripts/ProxmoxVE/pull/15221))
## 2026-07-22 ## 2026-07-22
### 🆕 New Scripts ### 🆕 New Scripts
+3 -2
View File
@@ -28,7 +28,8 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw"; then RELEASE="ironclaw-v0.29.1"
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then
msg_info "Stopping Service" msg_info "Stopping Service"
rc-service ironclaw stop 2>/dev/null || true rc-service ironclaw stop 2>/dev/null || true
msg_ok "Stopped Service" msg_ok "Stopped Service"
@@ -37,7 +38,7 @@ function update_script() {
cp /root/.ironclaw/.env /root/ironclaw.env.bak cp /root/.ironclaw/.env /root/ironclaw.env.bak
msg_ok "Backed up Configuration" msg_ok "Backed up Configuration"
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \ fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \
"ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz"
chmod +x /usr/local/bin/ironclaw chmod +x /usr/local/bin/ironclaw
+17 -1
View File
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}" var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -33,6 +33,22 @@ function update_script() {
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
if [[ ! -f /etc/apt/sources.list.d/45drives.sources ]]; then
[[ "$(arch_resolve)" == "arm64" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator now? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing 45Drives' cockpit extensions"
setup_deb822_repo "45drives" \
"https://repo.45drives.com/key/gpg.asc" \
"https://repo.45drives.com/enterprise/debian" \
"$(get_os_info codename)" \
"main" \
"amd64"
$STD apt install -y cockpit-file-sharing cockpit-identities cockpit-navigator
msg_ok "Installed 45Drives' cockpit extensions"
fi
fi
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }
+3 -2
View File
@@ -30,7 +30,8 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw"; then RELEASE="ironclaw-v0.29.1"
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop ironclaw systemctl stop ironclaw
msg_ok "Stopped Service" msg_ok "Stopped Service"
@@ -39,7 +40,7 @@ function update_script() {
cp /root/.ironclaw/.env /root/ironclaw.env.bak cp /root/.ironclaw/.env /root/ironclaw.env.bak
msg_ok "Backed up Configuration" msg_ok "Backed up Configuration"
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \ fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \
"ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz" "ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz"
chmod +x /usr/local/bin/ironclaw chmod +x /usr/local/bin/ironclaw
+112 -9
View File
@@ -49,22 +49,44 @@ function update_script() {
fi fi
fi fi
RELEASE="v2.20.15" local PAPERLESS_INSTALLED_VERSION="" BRIDGE_UPDATE=0
if check_for_gh_release "paperless" "paperless-ngx/paperless-ngx" "${RELEASE}" "v3 needs further testing"; then [[ -f ~/.paperless ]] && PAPERLESS_INSTALLED_VERSION="$(<~/.paperless)"
PAPERLESS_INSTALLED_VERSION="${PAPERLESS_INSTALLED_VERSION#v}"
if [[ "$PAPERLESS_INSTALLED_VERSION" == 2.* && "$PAPERLESS_INSTALLED_VERSION" != "2.20.15" ]]; then
BRIDGE_UPDATE=1
fi
if check_for_gh_release "paperless" "paperless-ngx/paperless-ngx"; then
if [[ "$PAPERLESS_INSTALLED_VERSION" == "2.20.15" ]]; then
msg_warn "Paperless-ngx v3 does not support encrypted documents anymore."
echo -e "${GATEWAY}${BGN}https://docs.paperless-ngx.com/migration-v3/#encryption-support${CL}"
msg_warn "Before continuing make sure that you do not use encryption or have decrypted all documents."
echo ""
read -rp "Do you want to continue with the update? (y/N): " MIGRATE
echo
if [[ ! "$MIGRATE" =~ ^[Yy]$ ]]; then
msg_info "Update aborted. Decrypt all documents before upgrading to v3."
exit 0
fi
fi
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 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"
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
msg_info "Backing up configuration" msg_info "Backing up configuration"
local BACKUP_DIR="/opt/paperless_backup_$$" local BACKUP_DIR="/opt/paperless_backup_$$"
mkdir -p "$BACKUP_DIR" mkdir -p "$BACKUP_DIR"
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/" [[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
msg_ok "Backup completed to $BACKUP_DIR" msg_ok "Backup completed to $BACKUP_DIR"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "${RELEASE}" "/opt/paperless" "paperless*tar.xz" if ((BRIDGE_UPDATE)); then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "v2.20.15" "/opt/paperless" "paperless*tar.xz"
else
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
. /etc/os-release . /etc/os-release
@@ -73,18 +95,94 @@ function update_script() {
else else
ensure_dependencies ghostscript ensure_dependencies ghostscript
fi fi
ensure_dependencies gnupg
cp -r "$BACKUP_DIR"/* /opt/paperless/
if ((BRIDGE_UPDATE == 0)) && [[ "$PAPERLESS_INSTALLED_VERSION" == 2.* ]]; then
msg_info "Migrating Paperless-ngx v2 configuration to v3"
PAPERLESS_CONF="/opt/paperless/paperless.conf"
SECRET_KEY_CURRENT="$(sed -n 's|^PAPERLESS_SECRET_KEY=||p' "$PAPERLESS_CONF" | tail -n1)"
DBENGINE="$(sed -n 's|^PAPERLESS_DBENGINE=||p' "$PAPERLESS_CONF" | tail -n1)"
DB_OPTIONS_DEPRECATED="$(sed -n '/^PAPERLESS_DBSSLMODE=/p;/^PAPERLESS_DBSSLROOTCERT=/p;/^PAPERLESS_DBSSLCERT=/p;/^PAPERLESS_DBSSLKEY=/p;/^PAPERLESS_DB_POOLSIZE=/p;/^PAPERLESS_DB_TIMEOUT=/p' "$PAPERLESS_CONF")"
CONSUMER_POLLING="$(sed -n 's|^PAPERLESS_CONSUMER_POLLING=||p' "$PAPERLESS_CONF" | tail -n1)"
CONSUMER_POLLING_INTERVAL="$(sed -n 's|^PAPERLESS_CONSUMER_POLLING_INTERVAL=||p' "$PAPERLESS_CONF" | tail -n1)"
CONSUMER_INOTIFY_DELAY="$(sed -n 's|^PAPERLESS_CONSUMER_INOTIFY_DELAY=||p' "$PAPERLESS_CONF" | tail -n1)"
CONSUMER_STABILITY_DELAY="$(sed -n 's|^PAPERLESS_CONSUMER_STABILITY_DELAY=||p' "$PAPERLESS_CONF" | tail -n1)"
OCR_MODE="$(sed -n 's|^PAPERLESS_OCR_MODE=||p' "$PAPERLESS_CONF" | tail -n1)"
OCR_SKIP_ARCHIVE="$(sed -n 's|^PAPERLESS_OCR_SKIP_ARCHIVE_FILE=||p' "$PAPERLESS_CONF" | tail -n1)"
ARCHIVE_FILE_GENERATION="$(sed -n 's|^PAPERLESS_ARCHIVE_FILE_GENERATION=||p' "$PAPERLESS_CONF" | tail -n1)"
CONSUMER_DELETE_DUPLICATES="$(sed -n 's|^PAPERLESS_CONSUMER_DELETE_DUPLICATES=||p' "$PAPERLESS_CONF" | tail -n1)"
sed -i \
-e '/^PAPERLESS_CONSUMER_POLLING=/d' \
-e '/^PAPERLESS_CONSUMER_INOTIFY_DELAY=/d' \
-e '/^PAPERLESS_CONSUMER_POLLING_DELAY=/d' \
-e '/^PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=/d' \
-e '/^PAPERLESS_CONSUMER_BARCODE_SCANNER=/d' \
-e '/^PAPERLESS_PASSPHRASE=/d' \
-e '/^PAPERLESS_OCR_SKIP_ARCHIVE_FILE=/d' \
-e 's|^PAPERLESS_OCR_MODE="\?skip"\?$|PAPERLESS_OCR_MODE=auto|' \
-e 's|^PAPERLESS_OCR_MODE="\?skip_noarchive"\?$|PAPERLESS_OCR_MODE=auto|' \
"$PAPERLESS_CONF"
if [[ -n "$DB_OPTIONS_DEPRECATED" ]]; then
msg_warn "Deprecated Paperless DB options detected; migrate them manually to PAPERLESS_DB_OPTIONS."
echo -e "${GATEWAY}${BGN}https://docs.paperless-ngx.com/migration-v3/#database-advanced-options${CL}"
fi
if [[ -z "$SECRET_KEY_CURRENT" || "$SECRET_KEY_CURRENT" == "change-me" ]]; then
SECRET_KEY="$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | od -An -tx1 | tr -d ' \n')"
sed -i \
-e '/^#\?PAPERLESS_SECRET_KEY=/d' \
-e "\$a\\PAPERLESS_SECRET_KEY=$SECRET_KEY" \
"$PAPERLESS_CONF"
printf "Paperless-ngx Secret Key: %s\n" "$SECRET_KEY" >>~/paperless-ngx.creds
fi
[[ -z "$DBENGINE" ]] && sed -i '$a\PAPERLESS_DBENGINE=postgresql' "$PAPERLESS_CONF"
[[ -n "$CONSUMER_POLLING" && -z "$CONSUMER_POLLING_INTERVAL" ]] &&
sed -i "\$a\\PAPERLESS_CONSUMER_POLLING_INTERVAL=$CONSUMER_POLLING" "$PAPERLESS_CONF"
[[ -n "$CONSUMER_INOTIFY_DELAY" && -z "$CONSUMER_STABILITY_DELAY" ]] &&
sed -i "\$a\\PAPERLESS_CONSUMER_STABILITY_DELAY=$CONSUMER_INOTIFY_DELAY" "$PAPERLESS_CONF"
[[ -z "$CONSUMER_DELETE_DUPLICATES" ]] &&
sed -i '$a\PAPERLESS_CONSUMER_DELETE_DUPLICATES=true' "$PAPERLESS_CONF"
if [[ -z "$ARCHIVE_FILE_GENERATION" ]]; then
if [[ "$OCR_MODE" == "skip_noarchive" || "$OCR_MODE" == "\"skip_noarchive\"" ]]; then
sed -i '$a\PAPERLESS_ARCHIVE_FILE_GENERATION=never' "$PAPERLESS_CONF"
elif [[ "$OCR_SKIP_ARCHIVE" == "never" || "$OCR_SKIP_ARCHIVE" == "\"never\"" ]]; then
sed -i '$a\PAPERLESS_ARCHIVE_FILE_GENERATION=always' "$PAPERLESS_CONF"
elif [[ "$OCR_SKIP_ARCHIVE" == "with_text" || "$OCR_SKIP_ARCHIVE" == "\"with_text\"" ]]; then
sed -i '$a\PAPERLESS_ARCHIVE_FILE_GENERATION=auto' "$PAPERLESS_CONF"
elif [[ "$OCR_SKIP_ARCHIVE" == "always" || "$OCR_SKIP_ARCHIVE" == "\"always\"" ]]; then
sed -i '$a\PAPERLESS_ARCHIVE_FILE_GENERATION=never' "$PAPERLESS_CONF"
fi
fi
[[ -n "$(sed -n '/^PAPERLESS_CONSUMER_IGNORE_PATTERNS=/p' "$PAPERLESS_CONF")" ]] &&
msg_warn "PAPERLESS_CONSUMER_IGNORE_PATTERNS now uses regex patterns; please verify custom values."
[[ -n "$(sed -n '/^PAPERLESS_PRE_CONSUME_SCRIPT=/p;/^PAPERLESS_POST_CONSUME_SCRIPT=/p' "$PAPERLESS_CONF")" ]] &&
msg_warn "Pre/post consume scripts no longer receive positional arguments in v3; please verify custom scripts."
msg_ok "Migrated Paperless-ngx configuration"
fi
msg_info "Updating Paperless-ngx" msg_info "Updating Paperless-ngx"
cp -r "$BACKUP_DIR"/* /opt/paperless/ if ((BRIDGE_UPDATE == 0)); then
sed -i 's|^ExecStart=.*|ExecStart=uv run -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"|' /etc/systemd/system/paperless-webserver.service
$STD systemctl daemon-reload
fi
cd /opt/paperless cd /opt/paperless
$STD uv sync --all-extras $STD uv sync --all-extras
cd /opt/paperless/src cd /opt/paperless/src
$STD uv run -- python manage.py migrate $STD uv run -- python manage.py migrate
msg_ok "Updated Paperless-ngx" msg_ok "Updated Paperless-ngx"
if ((BRIDGE_UPDATE == 0)) && [[ "$PAPERLESS_INSTALLED_VERSION" == "2.20.15" ]]; then
$STD apt -y purge libzbar0t64 libzbar0 2>/dev/null || true
$STD apt -y autoremove 2>/dev/null || true
fi
rm -rf "$BACKUP_DIR" rm -rf "$BACKUP_DIR"
else else
BRIDGE_UPDATE=1
msg_warn "You are about to migrate your Paperless-ngx installation to uv!" 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:" msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
echo -e " 1. Stop the container: pct stop <CTID>" echo -e " 1. Stop the container: pct stop <CTID>"
@@ -139,7 +237,7 @@ function update_script() {
msg_ok "Backup completed to $BACKUP_DIR" msg_ok "Backup completed to $BACKUP_DIR"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "${RELEASE}" "/opt/paperless" "paperless*tar.xz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "v2.20.15" "/opt/paperless" "paperless*tar.xz"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
. /etc/os-release . /etc/os-release
@@ -150,14 +248,15 @@ function update_script() {
ensure_dependencies ghostscript ensure_dependencies ghostscript
msg_ok "Installed Ghostscript" msg_ok "Installed Ghostscript"
fi fi
ensure_dependencies gnupg
msg_info "Updating Paperless-ngx" msg_info "Updating Paperless-ngx to v2.20.15"
cp -r "$BACKUP_DIR"/* /opt/paperless/ cp -r "$BACKUP_DIR"/* /opt/paperless/
cd /opt/paperless cd /opt/paperless
$STD uv sync --all-extras $STD uv sync --all-extras
cd /opt/paperless/src cd /opt/paperless/src
$STD uv run -- python manage.py migrate $STD uv run -- python manage.py migrate
msg_ok "Paperless-ngx migration and update completed" msg_ok "Migrated to uv and updated to v2.20.15 (required before v3)"
rm -rf "$BACKUP_DIR" rm -rf "$BACKUP_DIR"
if [[ -d /opt/paperless/backup ]]; then if [[ -d /opt/paperless/backup ]]; then
@@ -172,6 +271,10 @@ function update_script() {
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue 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"
if ((BRIDGE_UPDATE)); then
msg_custom "️" "${YW}" "Paperless-ngx is now on v2.20.15. Run the update again to upgrade to v3."
exit
fi
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi
exit exit
+12 -1
View File
@@ -154,9 +154,16 @@ EOF
/opt/termix/nginx \ /opt/termix/nginx \
/opt/termix/nginx/logs \ /opt/termix/nginx/logs \
/opt/termix/nginx/cache \ /opt/termix/nginx/cache \
/opt/termix/nginx/client_body /opt/termix/nginx/client_body \
/opt/termix/db/data
msg_ok "Recreated Directories" msg_ok "Recreated Directories"
if [[ -f /opt/termix/data/db.sqlite.encrypted && ! -f /opt/termix/db/data/db.sqlite.encrypted ]]; then
msg_info "Migrating Database to new layout"
cp -a /opt/termix/data/db.sqlite.encrypted /opt/termix/db/data/db.sqlite.encrypted
msg_ok "Migrated Database to new layout"
fi
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/termix cd /opt/termix
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
@@ -168,6 +175,10 @@ EOF
msg_info "Building Backend" msg_info "Building Backend"
$STD npm rebuild better-sqlite3 --force $STD npm rebuild better-sqlite3 --force
$STD npm run build:backend $STD npm run build:backend
if [[ ! -f /opt/termix/dist/backend/backend/starter.js ]]; then
msg_error "Backend build failed: /opt/termix/dist/backend/backend/starter.js was not created"
exit 1
fi
msg_ok "Built Backend" msg_ok "Built Backend"
msg_info "Setting up Production Dependencies" msg_info "Setting up Production Dependencies"
+1 -1
View File
@@ -31,7 +31,7 @@ $STD su -s /bin/sh postgres -c "psql -c \"CREATE DATABASE ironclaw WITH OWNER ir
$STD su -s /bin/sh postgres -c "psql -d ironclaw -c \"CREATE EXTENSION IF NOT EXISTS vector;\"" $STD su -s /bin/sh postgres -c "psql -d ironclaw -c \"CREATE EXTENSION IF NOT EXISTS vector;\""
msg_ok "Set up Database" msg_ok "Set up Database"
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \ fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \
"ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz"
chmod +x /usr/local/bin/ironclaw chmod +x /usr/local/bin/ironclaw
+12 -21
View File
@@ -15,42 +15,33 @@ network_check
update_os update_os
msg_info "Installing Cockpit" msg_info "Installing Cockpit"
source /etc/os-release CODENAME=$(get_os_info codename)
cat <<EOF >/etc/apt/sources.list.d/debian-backports.sources cat <<EOF >/etc/apt/sources.list.d/debian-backports.sources
Types: deb deb-src Types: deb deb-src
URIs: http://deb.debian.org/debian URIs: http://deb.debian.org/debian
Suites: ${VERSION_CODENAME}-backports Suites: ${CODENAME}-backports
Components: main Components: main
Enabled: yes Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF EOF
$STD apt update $STD apt update
$STD apt install -t ${VERSION_CODENAME}-backports cockpit cracklib-runtime --no-install-recommends -y $STD apt install -t ${CODENAME}-backports cockpit cracklib-runtime --no-install-recommends -y
sed -i "s/root//g" /etc/cockpit/disallowed-users sed -i "s/root//g" /etc/cockpit/disallowed-users
msg_ok "Installed Cockpit" msg_ok "Installed Cockpit"
# 45Drives only publishes amd64 packages # 45Drives only publishes amd64 packages
[[ "$(arch_resolve)" == "arm64" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt [[ "$(arch_resolve)" == "arm64" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
install_45drives=true msg_info "Installing 45Drives' cockpit extensions"
if [[ "${VERSION_ID}" -ge 13 ]]; then setup_deb822_repo "45drives" \
read -r -p "Debian ${VERSION_ID} is not officially supported by 45Drives yet, would you like to continue anyway? <y/N> " prompt "https://repo.45drives.com/key/gpg.asc" \
if [[ ! "${prompt,,}" =~ ^(y|yes)$ ]]; then "https://repo.45drives.com/enterprise/debian" \
install_45drives=false "${CODENAME}" \
fi "main" \
fi "amd64"
if [[ "$install_45drives" == "true" ]]; then $STD apt install -y cockpit-file-sharing cockpit-identities cockpit-navigator
msg_info "Installing 45Drives' cockpit extensions" msg_ok "Installed 45Drives' cockpit extensions"
setup_deb822_repo "45drives" \
"https://repo.45drives.com/key/gpg.asc" \
"https://repo.45drives.com/enterprise/debian" \
"bookworm" \
"main" \
"amd64"
$STD apt install -y cockpit-file-sharing cockpit-identities cockpit-navigator
msg_ok "Installed 45Drives' cockpit extensions"
fi
fi fi
motd_ssh motd_ssh
+1 -1
View File
@@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
PG_DB_NAME="ironclaw" PG_DB_USER="ironclaw" PG_DB_EXTENSIONS="vector" setup_postgresql_db PG_DB_NAME="ironclaw" PG_DB_USER="ironclaw" PG_DB_EXTENSIONS="vector" setup_postgresql_db
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \ fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \
"ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz" "ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz"
chmod +x /usr/local/bin/ironclaw chmod +x /usr/local/bin/ironclaw
+6 -7
View File
@@ -19,10 +19,10 @@ $STD apt install -y \
build-essential \ build-essential \
imagemagick \ imagemagick \
fonts-liberation \ fonts-liberation \
gnupg \
optipng \ optipng \
libpq-dev \ libpq-dev \
libmagic-dev \ libmagic-dev \
libzbar0t64 \
poppler-utils \ poppler-utils \
default-libmysqlclient-dev \ default-libmysqlclient-dev \
automake \ automake \
@@ -43,16 +43,15 @@ $STD apt install -y \
ghostscript ghostscript
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PG_VERSION="16" setup_postgresql PG_VERSION="18" setup_postgresql
PG_DB_NAME="paperlessdb" PG_DB_USER="paperless" setup_postgresql_db PG_DB_NAME="paperlessdb" PG_DB_USER="paperless" setup_postgresql_db
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "v2.20.15" "/opt/paperless" "paperless*tar.xz" fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
msg_info "Setup Paperless-ngx" msg_info "Setup Paperless-ngx"
cd /opt/paperless cd /opt/paperless
rm -rf /opt/paperless/docker rm -rf /opt/paperless/docker
$STD uv sync --all-extras $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 /opt/paperless_data/{consume,data,media,trash} mkdir -p /opt/paperless_data/{consume,data,media,trash}
mkdir -p /opt/paperless/static mkdir -p /opt/paperless/static
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)" SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
@@ -69,12 +68,12 @@ sed -i \
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless_data/media|" \ -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless_data/media|" \
-e "s|#PAPERLESS_EMPTY_TRASH_DIR=|PAPERLESS_EMPTY_TRASH_DIR=/opt/paperless_data/trash|" \ -e "s|#PAPERLESS_EMPTY_TRASH_DIR=|PAPERLESS_EMPTY_TRASH_DIR=/opt/paperless_data/trash|" \
-e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \ -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \
-e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \ -e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBENGINE=postgresql\nPAPERLESS_DBHOST=localhost|' \
-e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \ -e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$PG_DB_NAME|" \ -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$PG_DB_NAME|" \
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$PG_DB_USER|" \ -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$PG_DB_USER|" \
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$PG_DB_PASS|" \ -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$PG_DB_PASS|" \
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \ -e "s|PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
/opt/paperless/paperless.conf /opt/paperless/paperless.conf
cd /opt/paperless/src cd /opt/paperless/src
set -a set -a
@@ -152,7 +151,7 @@ Requires=redis.service
[Service] [Service]
WorkingDirectory=/opt/paperless/src WorkingDirectory=/opt/paperless/src
ExecStart=uv run -- granian --interface asgi --ws "paperless.asgi:application" ExecStart=uv run -- granian --interface asginl --ws --loop uvloop "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
+1 -8
View File
@@ -51,14 +51,7 @@ msg_ok "Ran Database Migrations"
msg_info "Creating Admin User" msg_info "Creating Admin User"
cd /opt/sync-in cd /opt/sync-in
ADMIN_PASS=$(openssl rand -base64 18) $STD npx sync-in-server create-user
$STD npx sync-in-server create-user --role admin --login admin --password "${ADMIN_PASS}"
cat <<EOF >~/sync-in.creds
Sync-in Credentials
====================
Login: admin
Password: ${ADMIN_PASS}
EOF
msg_ok "Created Admin User" msg_ok "Created Admin User"
VERSION=$(node -pe "require('/opt/sync-in/node_modules/@sync-in/server/package.json').version" 2>/dev/null || echo "") VERSION=$(node -pe "require('/opt/sync-in/node_modules/@sync-in/server/package.json').version" 2>/dev/null || echo "")
+2 -1
View File
@@ -85,7 +85,8 @@ mkdir -p /opt/termix/data \
/opt/termix/nginx \ /opt/termix/nginx \
/opt/termix/nginx/logs \ /opt/termix/nginx/logs \
/opt/termix/nginx/cache \ /opt/termix/nginx/cache \
/opt/termix/nginx/client_body /opt/termix/nginx/client_body \
/opt/termix/db/data
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true