From e21f2e5093a027058a685f09a4b9d0151bb4dafd Mon Sep 17 00:00:00 2001
From: Matthias Hentges <oe@hentges.net>
Date: Tue, 4 Apr 2006 12:07:29 +0000
Subject: altboot: - Allow a basic reconfiguration of non-flash based
 installations: 		- Move /home from flash into the image 	
 - Remove SD / CF / /home ipkg dests 		- Move ipkg package data from
 RAM into the image 		- All of the above is _optional_ 	- Be a
 little bit less verbose. 	- Yet _again_ change the way we detect wheter
 we are called by the kernel or the user...this is driving me nuts.

---
 packages/altboot/altboot_0.0.0.bb                  |   2 +-
 packages/altboot/files/akita/altboot-2.6.cfg       |   1 +
 .../altboot/files/altboot-menu/Advanced/40-bootNFS |  13 ++-
 packages/altboot/files/altboot.func                | 108 ++++++++++++++++++++-
 packages/altboot/files/collie/altboot-2.4.cfg      |   4 +-
 packages/altboot/files/init.altboot                |   8 +-
 packages/altboot/files/poodle/altboot-2.4.cfg      |   2 +
 packages/altboot/files/spitz/altboot-2.6.cfg       |   1 +
 packages/altboot/files/tosa/altboot-2.4.cfg        |   3 +-
 9 files changed, 131 insertions(+), 11 deletions(-)

(limited to 'packages/altboot')

diff --git a/packages/altboot/altboot_0.0.0.bb b/packages/altboot/altboot_0.0.0.bb
index 82314a8f22..2df0e16792 100644
--- a/packages/altboot/altboot_0.0.0.bb
+++ b/packages/altboot/altboot_0.0.0.bb
@@ -6,7 +6,7 @@ MAINTAINER = "Matthias 'CoreDump' Hentges  <oe@hentges.net>"
 LICENSE = "GPL"
 IGNORE_STRIP_ERRORS = "1"
 
-PR = "r33"
+PR = "r34"
 
 
 SRC_URI = "file://altboot-menu \
diff --git a/packages/altboot/files/akita/altboot-2.6.cfg b/packages/altboot/files/akita/altboot-2.6.cfg
index 69f7c8351b..c9a030b348 100644
--- a/packages/altboot/files/akita/altboot-2.6.cfg
+++ b/packages/altboot/files/akita/altboot-2.6.cfg
@@ -9,6 +9,7 @@ SH_SHELL="/bin/sh"
 IMAGE_PATH="boot-images"
 IMAGE_TYPE="ext2"
 FSCK_IMAGES="yes"
+ENABLE_IMAGECONF="yes"
 
 SD_DEVICE="/dev/mmcblk0p1"
 SD_KERNEL_MODULE=""
diff --git a/packages/altboot/files/altboot-menu/Advanced/40-bootNFS b/packages/altboot/files/altboot-menu/Advanced/40-bootNFS
index baa426218b..e01af7faad 100644
--- a/packages/altboot/files/altboot-menu/Advanced/40-bootNFS
+++ b/packages/altboot/files/altboot-menu/Advanced/40-bootNFS
@@ -20,11 +20,11 @@ run_module() {
 	init_rootfs
 
 	# Needed for NFS
-	/etc/init.d/portmap start >/dev/tty1 2>&1 || die "/etc/init.d/portmap start failed!"
+	/etc/init.d/portmap start >/dev/null 2>&1 || die "/etc/init.d/portmap start failed!"
 	
 	# For some reason NFS mounts hang if /e/i/networking is not run.
 	# For the time beeing I'm too lazy to investigate ;)
-	/etc/init.d/networking start || die "/etc/init.d/networking start failed!"
+	/etc/init.d/networking start >/dev/null 2>&1 || die "/etc/init.d/networking start failed!"
 	
 	sleep 2
 	
@@ -126,6 +126,15 @@ run_module() {
 	mkdir -p /media/nfsroot || die "mkdir -p /media/nfsroot failed!"
 	
 	echo -n "Mounting NFS root..."
+	
+	if ( mount | grep -q "/media/nfsroot" )
+	then
+		echo "/media/nfsroot already used, tying to umount..."
+		umount /media/image
+		losetup -d /dev/loop0
+		umount /media/nfsroot || die "umount failed!"
+	fi
+		
 	mount -t nfs "$selection" /media/nfsroot && echo ok || die "mount -t nfs "$selection" /media/nfsroot failed!"
 	
 	# Use configured resolv.conf in the pivoted rootfs
diff --git a/packages/altboot/files/altboot.func b/packages/altboot/files/altboot.func
index 612a0243b2..0cc59116ce 100644
--- a/packages/altboot/files/altboot.func
+++ b/packages/altboot/files/altboot.func
@@ -93,6 +93,8 @@ pivot_realfs() {
 
 	mount -o remount,ro / >/dev/null 2>&1
 
+	test "$ENABLE_IMAGECONF" = yes && image_conf $1
+
 	do_pivot "$1" "$RL"
 }
 
@@ -152,27 +154,28 @@ pivot_image() {
 	
 	
 	echo ""
-	echo "Using [$IMAGE_NAME]"
 
 	mkdir -p /media/image || die "mkdir -p /media/image failed"
 
-	echo "Setting up loopback (/dev/loop0) for $IMAGE_NAME"
 	losetup /dev/loop0 $1/$IMAGE_PATH/$IMAGE_NAME || die "losetup /dev/loop0 $1/$IMAGE_PATH/$IMAGE_NAME failed!"
 	check_fs /dev/loop0 $IMAGE_TYPE
 	
-	echo -e "\n* * * Booting rootfs image * * *\n"
+	echo -e "\n* * * Mounting rootfs image * * *\n"
 
 	# Busybox's "mount" doesn't seem to like "-o loop" for some reason
 	# It works on collie and b0rks on poodle.
 	if [ "$IMAGE_TYPE" = "" ]; then
 		IMAGE_TYPE="auto"
 	fi
+	
 	# If mount fails it has the tendency to spew out a _lot_ of error messages.
 	# We direct the output to /dev/null so the user can see which step actually failed.	
 	mount /dev/loop0 -t $IMAGE_TYPE /media/image >/dev/null 2>&1 || die "mount -t $IMAGE_TYPE /dev/loop0 /media/image failed!"	
 
 	mkdir -p /media/image/media/ROM || die "mkdir -p /media/image/media/ROM failed"
 
+	test "$ENABLE_IMAGECONF" = yes && image_conf /media/image
+	
 	do_pivot /media/image "$RL"
 }
 
@@ -214,6 +217,105 @@ do_pivot(){
 
 }
 
+# $1: Path to mounted rootfs
+image_conf(){
+	! test -d "$1" && die "image_conf: [$1] not found / no directory"	
+	
+	test -e "$1/etc/.image_conf.done" && return
+	
+	echo -e "\n\n* * * rootfs configuration * * *\n"
+	echo -e "This setup lets you reconfigure your new rootfs."
+	echo "Most probably the rootfs is configured with"
+	echo "defaults based on a flash installation."
+	echo "If unsure, go with the defaults by pressing <ENTER>."
+	echo ""
+	
+	if ( cat $1/etc/fstab | grep -v "^#" | grep -q "/home " )		
+	then						
+		while true
+		do
+			echo "Usually your /home directory is located on another flash partition."
+			echo -n "Do you want me to move /home inside the loop-image? [N|y] "
+			read junk
+			
+			if test "$junk" = "y" -o "$junk" = "Y"
+			then
+			 	cat $1/etc/fstab | sed "/.*\/home.*/s/\/home/\/home.orig/" > $1/etc/fstab_
+				mv $1/etc/fstab_ $1/etc/fstab
+				break
+			fi
+			
+			test "$junk" = "" -o "$junk" = n -o "$junk" = N && break
+		done
+		
+	fi	
+
+	echo ""
+				
+# 	if ( cat $1/etc/fstab | grep -v "^#" | grep -q "/var" )		
+# 	then						
+# 		while true
+# 		do
+# 			echo "This is mainly for testing purposes."
+# 			echo -n "Do you want to configure /var as a normal non-tmpfs directory? [N|y] "
+# 			read junk
+# 			
+# 			if test "$junk" = "y" -o "$junk" = "Y"
+# 			then
+# 			 	cat $1/etc/fstab | sed "/.*\/var.*/s/\(.*\)/#\ \1/" > $1/etc/fstab_
+# 				mv $1/etc/fstab_ $1/etc/fstab
+# 				break
+# 			fi
+# 			
+# 			test "$junk" = "" -o "$junk" = n -o "$junk" = N && break
+# 		done
+# 	fi		
+
+	echo ""
+
+	if ( cat $1/etc/ipkg.conf | grep -q ^lists_dir )		
+	then						
+		while true
+		do
+			echo -e "Wasting RAM is never a good idea.\nOnly say Y if your rootfs is very small in size"
+			echo -n "Do you want to store ipkg package data in RAM? [N|y] "
+			read junk
+			
+			if test "$junk" = "" -o "$junk" = n -o "$junk" = N
+			then
+				cat $1/etc/ipkg.conf | sed "/^lists_dir.*/s/\(.*\)/#\ \1/"> $1/etc/ipkg.conf_			 	
+				mv $1/etc/ipkg.conf_ $1/etc/ipkg.conf
+				break
+			fi
+			
+			test "$junk" = "y" -o "$junk" = "Y" && break
+		done
+	fi		
+
+	echo ""
+
+	if ( cat $1/etc/ipkg.conf | grep -q "^dest sd" )		
+	then						
+		while true
+		do
+			echo -n "Do you want to keep the SD, CF and /home ipkg install targets? [N|y] "
+			read junk
+			
+			if test "$junk" = "" -o "$junk" = n -o "$junk" = N
+			then
+				cat $1/etc/ipkg.conf | sed "/^dest\ \(sd\|cf\|home\).*/s/\(.*\)/#\ \1/"	> $1/etc/ipkg.conf_		 	
+				mv $1/etc/ipkg.conf_ $1/etc/ipkg.conf
+				break
+			fi
+			
+			test "$junk" = "y" -o "$junk" = "Y" && break
+		done
+	fi	
+		
+	
+	touch "$1/etc/.image_conf.done"	
+}
+
 # This functions configures the master password for altboot if none is set
 set_password() {
 	mount -o remount,rw /
diff --git a/packages/altboot/files/collie/altboot-2.4.cfg b/packages/altboot/files/collie/altboot-2.4.cfg
index 9d2560f76b..bc0f9ca054 100644
--- a/packages/altboot/files/collie/altboot-2.4.cfg
+++ b/packages/altboot/files/collie/altboot-2.4.cfg
@@ -8,7 +8,9 @@ REAL_INIT="/sbin/init.sysvinit"
 SH_SHELL="/bin/sh"
 IMAGE_PATH="boot-images"
 IMAGE_TYPE="ext2"
-FSCK_IMAGES="no"
+FSCK_IMAGES="yes"
+ENABLE_IMAGECONF="yes"
+
 SD_DEVICE="/dev/mmcda1"
 SD_KERNEL_MODULE="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
 INIT_RUNLEVEL="5"
diff --git a/packages/altboot/files/init.altboot b/packages/altboot/files/init.altboot
index ed95ce1c9c..22f3e86e83 100644
--- a/packages/altboot/files/init.altboot
+++ b/packages/altboot/files/init.altboot
@@ -283,10 +283,12 @@ wait_for_input() {
 }
 
 # * * * * * * This is the main function * * * * * *
-
-if test -f /proc/cmdline -a "$1" != "-force"
+# Note: this is positivly ugly. If someone knows a better way to detect wheter
+# we are already booted into a runlevel _without_ reading /var and / or using `runlevel`
+# PLEASE let me know.
+if test -f /proc/cmdline -a "`ps ax|wc -l|tr -d " "`" -gt 30 -a "$1" != "-force"
 then
-	echo "altboot: Using real init [$REAL_INIT] [$*] *" >/dev/tty1
+	echo "altboot: Using real init [$REAL_INIT] [$*] [`ps ax|wc -l|tr -d " "`] *" >/dev/tty1
 	exec $REAL_INIT $*
 #	exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
 	exit 0
diff --git a/packages/altboot/files/poodle/altboot-2.4.cfg b/packages/altboot/files/poodle/altboot-2.4.cfg
index 9d2560f76b..c5bd17050c 100644
--- a/packages/altboot/files/poodle/altboot-2.4.cfg
+++ b/packages/altboot/files/poodle/altboot-2.4.cfg
@@ -16,5 +16,7 @@ NO_GUI_RL="2"
 MASTER_PASSWORD=""
 ASK_PW_ON_BOOT="no"
 
+ENABLE_IMAGECONF="yes"
+
 SD_MOUNTPOINT="/media/card"
 CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/spitz/altboot-2.6.cfg b/packages/altboot/files/spitz/altboot-2.6.cfg
index 69f7c8351b..c9a030b348 100644
--- a/packages/altboot/files/spitz/altboot-2.6.cfg
+++ b/packages/altboot/files/spitz/altboot-2.6.cfg
@@ -9,6 +9,7 @@ SH_SHELL="/bin/sh"
 IMAGE_PATH="boot-images"
 IMAGE_TYPE="ext2"
 FSCK_IMAGES="yes"
+ENABLE_IMAGECONF="yes"
 
 SD_DEVICE="/dev/mmcblk0p1"
 SD_KERNEL_MODULE=""
diff --git a/packages/altboot/files/tosa/altboot-2.4.cfg b/packages/altboot/files/tosa/altboot-2.4.cfg
index edbaff8b87..c463ca0a43 100644
--- a/packages/altboot/files/tosa/altboot-2.4.cfg
+++ b/packages/altboot/files/tosa/altboot-2.4.cfg
@@ -8,7 +8,8 @@ SH_SHELL="/bin/sh"
 
 IMAGE_PATH="boot-images"
 IMAGE_TYPE="ext2"
-FSCK_IMAGES="no"
+FSCK_IMAGES="yes"
+ENABLE_IMAGECONF="yes"
 
 SD_DEVICE="/dev/mmcda1"
 SD_KERNEL_MODULE="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
-- 
cgit v1.2.3