50a5f5c2921958431fc3070872841dd80d9af2c3
[util-vserver.git] / util-vserver / scripts / vrpm-preload
1 #! /bin/bash -x
2
3 : ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
4 test -e "$UTIL_VSERVER_VARS" || {
5     echo "Can not find util-vserver installation; aborting..."
6     exit 1
7 }
8 . "$UTIL_VSERVER_VARS"
9
10 lib=$_RPM_FAKE_SO
11
12 function getSyscallParams
13 {
14     set -- `grep '^__NR_new_s_context:' /proc/self/status`
15     scall_nr=$2
16     test "$3" && scall_rev=${3##rev}
17 }
18
19 need_cfg=
20 case "$CUR_VSERVER" in
21     /*) vdir=$CUR_VSERVER;;
22     *)  vdir=$CONFDIR/$CUR_VSERVER/vdir
23         need_cfg=1;;
24 esac
25
26 test "$CUR_VSERVER" -a -d "$vdir" || {
27     echo "No or invalid vserver-name given"
28     exit 1
29 }
30
31 ctxfile=/var/run/vservers/${CUR_VSERVER}.ctx
32 if test -f "$ctxfile"; then
33     . "$ctxfile"
34 else
35     S_CONTEXT=
36 fi
37
38 for bin in `which rpm` /bin/rpm /usr/lib/rpm/rpmi ""; do
39     ldd "$bin" &>/dev/null && break
40 done
41
42 test "$bin" || {
43     echo "No dynamically linked rpm binary found; exiting..."
44     exit 1
45 }
46
47
48 getSyscallParams
49
50 RPM_FAKE_S_CONTEXT_REV=$scall_rev \
51 RPM_FAKE_S_CONTEXT_NR=$scall_nr \
52 RPM_FAKE_CTX=$S_CONTEXT \
53 RPM_FAKE_CAP=$[ ~0x3404040f ] \
54 LD_PRELOAD=$lib${LD_PRELOAD:+:$LD_PRELOAD} \
55 exec $bin "$@"