X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fvrpm-preload;h=c82978c22eba4766f22ee65f06e0d7b34be44a36;hb=319929791248f823537ac5fb2fe10a01b5b820b9;hp=c5ef7d8465f37df89a368fb970b15fea11a08f66;hpb=c0c44ae3fb76883af9ae9ed18de566e5c0389eac;p=util-vserver.git diff --git a/util-vserver/scripts/vrpm-preload b/util-vserver/scripts/vrpm-preload index c5ef7d8..c82978c 100755 --- a/util-vserver/scripts/vrpm-preload +++ b/util-vserver/scripts/vrpm-preload @@ -18,13 +18,35 @@ set -e -: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars} +: ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { - echo "Can not find util-vserver installation; aborting..." + echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2 exit 1 } . "$UTIL_VSERVER_VARS" +function getCapFlags +{ + local ctx=$1 + + if test "$ctx" && ! $_VSERVER_INFO - FEATURE migrate; then + set -- $($_CHCONTEXT_COMPAT --xid 1 \ + sh -c "cat /proc/[0-9]*/status | egrep '^(CapBset|s_context|ctxflags)'" | \ + grep -B 1 -A 1 "^s_context: $ctx " | \ + sed -e '1,3p;d' | awk '{ print $2 }') + else + set -- + fi + + if test "$3"; then + RPM_FAKE_CAP=$[ ~0x$1 ] + RPM_FAKE_FLAGS=$3 + else + RPM_FAKE_CAP=$[ ~0xd40c04ff ] + RPM_FAKE_FLAGS=4 + fi +} + lib=$_RPM_FAKE_SO #scall_nr=$($_VSERVER_INFO x SYSCALL_NEW_S_CONTEXT_NR 2>/dev/null) @@ -36,7 +58,7 @@ test -d "$vdir" || { echo $"Can not find chroot environment at '$vdir' for '$CUR_VSERVER'" >&2 exit 1 } -for bin in `which rpm` /bin/rpm /usr/lib/rpm/rpmi ""; do +for bin in `which rpm` /bin/rpm /usr/lib/rpm/rpm${RPM_FLAVOR:-i} ""; do ldd "$bin" &>/dev/null && break done @@ -45,10 +67,14 @@ test "$bin" || { exit 1 } + +getCapFlags "$ctx" + +export RPM_FAKE_CAP RPM_FAKE_FLAGS + #RPM_FAKE_S_CONTEXT_REV=$scall_rev \ #RPM_FAKE_S_CONTEXT_NR=$scall_nr \ RPM_FAKE_CHROOT=$vdir \ RPM_FAKE_CTX=$ctx \ -RPM_FAKE_CAP=$[ ~0x3404040f ] \ LD_PRELOAD=$lib${LD_PRELOAD:+:$LD_PRELOAD} \ exec $bin "$@"