- move most of the old build.sh script here. This script builds the bulk
[bootcd.git] / prep.sh
1 #!/bin/bash
2 #
3 # Builds the BootCD reference image, the first of two
4 # initramfs cpio archives that are concatenated together by
5 # isolinux/syslinux to form a custom BootCD.
6 #
7 # Aaron Klingaman <alk@absarokasoft.com>
8 # Mark Huang <mlhuang@cs.princeton.edu>
9 # Copyright (C) 2004-2006 The Trustees of Princeton University
10 #
11 # $Id: build.sh,v 1.5 2006/03/29 17:08:45 mlhuang Exp $
12 #
13
14 PATH=/sbin:/bin:/usr/sbin:/usr/bin
15
16 # In both a normal CVS environment and a PlanetLab RPM
17 # build environment, all of our dependencies are checked out into
18 # directories at the same level as us.
19 if [ -d ../build ] ; then
20     PATH=$PATH:../build
21     srcdir=..
22 else
23     echo "Error: Could not find sources in either . or .."
24     exit 1
25 fi
26
27 export PATH
28
29 # Release and architecture to install
30 releasever=2
31 basearch=i386
32
33 # Packages to install
34 packagelist=(
35 dev
36 dhclient
37 bash
38 coreutils
39 iputils
40 kernel
41 bzip2
42 diffutils
43 logrotate
44 openssh-clients
45 passwd
46 rsh
47 rsync
48 sudo
49 tcpdump
50 telnet
51 traceroute
52 time
53 wget
54 yum
55 curl
56 gzip
57 python
58 tar
59 pciutils
60 kbd
61 authconfig
62 hdparm
63 lvm
64 lvm2
65 kexec-tools
66 gnupg
67 nano
68 parted
69 pyparted
70 openssh-server
71 openssh-clients
72 ncftp
73 dosfstools
74 dos2unix
75 bind-utils
76 sharutils
77 )
78
79 usage()
80 {
81     echo "Usage: prep.sh [OPTION]..."
82     echo "      -r release      Fedora release number (default: $releasever)"
83     echo "      -a arch         Fedora architecture (default: $basearch)"
84     echo "      -h              This message"
85     exit 1
86 }
87
88 # Get options
89 while getopts "r:a:h" opt ; do
90     case $opt in
91         r)
92             releasever=$OPTARG
93             ;;
94         a)
95             basearch=$OPTARG
96             ;;
97         h|*)
98             usage
99             ;;
100     esac
101 done
102
103 # Do not tolerate errors
104 set -e
105
106 # Root of the initramfs reference image
107 bootcd=$PWD/build/bootcd
108 install -d -m 755 $bootcd
109
110 # Write version number
111 rpmquery --specfile bootcd.spec --queryformat '%{VERSION}\n' | head -1 >build/version.txt
112
113 # Install base system
114 for package in "${packagelist[@]}" ; do
115     packages="$packages -p $package"
116 done
117 mkfedora -v -r $releasever -a $basearch $packages $bootcd
118
119 # Disable all services in reference image
120 chroot $bootcd sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
121
122 # Install configuration files
123 echo "* Installing configuration files"
124 for file in fstab mtab modprobe.conf inittab hosts sysctl.conf ; do
125     install -D -m 644 conf_files/$file $bootcd/etc/$file
126 done
127
128 # Install initscripts
129 echo "* Installing initscripts"
130 for file in pl_sysinit pl_hwinit pl_netinit pl_validateconf pl_boot ; do
131     install -D -m 755 conf_files/$file $bootcd/etc/init.d/$file
132 done
133
134 # Install fallback node configuration file
135 echo "* Installing fallback node configuration file"
136 install -D -m 644 conf_files/default-net.cnf $bootcd/usr/boot/default-net.cnf
137
138 # Build pcitable for hardware detection
139 echo "* Building pcitable for hardware detection"
140 pci_map_file=$(find $bootcd/lib/modules/ -name modules.pcimap | head -1)
141 module_dep_file=$(find $bootcd/lib/modules/ -name modules.dep | head -1)
142 pci_table=$bootcd/usr/share/hwdata/pcitable
143 $srcdir/bootmanager/source/merge_hw_tables.py \
144     $module_dep_file $pci_map_file $pci_table $bootcd/etc/pl_pcitable
145
146 # Copy /etc/passwd out
147 install -D -m 644 $bootcd/etc/passwd build/passwd
148
149 # Root of the isofs
150 isofs=$PWD/build/isofs
151 install -d -m 755 $isofs
152
153 # Copy the kernel out
154 for kernel in $bootcd/boot/vmlinuz-* ; do
155     if [ -f $kernel ] ; then
156         install -D -m 644 $kernel $isofs/kernel
157     fi
158 done
159
160 # initramfs requires that /init be present
161 ln -sf /sbin/init $bootcd/init
162
163 # Pack the rest into a compressed archive
164 echo "* Compressing reference image"
165 (cd $bootcd && find . | cpio --quiet -c -o) | gzip -9 >$isofs/bootcd.img
166
167 # Build syslinux
168 echo "* Building syslinux"
169 CFLAGS="-Werror -Wno-unused -finline-limit=2000" make -C syslinux
170
171 # Install isolinux
172 echo "* Installing isolinux"
173 install -D -m 644 syslinux/isolinux.bin $isofs/isolinux.bin
174
175 exit 0