Fedora 7 does not pull in findutils via a dependency
[sliceimage.git] / build.sh
1 #!/bin/bash
2 #
3 # Builds VServer reference image
4 #
5 # Mark Huang <mlhuang@cs.princeton.edu>
6 # Copyright (C) 2004-2006 The Trustees of Princeton University
7 #
8 # $Id: build.sh,v 1.17 2007/08/13 18:02:33 faiyaza Exp $
9 #
10
11 PATH=/sbin:/bin:/usr/sbin:/usr/bin
12
13 # In both a normal CVS environment and a PlanetLab RPM
14 # build environment, all of our dependencies are checked out into
15 # directories at the same level as us.
16 if [ -d ../build ] ; then
17     PATH=$PATH:../build
18     srcdir=..
19 else
20     echo "Error: Could not find $(cd .. && pwd -P)/build/"
21     exit 1
22 fi
23
24 export PATH
25
26 # Release and architecture to install
27 releasever=4
28 basearch=i386
29
30 # Packages to install
31 packagelist=(
32 bash
33 coreutils
34 iputils
35 kernel-vserver
36 bzip2
37 crontabs
38 diffutils
39 logrotate
40 openssh-clients
41 passwd
42 rsh
43 rsync
44 sudo
45 tcpdump
46 telnet
47 traceroute
48 time
49 vixie-cron
50 wget
51 which
52 yum
53 curl
54 gzip
55 perl
56 python
57 tar
58 findutils
59 )
60
61 usage()
62 {
63     echo "Usage: build.sh [OPTION]..."
64     echo "      -r release      Fedora release number (default: $releasever)"
65     echo "      -a arch         Fedora architecture (default: $basearch)"
66     echo "      -h              This message"
67     exit 1
68 }
69
70 # Get options
71 while getopts "r:a:h" opt ; do
72     case $opt in
73         r)
74             releasever=$OPTARG
75             ;;
76         a)
77             basearch=$OPTARG
78             ;;
79         h|*)
80             usage
81             ;;
82     esac
83 done
84
85 # Do not tolerate errors
86 set -e
87
88 # Make /vservers
89 vroot=$PWD/vservers/.vref/default
90 install -d -m 755 $vroot
91
92 # Install default reference image
93 for package in "${packagelist[@]}" ; do
94     packages="$packages -p $package"
95 done
96 mkfedora -v -r $releasever -a $basearch -k $packages $vroot
97
98 # Clean /dev
99 rm -rf $vroot/dev
100 mkdir -p $vroot/dev
101 mknod -m 666 $vroot/dev/null c 1 3
102 mknod -m 666 $vroot/dev/zero c 1 5
103 mknod -m 666 $vroot/dev/full c 1 7
104 mknod -m 644 $vroot/dev/random c 1 8
105 mknod -m 644 $vroot/dev/urandom c 1 9
106 mknod -m 666 $vroot/dev/tty c 5 0
107 mknod -m 666 $vroot/dev/ptmx c 5 2
108 # For bash command substitution
109 ln -nsf ../proc/self/fd $vroot/dev/fd
110 # For df and linuxconf
111 touch $vroot/dev/hdv1
112 # For TUN/TAP
113 mkdir -p $vroot/dev/net
114 mknod -m 600 $vroot/dev/net/tun c 10 200
115 # For pseudo ttys
116 mkdir -p $vroot/dev/pts
117
118 # Disable all services in reference image
119 chroot $vroot sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
120
121 # This tells the Boot Manager that it is okay to update
122 # /etc/resolv.conf and /etc/hosts whenever the network configuration
123 # changes. Users are free to delete this file.
124 touch $vroot/etc/AUTO_UPDATE_NET_FILES
125
126 exit 0