diff --git a/package/busybox/Config.in b/package/busybox/Config.in index 3c2aa515f8..659c6aebfc 100644 --- a/package/busybox/Config.in +++ b/package/busybox/Config.in @@ -69,6 +69,12 @@ config BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES comment "Busybox individual binaries need a toolchain w/ dynamic library" depends on BR2_STATIC_LIBS +config BR2_PACKAGE_BUSYBOX_HTTPD + bool "Install the httpd server startup script" + help + Install the httpd server startup script, + that just start at the boot the busybox httpd server + config BR2_PACKAGE_BUSYBOX_WATCHDOG bool "Install the watchdog daemon startup script" help diff --git a/package/busybox/S90httpd b/package/busybox/S90httpd new file mode 100644 index 0000000000..0d43ea3e74 --- /dev/null +++ b/package/busybox/S90httpd @@ -0,0 +1,59 @@ +#!/bin/sh + +DAEMON="httpd" +PIDFILE="/var/run/$DAEMON.pid" + +HTTPD_ARGS="-h /var/www/data" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +# BusyBox' httpd does not create a pidfile, so pass "-f" in the command line +# and use "--make-pidfile" to instruct start-stop-daemon to create one. +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon --start --background --quiet --make-pidfile \ + --pidfile "$PIDFILE" --exec "/usr/sbin/$DAEMON" \ + -- -f $HTTPD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon --stop --quiet --pidfile "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + while start-stop-daemon --stop --test --quiet --pidfile "$PIDFILE" \ + --exec "/usr/sbin/$DAEMON"; do + sleep 0.1 + done + rm -f "$PIDFILE" + return "$status" +} + +restart() { + stop + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk index 532932ec8f..d7eda71db6 100644 --- a/package/busybox/busybox.mk +++ b/package/busybox/busybox.mk @@ -258,6 +258,19 @@ define BUSYBOX_SET_SELINUX endef endif +ifeq ($(BR2_PACKAGE_BUSYBOX_HTTPD),y) +define BUSYBOX_SET_HTTPD + $(call KCONFIG_ENABLE_OPT,CONFIG_HTTPD) +endef +define BUSYBOX_INSTALL_HTTPD_SCRIPT + if grep -q CONFIG_HTTPD=y $(@D)/.config; then \ + mkdir -p $(TARGET_DIR)/var/www/data ;\ + $(INSTALL) -m 0755 -D package/busybox/S90httpd \ + $(TARGET_DIR)/etc/init.d/S90httpd ; \ + fi +endef +endif + # enable relevant options to allow the Busybox less applet to be used # as a systemd pager ifeq ($(BR2_PACKAGE_SYSTEMD):$(BR2_PACKAGE_LESS),y:) @@ -418,6 +431,7 @@ define BUSYBOX_KCONFIG_FIXUP_CMDS $(BUSYBOX_SET_WATCHDOG) $(BUSYBOX_SET_SELINUX) $(BUSYBOX_SET_LESS_FLAGS) + $(BUSYBOX_SET_HTTPD) $(BUSYBOX_SET_INDIVIDUAL_BINARIES) $(BUSYBOX_DISABLE_IP_LINK_CAN) $(PACKAGES_BUSYBOX_CONFIG_FIXUPS) @@ -447,6 +461,7 @@ define BUSYBOX_INSTALL_INIT_OPENRC $(BUSYBOX_INSTALL_IFPLUGD_SCRIPT) $(BUSYBOX_INSTALL_CROND_SCRIPT) $(BUSYBOX_INSTALL_TELNET_SCRIPT) + $(BUSYBOX_INSTALL_HTTPD_SCRIPT) endef define BUSYBOX_INSTALL_INIT_SYSTEMD @@ -461,6 +476,7 @@ define BUSYBOX_INSTALL_INIT_SYSV $(BUSYBOX_INSTALL_IFPLUGD_SCRIPT) $(BUSYBOX_INSTALL_CROND_SCRIPT) $(BUSYBOX_INSTALL_TELNET_SCRIPT) + $(BUSYBOX_INSTALL_HTTPD_SCRIPT) endef # Checks to give errors that the user can understand