Wenn man bei einer frischen SeaFile Installation (mit mySQL) den seaHub Dienst das erste Mal starten möchten, dann antwortet einem (auf einem frisch aufgesetzten Server) gerne diese Meldung:
./seahub.sh start LC_ALL is not set in ENV, set to en_US.UTF-8 ./seahub.sh: Zeile 210: Warnung: setlocale: LC_ALL: Kann die Locale nicht ändern (en_US.UTF-8): Datei oder Verzeichnis nicht gefunden Starting seahub at port 8000 ... Error:Seahub failed to start. Please try to run "./seahub.sh start" again
OK, den Fehler mit "Kann die Locale nicht ändern (en_US.UTF-8): Datei oder Verzeichnis nicht gefunden" können wir mit der bereits bestehenden Anleitung (Link) schnell lösen. Trotzdem startet der seaHub Service nicht:
./seahub.sh start 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
Da die Fehlermeldungen bei SeaFile nicht immer angezeigt werden oder (wenn sie denn mal angezeigt werden) klar sind, muss der Dienst mit einem Parameter gestartet werden. Dieser zeigt mehr Details an:
./seahub.sh start-fastcgi
LC_ALL is not set in ENV, set to en_US.UTF-8 Starting seahub (fastcgi) at 127.0.0.1:8000 ... Traceback (most recent call last): File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/backends/mysql/base.py", line 15, in <module> import MySQLdb as Database ModuleNotFoundError: No module named 'MySQLdb' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/seafile-server-8.0.5/seahub/manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/core/management/__init__.py", line 381, in execute_from_command_line utility.execute() File "/home/seafile-server-8.0.5/seahub/thirdpart/django/core/management/__init__.py", line 357, in execute django.setup() File "/home/seafile-server-8.0.5/seahub/thirdpart/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/apps/registry.py", line 114, in populate app_config.import_models() File "/home/seafile-server-8.0.5/seahub/thirdpart/django/apps/config.py", line 211, in import_models self.models_module = import_module(models_module_name) File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/home/seafile-server-8.0.5/seahub/thirdpart/django/contrib/sessions/models.py", line 1, in <module> from django.contrib.sessions.base_session import ( File "/home/seafile-server-8.0.5/seahub/thirdpart/django/contrib/sessions/base_session.py", line 26, in <module> class AbstractBaseSession(models.Model): File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/models/base.py", line 117, in __new__ new_class.add_to_class('_meta', Options(meta, app_label)) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/models/base.py", line 321, in add_to_class value.contribute_to_class(cls, name) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/models/options.py", line 204, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/__init__.py", line 28, in __getattr__ return getattr(connections[DEFAULT_DB_ALIAS], item) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/utils.py", line 201, in __getitem__ backend = load_backend(db['ENGINE']) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/utils.py", line 110, in load_backend return import_module('%s.base' % backend_name) File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/backends/mysql/base.py", line 20, in <module> ) from err django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient? Error:Seahub failed to start.
Aha. SeaFile fehlt der mySQL-Client.
Der einfache Weg per PIP Installation kann versucht werden:
pip3 install mysqlclient
... schlägt aber in fast allen Fällen fehl:
Collecting mysqlclient Downloading https://files.pythonhosted.org/packages/3c/df/59cd2fa5e48d0804/mysqlclient-2.0.3.tar.gz (88kB) 100% |*******************| 92kB 964kB/s Complete output from command python setup.py egg_info: /bin/sh: 1: mysql_config: not found /bin/sh: 1: mariadb_config: not found /bin/sh: 1: mysql_config: not found mysql_config --version mariadb_config --version mysql_config --libs Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-install-j7lny7bi/mysqlclient/setup.py", line 15, in <module> metadata, options = get_config() File "/tmp/pip-install-j7lny7bi/mysqlclient/setup_posix.py", line 70, in get_config libs = mysql_config("libs") File "/tmp/pip-install-j7lny7bi/mysqlclient/setup_posix.py", line 31, in mysql_config raise OSError("{} not found".format(_mysql_config_path)) OSError: mysql_config not found ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-j7lny7bi/mysqlclient/
Wäre ja langweilig, wenn's mal einfach so klappen würde.
Zuerst die PIP Version herausfinden:
pip3 -V
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
In diesem ist Version 3.7 installiert (sh. Ende der vorherigen Ausgabe). Die Version wird im folgenden Befehl am Anfang eingefügt:
python3.7 -m pip install --upgrade pip
Collecting pip Downloading https://files.pythonhosted.org/packages/cd/82/04e9aaf603fdbaecb4323b9e72/pip-21.1.2-py3-none-any.whl (1.5MB) 100% |*******************| 1.6MB 248kB/s Installing collected packages: pip Found existing installation: pip 18.1 Successfully installed pip-21.1.2
Dann braucht das System noch die mySQL DEV-Module und da (wie bei den meisten aktuellen Linux Systemen) der MariaDB-Server und nicht der mySQL-Server installiert ist, wird das "libmariadbclient" Package installiert. Wer wirklich den mySQL-Server installiert hat, der installiert an dieser Stelle bitte das "libmysqldbclient-dev" Paket.
sudo apt-get install -y libmariadbclient-dev
Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden zusätzlichen Pakete werden installiert: libevent-2.1-6 libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28 libidn2-dev libmariadb-dev libp11-kit-dev libtasn1-6-dev libtasn1-doc libunbound8 nettle-dev Vorgeschlagene Pakete: gmp-doc libgmp10-doc libmpfr-dev gnutls-bin gnutls-doc Die folgenden NEUEN Pakete werden installiert: libevent-2.1-6 libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28 libidn2-dev libmariadb-dev libmariadbclient-dev libp11-kit-dev libtasn1-6-dev libtasn1-doc libunbound8 nettle-dev 0 aktualisiert, 15 neu installiert, 0 zu entfernen und 1 nicht aktualisiert. Es müssen 5.850 kB an Archiven heruntergeladen werden. Nach dieser Operation werden 18,8 MB Plattenplatz zusätzlich benutzt. Holen:1 http://ftp.de.debian.org/debian buster/main amd64 libevent-2.1-6 amd64 2.1.8-stable-4 [177 kB] Holen:2 http://security.debian.org/debian-security buster/updates/main amd64 nettle-dev amd64 3.4.1-1+deb10u1 [1.077 kB] Holen:3 http://ftp.de.debian.org/debian buster/main amd64 libgmpxx4ldbl amd64 2:6.1.2+dfsg-4 [22,9 kB] Holen:4 http://ftp.de.debian.org/debian buster/main amd64 libgmp-dev amd64 2:6.1.2+dfsg-4 [628 kB] Holen:5 http://ftp.de.debian.org/debian buster/main amd64 libunbound8 amd64 1.9.0-2+deb10u2 [462 kB] Holen:6 http://ftp.de.debian.org/debian buster/main amd64 libgnutls-dane0 amd64 3.6.7-4+deb10u7 [317 kB] Holen:7 http://ftp.de.debian.org/debian buster/main amd64 libgnutls-openssl27 amd64 3.6.7-4+deb10u7 [318 kB] Holen:8 http://ftp.de.debian.org/debian buster/main amd64 libgnutlsxx28 amd64 3.6.7-4+deb10u7 [14,6 kB] Holen:9 http://ftp.de.debian.org/debian buster/main amd64 libidn2-dev amd64 2.0.5-1+deb10u1 [79,5 kB] Holen:10 http://ftp.de.debian.org/debian buster/main amd64 libp11-kit-dev amd64 0.23.15-2+deb10u1 [196 kB] Holen:11 http://ftp.de.debian.org/debian buster/main amd64 libtasn1-6-dev amd64 4.13-3 [104 kB] Holen:12 http://ftp.de.debian.org/debian buster/main amd64 libgnutls28-dev amd64 3.6.7-4+deb10u7 [1.088 kB] Holen:13 http://ftp.de.debian.org/debian buster/main amd64 libmariadb-dev amd64 1:10.3.29-0+deb10u1 [1.020 kB] Holen:14 http://ftp.de.debian.org/debian buster/main amd64 libmariadbclient-dev amd64 1:10.3.29-0+deb10u1 [31,4 kB] Holen:15 http://ftp.de.debian.org/debian buster/main amd64 libtasn1-doc all 4.13-3 [317 kB] Es wurden 5.850 kB in 5 s geholt (1.161 kB/s). Vormals nicht ausgewähltes Paket libevent-2.1-6:amd64 wird gewählt. (Lese Datenbank ... 156835 Dateien und Verzeichnisse sind derzeit installiert.) Vorbereitung zum Entpacken von .../00-libevent-2.1-6_2.1.8-stable-4_amd64.deb ... Entpacken von libevent-2.1-6:amd64 (2.1.8-stable-4) ... Vormals nicht ausgewähltes Paket libgmpxx4ldbl:amd64 wird gewählt. Vorbereitung zum Entpacken von .../01-libgmpxx4ldbl_2%3a6.1.2+dfsg-4_amd64.deb ... Entpacken von libgmpxx4ldbl:amd64 (2:6.1.2+dfsg-4) ... Vormals nicht ausgewähltes Paket libgmp-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../02-libgmp-dev_2%3a6.1.2+dfsg-4_amd64.deb ... Entpacken von libgmp-dev:amd64 (2:6.1.2+dfsg-4) ... Vormals nicht ausgewähltes Paket libunbound8:amd64 wird gewählt. Vorbereitung zum Entpacken von .../03-libunbound8_1.9.0-2+deb10u2_amd64.deb ... Entpacken von libunbound8:amd64 (1.9.0-2+deb10u2) ... Vormals nicht ausgewähltes Paket libgnutls-dane0:amd64 wird gewählt. Vorbereitung zum Entpacken von .../04-libgnutls-dane0_3.6.7-4+deb10u7_amd64.deb ... Entpacken von libgnutls-dane0:amd64 (3.6.7-4+deb10u7) ... Vormals nicht ausgewähltes Paket libgnutls-openssl27:amd64 wird gewählt. Vorbereitung zum Entpacken von .../05-libgnutls-openssl27_3.6.7-4+deb10u7_amd64.deb ... Entpacken von libgnutls-openssl27:amd64 (3.6.7-4+deb10u7) ... Vormals nicht ausgewähltes Paket libgnutlsxx28:amd64 wird gewählt. Vorbereitung zum Entpacken von .../06-libgnutlsxx28_3.6.7-4+deb10u7_amd64.deb ... Entpacken von libgnutlsxx28:amd64 (3.6.7-4+deb10u7) ... Vormals nicht ausgewähltes Paket libidn2-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../07-libidn2-dev_2.0.5-1+deb10u1_amd64.deb ... Entpacken von libidn2-dev:amd64 (2.0.5-1+deb10u1) ... Vormals nicht ausgewähltes Paket libp11-kit-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../08-libp11-kit-dev_0.23.15-2+deb10u1_amd64.deb ... Entpacken von libp11-kit-dev:amd64 (0.23.15-2+deb10u1) ... Vormals nicht ausgewähltes Paket libtasn1-6-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../09-libtasn1-6-dev_4.13-3_amd64.deb ... Entpacken von libtasn1-6-dev:amd64 (4.13-3) ... Vormals nicht ausgewähltes Paket nettle-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../10-nettle-dev_3.4.1-1+deb10u1_amd64.deb ... Entpacken von nettle-dev:amd64 (3.4.1-1+deb10u1) ... Vormals nicht ausgewähltes Paket libgnutls28-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../11-libgnutls28-dev_3.6.7-4+deb10u7_amd64.deb ... Entpacken von libgnutls28-dev:amd64 (3.6.7-4+deb10u7) ... Vormals nicht ausgewähltes Paket libmariadb-dev wird gewählt. Vorbereitung zum Entpacken von .../12-libmariadb-dev_1%3a10.3.29-0+deb10u1_amd64.deb ... Entpacken von libmariadb-dev (1:10.3.29-0+deb10u1) ... Vormals nicht ausgewähltes Paket libmariadbclient-dev:amd64 wird gewählt. Vorbereitung zum Entpacken von .../13-libmariadbclient-dev_1%3a10.3.29-0+deb10u1_amd64.deb ... Entpacken von libmariadbclient-dev:amd64 (1:10.3.29-0+deb10u1) ... Vormals nicht ausgewähltes Paket libtasn1-doc wird gewählt. Vorbereitung zum Entpacken von .../14-libtasn1-doc_4.13-3_all.deb ... Entpacken von libtasn1-doc (4.13-3) ... libgnutls-openssl27:amd64 (3.6.7-4+deb10u7) wird eingerichtet ... libtasn1-doc (4.13-3) wird eingerichtet ... libgmpxx4ldbl:amd64 (2:6.1.2+dfsg-4) wird eingerichtet ... libgnutlsxx28:amd64 (3.6.7-4+deb10u7) wird eingerichtet ... libidn2-dev:amd64 (2.0.5-1+deb10u1) wird eingerichtet ... libevent-2.1-6:amd64 (2.1.8-stable-4) wird eingerichtet ... libtasn1-6-dev:amd64 (4.13-3) wird eingerichtet ... libp11-kit-dev:amd64 (0.23.15-2+deb10u1) wird eingerichtet ... libgmp-dev:amd64 (2:6.1.2+dfsg-4) wird eingerichtet ... nettle-dev:amd64 (3.4.1-1+deb10u1) wird eingerichtet ... libunbound8:amd64 (1.9.0-2+deb10u2) wird eingerichtet ... libgnutls-dane0:amd64 (3.6.7-4+deb10u7) wird eingerichtet ... libgnutls28-dev:amd64 (3.6.7-4+deb10u7) wird eingerichtet ... libmariadb-dev (1:10.3.29-0+deb10u1) wird eingerichtet ... libmariadbclient-dev:amd64 (1:10.3.29-0+deb10u1) wird eingerichtet ... Trigger für libc-bin (2.28-10) werden verarbeitet ... Trigger für man-db (2.8.5-2) werden verarbeitet ...
Jetzt kann auch per PIP der fehlende "mysqlclient" installiert werden:
python3.7 -m pip install mysqlclient
Collecting mysqlclient Using cached mysqlclient-2.0.3.tar.gz (88 kB) Building wheels for collected packages: mysqlclient Building wheel for mysqlclient (setup.py) ... done Created wheel for mysqlclient: filename=mysqlclient-2.0.3-cp37-cp37m-linux_x86_64.whl size=112059 sha256=afc34fe65998bd44021649 Stored in directory: /root/.cache/pip/wheels/79/1c/f8/11fafab45fe6696eea6375fb7 Successfully built mysqlclient Installing collected packages: mysqlclient Successfully installed mysqlclient-2.0.3 WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
Jetzt kann der seaHub Service gestartet werden:
./seahub.sh start
LC_ALL is not set in ENV, set to en_US.UTF-8 Starting seahub at port 8000 ... Seahub is started Done.
Danke! Funktioniert, so musste ich mir die Lösung der vielen kleinen einzel-Probleme nicht allein suchen. Nur meine Python-Version war noch 3.6. ansonsten passte alles.