inventree / InvenTree

Open Source Inventory Management System
https://docs.inventree.org
MIT License
4.19k stars 755 forks source link

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. #5242

Closed not-bob-hope closed 1 year ago

not-bob-hope commented 1 year ago

Deployment Method

Describe the problem*

Error about loading MySQLdb module when module is available to test python script.

I had an sqlite version running on 22.04 to evaluate installed by the script downloaded from get.inventree.org, but when trying to change to a MySQL database, I couldn't get it to work. I reinstalled the server with a fresh version of the latest 20.04 LTS and got the same error.

I have tested the connection to the remote MySQL server and can log in as the Inventree user using the password assigned to the account.

Server with a fresh install of Ubunti 20.04 with packages preinstalled and the install script run to enable a MySQL database installation. uname -a Linux serv1 5.4.0-153-generic #170-Ubuntu SMP Fri Jun 16 13:43:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux cat /etc/os-release NAME="Ubuntu" VERSION="20.04.6 LTS (Focal Fossa)"

error line: import MySQLdb as Database

Test script to load MySQLdb module nano test.py try: import MySQLdb as Database except ImportError as err: print ('Error loading MySQLdb module')

version = Database.version_info print (version)

python3 test.py (2, 2, 0, 'final', 0)

Output: module loads successfully in test.py

Steps to Reproduce

Install the latest Ubuntu Server 20.04.06LTS from Canonical sudo apt-get update sudo apt-get upgrade sudo apt-get install python3 python3-dev python3-pip python3-invoke python3-venv git gcc g++ gettext gnupg poppler-utils libpango-1.0-0 libpangoft2-1.0-0 libjpeg-dev webp sudo apt-get install pkg-config sudo apt-get install default-libmysqlclient-dev sudo pip3 install mysqlclient curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash sudo apt-get install libmariadb-dev-compat sudo pip3 install mariadb wget -qO install.sh https://get.inventree.org chmod +x install.sh sudo -i export INVENTREE_DB_ENGINE=mysql export INVENTREE_DB_NAME=Inventree export INVENTREE_DB_USER=Inventree_user export INVENTREE_DB_PASSWORD=** export INVENTREE_DB_HOST=rem.ote.ipa.ddr export INVENTREE_DB_PORT=3306 ./install.sh

journalctl

Jul 13 10:38:56 serv1 inventree-web-1.service[45590]: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Jul 13 10:38:56 serv1 inventree-web-1.service[45590]: Did you install mysqlclient? Jul 13 10:38:56 serv1 inventree-web-1.service[45590]: [2023-07-13 10:38:56 +0000] [45590] [INFO] Worker exiting (pid: 45590) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: [2023-07-13 10:38:56 +0000] [45592] [ERROR] Exception in worker process Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: Traceback (most recent call last): Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 15, in Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: import MySQLdb as Database Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: ModuleNotFoundError: No module named 'MySQLdb' Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: The above exception was the direct cause of the following exception: Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: Traceback (most recent call last): Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: worker.init_process() Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: self.load_wsgi() Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: self.wsgi = self.app.wsgi() Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: self.callable = self.load() Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return self.load_wsgiapp() Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return util.import_app(self.app_uri) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: mod = importlib.import_module(module) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/usr/lib/python3.8/importlib/init.py", line 127, in import_module Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return _bootstrap._gcd_import(name[level:], package, level) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 1014, in _gcd_import Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 991, in _find_and_load Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 975, in _find_and_load_unlocked Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 671, in _load_unlocked Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 848, in exec_module Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 219, in _call_with_frames_removed Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/InvenTree/InvenTree/wsgi.py", line 15, in Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: application = get_wsgi_application() # pragma: no cover Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: django.setup(set_prefix=False) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/init.py", line 24, in setup Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: apps.populate(settings.INSTALLED_APPS) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/apps/registry.py", line 114, in populate Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: app_config.import_models() Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/apps/config.py", line 301, in import_models Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: self.models_module = import_module(models_module_name) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/usr/lib/python3.8/importlib/init.py", line 127, in import_module Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return _bootstrap._gcd_import(name[level:], package, level) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 1014, in _gcd_import Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 991, in _find_and_load Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 975, in _find_and_load_unlocked Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 671, in _load_unlocked Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 848, in exec_module Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "", line 219, in _call_with_frames_removed Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/InvenTree/build/models.py", line 8, in Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: from django.contrib.auth.models import User Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/contrib/auth/models.py", line 3, in Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/contrib/auth/base_user.py", line 48, in Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: class AbstractBaseUser(models.Model): Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/models/base.py", line 122, in new Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: new_class.add_to_class('_meta', Options(meta, app_label)) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/models/base.py", line 326, in add_to_class Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: value.contribute_to_class(cls, name) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/models/options.py", line 207, in contribute_to_class Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/utils/connection.py", line 15, in getattr Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return getattr(self._connections[self._alias], item) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/utils/connection.py", line 62, in getitem Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: conn = self.create_connection(alias) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/utils.py", line 204, in create_connection Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: backend = load_backend(db['ENGINE']) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/utils.py", line 111, in load_backend Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return import_module('%s.base' % backend_name) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/usr/lib/python3.8/importlib/init.py", line 127, in import_module Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: return _bootstrap._gcd_import(name[level:], package, level) Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: File "/opt/inventree/env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 17, in Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: raise ImproperlyConfigured( Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: Did you install mysqlclient?

Relevant log output

journalctl

Jul 13 10:38:56 serv1 inventree-web-1.service[45590]: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Jul 13 10:38:56 serv1 inventree-web-1.service[45590]: Did you install mysqlclient?
Jul 13 10:38:56 serv1 inventree-web-1.service[45590]: [2023-07-13 10:38:56 +0000] [45590] [INFO] Worker exiting (pid: 45590)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: [2023-07-13 10:38:56 +0000] [45592] [ERROR] Exception in worker process
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: Traceback (most recent call last):
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     import MySQLdb as Database
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: ModuleNotFoundError: No module named 'MySQLdb'
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: The above exception was the direct cause of the following exception:
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: Traceback (most recent call last):
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     worker.init_process()
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     self.load_wsgi()
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     self.wsgi = self.app.wsgi()
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     self.callable = self.load()
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return self.load_wsgiapp()
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return util.import_app(self.app_uri)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     mod = importlib.import_module(module)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return _bootstrap._gcd_import(name[level:], package, level)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap_external>", line 848, in exec_module
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/InvenTree/InvenTree/wsgi.py", line 15, in <module>
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     application = get_wsgi_application()  # pragma: no cover
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     django.setup(set_prefix=False)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     apps.populate(settings.INSTALLED_APPS)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/apps/registry.py", line 114, in populate
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     app_config.import_models()
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/apps/config.py", line 301, in import_models
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     self.models_module = import_module(models_module_name)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return _bootstrap._gcd_import(name[level:], package, level)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap_external>", line 848, in exec_module
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/InvenTree/build/models.py", line 8, in <module>
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     from django.contrib.auth.models import User
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/contrib/auth/models.py", line 3, in <module>
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/contrib/auth/base_user.py", line 48, in <module>
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     class AbstractBaseUser(models.Model):
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/models/base.py", line 122, in __new__
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     new_class.add_to_class('_meta', Options(meta, app_label))
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/models/base.py", line 326, in add_to_class
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     value.contribute_to_class(cls, name)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/models/options.py", line 207, in contribute_to_class
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/utils/connection.py", line 15, in __getattr__
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return getattr(self._connections[self._alias], item)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/utils/connection.py", line 62, in __getitem__
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     conn = self.create_connection(alias)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/utils.py", line 204, in create_connection
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     backend = load_backend(db['ENGINE'])
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/utils.py", line 111, in load_backend
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return import_module('%s.base' % backend_name)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     return _bootstrap._gcd_import(name[level:], package, level)
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:   File "/opt/inventree/env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 17, in <module>
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]:     raise ImproperlyConfigured(
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Jul 13 10:38:56 serv1 inventree-web-1.service[45592]: Did you install mysqlclient?
SchrodingersGat commented 1 year ago

Are you sure that you have installed mysqlclient within the virtual environment that InvenTreePlugin is running in?

not-bob-hope commented 1 year ago

Yes, python isn't my thing, I was hoping the install script would install requirements where they're needed, not really sure about the whole venv thing. This is the only thing on the server, I was assuming a bare metal install would just install things system wide.

All the package installs above were very much trial and error over the last days as progress was made to get the install script to actually run. The biggest headache was eventually loading the libmariadb-dev-compat package direct from Mariadb repo to get the C connector to a high enough version that the mysqlclient module needed for its dependency. Hence is was installed system wide and not in the inventree virtual environment.

Anyway, thanks, progress made.

su inventree cd /opt/inventree/ source ./env/bin/activate pip3 install mysqlclient invoke update

It appears to write a default config to /opt/inventree/Inventree/config.yaml which didn't work as it was default, so I added my DB config and re-ran invoke update.

It ran though a load of checks, backed up up the non existent database and loaded a default one.

I think I have an empty database, I can't login with the creds listed in the install log.

I am also confused as I have config files in /etc/inventree and /opt/inventree/Inventree that have different secret_key.txt files and probably other differences.

Which is used when the services are started by systemctl start inventree.service?

How do I get an admin login? I assume using the forgot password won't work with an empty db as well as the default email is a domain registered to someone on the Internet with a valid MX record to receive default password resets. I would suggest example.local as a safer default.

matmair commented 1 year ago

@not-bob-hope if you are running the package installation you do not need all packages you listed. This works in my tests:

sudo apt-get install mysql-server libmysqlclient-dev pkg-config -y
wget -qO install.sh https://get.inventree.org/
chmod +x install.sh
sudo -i
export INVENTREE_DB_ENGINE=mysql
export INVENTREE_DB_NAME=Inventree
export INVENTREE_DB_USER=Inventree_user
export INVENTREE_DB_PASSWORD=**************
export INVENTREE_DB_HOST=rem.ote.ipa.ddr
export INVENTREE_DB_PORT=3306
export SETUP_EXTRA_PIP='mysqlclient mariadb'
./install.sh

The configs by default are in /etc/inventree. I would suggest to remove the inventree package with apt remove inventree --purge before running the commands agian.

not-bob-hope commented 1 year ago

Yes, that worked thanks, I have a running server.