If selected, start hostapd as a systemd service in multi-user.target. Make it possible to rename the configuration file, if needed.
Signed-off-by: Gavin Schenk <[email protected]> --- Notes: I based the service file on the one that is shipped with debian, but removed the Documentation node. I removed (for me) unneeded EnvironmentFile=-/etc/default/hostapd and $DAEMON_OPTS as well, RFC. My system is shipped with template /etc/hostapd/hostapd.conf that contains @SSID@ as placeholder. The customer API, configuring WLAN, is to edit this file and place it as /etc/hostapd-device.conf before restarting the machine. This is the reason for HOSTAPD_SYSTEMD_UNIT_CONFIG. .../usr/lib/systemd/system/hostapd.service | 15 ++++++++++++++ rules/hostapd.in | 20 +++++++++++++++++++ rules/hostapd.make | 11 ++++++++++ 3 files changed, 46 insertions(+) create mode 100644 projectroot/usr/lib/systemd/system/hostapd.service diff --git a/projectroot/usr/lib/systemd/system/hostapd.service b/projectroot/usr/lib/systemd/system/hostapd.service new file mode 100644 index 000000000..5e715b60d --- /dev/null +++ b/projectroot/usr/lib/systemd/system/hostapd.service @@ -0,0 +1,15 @@ +[Unit] +Description=Access point and authentication server for Wi-Fi and Ethernet +After=network.target +ConditionFileNotEmpty=@HOSTAPD_CONFIG_FILEPATH@ + +[Service] +Type=forking +PIDFile=/run/hostapd.pid +Restart=on-failure +RestartSec=2 +Environment=DAEMON_CONF=@HOSTAPD_CONFIG_FILEPATH@ +ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.pid ${DAEMON_CONF} + +[Install] +WantedBy=multi-user.target diff --git a/rules/hostapd.in b/rules/hostapd.in index 6ac6be52c..74a0dd45f 100644 --- a/rules/hostapd.in +++ b/rules/hostapd.in @@ -21,3 +21,23 @@ config HOSTAPD authentication without requiring an external RADIUS authentication server), and RADIUS authentication server for EAP authentication. + +if HOSTAPD + +config HOSTAPD_SYSTEMD + prompt "Enable systemd support" + default false + bool + +config HOSTAPD_SYSTEMD_UNIT + default HOSTAPD_SYSTEMD + bool + +config HOSTAPD_SYSTEMD_UNIT_CONFIG + prompt "Configuration file used by unit" + default "/etc/hostapd/hostapd.conf" + string + help + Configuration used, when starting hostapd" + +endif diff --git a/rules/hostapd.make b/rules/hostapd.make index 2d061b5d4..7d3d4ec62 100644 --- a/rules/hostapd.make +++ b/rules/hostapd.make @@ -74,6 +74,17 @@ $(STATEDIR)/hostapd.targetinstall: @$(call install_copy, hostapd, 0, 0, 0755, -, /usr/sbin/hostapd) @$(call install_alternative, hostapd, 0, 0, 0644, /etc/hostapd/hostapd.conf) +ifdef PTXCONF_HOSTAPD_SYSTEMD_UNIT + @$(call install_alternative, hostapd, 0, 0, 0644, \ + /usr/lib/systemd/system/hostapd.service) + @$(call install_replace, hostapd, /usr/lib/systemd/system/hostapd.service, \ + @HOSTAPD_CONFIG_FILEPATH@, \ + "$(call remove_quotes,$(PTXCONF_HOSTAPD_SYSTEMD_UNIT_CONFIG))") + + @$(call install_link, hostapd, ../hostapd.service, \ + /lib/systemd/system/multi-user.target.wants/hostapd.service) +endif + @$(call install_finish, hostapd) @$(call touch) -- 2.39.2
