On Tue, Oct 08, 2024 at 03:23:31PM +0200, Gavin Schenk wrote:
> If selected, start hostapd as a systemd service in multi-user.target
> using a configuration file at the specified file path.
> 
> Signed-off-by: Gavin Schenk <[email protected]>
> ---
> 
>  Changes in v2:
>  - depends on initmethod systemd
>  - Remove ability to rename config file in order to reduce overall complexity
>  - provide dummy config /etc/hostapd/hostapd.conf
>  - use menuconfig in hostapd.in
> 
> My motivation for the patch was to remove local customization in the BSP.
> Unfortunately, without the option to rename the configuration, I must continue
> to to maintain local changes. Does this patch add value or should we discard 
> it?

It's absolutely valuable. In the general case, we can have hostapd running
with just an kconfig option and a custom config file (and that one is
always needed anyways).

And I think even your use-case, the customization is simplified:
You can provide your own projectroot/usr/lib/systemd/system/hostapd.service
(which changes less often than e.g. hostapd.make) that uses your custom
hostapd.conf and a "projectroot/etc/hostapd/hostapd.conf -> /dev/null"
symlink.
That's much simpler dann a modified hostapd.make or your own rule to
install the files.

Michael
PS: I understand why you would like to have a custom path upstream, but the
reality is, that everybody has a different config file that needs to be
loaded from a custom location and allowing that in general is a
maintenance nightmare for upstream PTXdist.

>  projectroot/etc/hostapd/hostapd.conf              |  2 ++
>  .../usr/lib/systemd/system/hostapd.service        | 15 +++++++++++++++
>  rules/hostapd.in                                  | 15 +++++++++++++--
>  rules/hostapd.make                                |  9 +++++++++
>  4 files changed, 39 insertions(+), 2 deletions(-)
>  create mode 100644 projectroot/etc/hostapd/hostapd.conf
>  create mode 100644 projectroot/usr/lib/systemd/system/hostapd.service
> 
> diff --git a/projectroot/etc/hostapd/hostapd.conf 
> b/projectroot/etc/hostapd/hostapd.conf
> new file mode 100644
> index 000000000..9e425a8c3
> --- /dev/null
> +++ b/projectroot/etc/hostapd/hostapd.conf
> @@ -0,0 +1,2 @@
> +# This is a placeholder.  You have to provide a real configuration here. See
> +# hostapd.conf in package hostapd as a starting point for you own 
> configuration.
> diff --git a/projectroot/usr/lib/systemd/system/hostapd.service 
> b/projectroot/usr/lib/systemd/system/hostapd.service
> new file mode 100644
> index 000000000..bef52896c
> --- /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=/etc/hostapd/hostapd.conf
> +
> +[Service]
> +Type=forking
> +PIDFile=/run/hostapd.pid
> +Restart=on-failure
> +RestartSec=2
> +Environment=DAEMON_CONF=/etc/hostapd/hostapd.conf
> +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..9c95fe373 100644
> --- a/rules/hostapd.in
> +++ b/rules/hostapd.in
> @@ -1,10 +1,10 @@
>  ## SECTION=networking
>  
> -config HOSTAPD
> +menuconfig HOSTAPD
>       tristate
>       select OPENSSL
>       select LIBNL3
> -     prompt "hostapd"
> +     prompt "hostapd                       "
>       help
>         IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
>  
> @@ -21,3 +21,14 @@ config HOSTAPD
>         authentication without requiring an external RADIUS
>         authentication server), and RADIUS authentication server for
>         EAP authentication.
> +
> +if HOSTAPD
> +
> +config HOSTAPD_SYSTEMD_UNIT
> +     bool
> +     prompt "Enable systemd support"
> +     depends on INITMETHOD_SYSTEMD
> +     help
> +       Install systemd units to start this service on startup.
> +
> +endif
> diff --git a/rules/hostapd.make b/rules/hostapd.make
> index 2d061b5d4..11b5ca1b0 100644
> --- a/rules/hostapd.make
> +++ b/rules/hostapd.make
> @@ -74,6 +74,15 @@ $(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_link, hostapd, ../hostapd.service, \
> +             /lib/systemd/system/multi-user.target.wants/hostapd.service)
> +     @$(call install_alternative, hostapd, 0, 0, 0644, \
> +             /etc/hostapd/hostapd.conf)
> +endif
> +
>       @$(call install_finish, hostapd)
>  
>       @$(call touch)
> -- 
> 2.39.5
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Reply via email to