seahub, python3.9, die Fehler und die fehlenden libs

peterle

Forenkasper
Ich sitze etwas staunend vor einem Problem, was ich mir vermutlich selber mit eingebrockt habe.

Als ewig langer Benutzer von Seafile, habe ich öfters mal bemerkt, daß die Updates nicht immer sonderlich einfach von der Hand gehen.

Hier ging es darum ein FreeBSD 12.1-RELEASE über 12.2-RELEASE nach 12.3-RELEASE zu holen und dann von Seahub 7.04 auf 9.0 upzudaten.
Soweit war das alles fehlerfrei nur startet seahub nicht mehr und es gab Probleme mit alten python2.7 Resten. Das aktuelle Seahub will python3.9.
Also habe ich alle python2.7 und py27 pkgs deinstalliert und es gab Mecker wegen falscher Checksums, was auch eine Neuinstallation von seahub und damit python3.9 nicht löste. So habe ich kurzerhand /usr/local/lib/python3.9 samt Inhalt gelöscht ... und optimistisch gedacht, wenn es weg ist, installiert pkg das einfach neu ... macht es aber natürlich nicht. und auch ein pkg-check -Ba bringt zwar einen Haufen Fehler, aber korrigiert sie nicht. Wo ist denn da mein Denkfehler?

Code:
===>> /usr/local/etc/rc.d/seahub start
LANG is not set in ENV, set to en_US.UTF-8
LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub at port 8000 ...
Could not find platform independent libraries <prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = '/usr/local/www/haiwen/seafile-server/seafile/lib/python3.9/site-packages:/usr/local/www/haiwen/seafile-server/seafile/lib64/python3.9/site-packages:/usr/local/www/haiwen/seafile-server/seahub/thirdpart:'
  program name = '/usr/local/bin/python3.9'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = '/usr/local/bin/python3.9'
  sys.base_prefix = '/usr/local'
  sys.base_exec_prefix = '/usr/local'
  sys.platlibdir = 'lib'
  sys.executable = '/usr/local/bin/python3.9'
  sys.prefix = '/usr/local'
  sys.exec_prefix = '/usr/local'
  sys.path = [
    '/usr/local/www/haiwen/seafile-server/seafile/lib/python3.9/site-packages',
    '/usr/local/www/haiwen/seafile-server/seafile/lib64/python3.9/site-packages',
    '/usr/local/www/haiwen/seafile-server/seahub/thirdpart',
    '',
    '/usr/local/lib/python39.zip',
    '/usr/local/lib/python3.9',
    '/usr/local/lib/python3.9/lib-dynload',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x0000000800aae000 (most recent call first):
<no Python frame>
Error:Seahub failed to start.
Please try to run "./seahub.sh start" again

Code:
===>> pkg check -vy -B python39

...

pkg: fstat() failed for(/usr/local/lib/python3.9/xmlrpc/__pycache__/server.cpython-39.opt-2.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/xmlrpc/__pycache__/server.cpython-39.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/xmlrpc/client.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/xmlrpc/server.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zipapp.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zipfile.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zipimport.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__init__.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/__init__.cpython-39.opt-2.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/__init__.cpython-39.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_common.cpython-39.opt-2.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_common.cpython-39.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_tzpath.cpython-39.opt-2.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_tzpath.cpython-39.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-2.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/__pycache__/_zoneinfo.cpython-39.pyc): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/_common.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/_tzpath.py): No such file or directory
pkg: fstat() failed for(/usr/local/lib/python3.9/zoneinfo/_zoneinfo.py): No such file or directory
[1/1] Checking python39-3.9.15: shared libraries... done

Code:
===>> ll /usr/local/lib/python3.9/
total 41
drwxr-xr-x    4 root  wheel    6 Nov 30 18:15 lib-dynload/
drwxr-xr-x  130 root  wheel  144 Nov 30 18:16 site-packages
 

Columbo0815

Kaffeemann
Teammitglied
Ohne auch nur ansatzweise zu verstehen, was du da machst oder was seahub ist: Für mich liest sich das eher nach einem pkg-Problem. Du hast per pkg installiert, löschst händisch die Daten in /usr/local und pkg geht davon aus, dass die Daten noch da sind.

Ich würde im ersten Schritt mit pkg install -f die python-Pakete drüberbügeln. Denn mit -f sollte pkg das tatsächlich "neu" installieren. Egal ob die Dateien bereits vorhanden sind oder nicht.

HTH
 

peterle

Forenkasper
Es ist auch ein pkg Problem. Zweifelsohne ist es eines. pkg -f hatte ich auch ausporbiert und der installiert das auch nicht. Allerdings war python dann nur Dependency von seahub.
Reagiert pkg -f in dem Fall anders?
 

Columbo0815

Kaffeemann
Teammitglied
Was genau führst du aus? Auf https://www.freshports.org/www/seahub/ siehst du die py-Abhängigkeiten. Genau diese Pakete musst du vermutlich mit pkg -f installieren.

Sauberer dürfte allerdings pkg install -f -R seahub sein, zumindest dann, wenn ich PKG-INSTALL(8) richtig verstehe. Damit sollte seahub und alle Abhängigkeiten nochmal installiert werden.
 

peterle

Forenkasper
Was genau führst du aus? Auf https://www.freshports.org/www/seahub/ siehst du die py-Abhängigkeiten. Genau diese Pakete musst du vermutlich mit pkg -f installieren.

Sauberer dürfte allerdings pkg install -f -R seahub sein, zumindest dann, wenn ich PKG-INSTALL(8) richtig verstehe. Damit sollte seahub und alle Abhängigkeiten nochmal installiert werden.

Code:
pkg deinstall seahub
pkg autoremove
pkg install seahub

bzw.
pkg install -f seahub

autoremove löscht zwar alle Pakete, aber nicht /usr/lib/python3.9 und darin waren die Checksum Errors.
Und die pkg install Varianten installieren halt die fehlenden Dateien nicht wieder in /usr/lib/python3.9.
Allerdings meckert pkg check halt genau diese Dateien an, ändert aber nichts daran und ich meine pkg check repariert fehlende Dateien in Libraries.
 

Columbo0815

Kaffeemann
Teammitglied
Code:
pkg deinstall seahub
pkg autoremove
pkg install seahub

bzw.
pkg install -f seahub

autoremove löscht zwar alle Pakete, aber nicht /usr/lib/python3.9 und darin waren die Checksum Errors.
Und die pkg install Varianten installieren halt die fehlenden Dateien nicht wieder in /usr/lib/python3.9.
Allerdings meckert pkg check halt genau diese Dateien an, ändert aber nichts daran und ich meine pkg check repariert fehlende Dateien in Libraries.
pkg autoremove löscht alle Pakete, die du nicht händisch (per pkg install) installiert hast und die nicht mehr benötigt werden. Wenn also ein anderes Package python als Abhängigkeit hat, wird python nicht entfernt. Ebenso wenn du zB pkg install python39 usw. ausgeführt hast.

Beide pkg install Varianten, die du benutzt hast, können mE nicht zum Ziel führen. Der Vorschlag "-fd" dürfte nicht funktionieren, @mr44er meint aber vermutlich das selbe wie ich.
 

peterle

Forenkasper
pkg autoremove löscht alle Pakete, die du nicht händisch (per pkg install) installiert hast und die nicht mehr benötigt werden. Wenn also ein anderes Package python als Abhängigkeit hat, wird python nicht entfernt. Ebenso wenn du zB pkg install python39 usw. ausgeführt hast.

Eben. Ich sehe ja, was er da alles deinstallieren will und deinstalliert und welche Abhängigkeiten seahub hat und was anderes ist auf dem Server auch kaum drauf.
 

peterle

Forenkasper
Ok, vielleicht habe ich das doch nicht so ganz gesehen ... :p
python39 kam über zwei andere Pakete noch rein und flog damit nicht raus, aber alles andere halt.

Nun ist alles wieder heile, aber ich verstehe noch nicht warum pkg check die fehlenden Teile des Paketes nicht wiederherstellt?

Und seahub startet immer noch nicht, schreibt aber auch nichts wissenswertes unter DEBUG-Mode in irgendwelche Logfiles.

Code:
===>> /usr/local/etc/rc.d/seahub start
LANG is not set in ENV, set to en_US.UTF-8
LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub at port 8000 ...
Error:Seahub failed to start.
Please try to run "./seahub.sh start" again
 

Columbo0815

Kaffeemann
Teammitglied
Nun ist alles wieder heile, aber ich verstehe noch nicht warum pkg check die fehlenden Teile des Paketes nicht wiederherstellt?
Weil dein Aufruf laut PKG-CHECK(8) (zumindest verstehe ich das so) dafür falsch war. Mit pkg check sollte der von @mr44er genannte Schalter -d funktionieren (imho ohne -f). Das Ergebnis dürfte dann identisch sein.

Zu seahub: Steht auch nichts in /var/log/http-access bzw. -error? Hat es evtl. ein eigenes Logfile im Installationspfad (nextcloud hat so etwas).
 

mr44er

moderater Moderator
Teammitglied
Und seahub startet immer noch nicht, schreibt aber auch nichts wissenswertes unter DEBUG-Mode in irgendwelche Logfiles.
Ich kenn' die Software leider nicht, aber irgendwo muss ein log aufploppen (https://manual.seafile.com/maintain/logs/). Ich würde dann auch auf das log vom webserver gehen, wenn sonst nichts auffindbar ist.

Ansonsten würd ich das noch versuchen:
If upgradingDon't forget to run update scripts after every minor and major update located in /usr/local/www/haiwen/seafile-server/upgrade Patch updates (5.1.x) don't require these scripts, however do required a restart. When updating from 7.0.x to 7.1.x, removing the seahub cache is required: rm -rf /tmp/seahub_cache/* Also consider reviewing the upgrade notes for minor and major upgrades: https://download.seafile.com/published/seafile-manual/upgrade/upgrade.md
Bzw. neue Seite und mal in die scripts reinschauen, was und wo die was machen: https://manual.seafile.com/upgrade/upgrade_notes_for_9.0.x/
 

peterle

Forenkasper
Weil dein Aufruf laut PKG-CHECK(8) (zumindest verstehe ich das so) dafür falsch war. Mit pkg check sollte der von @mr44er genannte Schalter -d funktionieren (imho ohne -f). Das Ergebnis dürfte dann identisch sein.

Welches Ergebnis dürfte dann identisch sein?
pkg check -d PAKET wäre identisches Ergebnis zu pkg install -f PAKET?

Zu den Log-Files:
seafile bzw. seahub liegen in /usr/local/www/haiwen und da gibt es ein Verzeichnis logs, was in meinem Fall halt nur sehr spärlichen Output liefert weil es wenig Input zu bekommen scheint. An der Stelle liegen auch die Logs, die @mr44er in der Anleitung gefunden hat.

Die Update Scripts sollte man laufen lassen und das habe ich in dem Fall auch gemacht. Verlief alles fehlerfrei.
Interessanterweise hat immer wieder mal nur dieser eine Server Probleme mit dem Update von Seafile. Es gibt über ./seahub.sh start-fastcgi eine Methode, um mehr Output am Terminal zu bekommen, dabei zerschießt man sich aber u.U. die Datei Besitzer.

Die Lösung scheint mir im löschen und neu erstellen der .pyc Dateien außerhalb der Originaldateien zu liegen, wie es hier beschrieben wird:

Probiere ich heute mal aus. Würde für mich viel der Problematiken erklären.
 

Columbo0815

Kaffeemann
Teammitglied
Welches Ergebnis dürfte dann identisch sein?
pkg check -d PAKET wäre identisches Ergebnis zu pkg install -f PAKET?
Nein. pkg check -d PAKET dürfte identisch mit pkg install -f -R PAKET sein, da pkg install -f PAKET (also ohne -R) lediglich das PAKET (und eventuell noch nicht installierte Abhängigkeiten) drüberbügelt. Mit -R erzwingst du, dass auch alle Abhängigkeiten (... also auch die, die du kaputt gelöscht hast) drübergebügelt werden.
 

peterle

Forenkasper
Sollte nochmal jemand bei Seafile Updates über den Fehler:

ImportError: bad magic number in 'seahub.group.models': b'\x03\xf3\r\n'

stolpern, so sei festgehalten, daß die Lösung in einem löschen alles *.pyc files liegt, denn es gab dann scheinends ein Update auf eine neue Python Version und die scheint die alten *.pyc der vorherigen Versionen zu verschmähen.

find /usr/local/www/haiwen -name "*.pyc" -exec rm -f {} \;

@Columbo0815
Danke fürs Erklären, jetzt habe ich verstanden, wie Du das meintest. :)

Danke an alle fürs Mitdenken und Reflektieren. :)
 
Oben