[readonly/geninitrd: 519/1068] - skip pointless another temporary dir - beautify debug messages - avoid race for initrd compression

draenog draenog at pld-linux.org
Sat Nov 2 19:56:02 CET 2013


commit d8056591c8710aa0fc9637c76caf15f9fc7ebbea
Author: Elan Ruusamäe <glen at pld-linux.org>
Date:   Tue Nov 6 13:06:37 2007 +0000

    - skip pointless another temporary dir
    - beautify debug messages
    - avoid race for initrd compression
    
    svn-id: @9003

 geninitrd | 97 +++++++++++++++++++++++++++++----------------------------------
 1 file changed, 45 insertions(+), 52 deletions(-)
---
diff --git a/geninitrd b/geninitrd
index 8a06564..90db5a5 100755
--- a/geninitrd
+++ b/geninitrd
@@ -389,7 +389,7 @@ inst() {
 	local dest=$1
 	set -- $src
 
-	debug "cp $* $DESTDIR$dest"
+	debug "+ cp $* $DESTDIR$dest"
 	cp -HR "$@" "$DESTDIR$dest"
 }
 
@@ -444,10 +444,10 @@ cache_modprobe_conf() {
 	fi
 
 	if [ -n "$modulefile" ]; then
-		debug "modprobe: using $modulefile"
+		debug "Using $modulefile for modules config"
 		modprobe_conf_cache=$(cat $modulefile)
 	else
-		debug "modprobe: using modprobe -c"
+		debug "Using modprobe -c to get modules config"
 		modprobe_conf_cache=$(modprobe -c)
 	fi
 }
@@ -521,7 +521,7 @@ find_modules_md() {
 	eval "dev_list${rootdev_nr}=\"${dev_list}\""
 
 	for device in $dev_list; do
-		find_modules_for_device $device
+		find_modules_for_devpath $device
 	done
 }
 
@@ -656,7 +656,7 @@ _check_lvm() {
 	rc=$?
 
 	if [ $rc = 0 ]; then
-		debug "$node is LVM1 node"
+		debug "LVM check: $node is LVM v1 node"
 		# is lvm1
 		return 0
 	fi
@@ -669,9 +669,9 @@ _check_lvm() {
 	fi
 
 	if [ $rc = 0 ]; then
-		debug "$node is lvm2 node"
+		debug "LVM check: $node is LVM v2 node"
 	else
-		debug "$node is not any lvm node"
+		debug "LVM check: $node is not any LVM node"
 	fi
 	return $rc
 }
@@ -691,11 +691,11 @@ find_modules_multipath() {
 		return 1
 	fi
 
-	debug "have multipath"
+	debug "Finding modules for dm-multipath"
 	have_multipath=yes
 	local dev phydevs=$(echo "$info" | awk '$2 ~ /^[0-9]+:[0-9]+:[0-9]+:[0-9]+$/{printf("/dev/%s\n", $3)}')
 	for dev in $phydevs; do
-		find_modules_for_device $dev
+		find_modules_for_devpath $dev
 		lvm_ignore_devices="$lvm_ignore_devices $dev"
 	done
 
@@ -726,7 +726,7 @@ find_modules_dmraid() {
 
 	local dev phydevs=$(dmraid -r -cdevpath,raidname | awk -F, -vv="$raidname" '{if ($2 == v) print $1}')
 	for dev in $phydevs; do
-		find_modules_for_device $dev
+		find_modules_for_devpath $dev
 		lvm_ignore_devices="$lvm_ignore_devices $dev"
 		found=1
 	done
@@ -741,10 +741,10 @@ find_modules_dmraid() {
 }
 
 # find modules for $devpath
-find_modules_for_device() {
+find_modules_for_devpath() {
 	local devpath="$1"
 	if [ -z "$devpath" ]; then
-		die "No argument passed to find_modules_for_device() - is your /etc/fstab correct?"
+		die "No argument passed to find_modules_for_devpath() - is your /etc/fstab correct?"
 	fi
 
 	# /dev/dm-3 -> /dev/mapper/sil_ahbgadcbchfc3
@@ -753,7 +753,7 @@ find_modules_for_device() {
 		devpath=$(dm_longname "$devpath")
 		;;
 	esac
-	debug "find_modules_for_device($devpath)"
+	debug "Finding modules for device path $devpath"
 
 	if is_yes "`echo "$devpath" | awk '/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:|\/dev\/nfs)/ { print "yes"; }'`"; then
 		if [ ! -x /usr/bin/pcidev -a -z "$NFS_ETH_MODULES" ]; then
@@ -871,7 +871,7 @@ find_modules_for_device() {
 		fi
 		if [ -n "$PVDEVICES" ]; then
 			for device in $PVDEVICES; do
-				find_modules_for_device $device
+				find_modules_for_devpath $device
 			done
 		else
 			die "I wasn't able to find PV (via lvdisplay and pvdisplay). You can try to set PVDEVICES in /etc/sysconfig/geninitrd."
@@ -884,7 +884,7 @@ find_modules_for_device() {
 		else
 			die "LVM version $LVMTOOLSVERSION is not supported yet."
 		fi
-		debug "LVM $LVMTOOLSVERSION enabled"
+		debug "LVM v$LVMTOOLSVERSION enabled"
 		have_lvm=yes
 		return
 	fi
@@ -1081,7 +1081,7 @@ initrd_gen_dmraid() {
 initrd_gen_bootsplash() {
 	local target="$1"
 
-	debug "generating bootsplash"
+	debug "Generating bootsplash"
 	if [ ! -x /bin/splash.bin ]; then
 		echo >&2 "Failed to execute /bin/splash.bin. Is bootsplash package installed?"
 	elif [ -z "$THEME" ]; then
@@ -1105,7 +1105,7 @@ initrd_gen_bootsplash() {
 }
 
 initrd_gen_fbsplash() {
-	debug "generating fbsplash"
+	debug "Generating fbsplash"
 
 	if [ ! -x /usr/bin/splash_geninitramfs ]; then
 		echo >&2 "Failed to execute /usr/bin/splash_geninitramfs. Is splashutils package installed?"
@@ -1304,7 +1304,7 @@ initrd_gen_lvm() {
 			echo '	filter = [' >> "$DESTDIR/etc/lvm.conf"
 			local dev
 			for dev in $lvm_ignore_devices; do
-				debug "LVM2: ignore device $dev"
+				debug "LVM v2: ignore device $dev"
 				printf '  "r|^%s.*|",\n' $dev
 			done >> "$DESTDIR/etc/lvm.conf"
 			echo ']' >> "$DESTDIR/etc/lvm.conf"
@@ -1649,7 +1649,7 @@ if [ -d /usr/lib64 ]; then
 else
 	_lib=lib
 fi
-debug "_lib: $_lib"
+debug "Using libdir: $_lib"
 
 cache_modprobe_conf
 
@@ -1669,8 +1669,8 @@ fi
 find_root "$fstab" || exit
 debug "Using $rootdev as device for rootfs"
 
-find_modules_for_device "$rootdev"
-[ -n "$rootdev_add" ] && find_modules_for_device "$rootdev_add"
+find_modules_for_devpath "$rootdev"
+[ -n "$rootdev_add" ] && find_modules_for_devpath "$rootdev_add"
 
 findmodule "-$rootFs"
 
@@ -1690,25 +1690,9 @@ if [ -n "$ifneeded" -a -z "$MODULES" ]; then
 	debug "No modules are needed -- not building initrd image."
 	exit 0
 fi
-debug "Using modules: $MODULES"
 
-DESTDIR="`mktemp -d /tmp/initrd.XXXXXX`"
-IMAGE="`mktemp -u /tmp/initrd.img-XXXXXX`"
-MNTPOINT="`mktemp -d /tmp/initrd.mnt-XXXXXX`"
+DESTDIR=$(mktemp -d -t initrd.XXXXXX) || die "mktemp failed"
 RCFILE="$DESTDIR/linuxrc"
-
-if [ -f "$DESTDIR" ]; then
-	die "$DESTDIR already exists. Remove it and try again"
-fi
-
-if [ -f "$IMAGE" ]; then
-	die "$IMAGE already exists. Remove it and try again"
-fi
-
-mkdir -p "$MNTPOINT"
-# We don't need this directory, so let's save space
-rm -rf "$MNTPOINT"/lost+found
-
 > "$RCFILE"
 chmod a+rx "$RCFILE"
 ln -s linuxrc $DESTDIR/init
@@ -1895,6 +1879,7 @@ if [ "$INITRDFS" = "initramfs" ]; then
 	# we need /init being real file, not symlink, otherwise the initramfs will
 	# not be ran by pid 1 which is required for switch_root
 	mv $DESTDIR/linuxrc $DESTDIR/init
+	ln -s init $DESTDIR/linuxrc
 else
 	# other than initramfs
 	umount_all
@@ -1904,48 +1889,56 @@ if is_yes "$FB_SPLASH"; then
 	initrd_gen_fbsplash
 fi
 
-
-(cd "$DESTDIR"; tar cf - .) | (cd "$MNTPOINT"; tar xf -)
-
+IMAGE=$(mktemp -t initrd.img-XXXXXX) || die "mktemp failed"
 case "$INITRDFS" in
 	ext2)
-		IMAGESIZE=$(du -ks $MNTPOINT | awk '{print int(($1+1023+512)/1024)*1024}')
-		debug 	"ext2 image size: $IMAGESIZE ($MNTPOINT)"
+		IMAGESIZE=$(du -ks $DESTDIR | awk '{print int(($1+1023+512)/1024)*1024}')
+		debug 	"ext2 image size: $IMAGESIZE ($DESTDIR)"
 		if [ "$IMAGESIZE" -gt 4096 ]; then
 			echo >&2 "$PROGRAM: Your image size is larger than 4096, Be sure to boot kernel with ramdisk_size=$IMAGESIZE!"
 		fi
 
+		debug "Creating ext2 image $IMAGE"
 		dd if=/dev/zero of="$IMAGE" bs=1k count="$IMAGESIZE" 2> /dev/null
 		mke2fs -q -F -b 1024 -m 0 "$IMAGE" 2>/dev/null 1>&2
 		tune2fs -i 0 "$IMAGE" >/dev/null 2>&1
 
-		tmpmnt="`mktemp -d /tmp/initrd.mnte2-XXXXXX`"
+		local tmpmnt=$(mktemp -d -t initrd.mnt-XXXXXX)
+		debug "Mounting ext2 image $IMAGE to $tmpmnt"
 		mount -o loop -t ext2 "$IMAGE" "$tmpmnt"
+		# We don't need this directory, so let's save space
+		rm -rf "$tmpmnt"/lost+found
 
-		(cd "$MNTPOINT"; tar cf - .) | (cd "$tmpmnt"; tar xf -)
-
+		debug "Copy recursively $DESTDIR -> $tmpmnt"
+		cp -a $DESTDIR/* $tmpmnt
 		umount "$IMAGE"
+		rmdir "$tmpmnt"
+
 		;;
 	rom|romfs)
-		genromfs -f "$IMAGE" -d "$MNTPOINT" -V "PLD initrd for kernel $kernel"
+		debug "Generating romfs image: $IMAGE"
+		genromfs -f "$IMAGE" -d "$DESTDIR" -V "PLD initrd for kernel $kernel"
 		IMAGESIZE=$(stat -c %s $IMAGE | awk '{print int((($1/1024)+1023)/1024)*1024}')
-		debug 	"romfs image size: $IMAGESIZE ($IMAGE)"
+		debug "Image size for romfs: ${IMAGESIZE}KiB ($IMAGE)"
 		if [ "$IMAGESIZE" -gt 4096 ]; then
 			echo >&2 "$PROGRAM: Your image size is larger than 4096, Be sure to boot kernel with ramdisk_size=$IMAGESIZE!"
 		fi
 		;;
 	cram|cramfs)
-		mkcramfs "$MNTPOINT" "$IMAGE"
+		mkcramfs "$DESTDIR" "$IMAGE"
 		;;
 	initramfs)
-		(cd $MNTPOINT; find . | cpio --quiet -H newc -o > "$IMAGE")
+		(cd $DESTDIR; find . | cpio --quiet -H newc -o > "$IMAGE")
 		;;
 	*)
 		echo "Filesystem $INITRDFS not supported by $PROGRAM";
 esac
 
 if is_yes "$COMPRESS"; then
-	gzip -9 < "$IMAGE" > "$target"
+	local tmp=$(mktemp "$target".XXXXXX) || die "mktemp failed"
+	debug "Compressing $target"
+	gzip -9 < "$IMAGE" > "$tmp"
+	mv -f "$tmp" "$target"
 else
 	cp -a "$IMAGE" "$target"
 fi
@@ -1954,6 +1947,6 @@ if is_yes "$BOOT_SPLASH"; then
 	initrd_gen_bootsplash "$target"
 fi
 
-rm -rf "$DESTDIR" "$MNTPOINT" "$IMAGE"
+rm -rf "$DESTDIR" "$IMAGE"
 
 # vim:ts=4:sw=4:noet:fdm=marker
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/readonly/geninitrd.git/commitdiff/147754ca159d40ca5eb541074dc043d8cbd92090



More information about the pld-cvs-commit mailing list