ec48b45fff572a54425a7c245ca3b47a6ccd1339
[sliceimage.git] / vserver-reference.init
1 #!/bin/bash
2 #
3 # vserver-reference     Builds VServer reference
4 #
5 # Load before pl_conf, pl_nm, vcached, and vservers
6 # chkconfig: 3 60 80
7 # description: Builds VServer reference image
8 #
9 # Mark Huang <mlhuang@cs.princeton.edu>
10 # Copyright (C) 2004 The Trustees of Princeton University
11 #
12 # $Id: vserver-reference.init,v 1.1 2004/10/14 18:25:05 mlhuang Exp $
13 #
14
15 case "$1" in
16     start|restart|reload)
17         ;;
18     stop|status)
19         exit 0
20         ;;
21     *)
22         echo $"Usage: $0 {start|stop|restart|status}"
23         exit 1
24         ;;
25 esac
26
27 # Source function library.
28 . /etc/init.d/functions
29
30 # VServer definitions
31 . /usr/lib/util-vserver/util-vserver-vars
32
33 # Make /vservers
34 mkdir -p $VROOTDIR
35 chmod 000 $VROOTDIR
36 chattr +t $VROOTDIR
37
38 # Build image in /vservers/.vtmp
39 mkdir -p $VROOTDIR/.vtmp
40 VROOT=$(mktemp -d $VROOTDIR/.vtmp/vserver-reference.XXXXXX)
41
42 # Make /vservers/.vtmp/vserver-reference.XXXXXX
43 mkdir -p $VROOT
44 chattr -t $VROOT
45 chmod 755 $VROOT
46
47 # Clean up before exiting if anything goes wrong
48 set -e
49 echo -n $"Building VServer reference: "
50 trap "umount $VROOT/proc ; umount $VROOT/dev/pts ; chattr -R -i $VROOT ; rm -rf $VROOT ; failure ; echo ; exit 255" EXIT
51
52 MAKEDEV ()
53 {
54     rm -rf $VROOT/dev
55     mkdir -p $VROOT/dev
56     mknod -m 666 $VROOT/dev/null c 1 3
57     mknod -m 666 $VROOT/dev/zero c 1 5
58     mknod -m 666 $VROOT/dev/full c 1 7
59     mknod -m 644 $VROOT/dev/random c 1 8
60     mknod -m 644 $VROOT/dev/urandom c 1 9
61     mknod -m 666 $VROOT/dev/tty c 5 0
62     mknod -m 666 $VROOT/dev/ptmx c 5 2
63     touch $VROOT/dev/hdv1
64 }
65
66 # Initialize /dev in reference image
67 MAKEDEV
68
69 # Mount /dev/pts in reference image
70 mkdir -p $VROOT/dev/pts
71 mount -t devpts none $VROOT/dev/pts
72
73 # Mount /proc in reference image
74 mkdir -p $VROOT/proc
75 mount -t proc none $VROOT/proc
76
77 # Create a dummy /etc/fstab in reference image
78 mkdir -p $VROOT/etc
79 cat > $VROOT/etc/fstab <<EOF
80 # This fake fstab exists only to please df and linuxconf.
81 /dev/hdv1       /       ext2    defaults        1 1
82 EOF
83
84 # Prevent all locales from being installed in reference image
85 mkdir -p $VROOT/etc/rpm
86 cat > $VROOT/etc/rpm/macros <<EOF
87 %_install_langs en_US:en
88 %_excludedocs 1
89 %__file_context_path /dev/null
90 EOF
91
92 # Initialize RPM database in reference image
93 mkdir -p $VROOT/var/lib/rpm
94 rpm --root $VROOT --initdb
95
96 # Update certificates
97 if [ -d /mnt/cdrom/bootme/cacert ] ; then
98     SSLCERTDIR="--sslcertdir /mnt/cdrom/bootme/cacert"
99     find /mnt/cdrom/bootme/cacert | cpio -p -d $VROOT >/dev/null 2>&1
100 fi
101
102 # Install RPMs in reference image
103 yum $SSLCERTDIR --installroot=$VROOT -e 0 -d 0 -y groupinstall VServer >/dev/null 2>&1
104
105 # Clean up /dev in reference image
106 umount $VROOT/dev/pts
107 MAKEDEV
108
109 # Disable all services in reference image
110 chroot $VROOT /bin/sh -c "chkconfig --list | awk '{ print \$1 }' | xargs -i chkconfig {} off"
111
112 # Copy configuration files from host to reference image
113 for file in /etc/hosts /etc/resolv.conf /etc/yum.conf ; do
114     if [ -f $file ] ; then
115         echo $file | cpio -p -d -u $VROOT >/dev/null 2>&1
116     fi
117 done
118
119 # Clean up
120 umount $VROOT/proc
121
122 # Reset trap
123 trap - EXIT
124
125 # Swap them when complete
126 mv $VROOT $VROOTDIR
127 if [ -d $VROOTDIR/vserver-reference ] ; then
128     mv $VROOTDIR/vserver-reference $VROOT
129     # Let vcached clean it up later
130 fi
131 mv $VROOTDIR/$(basename $VROOT) $VROOTDIR/vserver-reference
132
133 # Disable again
134 chkconfig vserver-reference off
135
136 # Reset trap
137 trap - EXIT
138
139 success
140 echo
141 exit 0