X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vserver-reference.init;h=cb239ecc0230b1aa8c043b2db17be20b12b20e4e;hb=6d9349eb666d2e5da00787a8e11cb052acd9dc10;hp=ec48b45fff572a54425a7c245ca3b47a6ccd1339;hpb=4be3f2f1b2870a03c8f09cb261107ad1be7537c1;p=sliceimage.git diff --git a/vserver-reference.init b/vserver-reference.init index ec48b45..cb239ec 100755 --- a/vserver-reference.init +++ b/vserver-reference.init @@ -1,53 +1,20 @@ #!/bin/bash # -# vserver-reference Builds VServer reference -# -# Load before pl_conf, pl_nm, vcached, and vservers -# chkconfig: 3 60 80 -# description: Builds VServer reference image +# Builds VServer reference image. Requires the web and boot servers to +# be up, which complicates bootstrap. Alternatively, we could require +# the build server to host a local yum repository. # # Mark Huang -# Copyright (C) 2004 The Trustees of Princeton University +# Copyright (C) 2004-2005 The Trustees of Princeton University # -# $Id: vserver-reference.init,v 1.1 2004/10/14 18:25:05 mlhuang Exp $ +# $Id: vserver-reference.init,v 1.10 2005/09/01 17:17:14 mlhuang Exp $ # -case "$1" in - start|restart|reload) - ;; - stop|status) - exit 0 - ;; - *) - echo $"Usage: $0 {start|stop|restart|status}" - exit 1 - ;; -esac - -# Source function library. -. /etc/init.d/functions - -# VServer definitions -. /usr/lib/util-vserver/util-vserver-vars +YUM_CONF="http://www.planet-lab.org/PlanetLabConf/v3-yum.conf" # 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 -echo -n $"Building VServer reference: " -trap "umount $VROOT/proc ; umount $VROOT/dev/pts ; chattr -R -i $VROOT ; rm -rf $VROOT ; failure ; echo ; exit 255" EXIT +VROOT=$PWD/vservers/vserver-reference +install -d -m 755 $VROOT MAKEDEV () { @@ -60,7 +27,13 @@ MAKEDEV () 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 + # For bash command substitution + ln -nsf ../proc/self/fd /dev/fd + # For df and linuxconf touch $VROOT/dev/hdv1 + # For TUN/TAP + mkdir -p $VROOT/dev/net + mknod -m 600 $VROOT/dev/net/tun c 10 200 } # Initialize /dev in reference image @@ -74,12 +47,16 @@ mount -t devpts none $VROOT/dev/pts mkdir -p $VROOT/proc mount -t proc none $VROOT/proc +# Clean up before exiting if anything goes wrong +trap "umount $VROOT/proc ; umount $VROOT/dev/pts ; exit 255" ERR + # Create a dummy /etc/fstab in reference image mkdir -p $VROOT/etc cat > $VROOT/etc/fstab < $VROOT/etc/rpm/macros </dev/null 2>&1 +# Go, baby, go +yum -c $YUM_CONF --installroot=$VROOT -y groupinstall VServer + +# Freshen the RPM set with any just built. This does not help when a +# completely new PlanetLab package must be installed in the reference +# image. To work around this limitation, introduce the new package in +# one release, then include it in the VServer yumgroup in the next. +FRESHEN=$RPM_BUILD_DIR/../RPMS/*/*.rpm +if [ -n "$FRESHEN" ] ; then + rpm --root $VROOT --freshen --verbose $FRESHEN fi -# Install RPMs in reference image -yum $SSLCERTDIR --installroot=$VROOT -e 0 -d 0 -y groupinstall VServer >/dev/null 2>&1 +# Remove stale RPM locks +rm -f $VROOT/var/lib/rpm/__db* # Clean up /dev in reference image umount $VROOT/dev/pts MAKEDEV # Disable all services in reference image -chroot $VROOT /bin/sh -c "chkconfig --list | awk '{ print \$1 }' | xargs -i chkconfig {} off" - -# 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 >/dev/null 2>&1 - fi -done +/usr/sbin/chroot $VROOT /bin/sh -c "chkconfig --list | awk '{ print \$1 }' | xargs -i chkconfig {} off" # Clean up umount $VROOT/proc -# Reset trap -trap - EXIT - -# 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 - -# Disable again -chkconfig vserver-reference off - -# Reset trap -trap - EXIT - -success -echo exit 0