to allow vclone to do the right thing wrt to linking unified files.
[vserver-reference.git] / vserver-reference.spec
index 86b188a..acd08c5 100644 (file)
@@ -1,11 +1,13 @@
-%define name vserver-reference
-%define version 3.0
-%define release 2.planetlab%{?date:.%{date}}
+#
+# $Id$
+#
+%define url $URL$
 
 
-Vendor: PlanetLab
-Packager: PlanetLab Central <support@planet-lab.org>
-Distribution: PlanetLab 3.0
-URL: http://www.planet-lab.org
+%define name vserver
+%define version 4.2
+%define taglevel 1
+
+%define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
 
 Summary: VServer reference image
 Name: %{name}
 
 Summary: VServer reference image
 Name: %{name}
@@ -15,155 +17,137 @@ Source0: %{name}-%{version}.tar.bz2
 License: GPL
 Group: Applications/System
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
 License: GPL
 Group: Applications/System
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
-BuildArchitectures: noarch
-Requires: util-vserver, e2fsprogs, yum
+
+Vendor: PlanetLab
+Packager: PlanetLab Central <support@planet-lab.org>
+Distribution: PlanetLab %{plrelease}
+URL: %(echo %{url} | cut -d ' ' -f 2)
+
+%define debug_package %{nil}
 
 %description
 
 %description
+This package does not really exist.
+
+%package reference
+Summary: VServer reference image
+Group: Applications/System
+AutoReqProv: no
+Requires: util-vserver, e2fsprogs, yum
+Requires(pre): /bin/sh, coreutils
+
+%description reference
 This package creates the virtual server (VServer) reference image used
 as the installation base for new PlanetLab slivers.
 
 This package creates the virtual server (VServer) reference image used
 as the installation base for new PlanetLab slivers.
 
+%package system-packages
+Summary: System slice packages
+Group: Applications/System
+Requires: vserver-reference >= %{version}-%{release}
+AutoReqProv: no
+
+%description system-packages
+This package installs the RPMS necessary to create system ("root
+resource") slices from the virtual server (VServer) reference image.
+
 %prep
 %setup -q
 
 %build
 %prep
 %setup -q
 
 %build
+pushd VserverReference
+./build.sh %{pldistro}
+popd
 
 %install
 rm -rf $RPM_BUILD_ROOT
 
 
 %install
 rm -rf $RPM_BUILD_ROOT
 
+pushd VserverReference
+install -D -m 755 vserver-reference.init $RPM_BUILD_ROOT/%{_initrddir}/vserver-reference
+install -D -m 644 vserver-reference.cron $RPM_BUILD_ROOT/%{_sysconfdir}/cron.d/vserver-reference
+install -D -m 644 vserver-reference.logrotate $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/vserver-reference
+find vservers | cpio -p -d -u $RPM_BUILD_ROOT/
+popd
+
 %clean
 rm -rf $RPM_BUILD_ROOT
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
-%post
-. /usr/lib/util-vserver/util-vserver-vars
-
-# Make /vservers
-mkdir -p $VROOTDIR
-chmod 000 $VROOTDIR
-chattr +t $VROOTDIR
-
-# Build image in /vservers/.vtmp
-mkdir -p $VROOTDIR/.vtmp
-VROOT=$(mktemp -d $VROOTDIR/.vtmp/vserver-reference.XXXXXX)
-
-# Make /vservers/.vtmp/vserver-reference.XXXXXX
-mkdir -p $VROOT
-chattr -t $VROOT
-chmod 755 $VROOT
-
-# Clean up before exiting if anything goes wrong
-set -e
-trap "umount $VROOT/proc ; umount $VROOT/dev/pts ; chattr -R -i $VROOT ; rm -rf $VROOT" EXIT
-
-MAKEDEV ()
-{
-    rm -rf $VROOT/dev
-    mkdir -p $VROOT/dev
-    mknod -m 666 $VROOT/dev/null c 1 3
-    mknod -m 666 $VROOT/dev/zero c 1 5
-    mknod -m 666 $VROOT/dev/full c 1 7
-    mknod -m 644 $VROOT/dev/random c 1 8
-    mknod -m 644 $VROOT/dev/urandom c 1 9
-    mknod -m 666 $VROOT/dev/tty c 5 0
-    mknod -m 666 $VROOT/dev/ptmx c 5 2
-    touch $VROOT/dev/hdv1
-}
-
-# Initialize /dev in reference image
-MAKEDEV
-
-# Mount /dev/pts in reference image
-mkdir -p $VROOT/dev/pts
-mount -t devpts none $VROOT/dev/pts
-
-# Mount /proc in reference image
-mkdir -p $VROOT/proc
-mount -t proc none $VROOT/proc
-
-# Create a dummy /etc/fstab in reference image
-mkdir -p $VROOT/etc
-cat > $VROOT/etc/fstab <<EOF
-# This fake fstab exists only to please df and linuxconf.
-/dev/hdv1      /       ext2    defaults        1 1
-EOF
-
-# Prevent all locales from being installed in reference image
-mkdir -p $VROOT/etc/rpm
-cat > $VROOT/etc/rpm/macros <<EOF
-%%_install_langs en_US:en
-%%_excludedocs 1
-%%__file_context_path /dev/null
-EOF
-
-# Zap some locks
-TMP=`mktemp -d /tmp/%{name}.XXXXXX`
-if [ -f /var/lock/rpm/transaction ] ; then
-    mv /var/lock/rpm/transaction $TMP
-fi
-if [ -f /var/run/yum.pid ] ; then
-    mv /var/run/yum.pid $TMP
+# If run under sudo
+if [ -n "$SUDO_USER" ] ; then
+    # Allow user to delete the build directory
+    chown -h -R $SUDO_USER .
+    # Some temporary cdroot files like /var/empty/sshd and
+    # /usr/bin/sudo get created with non-readable permissions.
+    find . -not -perm +0600 -exec chmod u+rw {} \;
+    # Allow user to delete the built RPM(s)
+    chown -h -R $SUDO_USER %{_rpmdir}/%{_arch}
 fi
 
 fi
 
-# Initialize RPM database in reference image
-mkdir -p $VROOT/var/lib/rpm
-rpm --root $VROOT --initdb
+%files reference
+%defattr(-,root,root)
+%{_initrddir}/vserver-reference
+%{_sysconfdir}/cron.d/vserver-reference
+%{_sysconfdir}/logrotate.d/vserver-reference
+/vservers/.vref/default
+
+%files system-packages
+%defattr(-,root,root)
+/vservers/.vstub
+
+%define vcached_pid /var/run/vcached.pid
 
 
-# Install RPMs in reference image
-yum \
---sslcertdir=/mnt/cdrom/bootme/cacert \
---installroot=$VROOT \
--y groupinstall VServer
+%pre reference
+# Stop vcached
+if [ -r %{vcached_pid} ] ; then
+    kill $(cat %{vcached_pid})
+fi
+echo $$ > %{vcached_pid}
 
 
-# Restore locks
-if [ -f $TMP/transaction ] ; then
-    mv $TMP/transaction /var/lock/rpm
+# vcached will clean up .vtmp later
+mkdir -p /vservers/.vtmp
+if [ -d /vservers/.vref ] ; then
+    mv /vservers/.vref /vservers/.vtmp/.vref.$RANDOM
 fi
 fi
-if [ -f $TMP/yum.pid ] ; then
-    mv $TMP/yum.pid /var/run
+if [ -d /vservers/.vcache ] ; then
+    mv /vservers/.vcache /vservers/.vtmp/.vcache.$RANDOM
 fi
 fi
-rmdir $TMP
 
 
-# Clean up /dev in reference image
-umount $VROOT/dev/pts
-MAKEDEV
+# Allow vcached to run again
+rm -f %{vcached_pid}
 
 
-# Disable all services in reference image
-chroot $VROOT /bin/sh -c "chkconfig --list | awk '{ print \$1 }' | xargs -i chkconfig {} off"
+%post reference
+chkconfig --add vserver-reference
+chkconfig vserver-reference on
+[ "$PL_BOOTCD" = "1" ] || service vserver-reference start
 
 
-# Copy configuration files from host to reference image
-for file in /etc/hosts /etc/resolv.conf /etc/yum.conf ; do
-    if [ -f $file ] ; then
-       echo $file | cpio -p -d -u $VROOT
-    fi
-done
+# Randomize daily run time
+M=$((60 * $RANDOM / 32768))
+H=$((24 * $RANDOM / 32768))
+sed -i -e "s/@M@/$M/" -e "s/@H@/$H/" %{_sysconfdir}/cron.d/vserver-reference
 
 
-# Clean up
-umount $VROOT/proc
+%changelog
+* Thu Jan 31 2008 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - vserver-4.2-0 vserver-4.2-1
+- more careful scan of the vserver-*.pkgs image specifications
 
 
-# Reset trap
-trap - EXIT
+* Tue Sep  1 2005 Mark Huang <mlhuang@cs.princeton.edu> 3.1-1.planetlab
+- Pre-package vserver-reference instead of building it on nodes
 
 
-# Swap them when complete
-mv $VROOT $VROOTDIR
-if [ -d $VROOTDIR/vserver-reference ] ; then
-    mv $VROOTDIR/vserver-reference $VROOT
-    # Let vcached clean it up later
-fi
-mv $VROOTDIR/$(basename $VROOT) $VROOTDIR/vserver-reference
+* Tue Nov 30 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-5.planetlab
+- PL3118 and PL3131 fix: set barrier bit on /vservers instead of old
+  immulink bit. Do not reset the immutable bit on the new
+  vserver-reference directory when deleting it after an error.
 
 
-%postun
-. /usr/lib/util-vserver/util-vserver-vars
+* Mon Nov 15 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-4.planetlab
+- bump release to install Fedora Core 2 updates as of Tue Nov  9 2004
+- PL3017 fix: rebuild vserver-reference image in case it was built
+  with i386 glibc
 
 
-mkdir -p $VROOTDIR/.vtmp
-TMP=$(mktemp -d $VROOTDIR/.vtmp/vserver-reference.XXXXXX)
-if [ -d $VROOTDIR/vserver-reference ] ; then
-    mv $VROOTDIR/vserver-reference $TMP
-    # Let vcached clean it up later
-fi
+* Mon Nov 15 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-4.planetlab
+- bump release to install Fedora Core 2 updates as of Tue Nov  9 2004
+- PL3017 fix: rebuild vserver-reference image in case it was built
+  with i386 glibc
 
 
-%files
-%defattr(-,root,root)
+* Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-3.planetlab
+- dynamically install reference image at init time
 
 
-%changelog
 * Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-2.planetlab
 - dynamically install reference image
 
 * Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-2.planetlab
 - dynamically install reference image