[projects/rc-scripts] add AUTOSWAP feature
glen
glen at pld-linux.org
Thu Jun 19 22:05:22 CEST 2014
commit 03e0c0fad83a7a6fc0033ead0f1805d6bda4d855
Author: Elan Ruusamäe <glen at delfi.ee>
Date: Thu Jun 19 22:58:35 2014 +0300
add AUTOSWAP feature
inspired from initscripts 9.39-1
doc/sysconfig.txt | 7 +++++++
lib/functions | 3 +--
rc.d/rc.sysinit | 47 +++++++++++++++++++++++++++++++++++++++++++----
sysconfig/system | 3 +++
4 files changed, 54 insertions(+), 6 deletions(-)
---
diff --git a/doc/sysconfig.txt b/doc/sysconfig.txt
index 063a332..635d054 100644
--- a/doc/sysconfig.txt
+++ b/doc/sysconfig.txt
@@ -1,6 +1,13 @@
Files in /etc/sysconfig
=======================
+/etc/sysconfig/system:
+
+ AUTOSWAP=yes|no
+ Set to 'yes' to enable automatic swapon of all partitions with
+ the proper swap magic. This allows setting up swap without editing
+ /etc/fstab.
+
/etc/sysconfig/keyboard:
KEYTABLE=<keytable file>
diff --git a/lib/functions b/lib/functions
index e32f2d0..1b1b972 100644
--- a/lib/functions
+++ b/lib/functions
@@ -174,8 +174,7 @@ is_empty_file() {
# returns OK if $1 contains $2
strstr() {
- local a=$2
- [ "${1#*$a*}" = "$1" ] && return 1
+ [ "${1#*$2*}" = "$1" ] && return 1
return 0
}
diff --git a/rc.d/rc.sysinit b/rc.d/rc.sysinit
index 0b9d5c7..e14ad74 100755
--- a/rc.d/rc.sysinit
+++ b/rc.d/rc.sysinit
@@ -102,6 +102,21 @@ parse_cmdline() {
done
}
+# resolve a device node to its major:minor numbers in decimal or hex
+get_numeric_dev() {
+ local dev=$1 enc=${2:-hex} res
+
+ res=$(stat -Lc "%t:%T" "$dev")
+ if [ "$enc" = dec ]; then
+ local oifs=$IFS
+ IFS=":"
+ set -- $res
+ IFS=$oifs
+ res=$((0x$1)):$((0x$2))
+ fi
+ echo -n $res
+}
+
# setup SELINUX variable
init_selinux() {
# user knows!
@@ -162,6 +177,32 @@ relabel_selinux() {
echo $SELINUX > $selinuxfs/enforce
}
+# Enable automatic swapon of all partitions with the proper swap magic.
+# This allows setting up swap without editing /etc/fstab.
+enable_autoswap() {
+ local swappartitions=$(blkid -t TYPE=swap -o device)
+ if [ -z "$swappartitions" ]; then
+ return
+ fi
+
+ local curswap=$(awk '/^\/dev/ { print $1 }' /proc/swaps | while read x; do echo -n " "; get_numeric_dev $x; echo -n " "; done)
+
+ local partition
+ for partition in $swappartitions; do
+ [ ! -e $partition ] && continue
+ majmin=$(get_numeric_dev $partition)
+ if ! strstr "$curswap" " $majmin "; then
+ run_cmd "$(nls 'Enabling local swap partitions: %s' $partition)" swapon $partition
+ fi
+ done
+}
+
+
+enable_swap() {
+ run_cmd "Activating swap" swapon -a "$@"
+ is_yes "$AUTOSWAP" && enable_autoswap
+}
+
# Remove duplicate entries from mtab (for vserver guest use only)
clean_vserver_mtab() {
> /etc/mtab.clean
@@ -494,7 +535,7 @@ if ! is_yes "$VSERVER" && [[ "$container" != lxc* ]]; then
fi
# Start up swapping
- run_cmd "Activating swap partitions" swapon -a -e
+ enable_swap -e
# Initialize USB controllers
usb=0
@@ -1005,9 +1046,7 @@ chown root:root /tmp/.ICE-unix
is_yes "$SELINUX" && restorecon /tmp/.ICE-unix >/dev/null 2>&1
if ! is_yes "$VSERVER"; then
- run_cmd "Enabling swap space" true
- # Right, now turn on swap in case we swap to files
- swapon -a >/dev/null 2>&1
+ enable_swap
emit --no-wait all-swaps
# If a SCSI tape has been detected, load the st module unconditionally
diff --git a/sysconfig/system b/sysconfig/system
index f86eb73..0734c41 100644
--- a/sysconfig/system
+++ b/sysconfig/system
@@ -80,6 +80,9 @@ EVMS_AIX=no
# EVMS OS/2 LVM volumes
EVMS_OS2=no
+# Set to 'yes' to allow probing for devices with swap signatures
+AUTOSWAP=no
+
# LVM2
# disable if your only LVM volume is rootfs started on initrd and want faster startup
LVM2=yes
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/projects/rc-scripts.git/commitdiff/03e0c0fad83a7a6fc0033ead0f1805d6bda4d855
More information about the pld-cvs-commit
mailing list