185 lines
4.0 KiB
Bash
Executable File
185 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 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=/home/chenyf/F1C100S/buildroot-2023.02.3/output/host
|
|
FAKEROOT_BINDIR=/home/chenyf/F1C100S/buildroot-2023.02.3/output/host/bin
|
|
|
|
USEABSLIBPATH=0
|
|
FAKEROOT_LIB=libfakeroot.so
|
|
PATHS=/home/chenyf/F1C100S/buildroot-2023.02.3/output/host/lib:${FAKEROOT_PREFIX}/lib64/libfakeroot:${FAKEROOT_PREFIX}/lib32/libfakeroot
|
|
FAKED=${FAKEROOT_BINDIR}/faked
|
|
|
|
FAKED_MODE="unknown-is-root"
|
|
export FAKED_MODE
|
|
|
|
libfound=no
|
|
|
|
GETOPTTEST=`getopt -T`
|
|
if test "$?" -eq 4; then # 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 "$@"`
|
|
else
|
|
FAKE_TEMP=`getopt l:f:i:s:ub:vh "$@"`
|
|
fi
|
|
|
|
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
|
|
FAKEROOT_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.30.1"
|
|
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/$FAKEROOT_LIB"
|
|
then
|
|
libfound=yes
|
|
ABSLIB="$dir/$FAKEROOT_LIB"
|
|
fi
|
|
done
|
|
else
|
|
if test -r "$FAKEROOT_LIB"
|
|
then
|
|
libfound=yes
|
|
ABSLIB="$FAKEROOT_LIB"
|
|
fi
|
|
fi
|
|
|
|
if test $libfound = no
|
|
then
|
|
fatal "preload library \`$FAKEROOT_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="$FAKEROOT_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="$FAKEROOT_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
|
|
FAKEROOT_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
|
|
FAKEROOT_LIB="$FAKEROOT_LIB:$LD_PRELOAD"
|
|
fi
|
|
|
|
export FAKEROOT_FD_BASE
|
|
|
|
if test -z "$*"; then
|
|
FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$FAKEROOT_LIB" ${SHELL:-/bin/sh}
|
|
#FAKEROOTKEY=$FAKEROOTKEY LD_PRELOAD="$FAKEROOT_LIB" ${SHELL:-/bin/sh}
|
|
RESULT=$?
|
|
else
|
|
FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$FAKEROOT_LIB" "$@"
|
|
#FAKEROOTKEY=$FAKEROOTKEY LD_PRELOAD="$FAKEROOT_LIB" "$@"
|
|
RESULT=$?
|
|
fi
|
|
|
|
exit $RESULT
|
|
|
|
# Local Variables:
|
|
# mode: shell-script
|
|
# End:
|