Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (2024)

Nach dem ich mir Paperless-NGX angesehen habe und mir der Umfang an supporteten Dokumenten durch das DMS nicht ausreichte sehe ich mir in diesem Beitrag das DMS Docspell an. Es scheint durch seine Nutzung von Tools im Umfeld eine größere Anzahl von Dokumententypen zu unterstützen. Wenn ich mich richtig orientiert habe besteht das Docspell Framework aus folgenden Komponenten.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (1)

Etwas verwundert es mich, dass Unoconv genutzt wird da das auf Github als „deprecated“ deklariert ist. Wir werden sehen, in wie Weit das relevant ist.

Nachdem ich mir dazu auf YT einige echt gute Beiträge von Christian Zengel angesehen habe, will ich mir mal eine VitualBox bauen um mir selbst eine Meinung zu dem Thema bilden zu können.

Ich habe mir für solche Zwecke eine standard Ubuntu22.04lts Server aus Ausgangspunkt aufgesetzt und den Klone ich dann je nachdem, was ich testen/probieren möchte.

Die Prerequisites auf der Docspell Website sind schon sehr umfangreich, also zerlegen wir das mal wie immer in handliche Portionen.

1. Update des Ubuntu Server 22.04lts

Zu erst einmal machen wir einen Update des Ubuntu Servers, um ein saubere Ausgangssituation zu haben.

user@2204lts:~$ sudo apt-get updateuser@2204lts:~$ sudo apt-get upgradeuser@2204lts:~$ sudo reboot

2. Postgre-SQL Datenbank installieren

In diesem Abschnitt geht es um die Installation und Konfiguration einer lokalen PostgreSQL-Datenbank.

sudo apt install -y postgresql

Sobald PostgreSQL installiert ist, starten wir den Dienst und aktivieren Sie ihn für die Ausführung beim Booten:

Wie bei Paperless-ngx konnte ich auch bei Docspell kein Requirement zur Version der Postgre-SQL Datenbank finden, aber ich vermute “latest and greatest” kann nicht schaden. Sehen wir uns mal an, welche Version wir von Postgre-SQL erwischt haben.
user@2204lts:~$ psql -Vpsql (PostgreSQL) 14.3 (Ubuntu 14.3-0ubuntu0.22.04.1)

3. Erstellung der Portgre-SQL Datenbank für Docspell

Wir müssen zumindest eine Datenbank für Docspell erstellen und ihr einen Benutzernamen und ein Passwort für die Authentifizierung zuweisen. Rufen wir zunächst die PostgreSQL-Shell als Postgres-Systembenutzer auf.

user@2204lts:~$ sudo -u postgres psqlcould not change directory to "/home/user": Permission deniedpsql (14.3 (Ubuntu 14.3-0ubuntu0.22.04.1))Type "help" for help.postgres=# 

Geben wir in der Shell die folgenden Befehle ein, um die Datenbank und den Benutzer (die Rolle) anzulegen, und ersetzen Sie das Passwort durch Ihren eigenen Wert:

postgres=# CREATE DATABASE docspell;CREATE DATABASEpostgres=# CREATE USER docspell WITH PASSWORD 'docspell';CREATE ROLEpostgres=# GRANT ALL PRIVILEGES ON DATABASE docspell to docspell;GRANTpostgres=# 

Wenn ihr das macht verwendet bitte ein sichere Passwort!

Verwende nicht das Passwort aus dem Beispiel. Wählen ein sicheres, zufälliges Passwort, um eine sichere Datenbankauthentifizierung für deine Paperless-ngx Installation zu gewährleisten.

Wenn du fertig bist, gib \q ein, um die PostgreSQL-Shell zu beenden.

4. Überprüfen des Postgre-SQL Datenbankstatus

Wir können überprüfen, ob die Authentifizierung funktioniert, indem Sie den Befehl psql ausführen und den konfigurierten Benutzernamen und das Passwort übergeben. (Ersetzen Sie localhost durch Ihren Datenbankserver, wenn Sie eine Remote-Datenbank verwenden).

user@2204lts:~$ psql --username docspell --host localhostPassword for user docspell: psql (14.3 (Ubuntu 14.3-0ubuntu0.22.04.1))SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)Type "help" for help.docspell=> \conninfoYou are connected to database "docspell" as user "docspell" on host "localhost" (address "127.0.0.1") at port "5432".SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)docspell=> \quser@2204lts:~$ 

Wenn die Verbindung erfolgreich war, wird nach der Passwort Eingabeaufforderung der Postgre-SQL Prompt docspell=> angezeigt. Geben Sie \conninfo ein, um Ihre Verbindung zu bestätigen und anschließend geben Sie \q ein, um die Verbindung zu beenden.

5. Tesseract Installation

Die hereinkommenden Dokumente, Zeichnungen, Grafiken werden bei docspell durch die OCR Software Tesseract analysiert. Laut PreRequisites wird Version 3 oder 4 erwartet. Meine Dokumente sind aus den Deutsch- und Englisch-Raum, weshalb ich gleich die passenden OCR Module mit installiere.

user@2204lts:~$ sudo apt-get install tesseract-ocr tesseract-ocr-frk tesseract-ocr-deu tesseract-ocr-eng Reading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: fontconfig fontconfig-config fonts-dejavu-core libcairo2 libdatrie1 libdeflate0 libfontconfig1 libgif7 libgomp1 libgraphite2-3 libharfbuzz0b libjbig0 libjpeg-turbo8 libjpeg8 liblept5 libopenjp2-7 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 libtesseract4 libthai-data libthai0 libtiff5 libwebp7 libwebpmux3 libxcb-render0 libxcb-shm0 libxrender1 tesseract-ocr-osdDie folgenden NEUEN Pakete werden installiert:<snip>

Bevor wir fortfahren, vergewissern wir uns, dass die installierte Version von Tesseract mindestens v4.0.0 ist:

user@2204lts:~$ tesseract --versiontesseract 4.1.1 leptonica-1.82.0 libgif 5.1.9 : libjpeg 8d (libjpeg-turbo 2.1.1) : libpng 1.6.37 : libtiff 4.3.0 : zlib 1.2.11 : libwebp 1.2.2 : libopenjp2 2.4.0 Found AVX2 Found AVX Found SSE Found libarchive 3.6.0 zlib/1.2.11 liblzma/5.2.5 bz2lib/1.0.8 liblz4/1.9.3 libzstd/1.4.8user@2204lts:~$ 

Das sieht gut aus, im verwendeten Ubuntu 22.04lts ist zur Zeit Tesseract Version 4.1.1 am Start.

6. OpenJDK Installation

Da ich nicht unter Java entwickele reicht mir der OpenJDK aus. Ich hoffe, dass das Docspell genauso sieht. Prüfen wir kurz, ob Ubuntu Server 22.04lts nicht irgend ein Java Paket mit installiert hat.

user@2204lts:~$ java -versionCommand 'java' not found, but can be installed with:sudo apt install openjdk-11-jre-headless # version 11.0.15+10-0ubuntu0.22.04.1, orsudo apt install default-jre # version 2:1.11-72build2sudo apt install openjdk-17-jre-headless # version 17.0.3+7-0ubuntu0.22.04.1sudo apt install openjdk-18-jre-headless # version 18~36ea-1sudo apt install openjdk-8-jre-headless # version 8u312-b07-0ubuntu1

Also es sieht nicht danach aus, also installieren wir OpenJDK-18 ohne die Entwicklerumgebung und ohne GUI.

user@2204lts:~$ sudo apt-get install openjdk-18-jdk-headlessReading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: alsa-topology-conf alsa-ucm-conf ca-certificates-java java-common libasound2 libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 libcups2 liblcms2-2 libpcscl*te1 openjdk-18-jre-headlessVorgeschlagene Pakete:<snip>

Eine kurzer Check, was wir jetzt als Java haben:

user@2204lts:~$ java -versionopenjdk version "18-ea" 2022-03-22OpenJDK Runtime Environment (build 18-ea+36-Ubuntu-1)OpenJDK 64-Bit Server VM (build 18-ea+36-Ubuntu-1, mixed mode, sharing)

Wir werden sehen, ob das Docspell reicht oder wir etwas hinterer schieben müssen.

7. Ghostscript Installation

Auch für Ghostscript wird keine erwartete Versionsnummer vorgegeben, dem entsprechend nehmen wir einfach das aktuelle aus dem Ubuntu Repository und installieren es.

user@2204lts:~$ sudo apt-get install ghostscriptReading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: fonts-droid-fallback fonts-noto-mono fonts-urw-base35 libgs9 libgs9-common libidn12 libijs-0.35 libjbig2dec0 libpaper-utils libpaper1 poppler-data

Ein kurzer Check auch hier, was wir als Ghostscript installiert haben:

user@2204lts:~$ gs --helpGPL Ghostscript 9.55.0 (2021-09-27)Copyright (C) 2021 Artifex Software, Inc. All rights reserved.

Version 9.55.0 aus dem Jahre 2021. Wir werden auch hier sehen, ob das Docspell reicht.

8. Unpaper Installieren

So wie ich das in den PreRequisites lese, handelt es sich hier um ein Tool, was das OCR Ergebnis von Tesseract verbessern soll und da ja besser immer angestrebt wird, installieren wir das mal mit. Laut apt-cache search unpaper handelt es sich um ein „Werkzeug zum Nachbearbeiten von eingescannten Seiten“.

user@2204lts:~$ sudo apt-get install unpaper[sudo] password for user: Reading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: i965-va-driver intel-media-va-driver libaacs0 libaom3 libavcodec58 libavformat58 libavutil56 libbdplus0 libbluray2 libcairo-gobject2 libchromaprint1 libcodec2-1.0 libdav1d5 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgme0 libgsm1 libigdgmm12 libllvm13 libmfx1 libmp3lame0 libmpg123-0 libnorm1 libogg0 libopenmpt0 libopus0 libpciaccess0 libpgm-5.3-0 librabbitmq4 librsvg2-2 librsvg2-common libshine3 libsnappy1v5 libsoxr0 libspeex1 libsrt1.4-gnutls libssh-gcrypt-4 libswresample3 libtheora0 libtwolame0 libudfread0 libva-drm2 libva-x11-2 libva2 libvdpau1 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7 libx11-xcb1 libx264-163 libx265-199 libxcb-dri2-0 libxcb-dri3-0 libxcb-present0 libxcb-sync1 libxcb-xfixes0 libxfixes3 libxshmfence1 libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers ocl-icd-libopencl1 va-driver-all vdpau-driver-all<snip>

Prüfen wir einmal, ob es läuft und in welcher Version unpaper installiert wurde. Hier schweigen sich die PreRequisites leider auch darüber aus, welche Version benötigt oder gewünscht wird.

user@2204lts:~$ unpaper --helpunpaper 6.1License GPLv2: GNU GPL version 2.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Usage: unpaper [options] <input-file(s)> <output-file(s)>Filenames may contain a formatting placeholder starting with '%%' to insert apage counter for multi-page processing. E.g.: 'scan%%03d.pbm' to process filesscan001.pbm, scan002.pbm, scan003.pbm etc.See 'man unpaper' for options detailsReport bugs at https://github.com/Flameeyes/unpaper/issuesuser@2204lts:~$

Okay, unpaper springt an und sagt es hat den Versionsstand 6.1

9. Unoconv Installieren

Jetzt ist das Tool unoconv dran, welches laut Github seit 2017 nicht mehr weiter entwickelt oder gebugfixt wird. Auf Github ist der letzte Versionstand die 0.8.2. Das schöne an Ubuntu ist ja, das es gerne mal hoffnungslos veraltete Software im Repository hat.. (seufz)

Aber sei es drum, ich möchte mir in diesem Artiekl nur einen ersten Eindruck von Docspell verschaffen und kann mir dann später ggf. Gedanken um diesen alten Schinken machen.

user@2204lts:~$ sudo apt-get install unoconvReading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: adwaita-icon-theme at-spi2-core cpp cpp-11 dconf-gsettings-backend dconf-service dictionaries-common emacsen-common fonts-liberation2 fonts-opensymbol gcc-11-base gsettings-desktop-schemas gstreamer1.0-plugins-base gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme hunspell-en-us libabsl20210324 libabw-0.1-1 libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libauthen-sasl-perl libboost-filesystem1.74.0 libboost-iostreams1.74.0 libboost-locale1.74.0 libboost-thread1.74.0 libcdparanoia0 libcdr-0.1-1 libclone-perl libclucene-contribs1v5 libclucene-core1v5 libcolamd2 libcolord2 libdata-dump-perl libdconf1 libe-book-0.1-1 libencode-locale-perl libeot0 libepoxy0 libepubgen-0.1-1 libetonyek-0.1-1 libexttextcat-2.0-0 libexttextcat-data libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libfreehand-0.1-1 libgl1 libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgpgmepp6 libgstreamer-plugins-base1.0-0 libgtk-3-0 libgtk-3-bin libgtk-3-common libgtkd-3-0 libharfbuzz-icu0 libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libhunspell-1.7-0 libhyphen0 libice6 libio-html-perl libio-socket-ssl-perl libio-stringy-perl libipc-system-simple-perl libisl23 liblangtag-common liblangtag1 libllvm11 libltdl7 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmhash2 libmpc3 libmspub-0.1-1 libmwaw-0.3-3 libmythes-1.2-0 libnet-dbus-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libodfgen-0.1-1 liborc-0.4-0 liborcus-0.17-0 liborcus-parser-0.17-0 libpagemaker-0.0-0 libphobos2-ldc-shared98 libpoppler118 libraptor2-0 librasqal3 librdf0 libreoffice-base-core libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw libreoffice-impress libreoffice-math libreoffice-style-colibre libreoffice-writer librevenge-0.0-0 libsm6 libsuitesparseconfig5 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl libuno-cppu3 libuno-cppuhelpergcc3-3 libuno-purpenvhelpergcc3-3 libuno-sal3 libuno-salhelpergcc3-3 liburi-perl libvisio-0.1-1 libvisual-0.4-0 libvte-2.91-0 libvte-2.91-common libvted-3-0 libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libwww-perl libwww-robotrules-perl libx11-protocol-perl libxaw7 libxcb-glx0 libxcb-randr0 libxcb-shape0 libxcomposite1 libxcursor1 libxdamage1 libxft2 libxi6 libxinerama1 libxkbcommon0 libxkbfile1 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxmlsec1-nss libxmu6 libxpm4 libxrandr2 libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 libyajl2 lp-solve mesa-vulkan-drivers perl-openssl-defaults python3-uno session-migration tilix tilix-common ubuntu-mono uno-libs-private ure x11-common x11-utils x11-xserver-utils xdg-utilsVorgeschlagene Pakete:<snip>

Dieses kleine Tool scheint doch recht bedürftige bei der Menge der von ihm gewünschten Pakete zu sein. Mal abgesehen von seinem Status Deprecated scheint es das Tool zu sein, welches alle Dokumente, welche nicht durch den OCR Wolf gedreht werden in ein verarbeitbares Format wandelt. Ich denke, dass es genau dieses Dingelchen ist, was bei Paperless-NGX fehlt, um alle möglichen Arten von Dokumenten erst zu Wandeln und dann zu Verarbeiten. Prüfen wir also kurz nach, welche Deprecated-Version wir uns eingetreten haben:

user@2204lts:~$ unoconv --version/usr/bin/unoconv:19: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives from distutils.version import LooseVersionunoconv 0.7Written by Dag Wieers <dag@wieers.com>Homepage at http://dag.wieers.com/home-made/unoconv/platform posix/linuxpython 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0]LibreOffice 7.3.3.2

Möglicherweise ist der Unoserver im Folgenden ein Kandidat als Nachfolger für dieses Tool..

10. WKHTMLTOPDF Installieren

Nach so ein Tool, bei dem ich vermute, dass es die Artenvielfalt der von Docspell supporteten Filetypes erhöhen dürfte. Dann wollen wir das mal installieren.

user@2204lts:~$ sudo apt-get install wkhtmltopdf[sudo] password for user: Reading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: avahi-daemon geoclue-2.0 glib-networking glib-networking-common glib-networking-services iio-sensor-proxy libavahi-core7 libavahi-glib1 libdaemon0 libdouble-conversion3 libegl-mesa0 libegl1 libgbm1 libinput-bin libinput10 libmd4c0 libmtdev1 libnl-route-3-200 libnotify4 libnss-mdns libpcre2-16-0 libproxy1v5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5positioning5 libqt5printsupport5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5sensors5 libqt5svg5 libqt5webchannel5 libqt5webkit5 libqt5widgets5 libsoup2.4-1 libsoup2.4-common libwacom-bin libwacom-common libwacom9 libwayland-server0 libwoff1 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-util1 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 libxfont2 libxkbcommon-x11-0 qt5-gtk-platformtheme qttranslations5-l10n wpasupplicant x11-xkb-utils xfonts-base xfonts-encodings xfonts-utils xnest xserver-common<snip>

Oh man, das Tool bringt einen XServer mit. Genau das, was man auf einem Headless Server haben möchte… (seufz)

Prüfen wir mal den Versionsstand, auch wenn die PreRquisites hier ja auch keine Forderung stellen.

user@2204lts:~$ wkhtmltopdf --helpName: wkhtmltopdf 0.12.6Synopsis: wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>

Der Stand der Version ist 0.12.6, was sich mit dem Stand auf Github zumindest deckt.

11. OCRmyPDF Installieren

Bei dem Tool brauche ich glaube nicht zu erwähnen, dass es keine Forderung zum Versionsstand gibt.. Also installieren wir es flott.

user@2204lts:~$ sudo apt-get install ocrmypdfReading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden zusätzlichen Pakete werden installiert: bzip2 icc-profiles-free libimagequant0 libqpdf28 libraqm0 libwebpdemux2 mailcap mime-support pngquant python3-bs4 python3-coloredlogs python3-html5lib python3-humanfriendly python3-img2pdf python3-lxml python3-olefile python3-packaging python3-pdfminer python3-pikepdf python3-pil python3-pluggy python3-renderpm python3-reportlab python3-reportlab-accel python3-soupsieve python3-tqdm python3-webencodings<snip>

Zumindest frißt dieses Tool nicht unendlich viel Speicherplatz auf der Festplatte. Schauen wir uns den Versionsstand an.

user@2204lts:~$ ocrmypdf --version13.4.0+dfsg

Zumindest eine 13 als Major-Release, was mir zwar auch nichts sagt, aber so what…

12. SOLR Installieren

Fehlt mir als letzte PreRequisite noch die SOLR Searchengine. Laut Website benötigt diese mindestens Java Version 11, was bereits gegeben ist. Dann werden wir diese mal herunter laden und zwar am besten nach /opt.

user@2204lts:/opt$ sudo wget https://archive.apache.org/dist/solr/solr/9.0.0/solr-9.0.0.tgz [sudo] password for user: --2022-06-08 06:55:06-- https://archive.apache.org/dist/solr/solr/9.0.0/solr-9.0.0.tgzResolving archive.apache.org (archive.apache.org)... 2a01:4f8:172:2ec5::2, 138.201.131.134Connecting to archive.apache.org (archive.apache.org)|2a01:4f8:172:2ec5::2|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 223857836 (213M) [application/x-gzip]Saving to: ‘solr-9.0.0.tgz’solr-9.0.0.tgz 100%[==========================================================>] 213,49M 4,72MB/s in 53s 2022-06-08 06:56:00 (4,00 MB/s) - ‘solr-9.0.0.tgz’ saved [223857836/223857836]user@2204lts:/opt$ 

In /opt werden wir es auch gleich auspacken.

user@2204lts:/opt$ sudo tar xzfv solr-9.0.0.tgzsolr-9.0.0/solr-9.0.0/LICENSE.txtsolr-9.0.0/NOTICE.txtsolr-9.0.0/CHANGES.txtsolr-9.0.0/README.mdsolr-9.0.0/bin/solr-9.0.0/bin/install_solr_service.shsolr-9.0.0/bin/oom_solr.shsolr-9.0.0/bin/postsolr-9.0.0/bin/postlogssolr-9.0.0/bin/solrsolr-9.0.0/bin/solr.cmdsolr-9.0.0/bin/solr.in.cmdsolr-9.0.0/bin/solr.in.shsolr-9.0.0/bin/init.d/solr-9.0.0/bin/init.d/solr<snip>

Das ist ja ein ziemliches Ungetüm, dieses Solr. Aber dafür hat es laut Wiki eine eigene Installationsroutine, welche wir gleich mal nutzen werden.

user@2204lts:/opt/solr-9.0.0/bin$ sudo bash ./install_solr_service.sh /opt/solr-9.0.0.tgzid: ‘solr’: no such userCreating new user: solrAdding system user `solr' (UID 116) ...Adding new group `solr' (GID 123) ...Adding new user `solr' (UID 116) with group `solr' ...Creating home directory `/var/solr' ...WARNING: /opt/solr-9.0.0 already exists! Skipping extract ...Installing symlink /opt/solr -> /opt/solr-9.0.0 ...Installing /etc/init.d/solr script ...Installing /etc/default/solr.in.sh ...Service solr installed.Customize Solr startup configuration in /etc/default/solr.in.sh● solr.service - LSB: Controls Apache Solr as a Service Loaded: loaded (/etc/init.d/solr; generated) Active: active (exited) since Wed 2022-06-08 07:12:28 UTC; 5s ago Docs: man:systemd-sysv-generator(8) Process: 1399 ExecStart=/etc/init.d/solr start (code=exited, status=0/SUCCESS) CPU: 11msJun 08 07:12:23 2204lts systemd[1]: Starting LSB: Controls Apache Solr as a Service...Jun 08 07:12:23 2204lts su[1401]: (to solr) root on noneJun 08 07:12:23 2204lts su[1401]: pam_unix(su-l:session): session opened for user solr(uid=116) by (uid=0)Jun 08 07:12:28 2204lts solr[1465]: Started Solr server on port 8983 (pid=1461). Happy searching!Jun 08 07:12:28 2204lts systemd[1]: Started LSB: Controls Apache Solr as a Service.user@2204lts:/opt/solr-9.0.0/bin$ 

Das Script läuft ohne zu meckern. Noch ein kurzer Check, ob SOLR eine Socket gheöffnet hat. Mist, ich hatte vergessen die Net-Tools zu installieren. Dann hole ich das eben schnell nach und sehe dann nach dem von dem Install-Script angebenen Port 8983.

user@2204lts:/opt/solr-9.0.0/bin$ sudo apt-get install net-toolsReading package lists... DoneBuilding dependency tree... DoneReading state information... DoneDie folgenden NEUEN Pakete werden installiert: net-tools0 aktualisiert, 1 neu installiert, 0 zu entfernen und 3 nicht aktualisiert.Es müssen 204 kB an Archiven heruntergeladen werden.Nach dieser Operation werden 819 kB Plattenplatz zusätzlich benutzt.Holen:1 http://de.archive.ubuntu.com/ubuntu jammy/main amd64 net-tools amd64 1.60+git20181103.0eebece-1ubuntu5 [204 kB]Es wurden 204 kB in 0s geholt (1.011 kB/s).Vormals nicht ausgewähltes Paket net-tools wird gewählt.(Lese Datenbank ... 136361 Dateien und Verzeichnisse sind derzeit installiert.)Vorbereitung zum Entpacken von .../net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb ...<snip>user@2204lts:/opt/solr-9.0.0/bin$ netstat -tunelp | grep 8983(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)tcp6 0 0 127.0.0.1:8983 :::* LISTEN 116 24402 - user@2204lts:/opt/solr-9.0.0/bin$user@2204lts:/opt/solr-9.0.0/bin$ sudo systemctl status solr● solr.service - LSB: Controls Apache Solr as a Service Loaded: loaded (/etc/init.d/solr; generated) Active: active (exited) since Wed 2022-06-08 07:12:28 UTC; 5min ago Docs: man:systemd-sysv-generator(8) Process: 1399 ExecStart=/etc/init.d/solr start (code=exited, status=0/SUCCESS) CPU: 11msJun 08 07:12:23 2204lts systemd[1]: Starting LSB: Controls Apache Solr as a Service...Jun 08 07:12:23 2204lts su[1401]: (to solr) root on noneJun 08 07:12:23 2204lts su[1401]: pam_unix(su-l:session): session opened for user solr(uid=116) by (uid=0)Jun 08 07:12:28 2204lts solr[1465]: Started Solr server on port 8983 (pid=1461). Happy searching!Jun 08 07:12:28 2204lts systemd[1]: Started LSB: Controls Apache Solr as a Service.user@2204lts:/opt/solr-9.0.0/bin$ 

Der Solr-Service läuft, sicherheitshalber geben ich nochmal hinein ins System zum Starten nach reboot.

user@2204lts:/opt/solr-9.0.0/bin$ sudo systemctl enable solrsolr.service is not a native service, redirecting to systemd-sysv-install.Executing: /lib/systemd/systemd-sysv-install enable solruser@2204lts:/opt/solr-9.0.0/bin$ 

Diese Meldung sagt mir als Nutzer von systemctl jetzt nicht soviel, aber nach einem Reboot ist der Solr-Service auf Port 8983 ohne mein zu tun wieder da. Das Install-Script scheint alles richtig gemacht zu haben.

Prüfen wir, ob auf Port8983 auch wirklich ein SOLR Server antwortet. Das macht er intern:

user@2204lts:~$ wget 127.0.0.1:8983/solr--2022-06-10 14:29:25-- http://127.0.0.1:8983/solrConnecting to 127.0.0.1:8983... connected.HTTP request sent, awaiting response... 302 FoundLocation: http://127.0.0.1:8983/solr/ [following]--2022-06-10 14:29:25-- http://127.0.0.1:8983/solr/Reusing existing connection to 127.0.0.1:8983.HTTP request sent, awaiting response... 200 OKLength: unspecified [text/html]Saving to: ‘solr’solr [ <=> ] 15,86K --.-KB/s in 0s 2022-06-10 14:29:25 (163 MB/s) - ‘solr’ saved [16242]user@2204lts:~$ 

Doch leider will er von extern nicht anworten. Mal in den Configs suchen, an welcher Stellschraube man hier drehen muss. Ich hab es gefunden, es ist in der Solr Config Datei /etc/default/solr.in.sh das Feld SOLR_JETTY_HOST, welches man ändern muss. Da ich in meinem Testfall keine großen Sicherheitsbedenken einplanen muss, mach ich den Solr Server einfach komplett auf mit:

# Sets the network interface the Solr binds to. To prevent administrators from# accidentally exposing Solr more widely than intended, this defaults to 127.0.0.1.# Administrators should think carefully about their deployment environment and# set this value as narrowly as required before going to production. In# environments where security is not a concern, 0.0.0.0 can be used to allow# Solr to accept connections on all network interfaces.SOLR_JETTY_HOST="0.0.0.0"

Und siehe da, schon antwortet der Solr Server auf Anfragen von außen mit einem Webinterface.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (2)

13. Docspell Installieren

Nach dem wir uns also mächtig durch die Prerequisites geqäult haben kommt jetzt endlich die Installation von Docspell. Dieses scheint aus zwei Paketen zu bestehen, dem Docspell-Restserver und dem Docspell-Joex. Mein bedarf an Sourcecode kompilieren hält sich nach dem Vorlauf in Grenzen, also nehme ich die .Deb Pakete direkt vom Github und hoffe, dass diese laufen. Na dnan holen wir uns die Software mal ins /opt Verzeichnis.

user@2204lts:~$ cd /opt/user@2204lts:/opt$ sudo wget https://github.com/eikek/docspell/releases/download/v0.37.0/docspell-joex_0.37.0_all.deb[sudo] password for user: --2022-06-11 10:52:41-- https://github.com/eikek/docspell/releases/download/v0.37.0/docspell-joex_0.37.0_all.debResolving github.com (github.com)... 140.82.121.3Connecting to github.com (github.com)|140.82.121.3|:443... connected.<snip>HTTP request sent, awaiting response... 200 OKLength: 404633792 (386M) [application/octet-stream]Saving to: ‘docspell-joex_0.37.0_all.deb’docspell-joex_0.37.0_all.deb 100%[==============================================================================>] 385,89M 11,4MB/s in 21s 2022-06-11 10:53:03 (18,1 MB/s) - ‘docspell-joex_0.37.0_all.deb’ saved [404633792/404633792]user@2204lts:/opt$ sudo wget https://github.com/eikek/docspell/releases/download/v0.37.0/docspell-restserver_0.37.0_all.deb--2022-06-11 10:53:17-- https://github.com/eikek/docspell/releases/download/v0.37.0/docspell-restserver_0.37.0_all.debResolving github.com (github.com)... 140.82.121.3Connecting to github.com (github.com)|140.82.121.3|:443... connected.<snip>Length: 134246592 (128M) [application/octet-stream]Saving to: ‘docspell-restserver_0.37.0_all.deb’docspell-restserver_0.37.0_all.deb 100%[==============================================================================>] 128,03M 7,57MB/s in 9,0s 2022-06-11 10:53:27 (14,2 MB/s) - ‘docspell-restserver_0.37.0_all.deb’ saved [134246592/134246592]user@2204lts:/opt$user@2204lts:/opt$ ls -latotal 744888drwxr-xr-x 3 root root 4096 Jun 11 10:53 .drwxr-xr-x 19 root root 4096 Apr 24 10:30 ..-rw-r--r-- 1 root root 404633792 Jun 4 21:27 docspell-joex_0.37.0_all.deb-rw-r--r-- 1 root root 134246592 Jun 4 21:27 docspell-restserver_0.37.0_all.deblrwxrwxrwx 1 root root 15 Jun 8 07:12 solr -> /opt/solr-9.0.0drwxr-xr-x 10 root root 4096 Mai 4 23:00 solr-9.0.0-rw-r--r-- 1 root root 223857836 Mai 5 07:00 solr-9.0.0.tgzuser@2204lts:/opt$ 

Das abholen vom Github prima geklappt. All fingers crossed, dass die Installation jetzt auch so gut läuft.

user@2204lts:/opt$ sudo dpkg -i docspell-joex_0.37.0_all.deb docspell-restserver_0.37.0_all.debVormals nicht ausgewähltes Paket docspell-joex wird gewählt.(Lese Datenbank ... 136410 Dateien und Verzeichnisse sind derzeit installiert.)Vorbereitung zum Entpacken von docspell-joex_0.37.0_all.deb ...Entpacken von docspell-joex (0.37.0) ...Vormals nicht ausgewähltes Paket docspell-restserver wird gewählt.Vorbereitung zum Entpacken von docspell-restserver_0.37.0_all.deb ...Entpacken von docspell-restserver (0.37.0) ...docspell-joex (0.37.0) wird eingerichtet ...Creating system group: docspellCreating system user: docspell in docspell with docspell-joex daemon-user and shell /bin/falseCreated symlink /etc/systemd/system/multi-user.target.wants/docspell-joex.service → /lib/systemd/system/docspell-joex.service.docspell-restserver (0.37.0) wird eingerichtet ...Created symlink /etc/systemd/system/multi-user.target.wants/docspell-restserver.service → /lib/systemd/system/docspell-restserver.service.user@2204lts:/opt$ 

Die Installgötter sind mir heute offensichtlich hold! Lief ohne zu mucken. Jetzt bin ich gespannt, wie die Konfiguration von dem beiden Pakten abläuft. Sehen wir mal vorsichtig ins /etc Verzeichnis, ob die Pakete vielleicht eine Beispiel-Konfig mit bringen.

user@2204lts:/opt$ ls -la /etc/doc*lrwxrwxrwx 1 root root 29 Jun 4 21:27 /etc/docspell-joex -> /usr/share/docspell-joex/conflrwxrwxrwx 1 root root 35 Jun 4 21:26 /etc/docspell-restserver -> /usr/share/docspell-restserver/confuser@2204lts:/opt$ ls -la /etc/docspell-joex/total 40drwxr-xr-x 2 root root 4096 Jun 11 10:55 .drwxr-xr-x 5 root root 4096 Jun 11 10:55 ..-rw-r--r-- 1 root root 29944 Jun 4 21:08 docspell-joex.confuser@2204lts:/opt$ ls -la /etc/docspell-restserver/total 28drwxr-xr-x 2 root root 4096 Jun 11 10:55 .drwxr-xr-x 5 root root 4096 Jun 11 10:55 ..-rw-r--r-- 1 root root 19058 Jun 4 21:08 docspell-server.confuser@2204lts:/opt$ 

So idt es, beide bringen Examples mit. Nun steigt die Hoffnung, das die auch schon gut befüllt sind. M;ein Hoffnung wird nicht enttäuscht, da beide Konfigs sehr gut dokumentiert und befüllt sind.

Tragen wir zu erst einmal unsere lokale Postgre-SQL Datenbank beim Docspell-Joex ein.

user@2204lts:~$ sudo nano /etc/docspell-joex/docspell-joex.conf jdbc { # The JDBC url to the database. By default a H2 file-based # database is configured. You can provide a postgresql or mariadb # connection here. When using H2 use the PostgreSQL compatibility # mode and AUTO_SERVER feature. #url = "jdbc:h2://"${java.io.tmpdir}"/docspell-demo.db;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;AUTO_SERVER=TRUE" # The database user. #user = "sa" # The database password. #password = "" url = "jdbc:postgresql://localhost:5432/docspell" user = "docspell" password = "docspell" }

Das Selbe machen wir auch beim Docspell-Restserver.

user@2204lts:~$ sudo nano /etc/docspell-restserver/docspell-server.conf # Configuration for PostgreSQL backend postgresql = { # Whether to use the default database, only works if it is # postgresql use-default-connection = true # The database connection. jdbc { url = "jdbc:postgresql://localhostr:5432/docspell" user = "docspell" password = "docspell" }

Komsicherweise ist die vordefinierte H2 Datenbank auch drinn, welche wir dann mal auskommentieren. Raus damit..

 # The database connection. #jdbc { # The JDBC url to the database. By default a H2 file-based # database is configured. You can provide a postgresql or # mariadb connection here. When using H2 use the PostgreSQL # compatibility mode and AUTO_SERVER feature. #url = "jdbc:h2://"${java.io.tmpdir}"/docspell-demo.db;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;AUTO_SERVER=TRUE" # The database user. #user = "sa" # The database password. #password = "" #}

So die Konfigs sehen nach meiner Meinung, bezogen auf Postgre-SQL, gut aus. Schauen wir uns mal den Service Status vom Docspell-Restserver an:

user@2204lts:~$ sudo systemctl status docspell-restserver.service● docspell-restserver.service - Docspell Rest server Loaded: loaded (/lib/systemd/system/docspell-restserver.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-06-11 11:47:54 UTC; 6min ago Process: 707 ExecStartPre=/bin/mkdir -p /run/docspell-restserver (code=exited, status=0/SUCCESS) Process: 724 ExecStartPre=/bin/chown docspell:docspell /run/docspell-restserver (code=exited, status=0/SUCCESS) Process: 726 ExecStartPre=/bin/chmod 755 /run/docspell-restserver (code=exited, status=0/SUCCESS) Main PID: 732 (java) Tasks: 44 (limit: 9410) Memory: 291.8M CPU: 20.538s CGroup: /system.slice/docspell-restserver.service └─732 java -Dconfig.file=/usr/share/docspell-restserver/bin/../conf/docspell-server.conf -cp /usr/share/docspell-restserver/lib/com.github.eikek.>Jun 11 11:48:04 2204lts docspell-restserver[732]: 2022.06.11 11:48:03:0037 [io-comp...] [INFO ] org.flywaydb.core.internal.command.DbMigrate - Migrating schem>Jun 11 11:48:04 2204lts docspell-restserver[732]: 2022.06.11 11:48:04:0000 [io-comp...] [INFO ] org.flywaydb.core.internal.command.DbMigrate - Migrating schem>Jun 11 11:48:04 2204lts docspell-restserver[732]: 2022.06.11 11:48:04:0001 [io-comp...] [INFO ] org.flywaydb.core.internal.command.DbMigrate - Migrating schem>Jun 11 11:48:04 2204lts docspell-restserver[732]: 2022.06.11 11:48:04:0002 [io-comp...] [INFO ] org.flywaydb.core.internal.command.DbMigrate - Successfully ap>Jun 11 11:48:04 2204lts docspell-restserver[732]: 2022.06.11 11:48:04:0003 [io-comp...] [INFO ] docspell.backend.ops.ONode.register:52 - Registering node rest1Jun 11 11:48:05 2204lts docspell-restserver[732]: 2022.06.11 11:48:05:0000 [io-comp...] [INFO ] docspell.notification.api.EventExchange.consume:48 - Starting >Jun 11 11:48:05 2204lts docspell-restserver[732]: 2022.06.11 11:48:05:0000 [io-comp...] [INFO ] docspell.pubsub.naive.NaivePubSub.subscribe:89 - Adding subscr>Jun 11 11:48:05 2204lts docspell-restserver[732]: 2022.06.11 11:48:05:0001 [io-comp...] [INFO ] docspell.pubsub.naive.NaivePubSub.subscribe:89 - Adding subscr>Jun 11 11:48:05 2204lts docspell-restserver[732]: 2022.06.11 11:48:05:0000 [io-comp...] [INFO ] org.http4s.blaze.channel.nio1.NIO1SocketServerGroup - Service >Jun 11 11:48:05 2204lts docspell-restserver[732]: 2022.06.11 11:48:04:0004 [io-comp...] [INFO ] org.http4s.blaze.server.BlazeServerBuilder - http4s v0.23.12 o>lines 1-23/23 (END)

Scheint zu laufen und irgend etwas mit der Datenbank zu machen(???). Wie gehts dem Docspell-Joex Service:

user@2204lts:~$ sudo systemctl status docspell-joex.service ● docspell-joex.service - Docspell Joex Loaded: loaded (/lib/systemd/system/docspell-joex.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-06-11 11:53:06 UTC; 2min 55s ago Process: 1854 ExecStartPre=/bin/mkdir -p /run/docspell-joex (code=exited, status=0/SUCCESS) Process: 1855 ExecStartPre=/bin/chown docspell:docspell /run/docspell-joex (code=exited, status=0/SUCCESS) Process: 1856 ExecStartPre=/bin/chmod 755 /run/docspell-joex (code=exited, status=0/SUCCESS) Main PID: 1857 (java) Tasks: 41 (limit: 9410) Memory: 251.4M CPU: 16.140s CGroup: /system.slice/docspell-joex.service └─1857 java -Dconfig.file=/usr/share/docspell-joex/bin/../conf/docspell-joex.conf -cp /usr/share/docspell-joex/lib/com.github.eikek.docspell-joex>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:13:0002 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:12:0001 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:12:0003 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:12:0004 [io-comp...] [INFO ] docspell.scheduler.impl.SchedulerImpl.wrapTask:270 - Job execution >Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:13:0000 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:12:0002 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:13:0001 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:12:0003 [io-comp...] [INFO ] docspell.scheduler.impl.SchedulerImpl.wrapTask:270 - Job execution >Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:13:0003 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>Jun 11 11:53:13 2204lts docspell-joex[1857]: 2022.06.11 11:53:13:0004 [io-comp...] [INFO ] docspell.scheduler.impl.LogSink.logInternal:41 - >>> 2022-06-11T11:>lines 1-23/23 (END)

Ist ebenfalls UP and RUNNING. Klopfen wir mal von innen an dem HTTP Port 7880 mit /app an.

user@2204lts:~$ wget http://localhost:7880/app--2022-06-11 11:57:10-- http://localhost:7880/appResolving localhost (localhost)... 127.0.0.1Connecting to localhost (localhost)|127.0.0.1|:7880... connected.HTTP request sent, awaiting response... 200 OKLength: 4658 (4,5K) [text/html]Saving to: ‘app’app 100%[==============================================================================>] 4,55K --.-KB/s in 0s 2022-06-11 11:57:11 (562 MB/s) - ‘app’ saved [4658/4658]user@2204lts:~$ ls -latotal 72drwxr-x--- 5 user user 4096 Jun 11 11:57 .drwxr-xr-x 3 root root 4096 Apr 24 10:31 ..-rw-rw-r-- 1 user user 4658 Jun 11 11:57 app

Ja, da ist jemand zu Hause und antwortet auch. Kurzer Test von Außen.. natürlich macht keiner das Türchen auf. Also auf in die Konfig vom Docspell-Joex. Hier bringt ein drehen an der Base-RL nix. Was könnte es denn sonst noch so sein?? Möglicherweise die bindings {}. Also drehen wir mal daran und gucken, ob dann anspringt. Zu erst in der Konfiguration vom Docspell-Joex, welche unter folgendem Pfad zu finden ist: /etc/docspell-joex/docspell-joex.conf

 bind {# address = "localhost" address = "0.0.0.0" port = 7878 }

Und dann noch die Konfiguration vom Docspell-Restserver, welche unter folgendem Pfad zu finden ist: /etc/docspell-restserver/docspell-server.conf

 bind {# address = "localhost" address = "0.0.0.0" port = 7880 }

Jetzt sollten die beiden Services auch von Außen zu erreichen sein. Testen wir das mal mit dem 7880 Socket.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (3)
Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (4)

Und mach anschließend den Login mit diesen Credentionalls…

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (5)

Und siehe da, das Docspell Dashboard meldet sich wie erhöfft.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (6)

Das macht doch einen sehr aufgeräumten Eindruck. Dann werden wir ihm doch gleich mal ein paar Pdfs und PPtx zum verarbeiten hineinwerfen und sehen, was Docspell daraus macht.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (7)

Nach dem Clicken auf Submit legt Docspell nun los. Zu erkennen ist dieses an der Rückmeldung.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (8)

Und anschließend an Processing.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (9)

Irgendwo scheint es jetzt aber noch zu klemmen. Die zu importierenden Dateien hängen jetzt seit 15 Minuten in der Processing Queue werden nicht weniger…

Nach einiger Suche in der Dokumentation und anschließend in den Configs stellte sich heraus, das Solr nicht sauber als Backend eingebunden war und nun alles läuft.

14. Erstes Fazit

Ich habe Docspell mall 99 PDF Files für den Import angeboten. Diese werden über alle vier CPUs der VM importiert in worklich flottem Tempo. Von den nun 16GByte für die VM werden dabei 6GByte genutzt und 10GByte bleiben verfügbar.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (10)

Von den im Feature-Guide als supporteten Filetypes habe ich mal die für mich gängigen überprüft und ja, diese werden zum einen Supportet und damit sauber importiert.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (11)

Die von mir am meistens genutzten Standard-Typen liefen ohne Probleme:

doc/x + xls/x+ pdf + odt + ods + txt + jpg + png + html

Positiv zu erwähnen ist die autemberaubt schnelle Context-Suche mittels Solr, das Ding zieht mal richtig die Wurst vom Teller!

Ich werde in der nächsten Zeit noch einmal Docspell und Paperless-ngx einem detaillierten Stresstest unterziehen und berichten, bevor ich einen Schritt weiter gehe und mal meinen gesamten Papierberg auf das mögliche Tool der Wahl werfe.

Docspell auf Ubuntu 22.04lts installieren – www.fotoandnet.de (2024)
Top Articles
Berry Tramel's OU report card: Problems develop long before Sooners reach third down
Back Pages St Louis Mo
Dragon Age Inquisition War Table Operations and Missions Guide
Craigslist St. Paul
Craigslist Cars Augusta Ga
Chalupp's Pizza Taos Menu
Campaign Homecoming Queen Posters
Azeroth Pilot Reloaded - Addons - World of Warcraft
Nitti Sanitation Holiday Schedule
Accuradio Unblocked
Jc Post News
I Touch and Day Spa II
5 high school volleyball stars of the week: Sept. 17 edition
Mbta Commuter Rail Lowell Line Schedule
Louisiana Sportsman Classifieds Guns
Craftology East Peoria Il
Aucklanders brace for gales, hail, cold temperatures, possible blackouts; snow falls in Chch
Csi Tv Series Wiki
Byui Calendar Fall 2023
[Cheryll Glotfelty, Harold Fromm] The Ecocriticism(z-lib.org)
Craigslist Prescott Az Free Stuff
CVS Near Me | Columbus, NE
Quick Answer: When Is The Zellwood Corn Festival - BikeHike
Rs3 Eldritch Crossbow
Cincinnati Adult Search
Www.craigslist.com Savannah Ga
Craigslist Houses For Rent In Milan Tennessee
Ice Dodo Unblocked 76
C&T Wok Menu - Morrisville, NC Restaurant
BJ 이름 찾는다 꼭 도와줘라 | 짤방 | 일베저장소
Page 2383 – Christianity Today
Keyn Car Shows
Movies - EPIC Theatres
Missing 2023 Showtimes Near Mjr Southgate
60 Second Burger Run Unblocked
Eaccess Kankakee
Craigslist Central Il
Gabrielle Enright Weight Loss
2015 Chevrolet Silverado 1500 for sale - Houston, TX - craigslist
CARLY Thank You Notes
Log in or sign up to view
Domino's Delivery Pizza
How Much Is Mink V3
Hisense Ht5021Kp Manual
Petsmart Northridge Photos
Craigslist Gigs Wichita Ks
Mars Petcare 2037 American Italian Way Columbia Sc
Überblick zum Barotrauma - Überblick zum Barotrauma - MSD Manual Profi-Ausgabe
Stewartville Star Obituaries
Anderson Tribute Center Hood River
Mynord
Youravon Com Mi Cuenta
Latest Posts
Article information

Author: Foster Heidenreich CPA

Last Updated:

Views: 5657

Rating: 4.6 / 5 (56 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Foster Heidenreich CPA

Birthday: 1995-01-14

Address: 55021 Usha Garden, North Larisa, DE 19209

Phone: +6812240846623

Job: Corporate Healthcare Strategist

Hobby: Singing, Listening to music, Rafting, LARPing, Gardening, Quilting, Rappelling

Introduction: My name is Foster Heidenreich CPA, I am a delightful, quaint, glorious, quaint, faithful, enchanting, fine person who loves writing and wants to share my knowledge and understanding with you.