-git: checkout: +--ignore-other-worktrees
[nethome.git] / src / OOo-LiveCD.sh
index dd707cc..72c0a1d 100755 (executable)
@@ -1,9 +1,9 @@
 #! /bin/bash
-# $Id$
+# $Id: OOo-LiveCD.sh,v 1.2 2010/03/24 15:03:15 lace Exp $
 
 set -ex
 SIZE=2021654528
-BASE=f14-live
+BASE=OOo-LiveCD
 BIN=$BASE.bin
 ISO64=$BASE-x86_64.iso
 ISO32=$BASE-i686.iso
@@ -12,7 +12,11 @@ KS=$BASE.ks
 SELF=$BASE.sh
 # $PWD: rpm: arguments to --root (-r) must begin with a /
 MNT=$PWD/$BASE.mnt
-LOOPDEV=
+# Cheat livecd-iso-to-disk getdisk():
+LOOPDEV=/dev/loop-$BASE.dev
+LOOPDEVMK="mknod $LOOPDEV b 7 0"
+LOOPDEV1=/dev/loop-$BASE.dev1
+LOOPDEV1MK="mknod $LOOPDEV1 b 7 1"
 
 set -o pipefail
 renice +19 -p $$
@@ -20,6 +24,8 @@ ionice -c3 -p $$
 test "`uname -m`" = "x86_64"
 test ! -e $BIN
 test ! -e $ISO
+test ! -e $LOOPDEV
+test ! -e $LOOPDEV1
 test ! -e $MNT
 test -e $SELF
 
@@ -36,47 +42,85 @@ if [ ! -e $ISO32 ];then
   mv -f $ISO $ISO32
 fi
 
-trap 'set +e; rm -f $BIN; (umount $MNT/{c,b,a,}; rmdir $MNT/{c,b,a,}; losetup -d $LOOPDEV) 2>/dev/null' EXIT
+$LOOPDEVMK
+test "`losetup $LOOPDEV 2>&1|tee /proc/self/fd/2`" = "loop: can't get info on device $LOOPDEV: No such device or address"
+$LOOPDEV1MK
+test "`losetup $LOOPDEV1 2>&1|tee /proc/self/fd/2`" = "loop: can't get info on device $LOOPDEV1: No such device or address"
+
 dd if=/dev/zero of=$BIN bs=1 seek=$[SIZE-1] count=1
-/sbin/parted --script $BIN mklabel msdos
-dd bs=1 if=/usr/share/syslinux/mbr.bin of=$BIN conv=notrunc
-# 17408=34*512
-/sbin/parted --script $BIN unit b mkpart primary fat32 17408 $[$(find $BIN -printf %s)-17408] set 1 boot on
-LOOPDEV=`losetup -o 17408 -v -f $BIN | sed 's/^Loop device is //'`
-[ -n "$LOOPDEV" -a "${LOOPDEV#/dev/loop[0-9]}" != "$LOOPDEV" ]
-/sbin/mkdosfs -n LIVE $LOOPDEV
-UUID="$(dd skip=$[0x43] bs=1 count=4 if=$LOOPDEV|od -An -txI|tr a-z A-Z|sed 's/^ \(....\)\(....\)$/\1-\2/')"
+losetup $LOOPDEV $BIN
+losetup -o $[34*512] $LOOPDEV1 $LOOPDEV
 # --overlay-size-mb 100 --home-size-mb 100
-echo | livecd-iso-to-disk --unencrypted-home --livedir $BASE-i686 $ISO32 $LOOPDEV
+echo | livecd-iso-to-disk --unencrypted-home --livedir $BASE-i686 --format --reset-mbr $ISO32 $LOOPDEV
 mkdir $MNT
-mount $LOOPDEV $MNT
-CFG="`cat $MNT/syslinux/syslinux.cfg | sed 's/\( root=live:UUID=\)....-.... /\1'"$UUID /"`"
+mount $LOOPDEV1 $MNT
+UUID1="$(sed <$MNT/syslinux/syslinux.cfg -n 's/^.* root=live:UUID=\([0-9A-Z]*-[0-9A-Z]*\) .*$/\1/p'|uniq)"
+test -n "$UUID1"
 mv $MNT/syslinux/initrd0.img $MNT/syslinux/initrd1.img
 mv $MNT/syslinux/vmlinuz0 $MNT/syslinux/vmlinuz1
 umount $MNT
-livecd-iso-to-disk --unencrypted-home --livedir $BASE-x86_64 $ISO64 $LOOPDEV
-mount $LOOPDEV $MNT
+rmdir $MNT
+livecd-iso-to-disk --unencrypted-home --livedir $BASE-x86_64 $ISO64 $LOOPDEV1
+mkdir $MNT
+mount $LOOPDEV1 $MNT
+UUID0="$(sed <$MNT/syslinux/syslinux.cfg -n 's/^.* root=live:UUID=\([0-9A-Z]*-[0-9A-Z]*\) .*$/\1/p'|uniq)"
+test -n "$UUID0"
 cp -p /usr/share/syslinux/ifcpu64.c32 $MNT/syslinux/
-(
-  echo "$CFG" | sed -n '1,/^menu hiddenrow/p'
-  cat <<EOH
+cat >$MNT/syslinux/syslinux.cfg <<EOH
+
+default vesamenu.c32
+timeout 100
+
+menu background splash.jpg
+menu title Welcome to $BASE!
+menu color border 0 #ffffffff #00000000
+menu color sel 7 #ffffffff #ff000000
+menu color title 0 #ffffffff #00000000
+menu color tabmsg 0 #ffffffff #00000000
+menu color unsel 0 #ffffffff #00000000
+menu color hotsel 0 #ff000000 #ffffffff
+menu color hotkey 7 #ffffffff #ff000000
+menu color timeout_msg 0 #ffffffff #00000000
+menu color timeout 0 #ffffffff #00000000
+menu color cmdline 0 #ffffffff #00000000
+menu hidden
+menu hiddenrow 5
 label detect
   menu label Autoselect x86_64 / i686 Boot
   kernel ifcpu64.c32
   append linux0 -- linux1
-  menu default
+menu default
+label linux0
+  menu label Boot x86_64
+  kernel vmlinuz0
+  append initrd=initrd0.img root=live:UUID=$UUID0 rootfstype=vfat ro liveimg live_dir=$BASE-x86_64 quiet  rhgb rd_NO_LUKS rd_NO_MD noiswmd 
+label check0
+  menu label Verify and Boot x86_64
+  kernel vmlinuz0
+  append initrd=initrd0.img root=live:UUID=$UUID0 rootfstype=vfat ro liveimg live_dir=$BASE-x86_64 quiet  rhgb check
+label linux1
+  menu label Boot i686
+  kernel vmlinuz1
+  append initrd=initrd1.img root=live:UUID=$UUID1 rootfstype=vfat ro liveimg live_dir=$BASE-i686 quiet  rhgb rd_NO_LUKS rd_NO_MD noiswmd 
+label check1
+  menu label Verify and Boot i686
+  kernel vmlinuz1
+  append initrd=initrd1.img root=live:UUID=$UUID1 rootfstype=vfat ro liveimg live_dir=$BASE-i686 quiet  rhgb check
+label memtest
+  menu label Memory Test
+  kernel memtest
+label local
+  menu label Boot from local drive
+  localboot 0xffff
 EOH
-  echo "$CFG" | sed -n -e "s/$BASE-i686/$BASE-x86_64/g"                             -e 's/^  menu label .*$/& x86_64/' -e '/^label.*0$/,/^  append/p'
-  echo "$CFG" | sed -n -e 's/^\(label.*\)0$/\11/' -e 's/\(vmlinuz\|initrd\)0/\11/g' -e 's/^  menu label .*$/& i686/'   -e '/^label.*1$/,/^  append/p'
-  echo "$CFG" | sed -n '/^label mem/,$p'
-) >$MNT/syslinux/syslinux.cfg
 cp -p $SELF $MNT/
 if [ -e "$KS" ];then
   cp -p $KS $MNT/
 fi
 umount $MNT
+
 mkdir $MNT/{a,b,c}
-mount $LOOPDEV $MNT/a
+mount    -o loop $LOOPDEV1 $MNT/a
 mount -r -o loop $MNT/a/$BASE-x86_64/squashfs.img $MNT/b
 mount -r -o loop $MNT/b/LiveOS/ext3fs.img $MNT/c
 rpm -r $MNT/c -qa|sort >$MNT/a/$BASE-x86_64/rpm-qa
@@ -84,6 +128,16 @@ umount $MNT/{c,b}
 mount -r -o loop $MNT/a/$BASE-i686/squashfs.img $MNT/b
 mount -r -o loop $MNT/b/LiveOS/ext3fs.img $MNT/c
 rpm -r $MNT/c -qa|sort >$MNT/a/$BASE-i686/rpm-qa
-diff -u <(sed 's/\.x86_64$//' <$MNT/a/$BASE-x86_64/rpm-qa) <(sed 's/\.i.86$//' <$MNT/a/$BASE-i686/rpm-qa) || :
-BIN=
+umount $MNT/{c,b}
+diff -u <(sed 's/\.x86_64$//' <$MNT/a/$BASE-x86_64/rpm-qa) <(sed 's/\.i686$//' <$MNT/a/$BASE-i686/rpm-qa) || :
+umount $MNT/a
+rmdir $MNT/{c,b,a}
+
+rmdir $MNT
+losetup -d $LOOPDEV1
+rm -f $LOOPDEV1
+losetup -d $LOOPDEV
+rm -f $LOOPDEV
+# livecd-iso-to-disk resetMBR does not work due to /dev/loop*.
+dd bs=1 if=/usr/share/syslinux/mbr.bin of=$BIN conv=notrunc
 echo OK