6b936a6046bce51336d958fd83673221bb16e817
[nethome.git] / src / OOo-LiveCD.sh
1 #! /bin/bash
2 # $Id$
3
4 set -ex
5 SIZE=2021654528
6 BASE=f14-live
7 BIN=$BASE.bin
8 ISO64=$BASE-x86_64.iso
9 ISO32=$BASE-i686.iso
10 ISO=$BASE.iso
11 KS=$BASE.ks
12 SELF=$BASE.sh
13 # $PWD: rpm: arguments to --root (-r) must begin with a /
14 MNT=$PWD/$BASE.mnt
15 LOOPDEV=
16
17 set -o pipefail
18 renice +19 -p $$
19 ionice -c3 -p $$
20 test "`uname -m`" = "x86_64"
21 test ! -e $BIN
22 test ! -e $ISO
23 test ! -e $MNT
24 test -e $SELF
25
26 if [ ! -e $ISO64 ];then
27   test -e "$KS"
28   livecd-creator --config=$KS --fslabel=$BASE --cache=/var/cache/live
29   test -e $ISO
30   mv -f $ISO $ISO64
31 fi
32 if [ ! -e $ISO32 ];then
33   test -e "$KS"
34   setarch i686 livecd-creator --config=$KS --fslabel=$BASE --cache=/var/cache/live
35   test -e $ISO
36   mv -f $ISO $ISO32
37 fi
38
39 trap 'set +e; rm -f $BIN; (losetup -d $LOOPDEV; umount $MNT/{c,b,a,}; rmdir $MNT/{c,b,a,}) 2>/dev/null' EXIT
40 dd if=/dev/zero of=$BIN bs=1 seek=$[SIZE-1] count=1
41 /sbin/parted --script $BIN mklabel msdos
42 dd bs=1 if=/usr/share/syslinux/mbr.bin of=$BIN conv=notrunc
43 # 17408=34*512
44 /sbin/parted --script $BIN unit b mkpart primary fat32 17408 $[$(find $BIN -printf %s)-17408] set 1 boot on
45 LOOPDEV=`losetup -o 17408 -v -f $BIN | sed 's/^Loop device is //'`
46 [ -n "$LOOPDEV" -a "${LOOPDEV#/dev/loop[0-9]}" != "$LOOPDEV" ]
47 /sbin/mkdosfs -n LIVE $LOOPDEV
48 UUID="$(dd skip=$[0x43] bs=1 count=4 if=$LOOPDEV|od -An -txI|tr a-z A-Z|sed 's/^ \(....\)\(....\)$/\1-\2/')"
49 # --overlay-size-mb 100 --home-size-mb 100
50 echo | livecd-iso-to-disk --unencrypted-home --livedir $BASE-i686 $ISO32 $LOOPDEV
51 mkdir $MNT
52 mount $LOOPDEV $MNT
53 CFG="`cat $MNT/syslinux/syslinux.cfg | sed 's/\( root=live:UUID=\)....-.... /\1'"$UUID /"`"
54 mv $MNT/syslinux/initrd0.img $MNT/syslinux/initrd1.img
55 mv $MNT/syslinux/vmlinuz0 $MNT/syslinux/vmlinuz1
56 umount $MNT
57 livecd-iso-to-disk --unencrypted-home --livedir $BASE-x86_64 $ISO64 $LOOPDEV
58 mount $LOOPDEV $MNT
59 cp -p /usr/share/syslinux/ifcpu64.c32 $MNT/syslinux/
60 (
61   echo "$CFG" | sed -n '1,/^menu hiddenrow/p'
62   cat <<EOH
63 label detect
64   menu label Autoselect x86_64 / i686 Boot
65   kernel ifcpu64.c32
66   append linux0 -- linux1
67   menu default
68 EOH
69   echo "$CFG" | sed -n -e "s/$BASE-i686/$BASE-x86_64/g"                             -e 's/^  menu label .*$/& x86_64/' -e '/^label.*0$/,/^  append/p'
70   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'
71   echo "$CFG" | sed -n '/^label mem/,$p'
72 ) >$MNT/syslinux/syslinux.cfg
73 cp -p $SELF $MNT/
74 if [ -e "$KS" ];then
75   cp -p $KS $MNT/
76 fi
77 umount $MNT
78 mkdir $MNT/{a,b,c}
79 mount $LOOPDEV $MNT/a
80 mount -r -o loop $MNT/a/$BASE-x86_64/squashfs.img $MNT/b
81 mount -r -o loop $MNT/b/LiveOS/ext3fs.img $MNT/c
82 rpm -r $MNT/c -qa|sort >$MNT/a/$BASE-x86_64/rpm-qa
83 umount $MNT/{c,b}
84 mount -r -o loop $MNT/a/$BASE-i686/squashfs.img $MNT/b
85 mount -r -o loop $MNT/b/LiveOS/ext3fs.img $MNT/c
86 rpm -r $MNT/c -qa|sort >$MNT/a/$BASE-i686/rpm-qa
87 diff -u <(sed 's/\.x86_64$//' <$MNT/a/$BASE-x86_64/rpm-qa) <(sed 's/\.i686$//' <$MNT/a/$BASE-i686/rpm-qa) || :
88 BIN=
89 echo OK