From 0d07a17653cfe4950880cf898beb23cbac18d6e4 Mon Sep 17 00:00:00 2001 From: Mark Huang <mlhuang@cs.princeton.edu> Date: Thu, 14 Oct 2004 18:25:05 +0000 Subject: [PATCH] - move functionality into /etc/init.d/vserver-reference, which runs once after installation (and maybe again if the RPM is ever updated, but the script is mostly idempotent). --- vserver-reference.init | 141 +++++++++++++++++++++++++++++++++++++++++ vserver-reference.spec | 136 +++------------------------------------ 2 files changed, 150 insertions(+), 127 deletions(-) create mode 100755 vserver-reference.init diff --git a/vserver-reference.init b/vserver-reference.init new file mode 100755 index 0000000..9b291d5 --- /dev/null +++ b/vserver-reference.init @@ -0,0 +1,141 @@ +#!/bin/bash +# +# vserver-reference Builds VServer reference +# +# Load before pl_conf, pl_nm, and vservers +# chkconfig: 3 70 80 +# description: Builds VServer reference image +# +# Mark Huang <mlhuang@cs.princeton.edu> +# Copyright (C) 2004 The Trustees of Princeton University +# +# $Id: vnet.init,v 1.8 2004/10/11 04:28:20 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 <<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 + +# Initialize RPM database in reference image +mkdir -p $VROOT/var/lib/rpm +rpm --root $VROOT --initdb + +# Update certificates +if [ -d /mnt/cdrom/bootme/cacert ] ; then + SSLCERTDIR="--sslcertdir /mnt/cdrom/bootme/cacert" + find /mnt/cdrom/bootme/cacert | cpio -p -d $VROOT >/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 diff --git a/vserver-reference.spec b/vserver-reference.spec index 86b188a..98fa230 100644 --- a/vserver-reference.spec +++ b/vserver-reference.spec @@ -29,141 +29,23 @@ as the installation base for new PlanetLab slivers. %install rm -rf $RPM_BUILD_ROOT +install -D -m 755 %{name}.init $RPM_BUILD_ROOT/%{_initrddir}/%{name} %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 -fi - -# Initialize RPM database in reference image -mkdir -p $VROOT/var/lib/rpm -rpm --root $VROOT --initdb - -# Install RPMs in reference image -yum \ ---sslcertdir=/mnt/cdrom/bootme/cacert \ ---installroot=$VROOT \ --y groupinstall VServer - -# Restore locks -if [ -f $TMP/transaction ] ; then - mv $TMP/transaction /var/lock/rpm -fi -if [ -f $TMP/yum.pid ] ; then - mv $TMP/yum.pid /var/run -fi -rmdir $TMP - -# 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 - 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 - -%postun -. /usr/lib/util-vserver/util-vserver-vars - -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 - %files %defattr(-,root,root) +%{_initrddir}/%{name} + +%post +chkconfig --add %{name} +chkconfig %{name} on %changelog +* Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-3.planetlab +- dynamically install reference image at init time + * Sun Oct 10 2004 Mark Huang <mlhuang@cs.princeton.edu> 3.0-2.planetlab - dynamically install reference image -- 2.47.0