- remove duplicate openssh-clients specification
[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.3 2006/05/15 21:13:58 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 pycurl
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 -k $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