| #!/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: |