SQLite permission error writing to cache
I've had a couple users report nyx permission errors. Most likely this comes up when changing the user they run nyx as.
Users should be able to work around this with the following...
% echo "data_directory disabled" >> my_nyxrc
% nyx --config my_nyxrc
Stacktrace users report are the following...
Traceback (most recent call last):
File "/usr/bin/nyx", line 11, in <module>
load_entry_point('nyx==2.0.4', 'console_scripts', 'nyx')()
File "/usr/lib/python3/dist-packages/nyx/__init__.py", line 176, in main
nyx.starter.main()
File "/usr/lib/python3/dist-packages/stem/util/conf.py", line 289, in wrapped
return func(*args, config = config, **kwargs)
File "/usr/lib/python3/dist-packages/nyx/starter.py", line 118, in main
nyx.curses.start(nyx.draw_loop, acs_support = config.get('acs_support', True), transparent_background = True, cursor = False)
File "/usr/lib/python3/dist-packages/nyx/curses.py", line 217, in start
curses.wrapper(_wrapper)
File "/usr/lib/python3.6/curses/__init__.py", line 94, in wrapper
return func(stdscr, *args, **kwds)
File "/usr/lib/python3/dist-packages/nyx/curses.py", line 215, in _wrapper
function()
File "/usr/lib/python3/dist-packages/nyx/__init__.py", line 194, in draw_loop
interface = nyx_interface()
File "/usr/lib/python3/dist-packages/nyx/__init__.py", line 256, in nyx_interface
Interface() # constructor sets NYX_INTERFACE
File "/usr/lib/python3/dist-packages/nyx/__init__.py", line 589, in __init__
self._header_panel = nyx.panel.header.HeaderPanel()
File "/usr/lib/python3/dist-packages/nyx/panel/header.py", line 47, in __init__
self._vals = Sampling.create()
File "/usr/lib/python3/dist-packages/nyx/panel/header.py", line 235, in create
my_router_status_entry = nyx.tracker.get_consensus_tracker().my_router_status_entry()
File "/usr/lib/python3/dist-packages/nyx/tracker.py", line 169, in get_consensus_tracker
CONSENSUS_TRACKER = ConsensusTracker()
File "/usr/lib/python3/dist-packages/nyx/tracker.py", line 831, in __init__
self._update(ns_response)
File "/usr/lib/python3/dist-packages/nyx/tracker.py", line 853, in _update
writer.record_relay(fingerprint, address, or_port, nickname)
File "/usr/lib/python3/dist-packages/nyx/__init__.py", line 569, in record_relay
self._cache._query('INSERT OR REPLACE INTO relays(fingerprint, address, or_port, nickname) VALUES (?,?,?,?)', fingerprint, address, or_port, nickname)
File "/usr/lib/python3/dist-packages/nyx/__init__.py", line 541, in _query
return self._conn.execute(query, param)
sqlite3.OperationalError: attempt to write a readonly database
The cache is only for a performance improvement so when we lack cache write access nyx should emit a warning and simply avoid these calls.