All of lore.kernel.org
 help / color / mirror / Atom feed
From: unixmania at gmail.com <unixmania@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v3 2/2] package/busybox: add init script for sysctl
Date: Wed,  1 May 2019 20:11:40 -0300	[thread overview]
Message-ID: <20190501231140.6365-2-unixmania@gmail.com> (raw)
In-Reply-To: <20190501231140.6365-1-unixmania@gmail.com>

From: Carlos Santos <unixmania@gmail.com>

Add a simple init script that invokes sysctl early in the initialization
process to configure kernel parameters. This is already performed by
systemd (systemd-sysctl) but there is no sysvinit/busybox counterpart.

Files are read from directories in the following list in the given order
from top to bottom:

    /run/sysctl.d/*.conf
    /etc/sysctl.d/*.conf
    /usr/local/lib/sysctl.d/*.conf
    /usr/lib/sysctl.d/*.conf
    /lib/sysctl.d/*.conf
    /etc/sysctl.conf

A file may be used more than once, since there can be multiple symlinks
to it. No attempt is made to prevent this.

Signed-off-by: Carlos Santos <unixmania@gmail.com>
---
Changes v2->v3:
  - Update SOB, since I don't work for DATACOM anymore.
Changes v1->v2:
  - Use a while loop to process all files.
  - Redirect sysctl's standard output to syslog with facility.level
    "kern.info" and standard error to syslog with facility.level
    "kern.err".
  - Do not pass "-q" to sysctl, since we wanto to see the results.
  - Use "Running" and "Rerunning" instead of "Starting", since we do not
    really start anything, just run a program.
  - Do nothing on "stop", since ther is no running daemon to stop.
---
 package/busybox/S02sysctl  | 66 ++++++++++++++++++++++++++++++++++++++
 package/busybox/busybox.mk | 12 +++++++
 2 files changed, 78 insertions(+)
 create mode 100644 package/busybox/S02sysctl
---
 package/busybox/S02sysctl  | 66 ++++++++++++++++++++++++++++++++++++++
 package/busybox/busybox.mk | 12 +++++++
 2 files changed, 78 insertions(+)
 create mode 100644 package/busybox/S02sysctl

diff --git a/package/busybox/S02sysctl b/package/busybox/S02sysctl
new file mode 100644
index 0000000000..6bb2fa165e
--- /dev/null
+++ b/package/busybox/S02sysctl
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+PROGRAM="sysctl"
+
+SYSCTL_ARGS=""
+
+# shellcheck source=/dev/null
+[ -r "/etc/default/$PROGRAM" ] && . "/etc/default/$PROGRAM"
+
+# Files are read from directories in the SYSCTL_SOURCES list, in the given
+# order. A file may be used more than once, since there can be multiple
+# symlinks to it. No attempt is made to prevent this.
+SYSCTL_SOURCES="/etc/sysctl.d/ /usr/local/lib/sysctl.d/ /usr/lib/sysctl.d/ /lib/sysctl.d/ /etc/sysctl.conf"
+
+# Use some scripting to mimic the --system option of the sysctl provided by
+# procps-ng but still reporting errors. Users not interested on error report
+# can put "-e" in SYSCTL_ARGS.
+#
+# The file redirections do the following:
+#
+# - stdout is redirected to syslog with facility.level "kern.info"
+# - stderr is redirected to syslog with facility.level "kern.err"
+# - file dscriptor 4 is used to pass the result to the "start" function.
+#
+# Testing the sysctl exit code is fruitless, as at the moment, since it ends
+# with status zero even if errors happen. Hopefully this will be fixed in a
+# future version of Busybox.
+#
+run_program() {
+	# shellcheck disable=SC2086 # we need the word splitting
+	find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \
+	xargs -0 -r -n 1 readlink -f | {
+		prog_status="OK"
+		while :; do
+			read -r file
+			if [ -z "$file" ]; then
+				echo "$prog_status" >&4
+				break
+			fi
+			echo "* Applying $file ..."
+			/sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL"
+		done 2>&1 >&3 | /usr/bin/logger -t sysctl -p kern.err
+	} 3>&1 | /usr/bin/logger -t sysctl -p kern.info
+}
+
+start() {
+	printf '%s %s: ' "$1" "$PROGRAM"
+	status=$(run_program 4>&1)
+	echo "$status"
+	if [ "$status" = "OK" ]; then
+		return 0
+	fi
+	return 1
+}
+
+case "$1" in
+	start)
+		start "Running";;
+	restart|reload)
+		start "Rerunning";;
+	stop)
+		:;;
+	*)
+		echo "Usage: $0 {start|stop|restart|reload}"
+		exit 1
+esac
diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk
index 67b91500e9..416b6f9bae 100644
--- a/package/busybox/busybox.mk
+++ b/package/busybox/busybox.mk
@@ -259,6 +259,17 @@ define BUSYBOX_INSTALL_LOGGING_SCRIPT
 endef
 endif
 
+# Only install our sysctl scripts if no other package does it.
+ifeq ($(BR2_PACKAGE_PROCPS_NG),)
+define BUSYBOX_INSTALL_SYSCTL_SCRIPT
+	if grep -q CONFIG_BB_SYSCTL=y $(@D)/.config; \
+	then \
+		$(INSTALL) -m 0755 -D package/busybox/S02sysctl \
+			$(TARGET_DIR)/etc/init.d/S02sysctl ; \
+	fi
+endef
+endif
+
 ifeq ($(BR2_INIT_BUSYBOX),y)
 define BUSYBOX_INSTALL_INITTAB
 	$(INSTALL) -D -m 0644 package/busybox/inittab $(TARGET_DIR)/etc/inittab
@@ -340,6 +351,7 @@ define BUSYBOX_INSTALL_INIT_SYSV
 	$(BUSYBOX_INSTALL_MDEV_SCRIPT)
 	$(BUSYBOX_INSTALL_LOGGING_SCRIPT)
 	$(BUSYBOX_INSTALL_WATCHDOG_SCRIPT)
+	$(BUSYBOX_INSTALL_SYSCTL_SCRIPT)
 	$(BUSYBOX_INSTALL_TELNET_SCRIPT)
 	$(BUSYBOX_INSTALL_INDIVIDUAL_BINARIES)
 endef
-- 
2.20.1

  reply	other threads:[~2019-05-01 23:11 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-01 23:11 [Buildroot] [PATCH v3 1/2] package/procps-ng: add init script for sysctl unixmania at gmail.com
2019-05-01 23:11 ` unixmania at gmail.com [this message]
2019-05-02  2:07   ` [Buildroot] [PATCH v3 2/2] package/busybox: " Matthew Weber
2019-05-02  2:41     ` Carlos A. M. dos Santos
2019-08-03 16:45   ` Peter Korsgaard
2019-08-03 16:47 ` [Buildroot] [PATCH v3 1/2] package/procps-ng: " Peter Korsgaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190501231140.6365-2-unixmania@gmail.com \
    --to=unixmania@gmail.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.