[pacman-dev] makechrootpkg and $PKGDEST
Allan McRae
allan at archlinux.org
Fri Sep 4 21:27:58 EDT 2009
bardo wrote:
> Is it my impression or there are some problems with $SRCDEST and
> $PKGDEST? I didn't define any of these variables in both my
> makepkg.conf, the guest one and the chroot one. In makechrootpkg,
> lines 155-157, I see:
>
> ---------
> source $uniondir/etc/makepkg.conf
>
> [ -d "$uniondir/pkgdest" ] || mkdir "$uniondir/pkgdest"
> if ! grep "PKGDEST=/pkgdest" "$uniondir/etc/makepkg.conf" >/dev/null 2>&1; then
> echo "Setting PKGDEST in makepkg.conf"
> echo "PKGDEST=/pkgdest" >> "$uniondir/etc/makepkg.conf"
> fi
>
> [ -d "$uniondir/srcdest" ] || mkdir "$uniondir/srcdest"
> if ! grep "SRCDEST=/srcdest" "$uniondir/etc/makepkg.conf" >/dev/null 2>&1; then
> echo "Setting SRCDEST in makepkg.conf"
> echo "SRCDEST=/srcdest" >> "$uniondir/etc/makepkg.conf"
> fi
> ---------
>
> So here the chroot's makepkg.conf gets sourced, and it shouldn't
> inherit any of these variables, but they get forced (in the chroot) to
> /pkgdest and /srcdest. Problem is, later (lines 240-248) the files
> don't get moved to $WORKDIR as before, but they go to $PKGDEST, which
> *should* be empty (because it's the guest system's pkgdest, which got
> sourced before adding the variables there):
>
> ---------
> if [ -e $pkgfile ]; then
> if [ -n "$PKGDEST" ]; then
> echo "Moving completed ${_pkgname} package file to ${PKGDEST}"
> mv $pkgfile "${PKGDEST}"
> else
> echo "Moving completed ${_pkgname} package file to ${WORKDIR}"
> mv $pkgfile "${WORKDIR}"
> fi
> fi
> ---------
>
> I don't understand because they go the /{src,pkg}dest, but it looks
> like they shouldn't. Even more, there's no directory check on the
> guest system, so guess what... if the dirs don't exist, the source and
> dest files get renamed to /srcdest and /pkgdest respectively...
>
> This looks like a bug to me, but given how many times I am wrong
> (especially at 2 a.m.) I'd prefer to wait for some feedback before
> opening one.
>
This is indeed a bug. makechroot package no longer copies the users
/etc/makepkg.conf due to this commit:
http://projects.archlinux.org/?p=devtools.git;a=commit;h=4bc819a2
That means that makechrootpkg is run for the second time and
$uniondir/etc/makepkg.conf is sourced, these variables will be set to
/srcdir and /pkgdir because we are now sourcing the makepkg.conf from
the previous run. Thus breakage occurs...
A workaround is to do this (in sudo patch format):
if [ -e $pkgfile ]; then
- if [ -n "$PKGDEST" ]; then
- echo "Moving completed ${_pkgname} package file to ${PKGDEST}"
- mv $pkgfile "${PKGDEST}"
- else
echo "Moving completed ${_pkgname} package file to ${WORKDIR}"
mv $pkgfile "${WORKDIR}"
- fi
fi
but now we have no PKGDEST/SRCDEST support in makechrootpkg...
Please file a bug report.
Allan
More information about the pacman-dev
mailing list