Reduced the number of commands run inside fakeroot to the bare minimum.

Only the following functions now run inside fakeroot
	* run_build()
	* tidy_install()
	* create_package()

Added check for inproper use of '-F' option.

Added warning if makepkg is run as root. Added a new '--asroot' flag that
must be passed if you wish to run makepkg as the root user.

Signed-off-by: Andrew Fyfe <andrew@neptune-one.net>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Andrew Fyfe 2007-04-11 20:06:25 +01:00 committed by Dan McGee
parent 4e15b54926
commit 9ff52db3db

View file

@ -48,12 +48,14 @@ if [ -z "$SRCROOT" ]; then
fi fi
# Options # Options
ASROOT=0
CLEANUP=0 CLEANUP=0
CLEANCACHE=0 CLEANCACHE=0
DEP_BIN=0 DEP_BIN=0
DEP_SRC=0 DEP_SRC=0
SUDO=0 SUDO=0
FORCE=0 FORCE=0
INFAKEROOT=0
GENINTEG=0 GENINTEG=0
INSTALL=0 INSTALL=0
NOBUILD=0 NOBUILD=0
@ -65,14 +67,6 @@ LOGGING=0
PACMAN_OPTS= PACMAN_OPTS=
#determine if we are running with fakeroot
if [ "$1" = "-F" ]; then
INFAKEROOT=1
shift
else
INFAKEROOT=0
fi
### SUBROUTINES ### ### SUBROUTINES ###
plain() { plain() {
@ -693,6 +687,7 @@ while [ "$#" -ne "0" ]; do
--noconfirm) PACMAN_OPTS="$PACMAN_OPTS --noconfirm" ;; --noconfirm) PACMAN_OPTS="$PACMAN_OPTS --noconfirm" ;;
--noprogressbar) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;; --noprogressbar) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;;
# makepkg # makepkg
--asroot) ASROOT=1 ;;
--clean) CLEANUP=1 ;; --clean) CLEANUP=1 ;;
--cleancache) CLEANCACHE=1 ;; --cleancache) CLEANCACHE=1 ;;
--syncdeps) DEP_BIN=1 ;; --syncdeps) DEP_BIN=1 ;;
@ -717,7 +712,7 @@ while [ "$#" -ne "0" ]; do
exit 1 exit 1
;; ;;
-*) -*)
while getopts "bcCdefghiLmop:rRsS-" opt; do while getopts "bcCdefFghiLmop:rRsS-" opt; do
case $opt in case $opt in
b) DEP_SRC=1 ;; b) DEP_SRC=1 ;;
c) CLEANUP=1 ;; c) CLEANUP=1 ;;
@ -725,6 +720,7 @@ while [ "$#" -ne "0" ]; do
d) NODEPS=1 ;; d) NODEPS=1 ;;
e) NOEXTRACT=1 ;; e) NOEXTRACT=1 ;;
f) FORCE=1 ;; f) FORCE=1 ;;
F) INFAKEROOT=1 ;;
g) GENINTEG=1 ;; g) GENINTEG=1 ;;
h) h)
usage usage
@ -793,6 +789,34 @@ if [ "$CLEANCACHE" = "1" ]; then
fi fi
fi fi
if [ "$INFAKEROOT" = "0" ]; then
if [ $EUID -eq 0 -a $ASROOT -eq 0 ]; then
# Warn those who like to live dangerously.
warning "$(gettext "Running makepkg as root is a BAD idea and can cause")"
plain "$(gettext "permanent, catastrophic damage to your system. If you")"
plain "$(gettext "you wish to run as root, please use the --asroot option.")"
plain ""
exit 1 # $E_USER_ABORT
elif [ "$(check_buildenv fakeroot)" = "y" -a ! $(type -p fakeroot) ]; then
warning "$(gettext "Fakeroot is not installed. Building as an unprivileged user")"
plain "$(gettext "will result in non-root ownership of the packaged files. Install")"
plain "$(gettext "the fakeroot package to correctly build as a non-root user.")"
plain ""
sleep 1
else
warning "$(gettext "Running makepkg as an unprivileged user will result in non-root")"
plain "$(gettext "ownership of the packaged files. Try using the fakeroot environment by")"
plain "$(gettext "placing 'fakeroot' in the BUILDENV array in makepkg.conf")"
plain ""
sleep 1
fi
else
if [ "$FAKEROOTKEY" = "" ]; then
error "$(gettext "Do not use the '-F' option. This option is only for use by makepkg.")"
exit 1 # TODO: error code
fi
fi
unset pkgname pkgver pkgrel pkgdesc url license groups provides md5sums force unset pkgname pkgver pkgrel pkgdesc url license groups provides md5sums force
unset replaces depends conflicts backup source install build makedepends unset replaces depends conflicts backup source install build makedepends
unset options noextract unset options noextract
@ -857,29 +881,20 @@ if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.${PKGEXT}" \
fi fi
fi fi
# Enter the fakeroot environment if necessary. This will call the makepkg # Run the bear minimum in fakeroot
# script again as the fake root user. We detect this by passing a sentinel # fix flyspray bug 6208 -- using makepkg with fakeroot gives an error
# option (-F) to makepkg. if [ "$INFAKEROOT" = "1" ]; then
if [ "$EUID" != "0" ]; then if [ "$REPKG" = "1" ]; then
if [ "$(check_buildenv fakeroot)" = "y" ]; then warning "$(gettext "Skipping build.")"
if [ $(type -p fakeroot) ]; then
msg "$(gettext "Entering fakeroot environment")"
fakeroot -- $0 -F $ARGLIST
exit $?
else
warning "$(gettext "Fakeroot is not installed. Building as an unprivileged user")"
plain "$(gettext "will result in non-root ownership of the packaged files. Install")"
plain "$(gettext "the fakeroot package to correctly build as a non-root user.")"
plain ""
sleep 1
fi
else else
warning "$(gettext "Running makepkg as an unprivileged user will result in non-root")" run_build
plain "$(gettext "ownership of the packaged files. Try using the fakeroot environment")" tidy_install
plain "$(gettext "by placing 'fakeroot' in the BUILDENV array in makepkg.conf.")"
plain ""
sleep 1
fi fi
create_package
msg "$(gettext "Leaving fakeroot environment.")"
exit 0 # $E_OK
fi fi
date=$(date) date=$(date)
@ -919,7 +934,7 @@ elif [ $(type -p pacman) ]; then
exit 1 exit 1
fi fi
else else
warning "$(gettext "pacman was not found in PATH. skipping dependency checks.")" warning "$(gettext "pacman was not found in PATH; skipping dependency checks.")"
fi fi
cd "$startdir" cd "$startdir"
@ -1103,21 +1118,34 @@ fi
if [ "$NOBUILD" = "1" ]; then if [ "$NOBUILD" = "1" ]; then
msg "$(gettext "Sources are ready.")" msg "$(gettext "Sources are ready.")"
exit 0 exit 0
elif [ "$REPKG" = "1" ]; then
warning "$(gettext "Skipping build")"
else else
# check for existing pkg directory # check for existing pkg directory; don't remove if we are repackaging
if [ -d "$startdir/pkg" ]; then if [ -d "$startdir/pkg" -a "$REPKG" = "0" ]; then
msg "$(gettext "Removing existing pkg/ directory...")" msg "$(gettext "Removing existing pkg/ directory...")"
rm -rf "$startdir/pkg" rm -rf "$startdir/pkg"
fi fi
mkdir -p "$startdir/pkg" mkdir -p "$startdir/pkg"
run_build if [ $EUID -eq 0 ]; then
fi # if we are root, then we don't need to recall makepkg with fakeroot
if [ "$REPKG" = "1" ]; then
warning "$(gettext "Skipping build.")"
else
run_build
tidy_install
fi
tidy_install create_package
create_package else
msg "$(gettext "Entering fakeroot environment...")"
cd "$startdir"
ret=0
fakeroot -- $0 -F $ARGLIST || ret=$?
[ $ret -ne 0 ] && exit $ret
unset ret
fi
fi
cd "$startdir" cd "$startdir"
if [ "$CLEANUP" = "1" ]; then if [ "$CLEANUP" = "1" ]; then