- remove pycurl from bootcd
[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: prep.sh,v 1.7 2006/05/18 22:30:22 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=4
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 passwd
45 rsh
46 rsync
47 sudo
48 tcpdump
49 telnet
50 traceroute
51 time
52 wget
53 yum
54 curl
55 gzip
56 python
57 tar
58 pciutils
59 kbd
60 authconfig
61 hdparm
62 lvm
63 lvm2
64 kexec-tools
65 gnupg
66 nano
67 parted
68 pyparted
69 openssh-server
70 openssh-clients
71 ncftp
72 dosfstools
73 dos2unix
74 bind-utils
75 sharutils
76 )
77
78 # Unnecessary junk
79 junk=(
80 lib/obsolete
81 lib/tls
82 usr/share/cracklib
83 usr/share/emacs
84 usr/share/gnupg
85 usr/share/i18n
86 usr/share/locale
87 usr/share/terminfo
88 usr/share/zoneinfo
89 usr/sbin/build-locale-archive
90 usr/sbin/dbconverter-2
91 usr/sbin/sasl*
92 usr/sbin/tcpslice
93 usr/lib/perl*
94 usr/lib/locale
95 usr/lib/sasl*
96 )
97
98 precious=(
99 usr/share/i18n/locales/en_US
100 usr/share/i18n/charmaps/UTF-8.gz
101 usr/share/locale/en
102 usr/share/terminfo/l/linux
103 usr/share/terminfo/v/vt100
104 usr/share/terminfo/x/xterm
105 usr/share/zoneinfo/UTC
106 usr/lib/locale/en_US.utf8
107 )
108
109 usage()
110 {
111     echo "Usage: prep.sh [OPTION]..."
112     echo "      -r release      Fedora release number (default: $releasever)"
113     echo "      -a arch         Fedora architecture (default: $basearch)"
114     echo "      -h              This message"
115     exit 1
116 }
117
118 # Get options
119 while getopts "r:a:h" opt ; do
120     case $opt in
121         r)
122             releasever=$OPTARG
123             ;;
124         a)
125             basearch=$OPTARG
126             ;;
127         h|*)
128             usage
129             ;;
130     esac
131 done
132
133 # Do not tolerate errors
134 set -e
135
136 # Root of the initramfs reference image
137 bootcd=$PWD/build/bootcd
138 install -d -m 755 $bootcd
139
140 # Write version number
141 rpmquery --specfile bootcd.spec --queryformat '%{VERSION}\n' | head -1 >build/version.txt
142
143 # Install base system
144 for package in "${packagelist[@]}" ; do
145     packages="$packages -p $package"
146 done
147 mkfedora -v -r $releasever -a $basearch -k $packages $bootcd
148
149 pushd $bootcd
150
151 echo "* Removing unnecessary junk"
152
153 # Save precious files
154 tar --ignore-failed-read -cpf precious.tar ${precious[*]}
155
156 # Remove unnecessary junk
157 rm -rf ${junk[*]}
158
159 # Restore precious files
160 tar -xpf precious.tar
161 rm -f precious.tar
162
163 popd
164
165 # Disable all services in reference image
166 chroot $bootcd sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
167
168 # Install configuration files
169 echo "* Installing configuration files"
170 for file in fstab mtab modprobe.conf inittab hosts sysctl.conf ; do
171     install -D -m 644 conf_files/$file $bootcd/etc/$file
172 done
173
174 # Install initscripts
175 echo "* Installing initscripts"
176 for file in pl_sysinit pl_hwinit pl_netinit pl_validateconf pl_boot ; do
177     install -D -m 755 conf_files/$file $bootcd/etc/init.d/$file
178 done
179
180 # Install fallback node configuration file
181 echo "* Installing fallback node configuration file"
182 install -D -m 644 conf_files/default-net.cnf $bootcd/usr/boot/default-net.cnf
183
184 # Build pcitable for hardware detection
185 echo "* Building pcitable for hardware detection"
186 pci_map_file=$(find $bootcd/lib/modules/ -name modules.pcimap | head -1)
187 module_dep_file=$(find $bootcd/lib/modules/ -name modules.dep | head -1)
188 pci_table=$bootcd/usr/share/hwdata/pcitable
189 $srcdir/bootmanager/source/merge_hw_tables.py \
190     $module_dep_file $pci_map_file $pci_table $bootcd/etc/pl_pcitable
191
192 # Copy /etc/passwd out
193 install -D -m 644 $bootcd/etc/passwd build/passwd
194
195 # Root of the isofs
196 isofs=$PWD/build/isofs
197 install -d -m 755 $isofs
198
199 # Copy the kernel out
200 for kernel in $bootcd/boot/vmlinuz-* ; do
201     if [ -f $kernel ] ; then
202         install -D -m 644 $kernel $isofs/kernel
203     fi
204 done
205
206 # initramfs requires that /init be present
207 ln -sf /sbin/init $bootcd/init
208
209 # Pack the rest into a compressed archive
210 echo "* Compressing reference image"
211 (cd $bootcd && find . | cpio --quiet -c -o) | gzip -9 >$isofs/bootcd.img
212
213 # Build syslinux
214 echo "* Building syslinux"
215 CFLAGS="-Werror -Wno-unused -finline-limit=2000" make -C syslinux
216
217 # Install isolinux
218 echo "* Installing isolinux"
219 install -D -m 644 syslinux/isolinux.bin $isofs/isolinux.bin
220
221 exit 0