#!/bin/bash # This script first starts faked (the daemon), and then it will run # the requested program with fake root privileges. usage () { cat - >&2 <&2 "fakeroot: $i" done } fatal () { stderr "$@" exit 1 } # strip /bin/fakeroot to find install prefix PREFIX=./tools/usr BINDIR=./tools/usr/bin USEABSLIBPATH=0 LIB=libfakeroot.so PATHS=./tools/usr/lib FAKED=${BINDIR}/faked FAKED_MODE="unknown-is-root" export FAKED_MODE libfound=no GETOPTEST=`getopt --version 2>/dev/null` case $GETOPTEST in getopt*) # GNU getopt 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 ? TEMP=`getopt l:f:i:s:ub:vh "$@"` ;; esac if test "$?" -ne 0; then usage fi eval set -- "$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.11.4" 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 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} RESULT=$? else FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" "$@" RESULT=$? fi exit $RESULT # Local Variables: # mode: shell-script # End: