skelsec/jackdaw

Database init via sqlite fails

Closed this issue · 2 comments

I'm trying out jackdaw on Kali Linux as root.
After cloning from git and running setup.py with Python3 (no errors), initializing the database throws an error right away:

jackdaw --sql sqlite:///root/customer/jackdaw_customer.db dbinit                                                                                                                                              Tue Feb  4 18:38:31 2020
INFO:root:Creating database sqlite:///root/customer/jackdaw_customer.db
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 2276, in _wrap_pool_connect
    return fn()
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 363, in connect
    return _ConnectionFairy._checkout(self)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 760, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 492, in checkout
    rec = pool._do_get()
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/impl.py", line 238, in _do_get
    return self._create_connection()
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 308, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 437, in __init__
    self.__connect(first_connect_check=True)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 639, in __connect
    connection = pool._invoke_creator(self)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 482, in connect
    return self.dbapi.connect(*cargs, **cparams)
sqlite3.OperationalError: unable to open database file

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/jackdaw", line 11, in <module>
    load_entry_point('jackdaw==0.2.0', 'console_scripts', 'jackdaw')()
  File "/usr/local/lib/python3.7/dist-packages/jackdaw-0.2.0-py3.7.egg/jackdaw/__main__.py", line 260, in main
    run(args)
  File "/usr/local/lib/python3.7/dist-packages/jackdaw-0.2.0-py3.7.egg/jackdaw/__main__.py", line 69, in run
    create_db(db_conn)
  File "/usr/local/lib/python3.7/dist-packages/jackdaw-0.2.0-py3.7.egg/jackdaw/dbmodel/__init__.py", line 94, in create_db
    Basemodel.metadata.create_all(engine)
  File "/usr/lib/python3/dist-packages/sqlalchemy/sql/schema.py", line 4316, in create_all
    ddl.SchemaGenerator, self, checkfirst=checkfirst, tables=tables
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 2048, in _run_visitor
    with self._optional_conn_ctx_manager(connection) as conn:
  File "/usr/lib/python3.7/contextlib.py", line 112, in __enter__
    return next(self.gen)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 2040, in _optional_conn_ctx_manager
    with self._contextual_connect() as conn:
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 2242, in _contextual_connect
    self._wrap_pool_connect(self.pool.connect, None),
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 2280, in _wrap_pool_connect
    e, dialect, self
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1547, in _handle_dbapi_exception_noconnection
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 2276, in _wrap_pool_connect
    return fn()
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 363, in connect
    return _ConnectionFairy._checkout(self)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 760, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 492, in checkout
    rec = pool._do_get()
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/impl.py", line 238, in _do_get
    return self._create_connection()
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 308, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 437, in __init__
    self.__connect(first_connect_check=True)
  File "/usr/lib/python3/dist-packages/sqlalchemy/pool/base.py", line 639, in __connect
    connection = pool._invoke_creator(self)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 482, in connect
    return self.dbapi.connect(*cargs, **cparams)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file
(Background on this error at: http://sqlalche.me/e/e3q8)

The file doesn't exist, I assume it is created by Jackdaw. Anything wrong on my side?

In fact, that was the solution, making me feeling quite stupid right now...:

jackdaw --sql sqlite:////root/customer/jackdaw_customer.db dbinit                                                                                                                                     12.9s < Tue Feb  4 18:44:46 2020
INFO:root:Creating database sqlite:////root/customer/jackdaw_customer.db
INFO:root:Done creating database sqlite:////root/customer/jackdaw_customer.db

Thanks a lot.
As four '/'es is quite unusual for such a URI, you may consider clarifying this in the docs or implementing a more explicit error message?