eduMFA icon indicating copy to clipboard operation
eduMFA copied to clipboard

docker compose fails with database errors: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) index ix_token_serial already exists

Open kastl-ars opened this issue 4 months ago • 4 comments

Top-level intent

Running eduMFA via docker compose, as stated in the docs, fails.

Steps to reproduce

  1. Create a new directory and change to it
  2. Create a config.cfg file according to this documentation
  3. Create a docker-compose.yml fle following the documentation.
  4. Run docker compose up

Expected outcome

I would have expected the documentation example to just work.

Actual outcome

This is the full log. The errors regarding EDUMFA_LOGCONFIG can be solved by setting it properly in the configuration file (see #359).

docker compose up                                                 
[+] Running 3/3                                        
 ✔ Network docker-compose_default       Created                                                                                                                                                                                                         0.0s 
 ✔ Volume "docker-compose_edumfa_data"  Created                                                                                                                                                                                                         0.0s 
 ✔ Container docker-compose-edumfa-1    Created                                                                                                                                                                                                         0.1s 
Attaching to edumfa-1                                                                                                         
edumfa-1  | Can not import grpc modules.                                                                                      
edumfa-1  |                                                                                                                   
edumfa-1  |                _       __  __ ______                                                                              
edumfa-1  |               | |     |  \/  |  ____/\                                                                            
edumfa-1  |        ___  __| |_   _| \  / | |__ /  \                                                                           
edumfa-1  |       / _ \/ _` | | | | |\/| |  __/ /\ \                                                                          
edumfa-1  |      |  __/ (_| | |_| | |  | | | / ____ \                                                                         
edumfa-1  |       \___|\__,_|\__,_|_|  |_|_|/_/    \_\       v2.3.0
edumfa-1  |                                                                                                                   
edumfa-1  | Could not use EDUMFA_LOGCONFIG: expected '<document start>', but found '<scalar>'                                 
edumfa-1  |   in "<unicode string>", line 4, column 1:     
edumfa-1  |     keys=detail                                                                                                   
edumfa-1  |     ^                                
edumfa-1  | Encryption key written to /etc/edumfa/enckey
edumfa-1  | The file permission of /etc/edumfa/enckey was set to 400!                                       
edumfa-1  | Please ensure, that it is owned by the right user.                                                                
edumfa-1  | Can not import grpc modules.                                                                                      
edumfa-1  |                                                                                                                   
edumfa-1  |                _       __  __ ______                                                                              
edumfa-1  |               | |     |  \/  |  ____/\                                                                            
edumfa-1  |        ___  __| |_   _| \  / | |__ /  \                                                                           
edumfa-1  |       / _ \/ _` | | | | |\/| |  __/ /\ \                                                                          
edumfa-1  |      |  __/ (_| | |_| | |  | | | / ____ \                                                                         
edumfa-1  |       \___|\__,_|\__,_|_|  |_|_|/_/    \_\       v2.3.0                             
edumfa-1  |                                                   
edumfa-1  | Could not use EDUMFA_LOGCONFIG: expected '<document start>', but found '<scalar>'                                 
edumfa-1  |   in "<unicode string>", line 4, column 1:                                                                        
edumfa-1  |     keys=detail                       
edumfa-1  |     ^                                                                                                             
edumfa-1  | Signing keys written to /etc/edumfa/private.pem and /etc/edumfa/public.pem                
edumfa-1  | The file permission of /etc/edumfa/private.pem was set to 400!
edumfa-1  | Please ensure, that it is owned by the right user.                                                                
edumfa-1  | Creating DB                                                                                                       
edumfa-1  | Can not import grpc modules.                                                                                      
edumfa-1  |                                                                                                                   
edumfa-1  |                _       __  __ ______                                                                              
edumfa-1  |               | |     |  \/  |  ____/\    
edumfa-1  |        ___  __| |_   _| \  / | |__ /  \                                                                           
edumfa-1  |       / _ \/ _` | | | | |\/| |  __/ /\ \                                                                          
edumfa-1  |      |  __/ (_| | |_| | |  | | | / ____ \                                                                         
edumfa-1  |       \___|\__,_|\__,_|_|  |_|_|/_/    \_\       v2.3.0                                         
edumfa-1  |                                                                                                                   
edumfa-1  | Could not use EDUMFA_LOGCONFIG: expected '<document start>', but found '<scalar>'               
edumfa-1  |   in "<unicode string>", line 4, column 1:                                                                                                                                                                                                       
edumfa-1  |     keys=detail                                                                                                   
edumfa-1  |     ^                                                                                                                                                                                                                                            
edumfa-1  | <SQLAlchemy sqlite:////etc/edumfa/data.sqlite>                                                                                                                                                                                                   
edumfa-1  | Upgrading Database                                                                                                                                                                                                                               
edumfa-1  | Can not import grpc modules.                                                                                      
edumfa-1  | Could not use EDUMFA_LOGCONFIG: expected '<document start>', but found '<scalar>'                                 
edumfa-1  |   in "<unicode string>", line 4, column 1:         
edumfa-1  |     keys=detail                                                                                                   
edumfa-1  |     ^
edumfa-1  |                                                  
edumfa-1  |                _       __  __ ______      
edumfa-1  |               | |     |  \/  |  ____/\    
edumfa-1  |        ___  __| |_   _| \  / | |__ /  \   
edumfa-1  |       / _ \/ _` | | | | |\/| |  __/ /\ \  
edumfa-1  |      |  __/ (_| | |_| | |  | | | / ____ \ 
edumfa-1  |       \___|\__,_|\__,_|_|  |_|_|/_/    \_\       v2.3.0
edumfa-1  |     
edumfa-1  | Running online
edumfa-1  | ----------------------------------
edumfa-1  | Migrating the Token information...
edumfa-1  | ----------------------------------
edumfa-1  | Traceback (most recent call last):
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
edumfa-1  |     self.dialect.do_execute(
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
edumfa-1  |     cursor.execute(statement, parameters)
edumfa-1  | sqlite3.OperationalError: index ix_token_serial already exists
edumfa-1  | 
edumfa-1  | The above exception was the direct cause of the following exception:
edumfa-1  | 
edumfa-1  | Traceback (most recent call last):
edumfa-1  |   File "/usr/local/bin/edumfa-manage", line 8, in <module>
edumfa-1  |     sys.exit(cli())
edumfa-1  |              ^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
edumfa-1  |     return self.main(*args, **kwargs)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1078, in main
edumfa-1  |     rv = self.invoke(ctx)
edumfa-1  |          ^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
edumfa-1  |     return _process_result(sub_ctx.command.invoke(sub_ctx))
edumfa-1  |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1688, in invoke
edumfa-1  |     return _process_result(sub_ctx.command.invoke(sub_ctx))
edumfa-1  |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
edumfa-1  |     return ctx.invoke(self.callback, **ctx.params)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 783, in invoke
edumfa-1  |     return __callback(*args, **kwargs)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/decorators.py", line 33, in new_func
edumfa-1  |     return f(get_current_context(), *args, **kwargs)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/flask/cli.py", line 386, in decorator
edumfa-1  |     return ctx.invoke(f, *args, **kwargs)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 783, in invoke
edumfa-1  |     return __callback(*args, **kwargs)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/flask_migrate/cli.py", line 154, in upgrade
edumfa-1  |     _upgrade(directory, revision, sql, tag, x_arg)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/flask_migrate/__init__.py", line 111, in wrapped
edumfa-1  |     f(*args, **kwargs)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/flask_migrate/__init__.py", line 200, in upgrade
edumfa-1  |     command.upgrade(config, revision, sql=sql, tag=tag)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/alembic/command.py", line 406, in upgrade
edumfa-1  |     script.run_env()
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/alembic/script/base.py", line 586, in run_env
edumfa-1  |     util.load_python_file(self.dir, "env.py")
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
edumfa-1  |     module = load_module_py(module_id, path)
edumfa-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/alembic/util/pyfiles.py", line 113, in load_module_py
edumfa-1  |     spec.loader.exec_module(module)  # type: ignore
edumfa-1  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "<frozen importlib._bootstrap_external>", line 995, in exec_module
edumfa-1  |   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
edumfa-1  |   File "/usr/local/lib/edumfa/migrations/env.py", line 110, in <module>
edumfa-1  |     run_migrations_online()
edumfa-1  |   File "/usr/local/lib/edumfa/migrations/env.py", line 100, in run_migrations_online
edumfa-1  |     context.run_migrations()
edumfa-1  |   File "<string>", line 8, in run_migrations
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/alembic/runtime/environment.py", line 946, in run_migrations
edumfa-1  |     self.get_context().run_migrations(**kw)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/alembic/runtime/migration.py", line 628, in run_migrations
edumfa-1  |     step.migration_fn(**kw)
edumfa-1  |   File "/usr/local/lib/edumfa/migrations/versions/4f32a4e1bf33_.py", line 503, in upgrade
edumfa-1  |     create_update_token_table()
edumfa-1  |   File "/usr/local/lib/edumfa/migrations/versions/4f32a4e1bf33_.py", line 253, in create_update_token_table
edumfa-1  |     Token.__table__.create(bind)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/schema.py", line 1284, in create
edumfa-1  |     bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2459, in _run_ddl_visitor
edumfa-1  |     visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/visitors.py", line 664, in traverse_single
edumfa-1  |     return meth(obj, **kw)
edumfa-1  |            ^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py", line 960, in visit_table
edumfa-1  |     self.traverse_single(index, create_ok=True)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/visitors.py", line 664, in traverse_single
edumfa-1  |     return meth(obj, **kw)
edumfa-1  |            ^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py", line 997, in visit_index
edumfa-1  |     CreateIndex(index)._invoke_with(self.connection)
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py", line 314, in _invoke_with
edumfa-1  |     return bind.execute(self)
edumfa-1  |            ^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1418, in execute
edumfa-1  |     return meth(
edumfa-1  |            ^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/ddl.py", line 180, in _execute_on_connection
edumfa-1  |     return connection._execute_ddl(
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1529, in _execute_ddl
edumfa-1  |     ret = self._execute_context(
edumfa-1  |           ^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
edumfa-1  |     return self._exec_single_context(
edumfa-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
edumfa-1  |     self._handle_dbapi_exception(
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
edumfa-1  |     raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
edumfa-1  |     self.dialect.do_execute(
edumfa-1  |   File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
edumfa-1  |     cursor.execute(statement, parameters)
edumfa-1  | sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) index ix_token_serial already exists
edumfa-1  | [SQL: CREATE UNIQUE INDEX ix_token_serial ON token (serial)]
edumfa-1  | (Background on this error at: https://sqlalche.me/e/20/e3q8)
edumfa-1 exited with code 1

Configuration

  • eduMFA version: tested with latest and some other tags from https://github.com/eduMFA/eduMFA/pkgs/container/edumfa
  • Installation method: docker compose
  • Operating system: openSUSE Tumbleweed using Podman 5.2

kastl-ars avatar Oct 08 '24 09:10 kastl-ars