Installation ============ Requirements ------------ The GUI depends on Flask and PyYAML. PyYAML is already installed as a core dependency. Flask is the only additional package: .. code-block:: text flask The full list of GUI-specific packages is in ``requirements-gui.txt`` at the project root. Install as a systemd service (recommended) ------------------------------------------ The installer script auto-detects the project directory, the Python interpreter, and the invoking user. It supports Debian/Ubuntu (``apt``), Fedora/RHEL (``dnf``/``yum``), Arch (``pacman``), and any distribution with ``pip3``: .. code-block:: bash sudo bash gui/install-gui-service.sh The script: 1. Installs Flask if not already present. 2. Creates ``/etc/systemd/system/fwtester-gui.service``. 3. Enables and starts the service. After installation, use the standard systemd commands to manage it: .. code-block:: bash systemctl status fwtester-gui # check current status journalctl -u fwtester-gui -f # follow live logs sudo systemctl restart fwtester-gui # restart after configuration changes sudo systemctl stop fwtester-gui # stop the service sudo bash gui/uninstall-gui-service.sh # remove the service entirely Manual execution (development) ------------------------------- .. code-block:: bash python3 gui/app.py The server listens on ``0.0.0.0:5000`` by default and reloads templates on every request (Jinja2 auto-reload is always active). Python modules such as ``gui/i18n.py`` are **not** reloaded between requests when ``debug=False`` — restart the process to pick up module changes. Port configuration ------------------ The listening port is controlled by the ``gui_port`` key in ``config/config.yml``: .. code-block:: yaml gui_port: 5000 Change the value and restart the service for the new port to take effect. No changes to the unit file or application code are needed.