- dynamically construct reference image on the target machine in a %post
[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 VROOT=$VROOTDIR/vserver-reference
39
40 # Pause vcached
41 service vcached stop
42
43 # Remove old installation first
44 if [ -d $VROOT ] ; then
45     if grep -q $VROOT/proc /proc/mounts ; then
46         umount $VROOT/proc
47     fi
48     if grep -q $VROOT/dev/pts /proc/mounts ; then
49         umount $VROOT/dev/pts
50     fi
51     chattr -R -i $VROOT
52     rm -rf $VROOT
53 fi
54
55 $PKGLIBDIR/install-pre.sh vserver-reference
56
57 # Mount /dev/pts in reference image
58 mkdir -p $VROOT/dev/pts
59 mount -t devpts none $VROOT/dev/pts
60
61 # Mount /proc in reference image
62 mkdir -p $VROOT/proc
63 mount -t proc none $VROOT/proc
64
65 # Prevent all locales from being installed in reference image
66 mkdir -p $VROOT/etc/rpm
67 cat > $VROOT/etc/rpm/macros <<EOF
68 %%_install_langs en_US:en
69 %%_excludedocs 1
70 %%__file_context_path /dev/null
71 EOF
72
73 # Zap some locks
74 TMP=`mktemp -d /tmp/%{name}.XXXXXX`
75 if [ -f /var/lock/rpm/transaction ] ; then
76     mv /var/lock/rpm/transaction $TMP
77 fi
78 if [ -f /var/run/yum.pid ] ; then
79     mv /var/run/yum.pid $TMP
80 fi
81
82 # Initialize RPM database in reference image
83 mkdir -p $VROOT/var/lib/rpm
84 rpm --root $VROOT --initdb
85
86 # Install RPMs in reference image
87 yum \
88 --sslcertdir=/mnt/cdrom/bootme/cacert \
89 --installroot=$VROOT \
90 -y groupinstall VServer
91
92 # Restore locks
93 if [ -f $TMP/transaction ] ; then
94     mv $TMP/transaction /var/lock/rpm
95 fi
96 if [ -f $TMP/yum.pid ] ; then
97     mv $TMP/yum.pid /var/run
98 fi
99 rmdir $TMP
100
101 # Copy configuration files from host to reference image
102 for file in /etc/hosts /etc/resolv.conf /etc/yum.conf ; do
103     if [ -f $file ] ; then
104         echo $file | cpio -p -d -u $VROOT
105     fi
106 done
107
108 # Clean up
109 umount $VROOT/proc
110 umount $VROOT/dev/pts
111
112 $PKGLIBDIR/install-post.sh vserver-reference
113
114 # Disable all services in reference image
115 chroot $VROOT /bin/sh -c "chkconfig --list | awk '{ print \$1 }' | xargs -i chkconfig {} off"
116
117 # Restart vcached
118 service vcached start
119
120 %files
121 %defattr(-,root,root)
122
123 %changelog
124 * Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-2.planetlab
125 - dynamically install reference image
126
127 * Tue Sep 14 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-1.planetlab
128 - initial build