On 02/02/13 14:16, Martin Panter wrote:
On 2 February 2013 02:51, Allan McRae <allan@archlinux.org> wrote:
The idea of having separate build() and package() functions is that build() is run as a normal uses and package() as (fake)root. Any files placed in $pkgdir during build() can have the wrong permissions.
Restrict access to $pkgdir during build() - unless there is no package() function.
Also, set $pkgdir to something "useful" during build(). For split packages, this uses "<path>/pkg/$pkgbase" because it is not obvious which $pkgdir is being referred to.
Signed-off-by: Allan McRae <allan@archlinux.org> --- scripts/makepkg.sh.in | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index bcc415b..ec39c2e 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -152,7 +152,7 @@ clean_up() {
# If it's a clean exit and -c/--clean has been passed... msg "$(gettext "Cleaning up...")" - rm -rf "$pkgdir" "$srcdir" + rm -rf "$pkgdirbase" "$srcdir" if [[ -n $pkgbase ]]; then local fullver=$(get_full_version) # Can't do this unless the BUILDSCRIPT has been sourced. @@ -1519,7 +1519,7 @@ tidy_install() { if find "${pkgdir}" -type f -print0 | xargs -0 grep -q -I "${srcdir}" ; then warning "$(gettext "Package contains reference to %s")" "\$srcdir" fi - if find "${pkgdir}" -type f -print0 | xargs -0 grep -q -I "${pkgdir}" ; then + if find "${pkgdir}" -type f -print0 | xargs -0 grep -q -I "${pkgdirbase}" ; then warning "$(gettext "Package contains reference to %s")" "\$pkgdir" fi
@@ -2344,16 +2344,14 @@ restore_package_variables() { run_split_packaging() { local pkgname_backup=${pkgname[@]} for pkgname in ${pkgname_backup[@]}; do - pkgdir="$pkgdir/$pkgname" - mkdir -p "$pkgdir" - chmod a-s "$pkgdir" + pkgdir="$pkgdirbase/$pkgname" + mkdir "$pkgdir" backup_package_variables run_package $pkgname tidy_install create_package create_debug_package restore_package_variables - pkgdir="${pkgdir%/*}" done pkgname=${pkgname_backup[@]} } @@ -2689,12 +2687,16 @@ epoch=${epoch:-0}
if [[ $BUILDDIR = "$startdir" ]]; then srcdir="$BUILDDIR/src" - pkgdir="$BUILDDIR/pkg" + pkgdirbase="$BUILDDIR/pkg" else srcdir="$BUILDDIR/$pkgbase/src" - pkgdir="$BUILDDIR/$pkgbase/pkg" + pkgdirbase="$BUILDDIR/$pkgbase/pkg" + fi
+# set pkgdir to something "sensible" for (not recommended) use during build() +pkgdir="$pkgdirbase/$pkgbase" + if (( GENINTEG )); then mkdir -p "$srcdir" chmod a-s "$srcdir" @@ -2767,9 +2769,10 @@ if (( INFAKEROOT )); then exit 0 # $E_OK fi
+ chmod 755 "$pkgdirbase" if (( ! SPLITPKG )); then - pkgdir="$pkgdir/$pkgname" - mkdir -p "$pkgdir" + pkgdir="$pkgdirbase/$pkgname" + mkdir "$pkgdir"
Looks like removing the “-p” option causes a crash when using “--repackage” on a PKGBUILD with no package() function.
==> WARNING: Using a PKGBUILD without a package() function is deprecated. ==> Checking runtime dependencies... ==> Checking buildtime dependencies... ==> Entering fakeroot environment... mkdir: cannot create directory ‘/home/proj/pacman/pacman/pkg/test’: File exists /usr/bin/fakeroot: line 178: 5004 User defined signal 1 FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" "$@"
Not that I ever used this option, just seeing what it takes to trigger the empty package directory error below.
Nice catch... I forgot "-p" is not just to create parents! Fixed on my working branch. Allan