wok diff syslinux/stuff/iso2exe/init @ rev 16055

syslinux/iso2exe: fix 'a la tazusb' install
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Mar 11 15:44:47 2014 +0000 (2014-03-11)
parents 8d64ce80ab95
children e0a6955b0a12
line diff
     1.1 --- a/syslinux/stuff/iso2exe/init	Mon Mar 10 11:43:00 2014 +0000
     1.2 +++ b/syslinux/stuff/iso2exe/init	Tue Mar 11 15:44:47 2014 +0000
     1.3 @@ -79,6 +79,48 @@
     1.4  	blkid | sed "/$dev:/!d;s/.* UUID=.\\([^ ]*\\)\".*/\\1/"
     1.5  }
     1.6  
     1.7 +tazusbinitfs()
     1.8 +{
     1.9 +	PAD=$(($(stat -c %s $1) % 4))
    1.10 +	[ $PAD -ne 0 ] && dd if=/dev/zero bs=1 count=$((4 - $PAD)) >> $1
    1.11 +	mkdir -p /tmp/fs/etc /tmp/fs/lib /tmp/fs/home
    1.12 +	cp -a /etc/locale.conf /tmp/fs/etc 2> /dev/null
    1.13 +	cp -a /etc/keymap.conf /tmp/fs/etc 2> /dev/null
    1.14 +	sed 's/ .*//' /proc/modules | while read mod ; do
    1.15 +		find /lib/modules/ | grep $mod.ko | \
    1.16 +			sed 's|.*|cp & /tmp/fs/lib|' | sh
    1.17 +	done
    1.18 +	cat > /tmp/fs/init1 <<EOT
    1.19 +#!/bin/sh
    1.20 +sed -i 's|sbin/init|init2|' /init
    1.21 +exec /init
    1.22 +EOT
    1.23 +	cat > /tmp/fs/init2 <<EOT
    1.24 +#!/bin/sh
    1.25 +
    1.26 +mount -t proc /proc /proc
    1.27 +  grep -q debug /proc/cmdline && debug=true && set -x
    1.28 +for i in /lib/*.ko* ; do insmod \$i 2> /dev/null ; done; sleep 2
    1.29 +v=\$(sed '/\\/home=/!d;s|.*/home=\\([^ ]*\\).*|\\1|' /proc/cmdline /cmdline 2> /dev/null)
    1.30 +mount / -o remount,rw
    1.31 +mkdir /mnt/dos
    1.32 +rm -f /cmdline 2> /dev/null
    1.33 +mount / -o remount,ro
    1.34 +mnt=/mnt/dos/\${v#*/}
    1.35 +dev=\$( (blkid /dev/[sh]d* || blkid) | grep \${v%%/*} | sed 's/:.*//;q')
    1.36 +echo "Mount \$dev in /mnt/dos for \$v..." | tee -a /run/boot.log
    1.37 +mount \$dev /mnt/dos
    1.38 +mount.posixovl -F \$mnt -- -oallow_other -odefault_permissions -osuid
    1.39 +mount --bind \$mnt /home
    1.40 +  [ "\$debug" = "true" ] && sh
    1.41 +umount /proc
    1.42 +exec /sbin/init
    1.43 +EOT
    1.44 +	chmod 755 /tmp/fs/init?
    1.45 +	cp -a /tmp/fs/* /
    1.46 +	( cd /tmp/fs ; find * | cpio -o -H newc ) | gzip -9 >> $1
    1.47 +}
    1.48 +
    1.49  mkinitrd()
    1.50  {
    1.51  	echo "Creating $(basename $1) ..."
    1.52 @@ -115,9 +157,9 @@
    1.53  
    1.54  mount -t proc /proc /proc
    1.55    arg debug "shell" && debug=true && set -x
    1.56 -for i in /lib/*.ko* ; do insmod \$i ; done; sleep 2
    1.57 +for i in /lib/*.ko* ; do insmod \$i 2> /dev/null ; done; sleep 2
    1.58  arg mount "Mount device"
    1.59 -mount \$( (blkid /dev/?d* || blkid) | grep \$val | sed 's/:.*//;q') /mnt
    1.60 +mount \$( (blkid /dev/[sh]d* || blkid) | grep \$val | sed 's/:.*//;q') /mnt
    1.61  arg subroot "Change root to directory"
    1.62  mount.posixovl -F /mnt/\$val -- -oallow_other -odefault_permissions -osuid
    1.63  mount --bind /mnt /mnt/\$val/mnt/dos
    1.64 @@ -158,9 +200,9 @@
    1.65  		else
    1.66  			ls_r /media/cdrom/boot/rootfs* | xargs cat
    1.67  		fi > /mnt/slitaz/boot/rootfs.gz
    1.68 -		mkdir /mnt/slitaz/home
    1.69 +		tazusbinitfs /mnt/slitaz/boot/rootfs.gz
    1.70  		initrd=rootfs.gz
    1.71 -		extraargs="/home=$(getuuid)/slitaz/home" # FIXME /mnt/dos
    1.72 +		extraargs="/home=$(getuuid)/slitaz rdinit=/init1"
    1.73  	else
    1.74  		if [ -d /media/cdrom/fs ]; then
    1.75  			cp -a /media/cdrom/fs/. /mnt/slitaz
    1.76 @@ -179,6 +221,8 @@
    1.77  				uncpio $i /mnt/slitaz
    1.78  			done
    1.79  		fi
    1.80 +		cp -a /etc/locale.conf /tmp/slitaz/etc 2> /dev/null
    1.81 +		cp -a /etc/keymap.conf /tmp/slitaz/etc 2> /dev/null
    1.82  		mkinitrd /mnt/slitaz/boot/initrd
    1.83  		initrd=initrd
    1.84  		extraargs="mount=$(getuuid) subroot=slitaz"
    1.85 @@ -261,18 +305,21 @@
    1.86  	[ $? -eq 0 ] || return
    1.87  	doinstall tazusblike || return
    1.88  	if [ -d /media/cdrom/fs ]; then
    1.89 -		zcat /mnt/slitaz/boot/rootfs.gz | cpio -idmu
    1.90 +		cp -a /media/cdrom/fs/. /
    1.91  	else
    1.92  		for i in $(ls_r /media/cdrom/boot/rootfs*); do
    1.93 -			( zcat $i 2> /dev/null || unlzma -c $i ) | cpio -idmu
    1.94 +			unlzma < $i | (cd / ; cpio -idmu )
    1.95  		done
    1.96  	fi
    1.97 -	[ -x /sbin/init ] || return
    1.98 +	cp /tmp/fs/etc/* /etc
    1.99 +	echo "/home=$(getuuid)/slitaz" > /cmdline
   1.100 +	[ -x /init1 ] || return
   1.101  	umount -d /media/cdrom
   1.102 -	mount --move /mnt /mnt/dos
   1.103 -	ln -s /mnt/dos/slitaz/home /home
   1.104 +	umount /mnt/slitaz
   1.105 +	umount /mnt
   1.106 +	mkdir /mnt/dos
   1.107  	umount_proc
   1.108 -	exec /sbin/init
   1.109 +	exec /init1
   1.110  }
   1.111  
   1.112  tazboot()
   1.113 @@ -576,10 +623,14 @@
   1.114  dmesg > /tmp/dmesg
   1.115  
   1.116  while true; do
   1.117 +	keymap="$(cat /etc/keymap.conf 2> /dev/null)"
   1.118 +	locale="$(sed '/^LANG=/!d;s/.*=//' /etc/locale.conf 2> /dev/null)"
   1.119  	cat > /tmp/dialog <<EOT
   1.120  $DIALOG  --clear \
   1.121  	--title " Welcome to SliTaz " \
   1.122  	--menu "" 21 70 15 \
   1.123 +$(xfile tazkeymap	"tazkeymap"	"Select keyboard ($keymap)") \
   1.124 +$(xfile tazlocale	"tazlocale"	"Select locale ($locale)") \
   1.125  $(cdfile boot/bzImage	"live"		"SliTaz RAM boot") \
   1.126  			"text"		"SliTaz RAM boot (text mode only)" \
   1.127  $(cdfile README		"readme"	"Show the README file") \