1
0
mirror of https://github.com/moparisthebest/pacman synced 2025-02-28 09:21:53 -05:00

makepkg: enforce fakeroot usage

Packaging outside of fakeroot can result in incorrect permissions for
package files.  It has been years since fakeroot issues during packaging
were common, so it is safe to enforce fakeroot usage.  If using fakeroot
is impossible for some reason, a two line wrapper script will suffice to
fool makepkg.

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Allan McRae 2014-03-08 20:46:21 +10:00
parent 61ba5c961e
commit d8ee8d0c99
3 changed files with 15 additions and 54 deletions

View File

@ -85,16 +85,13 @@ Options
**DEBUG_CXXFLAGS=**"debug_cxxflags"::
Debug flags used for the C++ compiler; see DEBUG_CFLAGS for more info.
**BUILDENV=(**fakeroot !distcc color !ccache check !sign**)**::
**BUILDENV=(**!distcc color !ccache check !sign**)**::
This array contains options that affect the build environment; the defaults
are shown here. All options should always be left in the array; to enable
or disable an option, simply remove or add an ``!'' at the front of the
option. If an option is specified multiple times, the final value takes
precedence. Each option works as follows:
*fakeroot*;;
Allow building packages as a non-root user. This is highly recommended.
*distcc*;;
Use the distributed C/C++/ObjC compiler to spread compilation among
multiple machines. If this is enabled, `DISTCC_HOSTS` must be specified

View File

@ -41,17 +41,16 @@ CHOST="@CHOST@"
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(fakeroot !distcc color !ccache check !sign)
# Defaults: BUILDENV=(!distcc color !ccache check !sign)
# A negated environment option will do the opposite of the comments below.
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#-- check: Run the check() function if present in the PKGBUILD
#-- sign: Generate PGP signature file
#
BUILDENV=(fakeroot !distcc color !ccache check !sign)
BUILDENV=(!distcc color !ccache check !sign)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.

View File

@ -1827,7 +1827,7 @@ write_pkginfo() {
msg2 "$(gettext "Generating %s file...")" ".PKGINFO"
printf "# Generated by makepkg %s\n" "$makepkg_version"
(( INFAKEROOT )) && printf "# using %s\n" "$(fakeroot -v)"
printf "# using %s\n" "$(fakeroot -v)"
printf "# %s\n" "$(LC_ALL=C date -u)"
printf "pkgname = %s\n" "$pkgname"
(( SPLITPKG )) && printf "pkgbase = %s\n" "$pkgbase"
@ -2312,7 +2312,7 @@ check_software() {
local ret=0
# check for PACMAN if we need it
if (( ! INFAKEROOT && ( ! NODEPS || DEP_BIN || RMDEPS || INSTALL ) )); then
if (( ! NODEPS || DEP_BIN || RMDEPS || INSTALL )); then
if [[ -z $PACMAN_PATH ]]; then
error "$(gettext "Cannot find the %s binary required for dependency operations.")" "$PACMAN"
ret=1
@ -2320,16 +2320,16 @@ check_software() {
fi
# check for sudo if we will need it during makepkg execution
if (( ! INFAKEROOT && ( DEP_BIN || RMDEPS || INSTALL ) )); then
if (( DEP_BIN || RMDEPS || INSTALL )); then
if ! type -p sudo >/dev/null; then
warning "$(gettext "Cannot find the %s binary. Will use %s to acquire root privileges.")" "sudo" "su"
fi
fi
# fakeroot - building as non-root user
# fakeroot - correct package file permissions
if check_buildenv "fakeroot" "y" && (( EUID > 0 )); then
if ! type -p fakeroot >/dev/null; then
error "$(gettext "Cannot find the %s binary required for building as non-root user.")" "fakeroot"
error "$(gettext "Cannot find the %s binary.")" "fakeroot"
ret=1
fi
fi
@ -2790,11 +2790,6 @@ if (( ! INFAKEROOT )); then
error "$(gettext "Running %s as root is not allowed as it can cause permanent,\n\
catastrophic damage to your system.")"
exit 1 # $E_USER_ABORT
elif (( EUID > 0 )) && ! check_buildenv "fakeroot" "y"; then
warning "$(gettext "Running %s as an unprivileged user will result in non-root\n\
ownership of the packaged files. Try using the %s environment by\n\
placing %s in the %s array in %s.")" "makepkg" "fakeroot" "'fakeroot'" "BUILDENV" "$MAKEPKG_CONF"
sleep 1
fi
else
if [[ -z $FAKEROOTKEY ]]; then
@ -2956,12 +2951,7 @@ if (( SOURCEONLY )); then
check_source_integrity
cd_safe "$startdir"
# if we are root or if fakeroot is not enabled, then we don't use it
if ! check_buildenv "fakeroot" "y" || (( EUID == 0 )); then
create_srcpackage
else
enter_fakeroot
fi
enter_fakeroot
msg "$(gettext "Source package created: %s")" "$pkgbase ($(date))"
exit 0
@ -3042,38 +3032,13 @@ else
chmod a-srwx "$pkgdirbase"
cd_safe "$startdir"
# if we are root or if fakeroot is not enabled, then we don't use it
if ! check_buildenv "fakeroot" "y" || (( EUID == 0 )); then
if (( ! REPKG )); then
if (( ! ( SPLITPKG || PKGFUNC ) )); then
chmod 755 "$pkgdirbase"
mkdir -p "$pkgdir"
fi
(( BUILDFUNC )) && run_build
(( CHECKFUNC )) && run_check
fi
chmod 755 "$pkgdirbase"
if (( ! SPLITPKG )); then
pkgdir="$pkgdirbase/$pkgname"
mkdir -p "$pkgdir"
if (( PKGFUNC )); then
run_package
fi
tidy_install
create_package
create_debug_package
else
run_split_packaging
fi
else
if (( ! REPKG )); then
(( BUILDFUNC )) && run_build
(( CHECKFUNC )) && run_check
cd_safe "$startdir"
fi
enter_fakeroot
if (( ! REPKG )); then
(( BUILDFUNC )) && run_build
(( CHECKFUNC )) && run_check
cd_safe "$startdir"
fi
enter_fakeroot
fi
# if inhibiting archive creation, go no further