5 BOOTCD_VERSION="3.0-beta0.3"
6 FULL_VERSION_STRING="PlanetLab BootCD $BOOTCD_VERSION"
8 # which boot server to contact
9 BOOTSERVER='boot.planet-lab.org'
11 # and on which port (protocol will be https)
14 # finally, what path to request from the server
15 BOOTSERVER_PATH='boot/'
17 SYSLINUX_SRC=sources/syslinux-2.11.tar.bz2
22 ROOT_PASSWD='$1$IdEn2srw$/TfrjZSPUC1xP244YCuIi0'
24 BOOTCD_YUM_GROUP=BootCD
26 CDRECORD_FLAGS="-v -dao"
28 CONF_FILES_DIR=conf_files/
30 # location of the uncompressed ramdisk image
31 INITRD=$CD_ROOT/usr/isolinux/initrd
33 # temporary mount point for rd
36 # size of the ram disk in MB
39 # the bytes per inode ratio (the -i value in mkfs.ext2) for the ramdisk
40 INITRD_BYTES_PER_INODE=1024
43 function build_cdroot()
45 if [ -f $CD_ROOT/.built ]; then
46 echo "cd root already built, skipping"
52 mkdir -p $CD_ROOT/dev/pts
53 mkdir -p $CD_ROOT/proc
56 echo "copy fstab and mtab"
57 cp -f $CONF_FILES_DIR/fstab $CD_ROOT/etc/
58 cp -f $CONF_FILES_DIR/mtab $CD_ROOT/etc/
60 echo "setup rpm to install only en_US locale and no docs"
61 mkdir -p $CD_ROOT/etc/rpm
62 cp -f $CONF_FILES_DIR/macros $CD_ROOT/etc/rpm
64 echo "initialize rpm db"
65 mkdir -p $CD_ROOT/var/lib/rpm
66 rpm --root $CD_ROOT --initdb
68 echo "install boot cd base rpms"
69 yum -c yum.conf --installroot=$CD_ROOT -y groupinstall $BOOTCD_YUM_GROUP
71 echo "removing unneccessary build files"
72 (cd $CD_ROOT/lib/modules && \
73 find ./ -type d -name build -maxdepth 2 -exec rm -rf {} \;)
75 echo "setting up non-ssh authentication"
76 mkdir -p $CD_ROOT/etc/samba
77 chroot $CD_ROOT /usr/sbin/authconfig --nostart --kickstart \
78 --enablemd5 --enableshadow
80 echo "setting root password"
81 sed -i "s#root::#root:$ROOT_PASSWD:#g" $CD_ROOT/etc/shadow
83 echo "relocate some large directories out of the root system"
84 # get /var/lib/rpm out, its 12mb. create in its place a
85 # symbolic link to /usr/relocated/var/lib/rpm
86 mkdir -p $CD_ROOT/usr/relocated/var/lib/
87 mv $CD_ROOT/var/lib/rpm $CD_ROOT/usr/relocated/var/lib/
88 (cd $CD_ROOT/var/lib && ln -s ../../usr/relocated/var/lib/rpm rpm)
91 mkdir -p $CD_ROOT/usr/relocated/lib
92 mv $CD_ROOT/lib/tls $CD_ROOT/usr/relocated/lib/
93 (cd $CD_ROOT/lib && ln -s ../usr/relocated/lib/tls tls)
95 echo "extracting syslinux, copying isolinux files to cd"
97 mkdir -p $CD_ROOT/usr/isolinux/
98 tar -C syslinux -xjvf $SYSLINUX_SRC
99 find syslinux -name isolinux.bin -exec cp -f {} $CD_ROOT/usr/isolinux/ \;
101 echo "moving kernel to isolinux directory"
102 KERNEL=$CD_ROOT/boot/vmlinuz-*
103 mv -f $KERNEL $CD_ROOT/usr/isolinux/kernel
105 echo "creating version files"
106 echo "$FULL_VERSION_STRING" > $CD_ROOT/usr/isolinux/pl_version
107 echo "$FULL_VERSION_STRING" > $CD_ROOT/pl_version
109 touch $CD_ROOT/.built
112 function build_initrd()
114 echo "building initrd"
118 echo "copy fstab and mtab"
119 cp -f $CONF_FILES_DIR/fstab $CD_ROOT/etc/
120 cp -f $CONF_FILES_DIR/mtab $CD_ROOT/etc/
122 echo "installing generic modprobe.conf"
123 cp -f $CONF_FILES_DIR/modprobe.conf $CD_ROOT/etc/
125 echo "installing our own inittab and init scripts"
126 cp -f $CONF_FILES_DIR/inittab $CD_ROOT/etc
127 init_scripts="pl_sysinit pl_hwinit pl_netinit pl_validateconf pl_boot"
128 for script in $init_scripts; do
129 cp -f $CONF_FILES_DIR/$script $CD_ROOT/etc/init.d/
130 chmod +x $CD_ROOT/etc/init.d/$script
133 echo "setup basic networking files"
134 cp -f $CONF_FILES_DIR/hosts $CD_ROOT/etc/
136 echo "copying sysctl.conf (fix tcp window scaling and broken routers)"
137 cp -f $CONF_FILES_DIR/sysctl.conf $CD_ROOT/etc/
139 echo "setup default network conf file"
140 mkdir -p $CD_ROOT/usr/boot
141 cp -f $CONF_FILES_DIR/default-net.cnf $CD_ROOT/usr/boot/
143 echo "setup boot server configuration"
144 cp -f $CONF_FILES_DIR/cacert.pem $CD_ROOT/usr/boot/
145 cp -f $CONF_FILES_DIR/pubring.gpg $CD_ROOT/usr/boot/
146 echo "$BOOTSERVER" > $CD_ROOT/usr/boot/boot_server
147 echo "$BOOTSERVER_PORT" > $CD_ROOT/usr/boot/boot_server_port
148 echo "$BOOTSERVER_PATH" > $CD_ROOT/usr/boot/boot_server_path
150 echo "copying old boot cd directory bootme (TEMPORARY)"
151 cp -r bootme_old $CD_ROOT/usr/bootme
153 echo "forcing lvm to make lvm1 partitions (TEMPORARY)"
154 cp -f $CONF_FILES_DIR/lvm.conf $CD_ROOT/etc/lvm/
156 echo "copying isolinux configuration files"
157 cp -f $CONF_FILES_DIR/isolinux.cfg $CD_ROOT/usr/isolinux/
158 echo "$FULL_VERSION_STRING" > $CD_ROOT/usr/isolinux/message.txt
160 echo "writing /etc/issue"
161 echo "$FULL_VERSION_STRING" > $CD_ROOT/etc/issue
162 echo "Kernel \r on an \m" >> $CD_ROOT/etc/issue
163 echo "" >> $CD_ROOT/etc/issue
164 echo "" >> $CD_ROOT/etc/issue
166 echo "making the isolinux initrd kernel command line match rd size"
167 let INITRD_SIZE_KB=$(($RAMDISK_SIZE * 1024))
168 sed -i "s#ramdisk_size=0#ramdisk_size=$INITRD_SIZE_KB#g" \
169 $CD_ROOT/usr/isolinux/isolinux.cfg
171 echo "building pcitable for hardware detection"
172 pci_map_file=`find $CD_ROOT/lib/modules/ -name modules.pcimap | head -1`
173 module_dep_file=`find $CD_ROOT/lib/modules/ -name modules.dep | head -1`
174 pci_table=$CD_ROOT/usr/share/hwdata/pcitable
175 ./scripts/rewrite-pcitable.py $module_dep_file $pci_map_file $pci_table \
176 $CD_ROOT/etc/pl_pcitable
178 dd if=/dev/zero of=$INITRD bs=1M count=$RAMDISK_SIZE
179 mkfs.ext2 -F -m 0 -i $INITRD_BYTES_PER_INODE $INITRD
180 mkdir -p $INITRD_MOUNT
181 mount -o loop,rw $INITRD $INITRD_MOUNT
183 echo "copy all files except usr to ramdisk"
186 find . -path ./usr -prune -o -print | cpio -p -d -u $INITRD_MOUNT
192 echo "compressing ramdisk"
200 mkisofs -o $ISO -R -allow-leading-dots -J -r -b isolinux/isolinux.bin \
201 -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
202 -V PlanetLab-3-0 $CD_ROOT/usr
207 cdrecord $CDRECORD_FLAGS -data $ISO
212 echo "removing built files"
220 if [ "$1" == "clean" ]; then
225 if [ "$1" == "burn" ]; then
230 if [ "$1" == "force" ]; then
234 # build base image via yum
237 # always build/rebuild initrd