- PL2437 fix: build new vserver-reference image in /vservers/.vtmp, then
[sliceimage.git] / vserver-reference.spec
1 %define name vserver-reference
2 %define version 3.0
3 %define release 2.planetlab%{?date:.%{date}}
4
5 Vendor: PlanetLab
6 Packager: PlanetLab Central <support@planet-lab.org>
7 Distribution: PlanetLab 3.0
8 URL: http://www.planet-lab.org
9
10 Summary: VServer reference image
11 Name: %{name}
12 Version: %{version}
13 Release: %{release}
14 Source0: %{name}-%{version}.tar.bz2
15 License: GPL
16 Group: Applications/System
17 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
18 BuildArchitectures: noarch
19 Requires: util-vserver, e2fsprogs, yum
20
21 %description
22 This package creates the virtual server (VServer) reference image used
23 as the installation base for new PlanetLab slivers.
24
25 %prep
26 %setup -q
27
28 %build
29
30 %install
31 rm -rf $RPM_BUILD_ROOT
32
33 %clean
34 rm -rf $RPM_BUILD_ROOT
35
36 %post
37 . /usr/lib/util-vserver/util-vserver-vars
38
39 # Make /vservers
40 mkdir -p $VROOTDIR
41 chmod 000 $VROOTDIR
42 chattr +t $VROOTDIR
43
44 # Build image in /vservers/.vtmp
45 mkdir -p $VROOTDIR/.vtmp
46 VROOT=$(mktemp -d $VROOTDIR/.vtmp/vserver-reference.XXXXXX)
47
48 # Make /vservers/.vtmp/vserver-reference.XXXXXX
49 mkdir -p $VROOT
50 chattr -t $VROOT
51 chmod 755 $VROOT
52
53 # Clean up before exiting if anything goes wrong
54 set -e
55 trap "umount $VROOT/proc ; umount $VROOT/dev/pts ; chattr -R -i $VROOT ; rm -rf $VROOT" EXIT
56
57 MAKEDEV ()
58 {
59     rm -rf $VROOT/dev
60     mkdir -p $VROOT/dev
61     mknod -m 666 $VROOT/dev/null c 1 3
62     mknod -m 666 $VROOT/dev/zero c 1 5
63     mknod -m 666 $VROOT/dev/full c 1 7
64     mknod -m 644 $VROOT/dev/random c 1 8
65     mknod -m 644 $VROOT/dev/urandom c 1 9
66     mknod -m 666 $VROOT/dev/tty c 5 0
67     mknod -m 666 $VROOT/dev/ptmx c 5 2
68     touch $VROOT/dev/hdv1
69 }
70
71 # Initialize /dev in reference image
72 MAKEDEV
73
74 # Mount /dev/pts in reference image
75 mkdir -p $VROOT/dev/pts
76 mount -t devpts none $VROOT/dev/pts
77
78 # Mount /proc in reference image
79 mkdir -p $VROOT/proc
80 mount -t proc none $VROOT/proc
81
82 # Create a dummy /etc/fstab in reference image
83 mkdir -p $VROOT/etc
84 cat > $VROOT/etc/fstab <<EOF
85 # This fake fstab exists only to please df and linuxconf.
86 /dev/hdv1       /       ext2    defaults        1 1
87 EOF
88
89 # Prevent all locales from being installed in reference image
90 mkdir -p $VROOT/etc/rpm
91 cat > $VROOT/etc/rpm/macros <<EOF
92 %%_install_langs en_US:en
93 %%_excludedocs 1
94 %%__file_context_path /dev/null
95 EOF
96
97 # Zap some locks
98 TMP=`mktemp -d /tmp/%{name}.XXXXXX`
99 if [ -f /var/lock/rpm/transaction ] ; then
100     mv /var/lock/rpm/transaction $TMP
101 fi
102 if [ -f /var/run/yum.pid ] ; then
103     mv /var/run/yum.pid $TMP
104 fi
105
106 # Initialize RPM database in reference image
107 mkdir -p $VROOT/var/lib/rpm
108 rpm --root $VROOT --initdb
109
110 # Install RPMs in reference image
111 yum \
112 --sslcertdir=/mnt/cdrom/bootme/cacert \
113 --installroot=$VROOT \
114 -y groupinstall VServer
115
116 # Restore locks
117 if [ -f $TMP/transaction ] ; then
118     mv $TMP/transaction /var/lock/rpm
119 fi
120 if [ -f $TMP/yum.pid ] ; then
121     mv $TMP/yum.pid /var/run
122 fi
123 rmdir $TMP
124
125 # Clean up /dev in reference image
126 umount $VROOT/dev/pts
127 MAKEDEV
128
129 # Disable all services in reference image
130 chroot $VROOT /bin/sh -c "chkconfig --list | awk '{ print \$1 }' | xargs -i chkconfig {} off"
131
132 # Copy configuration files from host to reference image
133 for file in /etc/hosts /etc/resolv.conf /etc/yum.conf ; do
134     if [ -f $file ] ; then
135         echo $file | cpio -p -d -u $VROOT
136     fi
137 done
138
139 # Clean up
140 umount $VROOT/proc
141
142 # Reset trap
143 trap - EXIT
144
145 # Swap them when complete
146 mv $VROOT $VROOTDIR
147 if [ -d $VROOTDIR/vserver-reference ] ; then
148     mv $VROOTDIR/vserver-reference $VROOT
149     # Let vcached clean it up later
150 fi
151 mv $VROOTDIR/$(basename $VROOT) $VROOTDIR/vserver-reference
152
153 %postun
154 . /usr/lib/util-vserver/util-vserver-vars
155
156 mkdir -p $VROOTDIR/.vtmp
157 TMP=$(mktemp -d $VROOTDIR/.vtmp/vserver-reference.XXXXXX)
158 if [ -d $VROOTDIR/vserver-reference ] ; then
159     mv $VROOTDIR/vserver-reference $TMP
160     # Let vcached clean it up later
161 fi
162
163 %files
164 %defattr(-,root,root)
165
166 %changelog
167 * Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-2.planetlab
168 - dynamically install reference image
169
170 * Tue Sep 14 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-1.planetlab
171 - initial build