6 FULL_VERSION_STRING="PlanetLab BootCD $BOOTCD_VERSION"
8 SYSLINUX_SRC=sources/syslinux-2.11.tar.bz2
13 ROOT_PASSWD='$1$IdEn2srw$/TfrjZSPUC1xP244YCuIi0'
15 BOOTCD_YUM_GROUP=BootCD
17 CDRECORD_FLAGS="-v -dao -blank=fast"
19 CONF_FILES_DIR=conf_files/
21 # location of the uncompressed ramdisk image
22 INITRD=$CD_ROOT/usr/isolinux/initrd
24 # temporary mount point for rd
27 # size of the ram disk in MB
30 # the bytes per inode ratio (the -i value in mkfs.ext2) for the ramdisk
31 INITRD_BYTES_PER_INODE=1024
34 function build_cdroot()
36 if [ -f $CD_ROOT/.built ]; then
37 echo "cd root already built, skipping"
43 mkdir -p $CD_ROOT/dev/pts
44 mkdir -p $CD_ROOT/proc
47 echo "copy fstab and mtab"
48 cp -f $CONF_FILES_DIR/fstab $CD_ROOT/etc/
49 cp -f $CONF_FILES_DIR/mtab $CD_ROOT/etc/
51 echo "setup rpm to install only en_US locale and no docs"
52 mkdir -p $CD_ROOT/etc/rpm
53 cp -f $CONF_FILES_DIR/macros $CD_ROOT/etc/rpm
55 echo "initialize rpm db"
56 mkdir -p $CD_ROOT/var/lib/rpm
57 rpm --root $CD_ROOT --initdb
59 echo "install boot cd base rpms"
60 yum -c yum.conf --installroot=$CD_ROOT -y groupinstall $BOOTCD_YUM_GROUP
62 echo "removing unneccessary build files"
63 (cd $CD_ROOT/lib/modules && \
64 find ./ -type d -name build -maxdepth 2 -exec rm -rf {} \;)
66 echo "setting up non-ssh authentication"
67 mkdir -p $CD_ROOT/etc/samba
68 chroot $CD_ROOT /usr/sbin/authconfig --nostart --kickstart \
69 --enablemd5 --enableshadow
71 echo "setting root password"
72 sed -i "s#root::#root:$ROOT_PASSWD:#g" $CD_ROOT/etc/shadow
74 echo "relocate some large directories out of the root system"
75 # get /var/lib/rpm out, its 12mb. create in its place a
76 # symbolic link to /usr/relocated/var/lib/rpm
77 mkdir -p $CD_ROOT/usr/relocated/var/lib/
78 mv $CD_ROOT/var/lib/rpm $CD_ROOT/usr/relocated/var/lib/
79 (cd $CD_ROOT/var/lib && ln -s ../../usr/relocated/var/lib/rpm rpm)
82 mkdir -p $CD_ROOT/usr/relocated/lib
83 mv $CD_ROOT/lib/tls $CD_ROOT/usr/relocated/lib/
84 (cd $CD_ROOT/lib && ln -s ../usr/relocated/lib/tls tls)
86 echo "extracting syslinux, copying isolinux files to cd"
88 mkdir -p $CD_ROOT/usr/isolinux/
89 tar -C syslinux -xjvf $SYSLINUX_SRC
90 find syslinux -name isolinux.bin -exec cp -f {} $CD_ROOT/usr/isolinux/ \;
92 echo "moving kernel to isolinux directory"
93 KERNEL=$CD_ROOT/boot/vmlinuz-*
94 mv -f $KERNEL $CD_ROOT/usr/isolinux/kernel
96 echo "creating version files"
97 echo "$FULL_VERSION_STRING" > $CD_ROOT/usr/isolinux/pl_version
98 echo "$FULL_VERSION_STRING" > $CD_ROOT/pl_version
100 touch $CD_ROOT/.built
103 function build_initrd()
105 echo "building initrd"
109 echo "copy fstab and mtab"
110 cp -f $CONF_FILES_DIR/fstab $CD_ROOT/etc/
111 cp -f $CONF_FILES_DIR/mtab $CD_ROOT/etc/
113 echo "installing generic modprobe.conf"
114 cp -f $CONF_FILES_DIR/modprobe.conf $CD_ROOT/etc/
116 echo "installing our own inittab and init scripts"
117 cp -f $CONF_FILES_DIR/inittab $CD_ROOT/etc
118 init_scripts="pl_sysinit pl_hwinit pl_netinit pl_validateconf pl_boot"
119 for script in $init_scripts; do
120 cp -f $CONF_FILES_DIR/$script $CD_ROOT/etc/init.d/
121 chmod +x $CD_ROOT/etc/init.d/$script
124 echo "setup basic networking files"
125 cp -f $CONF_FILES_DIR/hosts $CD_ROOT/etc/
127 echo "setup default network conf file"
128 mkdir -p $CD_ROOT/usr/boot
129 cp -f $CONF_FILES_DIR/default-net.cnf $CD_ROOT/usr/boot
131 echo "copying isolinux configuration files"
132 cp -f $CONF_FILES_DIR/isolinux.cfg $CD_ROOT/usr/isolinux/
133 echo "$FULL_VERSION_STRING" > $CD_ROOT/usr/isolinux/message.txt
135 echo "making the isolinux initrd kernel command line match rd size"
136 let INITRD_SIZE_KB=$(($RAMDISK_SIZE * 1024))
137 sed -i "s#ramdisk_size=0#ramdisk_size=$INITRD_SIZE_KB#g" \
138 $CD_ROOT/usr/isolinux/isolinux.cfg
140 echo "building pcitable for hardware detection"
141 pci_map_file=`find $CD_ROOT/lib/modules/ -name modules.pcimap | head -1`
142 ./scripts/rewrite-pcitable.py $pci_map_file $CD_ROOT/etc/pl_pcitable
144 dd if=/dev/zero of=$INITRD bs=1M count=$RAMDISK_SIZE
145 mkfs.ext2 -F -m 0 -i $INITRD_BYTES_PER_INODE $INITRD
146 mkdir -p $INITRD_MOUNT
147 mount -o loop,rw $INITRD $INITRD_MOUNT
149 echo "copy all files except usr to ramdisk"
150 (cd $CD_ROOT && find . -path ./usr -prune -o -print | \
151 cpio -p -d -u $INITRD_MOUNT)
156 echo "compressing ramdisk"
164 mkisofs -o $ISO -R -allow-leading-dots -J -r -b isolinux/isolinux.bin \
165 -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
166 -V PlanetLab-3-0 $CD_ROOT/usr
171 cdrecord $CDRECORD_FLAGS -data $ISO
176 echo "removing built files"
184 if [ "$1" == "clean" ]; then
189 if [ "$1" == "burn" ]; then
194 if [ "$1" == "force" ]; then
198 # build base image via yum
201 # always build/rebuild initrd