Skip to contentSkip to conversation

system: don't attempt swapon/swapoff in inittab if not available

PATCH New Thomas De Schampheleire 2 participants 2 messages Feb 5, 2020

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 system: don't attempt swapon/swapoff in inittab if not available

From: Thomas De Schampheleire <[email protected]>

The default inittab files added by busybox and sysvinit run 'swapon -a' during init and 'swapoff -a' during shutdown.

But, the swapon/swapoff programs are not guaranteed to be available. For the busybox versions, it is steered by CONFIG_SWAPON/CONFIG_SWAPOFF. For the util-linux versions, it is steered by BR2_PACKAGE_UTIL_LINUX_BINARIES.

In a case where swapon/swapoff is not available but the inittab tries to execute them, the boot log would be polluted by error messages like:

swapon: not found

Avoid this by commenting out the swapon/swapoff lines if the swapon/swapoff binaries are not available.

---
 package/busybox/busybox.mk   |  1 +
 package/sysvinit/sysvinit.mk |  1 +
 system/system.mk             | 13 +++++++++++++
 3 files changed, 15 insertions(+)
package/busybox/busybox.mk +1 -0
index 6283bc96ea..45f74271f2 100644
@@ -226,6 +226,7 @@ endif # BR2_TARGET_GENERIC_GETTY
 BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_GETTY
 
 BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB
+BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_UPDATE_SWAPON_SWAPOFF_INITTAB
 
 endif # BR2_INIT_BUSYBOX
 
package/sysvinit/sysvinit.mk +1 -0
index c778a9cde5..a717ae0459 100644
@@ -45,5 +45,6 @@ endif # BR2_TARGET_GENERIC_GETTY
 SYSVINIT_TARGET_FINALIZE_HOOKS += SYSVINIT_SET_GETTY
 
 SYSVINIT_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB
+SYSVINIT_TARGET_FINALIZE_HOOKS += SYSTEM_UPDATE_SWAPON_SWAPOFF_INITTAB
 
 $(eval $(generic-package))
system/system.mk +13 -0
index 8db87cb129..df6e1be693 100644
@@ -87,6 +87,19 @@ define SYSTEM_REMOUNT_ROOT_INITTAB
 endef
 endif
 
+define SYSTEM_UPDATE_SWAPON_SWAPOFF_INITTAB
+	if [ -e $(TARGET_DIR)/sbin/swapon ]; then \
+		$(SED) '\%:/sbin/swapon%s/^#*//' $(TARGET_DIR)/etc/inittab ; \
+	else \
+		$(SED) '\%:/sbin/swapon%s/^#*/#/' $(TARGET_DIR)/etc/inittab ; \
+	fi
+	if [ -e $(TARGET_DIR)/sbin/swapoff ]; then \
+		$(SED) '\%:/sbin/swapoff%s/^#*//' $(TARGET_DIR)/etc/inittab ; \
+	else \
+		$(SED) '\%:/sbin/swapoff%s/^#*/#/' $(TARGET_DIR)/etc/inittab ; \
+	fi
+endef
+
 ifeq ($(BR_BUILDING)$(BR2_SYSTEM_DEFAULT_PATH),y"")
 $(error BR2_SYSTEM_DEFAULT_PATH can't be empty)
 endif
Signature · 1 line
2.24.1
#1 lore raw

PATCH 1/1 system: don't attempt swapon/swapoff in inittab if not available

Quoted 58 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Thomas" == Thomas De Schampheleire <[email protected]> writes:

From: Thomas De Schampheleire <[email protected]> The default inittab files added by busybox and sysvinit run 'swapon -a' during init and 'swapoff -a' during shutdown.

But, the swapon/swapoff programs are not guaranteed to be available. For the busybox versions, it is steered by CONFIG_SWAPON/CONFIG_SWAPOFF. For the util-linux versions, it is steered by BR2_PACKAGE_UTIL_LINUX_BINARIES.

In a case where swapon/swapoff is not available but the inittab tries to execute them, the boot log would be polluted by error messages like:

swapon: not found

Avoid this by commenting out the swapon/swapoff lines if the swapon/swapoff binaries are not available.

---
 package/busybox/busybox.mk   |  1 +
 package/sysvinit/sysvinit.mk |  1 +
 system/system.mk             | 13 +++++++++++++
 3 files changed, 15 insertions(+)
package/busybox/busybox.mk +1 -0
index 6283bc96ea..45f74271f2 100644
@@ -226,6 +226,7 @@ endif # BR2_TARGET_GENERIC_GETTY
 BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_GETTY
 
 BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB
+BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_UPDATE_SWAPON_SWAPOFF_INITTAB
 
 endif # BR2_INIT_BUSYBOX
 
package/sysvinit/sysvinit.mk +1 -0
index c778a9cde5..a717ae0459 100644
@@ -45,5 +45,6 @@ endif # BR2_TARGET_GENERIC_GETTY
 SYSVINIT_TARGET_FINALIZE_HOOKS += SYSVINIT_SET_GETTY
 
 SYSVINIT_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB
+SYSVINIT_TARGET_FINALIZE_HOOKS += SYSTEM_UPDATE_SWAPON_SWAPOFF_INITTAB
 
 $(eval $(generic-package))
system/system.mk +1 -0
index 8db87cb129..df6e1be693 100644
@@ -87,6 +87,19 @@ define SYSTEM_REMOUNT_ROOT_INITTAB
 endef
 endif
 
+define SYSTEM_UPDATE_SWAPON_SWAPOFF_INITTAB

system/system.mk define SYSTEM_REMOUNT_ROOT_INITTAB · line 100

Quoted 10 lines
system/system.mk +10 -0
+	if [ -e $(TARGET_DIR)/sbin/swapon ]; then \
+		$(SED) '\%:/sbin/swapon%s/^#*//' $(TARGET_DIR)/etc/inittab ; \
+	else \
+		$(SED) '\%:/sbin/swapon%s/^#*/#/' $(TARGET_DIR)/etc/inittab ; \
+	fi
+	if [ -e $(TARGET_DIR)/sbin/swapoff ]; then \
+		$(SED) '\%:/sbin/swapoff%s/^#*//' $(TARGET_DIR)/etc/inittab ; \
+	else \
+		$(SED) '\%:/sbin/swapoff%s/^#*/#/' $(TARGET_DIR)/etc/inittab ; \
+	fi

It seems a bit more "normal" to check for execute permissions, like we do in alsa-utils.mk, so I changed it to -x and committed, thanks.

Signature · 1 line
Bye, Peter Korsgaard