paperless - Heavy rework to support paperless-ngx (not configurable yet)
This commit is contained in:
@@ -1,32 +1,234 @@
|
||||
#!/bin/bash
|
||||
|
||||
step_1_info() { echo "Install python3"; }
|
||||
readonly toolName="paperless-ngx"
|
||||
readonly toolUser="paperless"
|
||||
readonly toolDeps="python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev libmagic-dev mime-support libzbar0 poppler-utils redis-server"
|
||||
readonly toolDepsOcr="unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr"
|
||||
readonly versionUrl="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest"
|
||||
|
||||
versionNew=
|
||||
versionNow=
|
||||
downUrl=
|
||||
|
||||
sq_paperlessDownLoc="/tmp/paperless_latest.tar.xz"
|
||||
sq_aptOpt=
|
||||
|
||||
sc_paperlessHome="/opt/paperless"
|
||||
sc_paperlessDir="${sc_paperlessHome}/paperless-ngx"
|
||||
|
||||
seq_config() {
|
||||
## Called once before executing steps.
|
||||
## e.g. to source a config file manually:
|
||||
#. "${seq_origin:?}/${seq_configName:?}"
|
||||
|
||||
## or to use sequencer api with profile config file support:
|
||||
#if initSeqConfig -p "${seq_fileName:?}" "${seq_configTemplate:?}" ; then
|
||||
|
||||
## or to use sequencer api with global config file:
|
||||
#if initSeqConfig "${seq_configName:?}" "${seq_configTemplate:?}" ; then
|
||||
# sq_config=1
|
||||
#else
|
||||
# # End if no configuration file exists
|
||||
# dry || return 1
|
||||
#fi
|
||||
|
||||
## Apt cmdline option to suppress user interaction
|
||||
interactive || sq_aptOpt="-y"
|
||||
|
||||
## Disable error checks if external scripts are used
|
||||
## e.g. error on unbound variables
|
||||
#disableErrorCheck
|
||||
|
||||
## Return of non zero value will abort the sequence
|
||||
return 0
|
||||
}
|
||||
|
||||
getVersions() {
|
||||
versionNew="${versionNew:-$(curl --silent "$versionUrl" | grep -Po '"tag_name": "v\K.*?(?=")')}"
|
||||
versionNow=1.7.1 #${versionNow:-$(grep -Po 'Changelog.*Paperless-ngx \K.*?(?= )' 2>/dev/null < "${sc_paperlessDir}/docs/changelog.html")}
|
||||
downUrl="${downUrl:-"https://github.com/paperless-ngx/paperless-ngx/releases/download/v${versionNew:?}/paperless-ngx-v${versionNew:?}.tar.xz"}"
|
||||
}
|
||||
|
||||
step_1_info() { echo "Status of ${toolName}"; }
|
||||
step_1_alias() { echo "status"; }
|
||||
step_1() {
|
||||
exe apt update
|
||||
exe apt install python3 python3-pip
|
||||
}
|
||||
|
||||
step_2_info() { echo "Get paperless using git (checkout 2.7.0)"; }
|
||||
step_2() {
|
||||
exe git clone https://github.com/the-paperless-project/paperless.git /opt/paperless
|
||||
exe cd /opt/paperless && git checkout 2.7.0
|
||||
}
|
||||
|
||||
step_3_info() { echo "Install other dependcies"; }
|
||||
step_3() {
|
||||
exe apt install gnupg tesseract-ocr tesseract-ocr-deu imagemagick unpaper libpoppler-cpp-dev optipng
|
||||
exe pip3 install --user --requirement /opt/paperless/requirements.txt
|
||||
}
|
||||
|
||||
step_4_info() { echo "Paperless configuration file"; }
|
||||
step_4() {
|
||||
if [ ! -f /etc/paperless.conf ] ; then
|
||||
cp -ar paperless.conf.example /etc/paperless.conf
|
||||
die "Testende"
|
||||
getVersions
|
||||
info -n "${toolName} "
|
||||
if [[ -n "${versionNow}" ]] ; then
|
||||
color green
|
||||
info -d "version ${versionNow} installed"
|
||||
if [[ ! ${versionNow:-} == ${versionNew} ]] ; then
|
||||
info -a "Update available to version ${versionNew} from:"
|
||||
info -a "${downUrl}"
|
||||
fi
|
||||
else
|
||||
echo "[ WARN ] Configuration already exists. Doing nothing"
|
||||
color yellow
|
||||
info -d "not installed"
|
||||
info -a "Version ${versionNew} available for installation from:"
|
||||
info -a "${downUrl}"
|
||||
fi
|
||||
}
|
||||
|
||||
step_3_info() { echoinfoArgs "[status|start|stop]"; echo "Manage ${toolName} services"; }
|
||||
step_3_alias() { echo "service"; }
|
||||
step_3() {
|
||||
shift
|
||||
local serviceCommand="status"
|
||||
local serviceOpt="-n 0"
|
||||
case "${1:-}" in
|
||||
start)
|
||||
serviceOpt=
|
||||
serviceCommand="${1}" ;;
|
||||
stop)
|
||||
serviceOpt=
|
||||
serviceCommand="${1}" ;;
|
||||
status)
|
||||
serviceCommand="${1}" ;;
|
||||
"")
|
||||
;;
|
||||
*)
|
||||
error "Unknown command ${1:-"-"}"
|
||||
return 1 ;;
|
||||
esac
|
||||
exe systemctl ${serviceOpt:-} "${serviceCommand:?}" paperless-webserver
|
||||
exe systemctl ${serviceOpt:-} "${serviceCommand:?}" paperless-scheduler
|
||||
exe systemctl ${serviceOpt:-} "${serviceCommand:?}" paperless-consumer
|
||||
}
|
||||
|
||||
step_10_info() { echo "Install python3"; }
|
||||
step_10_alias() { echo "install"; }
|
||||
step_10() {
|
||||
exe apt update
|
||||
exe apt install ${toolDeps} ${aptOpt:-}
|
||||
exe apt install ${toolDepsOcr} ${aptOpt:-}
|
||||
}
|
||||
|
||||
step_11_info() { echo "Add system user"; }
|
||||
step_11() {
|
||||
if id "${toolUser}" >/dev/null 2>&1 ; then
|
||||
endReturn -o 1 "User ${toolUser} already exists"
|
||||
fi
|
||||
exe adduser "${toolUser}" --system --group --home "${sc_paperlessHome}"
|
||||
}
|
||||
|
||||
step_12_info() { echo "Install/upgrade ${toolName}"; }
|
||||
step_12_alias() { echo "upgrade"; }
|
||||
step_12() {
|
||||
local toolUpgrade=0
|
||||
getVersions
|
||||
if [[ ${versionNow:-} == ${versionNew} ]] ; then
|
||||
endReturn -o 1 "Latest version ${versionNow} already installed"
|
||||
else
|
||||
if [ -n "${versionNow:-}" ] ; then
|
||||
info "Upgrading $toolName from ${versionNow} to ${versionNew}"
|
||||
else
|
||||
info "Installing $toolName version ${versionNew}"
|
||||
fi
|
||||
fi
|
||||
exe wget ${downUrl} -q -O "${sq_paperlessDownLoc}"
|
||||
endReturn -o $? "Download failed"
|
||||
|
||||
if [ -e "${sc_paperlessDir}" ] ; then
|
||||
if step backup --nostart; then
|
||||
info "Backup successful"
|
||||
else
|
||||
endReturn -o 1 "Backup failed."
|
||||
fi
|
||||
toolUpgrade=1
|
||||
exe mv "${sc_paperlessDir}" "${sc_paperlessDir}_bu"
|
||||
fi
|
||||
|
||||
exe tar -xf "${sq_paperlessDownLoc}" -C "${sc_paperlessHome}"
|
||||
exe chown -R "${toolUser}": "${sc_paperlessDir}"
|
||||
exe install --owner="${toolUser}" --group="${toolUser}" -d "${sc_paperlessHome}/"{consume,data,media}
|
||||
|
||||
if ((toolUpgrade)) ; then
|
||||
info "Moving over ${toolName} and gunicorn configuration"
|
||||
addConf -c -f "${sc_paperlessDir}_bu/paperless.conf" "${sc_paperlessDir}/paperless.conf"
|
||||
saveReturn $?
|
||||
addConf -c -f "${sc_paperlessDir}_bu/gunicorn.conf.py" "${sc_paperlessDir}/gunicorn.conf.py"
|
||||
saveReturn $?
|
||||
endReturn "${toolName} configuration could not be transferred. ${sc_paperlessDir}_bu not deleted."
|
||||
exe rm -rf "${sc_paperlessDir}_bu"
|
||||
info "Starting post upgrade procedure"
|
||||
step postupgrade
|
||||
step service start
|
||||
die "Upgrade finished"
|
||||
fi
|
||||
}
|
||||
|
||||
step_13_info() { echo "Install other dependcies"; }
|
||||
step_13() {
|
||||
exe cd "${sc_paperlessHome}"
|
||||
exe sudo -Hu paperless pip3 install --upgrade pip
|
||||
info "Remove '-e' before the line for django-q"
|
||||
ask "Press Enter to continue?"
|
||||
editor "${sc_paperlessDir}/requirements.txt"
|
||||
exe sudo -Hu paperless pip3 install --requirement "${sc_paperlessDir}/requirements.txt"
|
||||
}
|
||||
|
||||
step_14_info() { echo "Initialization"; }
|
||||
step_14() {
|
||||
exe cd "${sc_paperlessDir}/src"
|
||||
exe sudo -Hu paperless python3 manage.py migrate
|
||||
exe sudo -Hu paperless python3 manage.py createsuperuser
|
||||
}
|
||||
|
||||
step_16_info() { echo "Post upgrade steps"; }
|
||||
step_16_alias() { echo "postupgrade"; }
|
||||
step_16() {
|
||||
exe cd "${sc_paperlessDir}/src"
|
||||
step 13
|
||||
exe sudo -Hu paperless python3 manage.py migrate
|
||||
}
|
||||
|
||||
step_20_info() { echo "Notes"; }
|
||||
step_20_alias() { echo "notes"; }
|
||||
step_20() {
|
||||
color green
|
||||
cat <<EOF_NOTES
|
||||
# Config modifications
|
||||
|
||||
* paperless.conf
|
||||
* redis password
|
||||
redis://:password@localhost:6379
|
||||
* consume,data,media direcotries (${sc_paperlessHome}/...)
|
||||
../../{consume,data,media}
|
||||
* recommended settings
|
||||
PAPERLESS_FILENAME_FORMAT={created_year}/{title}
|
||||
PAPERLESS_SECRET_KEY=change-me
|
||||
PAPERLESS_OCR_LANGUAGE=deu+eng
|
||||
PAPERLESS_TIME_ZONE=Europe/Berlin
|
||||
* service files
|
||||
* install dir ${sc_paperlessDir}/...
|
||||
* service files webserver
|
||||
* Environment="PAPERLESS_PORT=8084"
|
||||
To chose a custom listen port for gunicorn
|
||||
* gunicorn.conf.py
|
||||
* bind = f'0.0.0.0:{os.getenv("PAPERLESS_PORT", 8000)}'
|
||||
If IPv6 is disabled/not avilable the first start takes very long
|
||||
* /etc/ImageMagick-x/policy.xml
|
||||
* enable access to pdfs
|
||||
<policy domain="coder" rights="read|write" pattern="PDF" />
|
||||
EOF_NOTES
|
||||
color none
|
||||
}
|
||||
|
||||
step_30_info() { echoinfoArgs "[--nostart]"; echo "Backup ${toolName}"; }
|
||||
step_30_alias() { echo "backup"; }
|
||||
step_30() {
|
||||
shift
|
||||
info "Doing backup..."
|
||||
step service stop
|
||||
exe cd "$(dirname -- "${sc_paperlessHome}")"
|
||||
exe tar czf "/root/backup/paperless_backup_$(date +%Y%m%d-%H%M%S).tar.gz" "$(basename -- "${sc_paperlessHome}")"
|
||||
if [[ ${1:-} == "--nostart" ]] ; then
|
||||
info "Not starting ${toolName} services after backup"
|
||||
else
|
||||
step service start
|
||||
fi
|
||||
}
|
||||
|
||||
readonly sqr_minVersion=16
|
||||
|
||||
. sequencer.sh
|
||||
|
Reference in New Issue
Block a user