modified to use common functions from build/build.common
[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.13 2006/08/21 20:45:23 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 . build.common
30
31 # Packages to install
32 packagelist=(
33 udev
34 dhclient
35 bash
36 coreutils
37 iputils
38 kernel
39 bzip2
40 diffutils
41 logrotate
42 passwd
43 rsh
44 rsync
45 sudo
46 tcpdump
47 telnet
48 traceroute
49 time
50 wget
51 yum
52 curl
53 gzip
54 python
55 tar
56 pciutils
57 kbd
58 authconfig
59 hdparm
60 lvm
61 lvm2
62 kexec-tools
63 gnupg
64 nano
65 parted
66 pyparted
67 openssh-server
68 openssh-clients
69 ncftp
70 dosfstools
71 dos2unix
72 bind-utils
73 sharutils
74 vconfig
75 )
76
77 # Unnecessary junk
78 junk=(
79 lib/obsolete
80 lib/tls
81 usr/share/cracklib
82 usr/share/emacs
83 usr/share/gnupg
84 usr/share/i18n
85 usr/share/locale
86 usr/share/terminfo
87 usr/share/zoneinfo
88 usr/sbin/build-locale-archive
89 usr/sbin/dbconverter-2
90 usr/sbin/sasl*
91 usr/sbin/tcpslice
92 usr/lib/perl*
93 usr/lib/locale
94 usr/lib/sasl*
95 usr/lib/gconv
96 usr/lib/tls
97 )
98
99 precious=(
100 usr/share/i18n/locales/en_US
101 usr/share/i18n/charmaps/UTF-8.gz
102 usr/share/locale/en
103 usr/share/terminfo/l/linux
104 usr/share/terminfo/v/vt100
105 usr/share/terminfo/x/xterm
106 usr/share/zoneinfo/UTC
107 usr/lib/locale/en_US.utf8
108 )
109
110 # Do not tolerate errors
111 set -e
112
113 # Root of the initramfs reference image
114 bootcd=$PWD/build/bootcd
115 install -d -m 755 $bootcd
116
117 # Write version number
118 rpmquery --specfile bootcd.spec --queryformat '%{VERSION}\n' | head -1 >build/version.txt
119
120 # Install base system
121 for package in "${packagelist[@]}" ; do
122     packages="$packages -p $package"
123 done
124
125 pl_setup_chroot $bootcd $packages
126
127 pushd $bootcd
128
129 echo "* Removing unnecessary junk"
130
131 # Save precious files
132 tar --ignore-failed-read -cpf precious.tar ${precious[*]}
133
134 # Remove unnecessary junk
135 rm -rf ${junk[*]}
136
137 # Restore precious files
138 tar -xpf precious.tar
139 rm -f precious.tar
140
141 popd
142
143 # Install ipnmac (for SuperMicro machines with IPMI)
144 echo "* Installing IPMI utilities"
145 install -D -m 755 ipnmac/ipnmac.x86 $bootcd/usr/sbin/ipnmac
146
147 # Install configuration files
148 echo "* Installing configuration files"
149 for file in fstab mtab modprobe.conf inittab hosts sysctl.conf ; do
150     install -D -m 644 conf_files/$file $bootcd/etc/$file
151 done
152
153 # Install initscripts
154 echo "* Installing initscripts"
155 for file in pl_sysinit pl_hwinit pl_netinit pl_validateconf pl_boot ; do
156     install -D -m 755 conf_files/$file $bootcd/etc/init.d/$file
157 done
158
159 # Install fallback node configuration file
160 echo "* Installing fallback node configuration file"
161 install -D -m 644 conf_files/default-net.cnf $bootcd/usr/boot/default-net.cnf
162
163 # Build pcitable for hardware detection
164 echo "* Building pcitable for hardware detection"
165 pci_map_file=$(find $bootcd/lib/modules/ -name modules.pcimap | head -1)
166 module_dep_file=$(find $bootcd/lib/modules/ -name modules.dep | head -1)
167 pci_table=$bootcd/usr/share/hwdata/pcitable
168 $srcdir/bootmanager/source/merge_hw_tables.py \
169     $module_dep_file $pci_map_file $pci_table $bootcd/etc/pl_pcitable
170
171 # Copy /etc/passwd out
172 install -D -m 644 $bootcd/etc/passwd build/passwd
173
174 # Root of the isofs
175 isofs=$PWD/build/isofs
176 install -d -m 755 $isofs
177
178 # Copy the kernel out
179 for kernel in $bootcd/boot/vmlinuz-* ; do
180     if [ -f $kernel ] ; then
181         install -D -m 644 $kernel $isofs/kernel
182     fi
183 done
184
185 # Don't need /boot anymore
186 rm -rf $bootcd/boot
187
188 # initramfs requires that /init be present
189 ln -sf /sbin/init $bootcd/init
190
191 # Pack the rest into a compressed archive
192 echo "* Compressing reference image"
193 (cd $bootcd && find . | cpio --quiet -c -o) | gzip -9 >$isofs/bootcd.img
194
195 # Build syslinux
196 echo "* Building syslinux"
197 CFLAGS="-Werror -Wno-unused -finline-limit=2000" make -C syslinux
198
199 # Install isolinux
200 echo "* Installing isolinux"
201 install -D -m 644 syslinux/isolinux.bin $isofs/isolinux.bin
202
203 exit 0