-
-
Notifications
You must be signed in to change notification settings - Fork 366
Description
What installation are you running?
Production (netalertx) 📦
Is there an existing issue for this?
- I have searched the existing open and closed issues and I checked the docs https://docs.netalertx.com/
The issue occurs in the following browsers. Select at least 2.
- Firefox
- Chrome
- Edge
- Safari (unsupported) - PRs welcome
- N/A - This is an issue with the backend
Current Behavior
Scheduled scans run, error appears in stderror:
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/app/server/main.py", line 260, in
sys.exit(main())
^^^^^^
File "/app/server/main.py", line 135, in main
pm.run_plugin_scripts("schedule")
File "/app/server/plugin.py", line 102, in run_plugin_scripts
execute_plugin(self.db, self.all_plugins, plugin)
File "/app/server/plugin.py", line 711, in execute_plugin
process_plugin_events(db, plugin, sqlParams)
File "/app/server/plugin.py", line 1053, in process_plugin_events
sql.executemany(q, sqlParams)
sqlite3.OperationalError: table CurrentScan has no column named cur_NAME
No further scheduled scans then run automatically until the container is restarted.
Error appears only when LUCIRPC plugin is configured and enabled
Expected Behavior
All scheduled scans run without interruption
Steps To Reproduce
- Use Docker Compose to create a new NetAlertX instance with a fresh database.
- Configure settings/subnets
- Enable & configure LUCIRPC
- Note that when LUCIRPC scan is in progress, the error appears in stdout and no further scans run
Relevant app.conf settings
#-----------------AUTOGENERATED FILE-----------------#
# #
# Generated: 2026-02-09_11-45-58 #
# #
# Config file for the LAN intruder detection app: #
# https://github.com/jokob-sk/NetAlertX #
# #
#-----------------AUTOGENERATED FILE-----------------#
# General
#---------------------------
LOADED_PLUGINS=['ARPSCAN','AVAHISCAN','CSVBCKP','DBCLNP','DIGSCAN','INTRNT','MAINT','NEWDEV','NBTSCAN','NSLOOKUP','NTFPRCS','SETPWD','SMTP','SYNC','VNDRPDT','WORKFLOWS','UI','CUSTPROP','LUCIRPC']
LOADED_PLUGINS__metadata="{}"
DISCOVER_PLUGINS=True
DISCOVER_PLUGINS__metadata="{}"
SCAN_SUBNETS=['192.168.0.0/24 --interface=enx00e04c68397e']
SCAN_SUBNETS__metadata="{}"
LOG_LEVEL='trace'
LOG_LEVEL__metadata="{}"
TIMEZONE='Europe/London'
TIMEZONE__metadata="{}"
PLUGINS_KEEP_HIST=250
PLUGINS_KEEP_HIST__metadata="{}"
REPORT_DASHBOARD_URL='https://netalertx.REDACTED.uk'
REPORT_DASHBOARD_URL__metadata="{}"
BACKEND_API_URL='https://netalertx.REDACTED.uk/netalertx-api'
BACKEND_API_URL__metadata="{}"
DAYS_TO_KEEP_EVENTS=90
DAYS_TO_KEEP_EVENTS__metadata="{}"
HRS_TO_KEEP_NEWDEV=0
HRS_TO_KEEP_NEWDEV__metadata="{}"
HRS_TO_KEEP_OFFDEV=0
HRS_TO_KEEP_OFFDEV__metadata="{}"
CLEAR_NEW_FLAG=0
CLEAR_NEW_FLAG__metadata="{}"
REFRESH_FQDN=True
REFRESH_FQDN__metadata="{}"
API_CUSTOM_SQL='SELECT * FROM Devices WHERE devPresentLastScan = 0'
API_CUSTOM_SQL__metadata="{}"
VERSION='v26.2.6'
VERSION__metadata="{}"
NETWORK_DEVICE_TYPES=['AP','Access Point','Gateway','Firewall','Hypervisor','Powerline','Switch','WLAN','PLC','Router','USB LAN Adapter','USB WIFI Adapter','Internet']
NETWORK_DEVICE_TYPES__metadata="{}"
GRAPHQL_PORT=20212
GRAPHQL_PORT__metadata="{}"
API_TOKEN='REDACTED'
API_TOKEN__metadata="{}"
# LUCIRPC
#---------------------------
LUCIRPC_RUN='schedule'
LUCIRPC_RUN__metadata="{\"function\": \"RUN\", \"events\": [\"run\"], \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"disabled\", \"options\": [\"disabled\", \"once\", \"schedule\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"When to run\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"When the plugin should run. Good options are <code>schedule</code>\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u041a\\u043e\\u0433\\u0434\\u0430 \\u0434\\u043e\\u043b\\u0436\\u0435\\u043d \\u0437\\u0430\\u043f\\u0443\\u0441\\u0442\\u0438\\u0442\\u044c\\u0441\\u044f \\u043f\\u043b\\u0430\\u0433\\u0438\\u043d. \\u0425\\u043e\\u0440\\u043e\\u0448\\u0438\\u043c\\u0438 \\u0432\\u0430\\u0440\\u0438\\u0430\\u043d\\u0442\\u0430\\u043c\\u0438 \\u044f\\u0432\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f <code>schedule</code>\"}]}"
LUCIRPC_RUN_SCHD='*/5 * * * *'
LUCIRPC_RUN_SCHD__metadata="{\"function\": \"RUN_SCHD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"*/5 * * * *\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Schedule\"}, {\"language_code\": \"ru_ru\", \"string\": \"Schedule\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Only enabled if you select <code>schedule</code> in the <a href=\\\"#SYNC_RUN\\\"><code>SYNC_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes.\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0414\\u043e\\u0441\\u0442\\u0443\\u043f\\u043d\\u043e \\u0442\\u043e\\u043b\\u044c\\u043a\\u043e \\u0432 \\u0442\\u043e\\u043c \\u0441\\u043b\\u0443\\u0447\\u0430\\u0435, \\u0435\\u0441\\u043b\\u0438 \\u0432\\u044b \\u0432\\u044b\\u0431\\u0440\\u0430\\u043b\\u0438 <code>schedule</code> \\u0432 <a href=\\\"#SYNC_RUN\\\"><code>SYNC_RUN</code> setting</a>. \\u0423\\u0431\\u0435\\u0434\\u0438\\u0442\\u0435\\u0441\\u044c, \\u0447\\u0442\\u043e \\u0432\\u044b \\u0432\\u0432\\u043e\\u0434\\u0438\\u0442\\u0435 \\u0440\\u0430\\u0441\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435 \\u0432 \\u043f\\u0440\\u0430\\u0432\\u0438\\u043b\\u044c\\u043d\\u043e\\u043c \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0435, \\u043f\\u043e\\u0445\\u043e\\u0436\\u0435\\u043c \\u043d\\u0430 cron (\\u043d\\u0430\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440, \\u043f\\u0440\\u043e\\u0432\\u0435\\u0440\\u044c\\u0442\\u0435 \\u043d\\u0430 <a href=\\\"https://crontab.guru/\\\" target=\\\"_blank\\\">crontab.guru</a>). \\u041d\\u0430\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440, \\u0435\\u0441\\u043b\\u0438 \\u0432\\u044b \\u0432\\u0432\\u0435\\u0434\\u0435\\u0442\\u0435 <code>0 4 * * *</code>, \\u0442\\u043e \\u0441\\u043a\\u0430\\u043d\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 \\u0431\\u0443\\u0434\\u0435\\u0442 \\u0437\\u0430\\u043f\\u0443\\u0441\\u043a\\u0430\\u0442\\u044c\\u0441\\u044f \\u043f\\u043e\\u0441\\u043b\\u0435 4 \\u0447\\u0430\\u0441\\u043e\\u0432 \\u0443\\u0442\\u0440\\u0430 \\u0432 <a onclick=\\\"toggleAllSettings()\\\" href=\\\"#TIMEZONE\\\"><code>TIMEZONE</code> \\u043a\\u043e\\u0442\\u043e\\u0440\\u044b\\u0439 \\u0432\\u044b \\u0443\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u0438\\u043b\\u0438 \\u0432\\u044b\\u0448\\u0435</a>. \\u0421\\u043a\\u0430\\u043d\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 \\u0431\\u0443\\u0434\\u0435\\u0442 \\u0437\\u0430\\u043f\\u0443\\u0441\\u043a\\u0430\\u0442\\u044c\\u0441\\u044f \\u0421\\u041b\\u0415\\u0414\\u0423\\u042e\\u0429\\u0418\\u0419 \\u0420\\u0410\\u0417, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u043f\\u0440\\u043e\\u0439\\u0434\\u0435\\u0442 \\u044d\\u0442\\u043e \\u0432\\u0440\\u0435\\u043c\\u044f.\"}]}"
LUCIRPC_CMD='python3 /app/front/plugins/luci_import/script.py'
LUCIRPC_CMD__metadata="{\"function\": \"CMD\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"readonly\": \"true\"}], \"transformers\": []}]}, \"default_value\": \"python3 /app/front/plugins/luci_import/script.py\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Command\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Command to run. This can not be changed\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u041a\\u043e\\u043c\\u0430\\u043d\\u0434\\u0430 \\u0434\\u043b\\u044f \\u0437\\u0430\\u043f\\u0443\\u0441\\u043a\\u0430. \\u042d\\u0442\\u043e \\u043d\\u0435\\u0432\\u043e\\u0437\\u043c\\u043e\\u0436\\u043d\\u043e \\u0438\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\"}]}"
LUCIRPC_RUN_TIMEOUT=30
LUCIRPC_RUN_TIMEOUT__metadata="{\"function\": \"RUN_TIMEOUT\", \"type\": {\"dataType\": \"integer\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"number\"}], \"transformers\": []}]}, \"default_value\": 30, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Run timeout\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0412\\u0440\\u0435\\u043c\\u044f \\u043e\\u0436\\u0438\\u0434\\u0430\\u043d\\u0438\\u044f \\u0432\\u044b\\u043f\\u043e\\u043b\\u043d\\u0435\\u043d\\u0438\\u044f\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted.\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u041c\\u0430\\u043a\\u0441\\u0438\\u043c\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u0440\\u0435\\u043c\\u044f \\u0432 \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0430\\u0445, \\u0432 \\u0442\\u0435\\u0447\\u0435\\u043d\\u0438\\u0435 \\u043a\\u043e\\u0442\\u043e\\u0440\\u043e\\u0433\\u043e \\u043d\\u0443\\u0436\\u043d\\u043e \\u0436\\u0434\\u0430\\u0442\\u044c \\u0437\\u0430\\u0432\\u0435\\u0440\\u0448\\u0435\\u043d\\u0438\\u044f \\u0440\\u0430\\u0431\\u043e\\u0442\\u044b \\u0441\\u043a\\u0440\\u0438\\u043f\\u0442\\u0430. \\u0415\\u0441\\u043b\\u0438 \\u044d\\u0442\\u043e \\u0432\\u0440\\u0435\\u043c\\u044f \\u043f\\u0440\\u0435\\u0432\\u044b\\u0448\\u0435\\u043d\\u043e, \\u0441\\u043a\\u0440\\u0438\\u043f\\u0442 \\u043f\\u0440\\u0435\\u0440\\u044b\\u0432\\u0430\\u0435\\u0442\\u0441\\u044f.\"}]}"
LUCIRPC_host='192.168.0.1:4339'
LUCIRPC_host__metadata="{\"function\": \"host\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"192.168.1.1\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Router ip\"}, {\"language_code\": \"ru_ru\", \"string\": \"Ip \\u0430\\u0434\\u0440\\u0435\\u0441 \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440\\u0430\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Router ip(do not include <code>http://</code> or <code>https://</code>).\"}, {\"language_code\": \"ru_ru\", \"string\": \"Ip \\u0430\\u0434\\u0440\\u0435\\u0441 \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440\\u0430(\\u0431\\u0435\\u0437 <code>http://</code> \\u0438 <code>https://</code>).\"}]}"
LUCIRPC_user='root'
LUCIRPC_user__metadata="{\"function\": \"user\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [], \"transformers\": []}]}, \"default_value\": \"root\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Router user\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0418\\u043c\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f \\u0434\\u043b\\u044f \\u043f\\u043e\\u0434\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f \\u043a \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440\\u0443\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"User name used to login into your router.\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0418\\u043c\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f \\u0434\\u043b\\u044f \\u043f\\u043e\\u0434\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f \\u043a \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440\\u0443.\"}]}"
LUCIRPC_password='REDACTED'
LUCIRPC_password__metadata="{\"function\": \"password\", \"type\": {\"dataType\": \"string\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"password\"}], \"transformers\": []}]}, \"default_value\": \"\", \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Router password\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u041f\\u0430\\u0440\\u043e\\u043b\\u044c \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440\\u0430\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Password used to login into your router.\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u041f\\u0430\\u0440\\u043e\\u043b\\u044c \\u0434\\u043b\\u044f \\u043f\\u043e\\u0434\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f \\u043a \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440\\u0443.\"}]}"
LUCIRPC_ssl=True
LUCIRPC_ssl__metadata="{\"function\": \"ssl\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": false, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Router SSL\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0420\\u043e\\u0443\\u0442\\u0435\\u0440 SSL.\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"If your router enforces SSL connections.\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0415\\u0441\\u043b\\u0438 \\u0440\\u043e\\u0443\\u0442\\u0435\\u0440 \\u043f\\u043e\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442 SSL \\u043f\\u043e\\u0434\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u0435.\"}]}"
LUCIRPC_verify_ssl=False
LUCIRPC_verify_ssl__metadata="{\"function\": \"verify_ssl\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": true, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Verify SSL\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u041f\\u0440\\u043e\\u0432\\u0435\\u0440\\u043a\\u0430 SSL\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"If SSL/TLS verification for HTTPS resources needs to be turned off (for self-signed certs, etc.)\"}, {\"language_code\": \"ru_ru\", \"string\": \"\\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435\\u043e\\u0431\\u0445\\u043e\\u0434\\u0438\\u043c\\u043e \\u043e\\u0442\\u043a\\u043b\\u044e\\u0447\\u0438\\u0442\\u044c \\u043f\\u0440\\u043e\\u0432\\u0435\\u0440\\u043a\\u0443 SSL/TLS \\u0434\\u043b\\u044f \\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u043e\\u0432 HTTPS (\\u0434\\u043b\\u044f \\u0441\\u0430\\u043c\\u043e\\u043f\\u043e\\u0434\\u043f\\u0438\\u0441\\u0430\\u043d\\u043d\\u044b\\u0445 \\u0441\\u0435\\u0440\\u0442\\u0438\\u0444\\u0438\\u043a\\u0430\\u0442\\u043e\\u0432 \\u0438 \\u0442. \\u0434.)\"}]}"
LUCIRPC_only_reachable=False
LUCIRPC_only_reachable__metadata="{\"function\": \"only_reachable\", \"type\": {\"dataType\": \"boolean\", \"elements\": [{\"elementType\": \"input\", \"elementOptions\": [{\"type\": \"checkbox\"}], \"transformers\": []}]}, \"default_value\": true, \"options\": [], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Only reachable\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"Retrieve only devices that are reachable.\"}]}"
LUCIRPC_SET_ALWAYS=['devMac','devLastIP']
LUCIRPC_SET_ALWAYS__metadata="{\"function\": \"SET_ALWAYS\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\", \"ordeable\": \"true\"}], \"transformers\": []}]}, \"default_value\": [\"devMac\", \"devLastIP\"], \"options\": [\"devMac\", \"devLastIP\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Set always columns\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"These columns are treated as authoritative and will overwrite existing values, including those set by other plugins, unless the current value was explicitly set by the user (<code>Source = USER</code> or <code>Source = LOCKED</code>).\"}]}"
LUCIRPC_SET_EMPTY=[]
LUCIRPC_SET_EMPTY__metadata="{\"function\": \"SET_EMPTY\", \"type\": {\"dataType\": \"array\", \"elements\": [{\"elementType\": \"select\", \"elementOptions\": [{\"multiple\": \"true\", \"ordeable\": \"true\"}], \"transformers\": []}]}, \"default_value\": [], \"options\": [\"devMac\", \"devLastIP\", \"devSourcePlugin\"], \"localized\": [\"name\", \"description\"], \"name\": [{\"language_code\": \"en_us\", \"string\": \"Set empty columns\"}], \"description\": [{\"language_code\": \"en_us\", \"string\": \"These columns are only overwritten if they are empty (<code>NULL</code> / empty string) or if their Source is set to <code>NEWDEV</code>\"}]}"docker-compose.yml
services:
netalertx:
#use an environmental variable to set host networking mode if needed
container_name: netalertx # The name when you docker contiainer ls
image: ghcr.io/jokob-sk/netalertx:latest
network_mode: ${NETALERTX_NETWORK_MODE:-host} # Use host networking for ARP scanning and other services
read_only: true # Make the container filesystem read-only
cap_drop: # Drop all capabilities for enhanced security
- ALL
cap_add: # Add only the necessary capabilities
- NET_ADMIN # Required for ARP scanning
- NET_RAW # Required for raw socket operations
- NET_BIND_SERVICE # Required to bind to privileged ports (nbtscan)
- CHOWN # Required for root-entrypoint to chown /data + /tmp before dropping privileges
- SETUID # Required for root-entrypoint to switch to non-root user
- SETGID # Required for root-entrypoint to switch to non-root group
volumes:
# - type: volume # Persistent Docker-managed named volume for config + database
# source: netalertx_data
# target: /data # `/data/config` and `/data/db` live inside this mount
# read_only: false
# Example custom local folder called /home/user/netalertx_data
- type: bind
source: ./data
target: /data
read_only: false
# ... or use the alternative format
# - /home/user/netalertx_data:/data:rw
- type: bind # Bind mount for timezone consistency
source: /etc/localtime
target: /etc/localtime
read_only: true
# Mount your DHCP server file into NetAlertX for a plugin to access
# - path/on/host/to/dhcp.file:/resources/dhcp.file
# tmpfs mount consolidates writable state for a read-only container and improves performance
# uid/gid default to the service user (NETALERTX_UID/GID, default 20211)
# mode=1700 grants rwx------ permissions to the runtime user only
tmpfs:
# Comment out to retain logs between container restarts - this has a server performance impact.
- "/tmp:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# Retain logs - comment out tmpfs /tmp if you want to retain logs between container restarts
# Please note if you remove the /tmp mount, you must create and maintain sub-folder mounts.
# - /path/on/host/log:/tmp/log
# - "/tmp/api:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# - "/tmp/nginx:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# - "/tmp/run:uid=${NETALERTX_UID:-20211},gid=${NETALERTX_GID:-20211},mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
dns:
- 192.168.0.1
environment:
LISTEN_ADDR: ${LISTEN_ADDR:-0.0.0.0} # Listen for connections on all interfaces
PORT: ${PORT:-20211} # Application port
GRAPHQL_PORT: ${GRAPHQL_PORT:-20212} # GraphQL API port (passed into APP_CONF_OVERRIDE at runtime)
PUID: ${NETALERTX_UID:-20211} # Runtime UID after priming (Synology/no-copy-up safe)
PGID: ${NETALERTX_GID:-20211}
# NETALERTX_DEBUG: ${NETALERTX_DEBUG:-0} # 0=kill all services and restart if any dies. 1 keeps running dead services.
# PUID: 20211 # Runtime PUID override, set to 0 to run as root
# PGID: 20211 # Runtime PGID override
# Resource limits to prevent resource exhaustion
mem_limit: 2048m # Maximum memory usage
mem_reservation: 1024m # Soft memory limit
cpu_shares: 512 # Relative CPU weight for CPU contention scenarios
pids_limit: 512 # Limit the number of processes/threads to prevent fork bombs
logging:
driver: "json-file" # Use JSON file logging driver
options:
max-size: "10m" # Rotate log files after they reach 10MB
max-file: "3" # Keep a maximum of 3 log files
# Always restart the container unless explicitly stopped
restart: unless-stopped
#volumes: # Persistent volume for configuration and database storage
# netalertx_data:Debug or Trace enabled
- I have read and followed the steps in the wiki link above and provided the required debug logs and the log section covers the time when the issue occurs.
Relevant app.log section
No response
Docker Logs
* Creating Plugins log.
* Creating System services run log.
* Creating System services run tmp.
* Creating DB locked log.
* Creating Execution queue log.
--> apply conf override.sh
--> writable config.sh
--> nginx config.sh
--> expected user id match.sh
--> host mode network.sh
--> excessive capabilities.sh
--> appliance integrity.sh
--> ports available.sh
APP_CONF_OVERRIDE detected (set from GRAPHQL_PORT)
Starting /usr/sbin/php-fpm83 -y "/services/config/php/php-fpm.conf" -F (tee stderr to app.php_errors.log)
Starting supercronic --quiet "/services/config/cron/crontab" >>"/tmp/log/cron.log" 2>&1 &
Starting /usr/sbin/nginx -p "/tmp/run/" -c "/tmp/nginx/active-config/nginx.conf" -g "error_log stderr; error_log /tmp/log/nginx-error.log; daemon off;" &
Starting python3 -m server > /tmp/log/stdout.log 2> >(tee /tmp/log/stderr.log >&2)
Successfully updated IEEE OUI database (112965 entries)
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/app/server/__main__.py", line 260, in <module>
sys.exit(main())
^^^^^^
File "/app/server/__main__.py", line 135, in main
pm.run_plugin_scripts("schedule")
File "/app/server/plugin.py", line 102, in run_plugin_scripts
execute_plugin(self.db, self.all_plugins, plugin)
File "/app/server/plugin.py", line 711, in execute_plugin
process_plugin_events(db, plugin, sqlParams)
File "/app/server/plugin.py", line 1053, in process_plugin_events
sql.executemany(q, sqlParams)
sqlite3.OperationalError: table CurrentScan has no column named cur_NAME
_ _ _ ___ _ _ __ __
| \ | | | | / _ \| | | | \ \ / /
| \| | ___| |_/ /_\ \ | ___ _ __| |_ \ V /
| . |/ _ \ __| _ | |/ _ \ __| __|/ \
| |\ | __/ |_| | | | | __/ | | |_/ /^\ \
\_| \_/\___|\__\_| |_/_|\___|_| \__\/ \/
Network intruder and presence detector.
https://netalertx.com
Startup pre-checks
--> data migration.sh
--> capabilities audit.sh
--> mounts.py
Path | R | W | Mount | RAMDisk | Performance | DataLoss
--------------------------+---+---+-------+---------+-------------+----------
/data | ✅| ✅| ✅ | ➖ | ➖ | ✅
/data/db | ✅| ✅| ✅ | ➖ | ➖ | ✅
/data/config | ✅| ✅| ✅ | ➖ | ➖ | ✅
/tmp/run/tmp | ✅| ✅| ✅ | ✅ | ✅ | ✅
/tmp/api | ✅| ✅| ✅ | ✅ | ✅ | ✅
/tmp/log | ✅| ✅| ✅ | ✅ | ✅ | ✅
/tmp/run | ✅| ✅| ✅ | ✅ | ✅ | ✅
/tmp/nginx/active-config | ✅| ✅| ✅ | ✅ | ✅ | ✅
--> first run config.sh
--> first run db.sh
--> mandatory folders.sh
* Creating NetAlertX log directory.
* Creating NetAlertX API cache.
* Creating System services runtime directory.
* Creating nginx active configuration directory.
* Creating Plugins log.
* Creating System services run log.
* Creating System services run tmp.
* Creating DB locked log.
* Creating Execution queue log.
--> apply conf override.sh
--> writable config.sh
--> nginx config.sh
--> expected user id match.sh
--> host mode network.sh
--> excessive capabilities.sh
--> appliance integrity.sh
--> ports available.sh
APP_CONF_OVERRIDE detected (set from GRAPHQL_PORT)
Starting /usr/sbin/php-fpm83 -y "/services/config/php/php-fpm.conf" -F (tee stderr to app.php_errors.log)
Starting supercronic --quiet "/services/config/cron/crontab" >>"/tmp/log/cron.log" 2>&1 &
Starting python3 -m server > /tmp/log/stdout.log 2> >(tee /tmp/log/stderr.log >&2)
Starting /usr/sbin/nginx -p "/tmp/run/" -c "/tmp/nginx/active-config/nginx.conf" -g "error_log stderr; error_log /tmp/log/nginx-error.log; daemon off;" &
Successfully updated IEEE OUI database (112965 entries)
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/app/server/__main__.py", line 260, in <module>
sys.exit(main())
^^^^^^
File "/app/server/__main__.py", line 135, in main
pm.run_plugin_scripts("schedule")
File "/app/server/plugin.py", line 102, in run_plugin_scripts
execute_plugin(self.db, self.all_plugins, plugin)
File "/app/server/plugin.py", line 711, in execute_plugin
process_plugin_events(db, plugin, sqlParams)
File "/app/server/plugin.py", line 1053, in process_plugin_events
sql.executemany(q, sqlParams)
sqlite3.OperationalError: table CurrentScan has no column named cur_NAME