#!/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 # # Mark Huang # Copyright (C) 2004 The Trustees of Princeton University # # $Id: vserver-reference.init,v 1.1 2004/10/14 18:25:05 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 # 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 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 < $VROOT/etc/rpm/macros </dev/null 2>&1 fi # Install RPMs in reference image yum $SSLCERTDIR --installroot=$VROOT -e 0 -d 0 -y groupinstall VServer >/dev/null 2>&1 # 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 # 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