From b442ebb3a2360877bc6032ac5c739a96b616f2e8 Mon Sep 17 00:00:00 2001 From: Peter Marquardt Date: Thu, 6 Nov 2025 14:19:44 +0100 Subject: [PATCH] update to 2.19.4 * paperless 2.18.4 => 2.19.4 * node 22.19.0 => 24.11.0 * sqlite 3.50.4 => 3.51.0 * libtiff 4.7.0 => 4.7.1 * nginx 1.27.3 => 1.29.3 * python 3.12.11 => 3.12.12 * redis 7.4.1 => 8.2.3 * imagemagick 7.1.2-3 => 7.1.2-8 * ghostscript 10.05.1 => 10.06.0 * jbig2enc 0.30-14 => 0.30-16 * leptonica 1.85.0 => 1.87.0 - fixed migration vs. redis - migratiun moved to startstop - add runifchanged dev helper --- build.profile | 46 +++++++++++----------- paperless-ngx.build.sh | 3 +- runifchanged.sh | 23 +++++++++++ startstop.build.sh | 87 +++++++++++++++++++++++++++++++----------- 4 files changed, 113 insertions(+), 46 deletions(-) create mode 100755 runifchanged.sh diff --git a/build.profile b/build.profile index 7940006..f6f41f0 100644 --- a/build.profile +++ b/build.profile @@ -1,6 +1,6 @@ -BUILD_TAG=2.18.4 +BUILD_TAG=2.19.4 -BUILD_paperless=paperless-ngx-2.18.4 +BUILD_paperless=paperless-ngx-2.19.4 BUILD_DIR=build BUILD_SRC="${PWD}" @@ -16,22 +16,22 @@ TMPDIR=${TMPDIR:-/tmp/${USER}/${BUILD_TAG}} LOGDIR=${PROJECT}/log # https://sqlite.org -# wget "https://sqlite.org/2025/sqlite-autoconf-3500400.tar.gz" -BUILD_sqlite=sqlite-3.50.4 -BUILD_sqlite_SRCURL="https://beehive.molgen.mpg.de/d74bbdca4ab1b2bd46d3b3f8dbb0f3db/sqlite-autoconf-3500400.tar.gz" +# wget "https://sqlite.org/2025/sqlite-autoconf-3510000.tar.gz" +BUILD_sqlite=sqlite-3.51.0 +BUILD_sqlite_SRCURL="https://beehive.molgen.mpg.de/cfcf0004cb6893d2555b33d89ff39cb6/sqlite-autoconf-3510000.tar.gz" # https://download.redis.io/releases # community edition ! # wget https://download.redis.io/releases/redis-7.4.1.tar.gz BUILD_redis=redis-7.4.1 BUILD_redis_SRCURL="https://beehive.molgen.mpg.de/360809807c15da120affb356e55c6388/${BUILD_redis}.tar.gz" -# wget "https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tgz" -BUILD_python=Python-3.12.11 -BUILD_python_SRCURL="https://beehive.molgen.mpg.de/45bda920329568dd6650b0ac556d17db/${BUILD_python}.tgz" +# wget "https://www.python.org/ftp/python/3.12.12/Python-3.12.12.tgz" +BUILD_python=Python-3.12.12 +BUILD_python_SRCURL="https://beehive.molgen.mpg.de/4fcf63eed7dd8dd3f0d00cfd5921a681/${BUILD_python}.tgz" -# wget "https://nodejs.org/download/release/v22.19.0/node-v22.19.0.tar.gz" -BUILD_node=node-22.19.0 -BUILD_node_SRCURL="https://beehive.molgen.mpg.de/6ac4e94a698f90ae2b2fb99ee1672387/${BUILD_node/-/-v}.tar.gz" +# wget "https://nodejs.org/download/release/v24.11.0/node-v24.11.0.tar.gz" +BUILD_node=node-24.11.0 +BUILD_node_SRCURL="https://beehive.molgen.mpg.de/afcf29e7e5a89a7e3776fcf4ed7cb97a/${BUILD_node/-/-v}.tar.gz" # SRCURL="https://ffmpeg.org//releases/${BUILD_ffmpeg}.tar.gz" BUILD_ffmpeg=ffmpeg-8.0 @@ -41,9 +41,9 @@ BUILD_ffmpeg_SRCURL="https://beehive.molgen.mpg.de/74bb5dbf6c2b35ab50aad7a939ef3 BUILD_zbar=zbar-0.23.93 BUILD_zbar_SRCURL="https://beehive.molgen.mpg.de/3f69d17f6495de023b59b3539ce5e605/${BUILD_zbar}.tar.gz" -# SRCURL="https://github.com/DanBloomberg/leptonica/releases/download/1.85.0/leptonica-1.85.0.tar.gz" -BUILD_leptonica=leptonica-1.85.0 -BUILD_leptonica_SRCURL="https://beehive.molgen.mpg.de/1732e999e2fef8721348edc2b7283224/${BUILD_leptonica}.tar.gz" +# wget "https://github.com/DanBloomberg/leptonica/releases/download/1.86.0/leptonica-1.86.0.tar.gz" +BUILD_leptonica=leptonica-1.86.0 +BUILD_leptonica_SRCURL="https://beehive.molgen.mpg.de/28f7510d2990f281c75a095d3284f2a9/${BUILD_leptonica}.tar.gz" # SRCURL="https://nginx.org/download/nginx-1.27.3.tar.gz" BUILD_nginx=nginx-1.27.3 @@ -53,9 +53,9 @@ BUILD_nginx_SRCURL="https://beehive.molgen.mpg.de/89773c781ff0c2cd876b03bbc094c2 BUILD_libfontttf=liberation-fonts-ttf-2.1.5 BUILD_libfontttf_SRCURL="https://beehive.molgen.mpg.de/31b453e0b77bacde410a34a725b34f8a/${BUILD_libfontttf}.tar.gz" -# SRCURL="https://download.osgeo.org/libtiff/tiff-4.7.0.tar.gz"/${BUILD_ffmpeg}.tar.gz" -BUILD_libtiff=tiff-4.7.0 -BUILD_libtiff_SRCURL="https://beehive.molgen.mpg.de/3a0fa4a270a4a192b08913f88d0cfbdd/${BUILD_libtiff}.tar.gz" +# wget "https://download.osgeo.org/libtiff/tiff-4.7.1.tar.gz" +BUILD_libtiff=tiff-4.7.1 +BUILD_libtiff_SRCURL="https://beehive.molgen.mpg.de/f1044dd3b4466cc53464210148e08146/${BUILD_libtiff}.tar.gz" # SRCURL="https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.1.2/libjpeg-turbo-3.1.2.tar.gz" BUILD_libjpegturbo=libjpegturbo-3.1.2 @@ -65,14 +65,15 @@ BUILD_libjpegturbo_SRCURL="https://beehive.molgen.mpg.de/6f4780b95edde615c34de51 BUILD_libwebp=libwebp-1.6.0 BUILD_libwebp_SRCURL="https://beehive.molgen.mpg.de/cceb6447180f961473b181c9ef38b630/${BUILD_libwebp}.tar.gz" -# wget "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs100501/ghostscript-${PKGVERSION}.tar.gz" -BUILD_ghostscript=ghostscript-10.05.1 -BUILD_ghostscript_SRCURL="https://beehive.molgen.mpg.de/40d4284b50b5d6ecc61533e3fdf2ee13/${BUILD_ghostscript}.tar.gz" +# wget "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10060/ghostscript-10.06.0.tar.gz" +BUILD_ghostscript=ghostscript-10.06.0 +BUILD_ghostscript_SRCURL="https://beehive.molgen.mpg.de/d472f289582b209731954642bd34ca86/${BUILD_ghostscript}.tar.gz" # gits -BUILD_imagemagick=imagemagick-7.1.2-3 +BUILD_imagemagick=imagemagick-7.1.2-8 BUILD_imagemagick_SRCURL="https://github.com/ImageMagick/ImageMagick.git" +# git clone / git describe BUILD_pngquant=pngquant-3.0.3-8-ge3bdc7c BUILD_pngquant_SRCURL="https://github.com/kornelski/pngquant.git" @@ -86,7 +87,8 @@ BUILD_tessdata=tessdata_best-4.1.0 BUILD_tessdata_SRCURL="https://github.com/tesseract-ocr/tessdata_best.git" BUILD_tessconfigs_SRCURL="https://github.com/tesseract-ocr/tessconfigs.git" -BUILD_jbig2enc=jbig2enc-0.30-14-g6019f5f +# git clone / git describe +BUILD_jbig2enc=jbig2enc-0.30-16 BUILD_jbig2enc_SRCURL="https://github.com/agl/jbig2enc.git" BUILD_jbig2dec=jbig2dec-0.20 diff --git a/paperless-ngx.build.sh b/paperless-ngx.build.sh index a760572..27e492e 100755 --- a/paperless-ngx.build.sh +++ b/paperless-ngx.build.sh @@ -92,7 +92,8 @@ uv pip install --system --no-python-downloads --python-preference system --requi ./manage.py compilemessages -./manage.py migrate +# migration done by startstop.sh +# ./manage.py migrate PAPERLESS_ADMIN_USER=${PAPERLESS_ADMIN_USER:-admin} PAPERLESS_ADMIN_PASSWORD=${PAPERLESS_ADMIN_PASSWORD:-$(>/dev/null ); do + echo "(\$\$) waiting for redis to be ready..." + sleep 1 + done + local WT=\$((\${SECONDS}-\${WT})) + [[ \${WT} > 1 ]] && echo "\${FUNCNAME[0]} took \${WT} seconds" + : # essential due to -e +} + #### granian #### srv_granian_start() { @@ -95,46 +113,61 @@ srv_granian_waitup() { done } -#### consumer #### +#### worker #### -srv_consumer_start() { +srv_worker_start() { trap rm_pidfiles EXIT cd "${PROJECT}/paperless-ngx/src" + + srv_migrate + srv_nginx_waitup - ./manage.py document_consumer + celery --app paperless worker --loglevel WARNING } -#### scheduler #### +srv_worker_waitup() { + cd "${PROJECT}/paperless-ngx/src" + until ( celery --app paperless status ); do + echo "waiting for worker to be ready..." + sleep 1 + done +} -srv_scheduler_start() { +#### consumer #### + +srv_consumer_start() { trap rm_pidfiles EXIT + srv_worker_waitup cd "${PROJECT}/paperless-ngx/src" srv_nginx_waitup - celery --app paperless beat --loglevel INFO + ./manage.py document_consumer } -#### worker #### +#### scheduler #### -srv_worker_start() { +srv_scheduler_start() { trap rm_pidfiles EXIT + srv_worker_waitup cd "${PROJECT}/paperless-ngx/src" srv_nginx_waitup - celery --app paperless worker --loglevel WARNING + celery --app paperless beat --loglevel INFO } #### migrate #### srv_migrate() { + srv_redis_waitup + pushd "${PROJECT}/paperless-ngx/src" _opts=( @@ -152,13 +185,20 @@ srv_migrate() { #### generic #### srv_generic_status() { + echo "### \${srv}" + local logf="${LOGDIR}/srv-\${srv}.log" + if [[ -e \${logf} ]]; then + echo "# \${logf}" + else + echo + fi if [[ -s "\${PGIDFILE}" ]]; then local pgid read -a pgid < "\${PGIDFILE}" local pids - pids=\$(pgrep -g \${pgid}) + pids=\$(pgrep --pgroup \${pgid}) if [[ \$? = 0 ]]; then - ps -f --pid \${pids} + pspids \${pids} else echo "processs group \${pgid} has no running processes for \${PGIDFILE}" fi @@ -166,7 +206,7 @@ srv_generic_status() { if [[ -s "\${PIDFILE}" ]]; then local pid read -a pid < "\${PIDFILE}" - ps -f --pid \${pid} --ppid \${pid} + pspids \${pid} else echo "# no pgid or pid file found: \${PGIDFILE} \${PIDFILE}" fi @@ -213,11 +253,10 @@ srv_generic_stop() { if [[ -s "\${PGIDFILE}" ]]; then local pgid read -a pgid < "\${PGIDFILE}"||: - echo "killing process group \${pgid}" +# echo "killing process group \${pgid}" KT=\${SECONDS} kill -- -\${pgid}||: printf "waiting for pgid %5d (%s) to die\n" \${pgid} \${srv} - pwait --pgroup \${pgid}||: while kill -0 -"\${pgid}" > /dev/null 2>&1; do sleep 1 done @@ -254,9 +293,9 @@ srv="\${2:-all}" if [[ \${srv} = 'all' ]]; then _srv=(redis granian nginx consumer scheduler worker) - if [[ \${cmd} = 'start' ]]; then - srv_migrate - fi +# if [[ \${cmd} = 'start' ]]; then +# srv_migrate +# fi # poor mans reverse if [[ \${cmd} = 'stop' ]]; then @@ -309,3 +348,5 @@ echo "#### oh no... ####" _EOP_ ) "${TO}" + +echo "# done." \ No newline at end of file