Get rid of the context on vuserdel.
[util-vserver-pl.git] / scripts / vcached
1 #!/bin/bash
2 #
3 # vcached: VServer cache allocator
4 #
5 # Description: A script that preallocates vservers and stores them in
6 # a cache.  Preallocated vservers from the cache may be then used to
7 # instantiate real vservers. Requires that /var/run/vcached.pid does
8 # not exist on startup. Should run periodically as a cron job.
9 #
10 # Based on work by:
11
12 # Brent Chun - bnc@intel-research.net
13 # Tristan Koo - tristan.koo@intel-research.net
14 # William Wung - wungism@uclink.berkeley.edu
15 #
16 # Mark Huang <mlhuang@cs.princeton.edu>
17 # Copyright (c) 2004-2005 The Trustees of Princeton University
18 #
19 # $Id$
20 #
21
22 PATH=/sbin:/usr/sbin:$PATH
23
24 # number of images to keep cached
25 slots=32
26
27 # PID file
28 pidfile=/var/run/vcached.pid
29
30 # log file
31 logfile=/var/log/vcached.log
32
33 # debug
34 debug=0
35
36 usage()
37 {
38     echo "usage: vcached [OPTION...]"
39     echo "      -s [slots]      number of images to keep cached"
40     echo "      -p [pidfile]    PID file"
41     echo "      -l [logfile]    log file"
42     echo "      -d              debug"
43     exit 1
44 }
45
46 # parse options
47 while getopts 's:p:l:dh' OPT ; do
48     case "$OPT" in
49         s) slots=$OPTARG ;;
50         p) pidfile=$OPTARG ;;
51         l) logfile=$OPTARG ;;
52         d) debug=1 ;;
53         h|*) usage ;;
54     esac
55 done
56
57 # append output to log file
58 exec 1>>$logfile
59 exec 2>>$logfile
60
61 # check if we are already running
62 if [ -f $pidfile ] && kill -0 `cat $pidfile` >/dev/null 2>&1 ; then
63     echo "vcached(`cat $pidfile`) already running"
64     exit 1
65 fi
66 echo $$ > $pidfile
67
68 # clean up lock file before exiting
69 trap "rm -f $pidfile" EXIT
70
71 : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
72 test -e "$UTIL_VSERVER_VARS" || {
73     echo "Can not find util-vserver installation; aborting..."
74     exit 1
75 }
76 . "$UTIL_VSERVER_VARS"
77
78 # make sure barrier bit is set on /vservers to prevent chroot() escapes
79 setattr --barrier $__DEFAULT_VSERVERDIR
80
81 # take out the trash
82 #rm -rf "$__DEFAULT_VSERVERDIR/.vtmp"
83
84 mkdir -p "$__DEFAULT_VSERVERDIR/.vcache"
85 mkdir -p "$__DEFAULT_VSERVERDIR/.vtmp"
86
87 [ $debug -ne 0 ] && echo "$(date) Checking the cache"
88 for i in $(seq 0 $(($slots - 1))) ; do
89     if [ ! -d "$__DEFAULT_VSERVERDIR/.vcache/v$i" ] ; then
90         echo "$(date) Caching v$i"
91         # build image in .vtmp
92         TMP=$(mktemp -d "$__DEFAULT_VSERVERDIR/.vtmp/v$i.XXXXXX")
93         "$_VCLONE" "$__DEFAULT_VSERVERDIR/.vref/default/" "$TMP"/
94         RETVAL=$?
95         # move it to .vcache when complete
96         if [ $RETVAL -eq 0 ] ; then
97             mv "$TMP" "$__DEFAULT_VSERVERDIR/.vcache/v$i"
98             echo "$(date) v$i ready"
99         else
100             echo "$(date) Error $RETVAL building v$i"
101             rm -rf "$TMP"
102         fi
103     fi
104 done
105
106 exit 0