blob: 792d1fd1ec4c3cf7c508e13eba8a58cb20795e0d [file] [log] [blame]
#!/bin/sh
# This script first starts faked (the daemon), and then it will run
# the requested program with fake root privileges.
usage () {
cat - >&2 <<EOF
fakeroot, create a fake root environment.
usage: fakeroot [-l|--lib fakerootlib] [-f|--faked fakedbin]
[-i file] [-s file] [-u|--unknown-is-real]
[-b|--fd-base fd] [-h|--help] [-v|--version]
[--] [command]
EOF
exit 1
}
stderr ()
{
local i
for i
do
echo >&2 "fakeroot: $i"
done
}
fatal ()
{
stderr "$@"
exit 1
}
# strip /bin/fakeroot to find install prefix
FAKEROOT_PREFIX=/usr/local/google/home/pgynther/clients/buildroot/output/host/usr
FAKEROOT_BINDIR=/usr/local/google/home/pgynther/clients/buildroot/output/host/usr/bin
USEABSLIBPATH=0
LIB=libfakeroot.so
PATHS=/usr/local/google/home/pgynther/clients/buildroot/output/host/usr/lib:${FAKEROOT_PREFIX}/lib64/libfakeroot:${FAKEROOT_PREFIX}/lib32/libfakeroot
FAKED=${FAKEROOT_BINDIR}/faked
FAKED_MODE="unknown-is-root"
export FAKED_MODE
libfound=no
GETOPTEST=`getopt --version`
case $GETOPTEST in
getopt*) # GNU getopt
FAKE_TEMP=`getopt -l lib: -l faked: -l unknown-is-real -l fd-base: -l version -l help -- +l:f:i:s:ub:vh "$@"`
;;
*) # POSIX getopt ?
FAKE_TEMP=`getopt l:f:i:s:ub:vh "$@"`
;;
esac
if test "$?" -ne 0; then
usage
fi
eval set -- "$FAKE_TEMP"
FAKEDOPTS=""
PIPEIN=""
WAITINTRAP=0
while test "X$1" != "X--"; do
case "$1" in
-l|--lib)
shift
LIB=`eval echo "$1"`
PATHS=
;;
-f|--faked)
shift
FAKED="$1"
;;
-i)
shift
if test -f "$1"; then
FAKEDOPTS=$FAKEDOPTS" --load"
PIPEIN="<$1"
else
stderr "database file \`$1' does not exist."
fi
;;
-s)
shift
FAKEDOPTS=$FAKEDOPTS" --save-file $1"
[ -p $1 ] || WAITINTRAP=1
;;
-u|--unknown-is-real)
FAKEDOPTS=$FAKEDOPTS" --unknown-is-real"
FAKED_MODE="unknown-is-real"
;;
-b|--fd-base)
shift
FAKEROOT_FD_BASE="$1"
;;
-v|--version)
echo "fakeroot version 1.20.2"
exit 0
;;
-h|--help)
usage
;;
esac
shift
done
shift #get rid of the '--'
# make sure the preload is available
ABSLIB=""
if [ -n "$PATHS" ]
then
for dir in `echo $PATHS | sed 's/:/ /g'`
do
if test -r "$dir/$LIB"
then
libfound=yes
ABSLIB="$dir/$LIB"
fi
done
else
if test -r "$LIB"
then
libfound=yes
ABSLIB="$LIB"
fi
fi
if test $libfound = no
then
fatal "preload library \`$LIB' not found, aborting."
fi
if test -n "$FAKEROOTKEY"
then
fatal "FAKEROOTKEY set to $FAKEROOTKEY" \
"nested operation not yet supported"
fi
unset FAKEROOTKEY
KEY_PID=`eval $FAKED $FAKEDOPTS $PIPEIN`
FAKEROOTKEY=`echo $KEY_PID|cut -d: -f1`
PID=`echo $KEY_PID|cut -d: -f2`
if [ "$WAITINTRAP" -eq 0 ]; then
trap "kill -s TERM $PID" EXIT INT
else
trap 'FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" /bin/ls -l / >/dev/null 2>&1; while kill -s TERM $PID 2>/dev/null; do sleep 0.1; done' EXIT INT
#trap 'FAKEROOTKEY=$FAKEROOTKEY LD_PRELOAD="$LIB" /bin/ls -l / >/dev/null 2>&1; while kill -s TERM $PID 2>/dev/null; do sleep 0.1; done' EXIT INT
fi
if test -z "$FAKEROOTKEY" || test -z "$PID"; then
fatal "error while starting the \`faked' daemon."
fi
if test $USEABSLIBPATH -ne 0 ; then
LIB=$ABSLIB
fi
# Keep other library paths
if test -n "$LD_LIBRARY_PATH"; then
PATHS="$PATHS:$LD_LIBRARY_PATH"
fi
# ...and preloaded libs
if test -n "$LD_PRELOAD"; then
LIB="$LIB:$LD_PRELOAD"
fi
export FAKEROOT_FD_BASE
if test -z "$*"; then
FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" ${SHELL:-/bin/sh}
#FAKEROOTKEY=$FAKEROOTKEY LD_PRELOAD="$LIB" ${SHELL:-/bin/sh}
RESULT=$?
else
FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" "$@"
#FAKEROOTKEY=$FAKEROOTKEY LD_PRELOAD="$LIB" "$@"
RESULT=$?
fi
exit $RESULT
# Local Variables:
# mode: shell-script
# End: