From bcd489967e8f3670fb1e0d13bbedd95643c340ea Mon Sep 17 00:00:00 2001 From: Mark Huang Date: Wed, 13 Oct 2004 04:53:07 +0000 Subject: [PATCH] - PL2437 fix: build new vserver-reference image in /vservers/.vtmp, then swap with /vservers/vserver-reference only when done. Bail and clean up on any error. --- vserver-reference.spec | 89 +++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 23 deletions(-) diff --git a/vserver-reference.spec b/vserver-reference.spec index decb529..86b188a 100644 --- a/vserver-reference.spec +++ b/vserver-reference.spec @@ -35,24 +35,41 @@ rm -rf $RPM_BUILD_ROOT %post . /usr/lib/util-vserver/util-vserver-vars -VROOT=$VROOTDIR/vserver-reference -# Pause vcached -service vcached stop - -# Remove old installation first -if [ -d $VROOT ] ; then - if grep -q $VROOT/proc /proc/mounts ; then - umount $VROOT/proc - fi - if grep -q $VROOT/dev/pts /proc/mounts ; then - umount $VROOT/dev/pts - fi - chattr -R -i $VROOT - rm -rf $VROOT -fi - -$PKGLIBDIR/install-pre.sh vserver-reference +# 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 @@ -62,6 +79,13 @@ mount -t devpts none $VROOT/dev/pts 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 < $VROOT/etc/rpm/macros <