mocksetup: /unsafe+/hdd -> /quad
[nethome.git] / src / OOo-LiveCD.sh
index 1195796..dd707cc 100755 (executable)
@@ -3,7 +3,7 @@
 
 set -ex
 SIZE=2021654528
-BASE=OOo-LiveCD
+BASE=f14-live
 BIN=$BASE.bin
 ISO64=$BASE-x86_64.iso
 ISO32=$BASE-i686.iso
@@ -12,11 +12,7 @@ KS=$BASE.ks
 SELF=$BASE.sh
 # $PWD: rpm: arguments to --root (-r) must begin with a /
 MNT=$PWD/$BASE.mnt
-# 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"
+LOOPDEV=
 
 set -o pipefail
 renice +19 -p $$
@@ -24,103 +20,63 @@ ionice -c3 -p $$
 test "`uname -m`" = "x86_64"
 test ! -e $BIN
 test ! -e $ISO
-test ! -e $LOOPDEV
-test ! -e $LOOPDEV1
 test ! -e $MNT
-test -f $SELF
+test -e $SELF
 
 if [ ! -e $ISO64 ];then
-  test -f $KS
+  test -e "$KS"
   livecd-creator --config=$KS --fslabel=$BASE --cache=/var/cache/live
   test -e $ISO
   mv -f $ISO $ISO64
 fi
 if [ ! -e $ISO32 ];then
-  test -f $KS
+  test -e "$KS"
   setarch i686 livecd-creator --config=$KS --fslabel=$BASE --cache=/var/cache/live
   test -e $ISO
   mv -f $ISO $ISO32
 fi
 
-$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"
-
+trap 'set +e; rm -f $BIN; (umount $MNT/{c,b,a,}; rmdir $MNT/{c,b,a,}; losetup -d $LOOPDEV) 2>/dev/null' EXIT
 dd if=/dev/zero of=$BIN bs=1 seek=$[SIZE-1] count=1
-losetup $LOOPDEV $BIN
-losetup -o $[34*512] $LOOPDEV1 $LOOPDEV
+/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/')"
 # --overlay-size-mb 100 --home-size-mb 100
-echo | livecd-iso-to-disk --unencrypted-home --livedir $BASE-i686 --format --reset-mbr $ISO32 $LOOPDEV
+echo | livecd-iso-to-disk --unencrypted-home --livedir $BASE-i686 $ISO32 $LOOPDEV
 mkdir $MNT
-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"
+mount $LOOPDEV $MNT
+CFG="`cat $MNT/syslinux/syslinux.cfg | sed 's/\( root=live:UUID=\)....-.... /\1'"$UUID /"`"
 mv $MNT/syslinux/initrd0.img $MNT/syslinux/initrd1.img
 mv $MNT/syslinux/vmlinuz0 $MNT/syslinux/vmlinuz1
 umount $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"
+livecd-iso-to-disk --unencrypted-home --livedir $BASE-x86_64 $ISO64 $LOOPDEV
+mount $LOOPDEV $MNT
 cp -p /usr/share/syslinux/ifcpu64.c32 $MNT/syslinux/
-cat >$MNT/syslinux/syslinux.cfg <<EOH
-
-default vesamenu.c32
-timeout 100
-
-menu background splash.jpg
-menu title Welcome to OOo-LiveCD!
-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
+(
+  echo "$CFG" | sed -n '1,/^menu hiddenrow/p'
+  cat <<EOH
 label detect
   menu label Autoselect x86_64 / i686 Boot
   kernel ifcpu64.c32
   append linux0 -- linux1
-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=OOo-LiveCD-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=OOo-LiveCD-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=OOo-LiveCD-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=OOo-LiveCD-i686 quiet  rhgb check
-label memtest
-  menu label Memory Test
-  kernel memtest
-label local
-  menu label Boot from local drive
-  localboot 0xffff
+  menu default
 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
+if [ -e "$KS" ];then
   cp -p $KS $MNT/
 fi
 umount $MNT
-
 mkdir $MNT/{a,b,c}
-mount    -o loop $LOOPDEV1 $MNT/a
+mount $LOOPDEV $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
@@ -128,16 +84,6 @@ 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
-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
+diff -u <(sed 's/\.x86_64$//' <$MNT/a/$BASE-x86_64/rpm-qa) <(sed 's/\.i.86$//' <$MNT/a/$BASE-i686/rpm-qa) || :
+BIN=
 echo OK