pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/45079: mk/pkginstall/{dirs,files} handle PKG_DESTDIR



>Number:         45079
>Category:       pkg
>Synopsis:       mk/pkginstall/{dirs,files} handle PKG_DESTDIR
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Fri Jun 17 15:05:00 +0000 2011
>Originator:     Thomas Cort
>Release:        N/A
>Organization:
Minix3
>Environment:
Minix 192.168.122.210 3.2.0 i686
>Description:
PKG_DESTDIR is set by pkg_add and pkg_delete when called with the -P 
option. Without these changes (see patch below) packages installed
using the -P option would have a +DIRS script that manipulates the
wrong set of directories. The files script is changed similarly.

To explain a little on what's going on: Packages have install and 
desintall scripts that are run by pkg_install tools before and after 
installation and deletion. Because of this the +DIRS script which is 
generated from the mk/pkginstall/dirs file gets executed. Now pkg_add can
be called with -P option to ask it to install stuff in a different root 
directory. When this is done pkg_add sets the PKG_DESTDIR variable. 
Earlier, the scripts just ignored this variable and these changes make 
them honor it. Similarly, the changes to the files script make it
honor PKG_DESTDIR.

This patch was moved from pkg/45046 so that the PR would
only deal with one problem.
>How-To-Repeat:
Run pkg_add with the -P option.
>Fix:
diff --git a/mk/pkginstall/dirs b/mk/pkginstall/dirs
index c783cbf..611be47 100644
--- a/mk/pkginstall/dirs
+++ b/mk/pkginstall/dirs
@@ -77,6 +77,12 @@ PKG_METADATA_DIR="${2-${CURDIR}}"
 
 PKG_REFCOUNT_DIRS_DBDIR="${PKG_REFCOUNT_DBDIR}/dirs"
 
+if ${TEST} -n "${PKG_DESTDIR}"; then
+       PKG_DBDIR="${PKG_DESTDIR}${PKG_DBDIR}"
+       PKG_REFCOUNT_DBDIR="${PKG_DESTDIR}${PKG_REFCOUNT_DBDIR}"
+       PKG_REFCOUNT_DIRS_DBDIR="${PKG_DESTDIR}${PKG_REFCOUNT_DIRS_DBDIR}"
+fi
+
 case "${PKG_CONFIG:-@PKG_CONFIG@}" in
 [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
        _PKG_CONFIG=yes
@@ -111,6 +117,7 @@ ADD)
                perms="$shadow_dir/+PERMISSIONS"
                preexist="$shadow_dir/+PREEXISTING"
                token="$shadow_dir/${PKGNAME}"
+               dir="${PKG_DESTDIR}$dir"
                if ${TEST} ! -d "$shadow_dir"; then
                        ${MKDIR} $shadow_dir
                        ${TEST} ! -d "$dir" ||
@@ -162,6 +169,7 @@ REMOVE)
                preexist="$shadow_dir/+PREEXISTING"
                token="$shadow_dir/${PKGNAME}"
                tokentmp="$token.tmp.$$"
+               dir="${PKG_DESTDIR}$dir"
                if ${TEST} -f "$token" && \
                   ${GREP} "^${PKG_METADATA_DIR}$" $token >/dev/null; then
                        ${CAT} "$token" | ${GREP} -v "^${PKG_METADATA_DIR}$" > 
$tokentmp
@@ -193,7 +201,7 @@ PERMS)
                esac
                case $dir in
                "")     continue ;;
-               [!/]*)  dir="${PKG_PREFIX}/$dir" ;;
+               [!/]*)  dir="${PKG_DESTDIR}${PKG_PREFIX}/$dir" ;;
                esac
                case $d_user in
                "")     ;;
@@ -215,7 +223,7 @@ CHECK-ADD)
        { while read dir d_flags d_mode d_user d_group; do
                case $dir in
                "")     continue ;;
-               [!/]*)  dir="${PKG_PREFIX}/$dir" ;;
+               [!/]*)  dir="${PKG_DESTDIR}${PKG_PREFIX}/$dir" ;;
                esac
                ${TEST} ! -d "$dir" || continue
                case $d_flags in
@@ -262,6 +270,7 @@ CHECK-REMOVE)
                esac
                shadow_dir="${PKG_REFCOUNT_DIRS_DBDIR}$dir"
                ${TEST} ! -d "$shadow_dir" || continue  # refcount isn't zero
+               dir="${PKG_DESTDIR}$dir"
                case "$printed_header" in
                yes)    ;;
                *)      printed_header=yes
@@ -290,7 +299,7 @@ CHECK-PERMS)
        { while read dir d_flags d_mode d_user d_group; do
                case $dir in
                "")     continue ;;
-               [!/]*)  dir="${PKG_PREFIX}/$dir" ;;
+               [!/]*)  dir="${PKG_DESTDIR}${PKG_PREFIX}/$dir" ;;
                esac
                ${TEST} -d "$dir" || continue
                case $d_user:$d_group:$d_mode in
diff --git a/mk/pkginstall/files b/mk/pkginstall/files
index 15ed967..489c238 100644
--- a/mk/pkginstall/files
+++ b/mk/pkginstall/files
@@ -114,6 +114,12 @@ VIEW-REMOVE)
        ;;
 esac
 
+if ${TEST} -n "${PKG_DESTDIR}"; then
+       PKG_DBDIR="${PKG_DESTDIR}${PKG_DBDIR}"
+       PKG_REFCOUNT_DBDIR="${PKG_DESTDIR}${PKG_REFCOUNT_DBDIR}"
+       PKG_REFCOUNT_FILES_DBDIR="${PKG_DESTDIR}${PKG_REFCOUNT_FILES_DBDIR}"
+fi
+
 exitcode=0
 case $ACTION in
 ADD)
@@ -136,6 +142,9 @@ ADD)
                perms="$shadow_dir/+PERMISSIONS"
                preexist="$shadow_dir/+PREEXISTING"
                token="$shadow_dir/${PKGNAME}"
+               file="${PKG_DESTDIR}$file"
+               f_eg="${PKG_DESTDIR}$f_eg"
+
                if ${TEST} ! -d "$shadow_dir"; then
                        ${MKDIR} $shadow_dir
                        ${TEST} ! -f "$file" ||
@@ -202,6 +211,9 @@ REMOVE)
                preexist="$shadow_dir/+PREEXISTING"
                token="$shadow_dir/${PKGNAME}"
                tokentmp="$token.tmp.$$"
+               file="${PKG_DESTDIR}$file"
+               f_eg="${PKG_DESTDIR}$f_eg"
+
                if ${TEST} -f "$token" && \
                   ${GREP} "^${PKG_METADATA_DIR}$" $token >/dev/null; then
                        ${CAT} "$token" | ${GREP} -v "^${PKG_METADATA_DIR}$" > 
$tokentmp
@@ -237,7 +249,7 @@ PERMS)
                esac
                case $file in
                "")     continue ;;
-               [!/]*)  file="${PKG_PREFIX}/$file" ;;
+               [!/]*)  file="${PKG_DESTDIR}${PKG_PREFIX}/$file" ;;
                esac
                case $f_user in
                "")     ;;
@@ -275,7 +287,7 @@ CHECK-ADD)
        { while read file f_flags f_eg f_mode f_user f_group; do
                case $file in
                "")     continue ;;
-               [!/]*)  file="${PKG_PREFIX}/$file" ;;
+               [!/]*)  file="${PKG_DESTDIR}${PKG_PREFIX}/$file" ;;
                esac
                ${TEST} ! -f "$file" || continue
                case $f_flags in
@@ -284,7 +296,7 @@ CHECK-ADD)
                esac
                case $f_eg in
                "")     continue ;;
-               [!/]*)  f_eg="${PKG_PREFIX}/$f_eg" ;;
+               [!/]*)  f_eg="${PKG_DESTDIR}${PKG_PREFIX}/$f_eg" ;;
                esac
 
                case "$printed_header" in
@@ -330,6 +342,8 @@ CHECK-REMOVE)
                ${TEST} -f "$file" || continue
                shadow_dir="${PKG_REFCOUNT_FILES_DBDIR}$file"
                ${TEST} ! -d "$shadow_dir" || continue  # refcount isn't zero
+               file="${PKG_DESTDIR}$file"
+
                case "$printed_header" in
                yes)    ;;
                *)      printed_header=yes
@@ -358,7 +372,7 @@ CHECK-PERMS)
        { while read file f_flags f_eg f_mode f_user f_group; do
                case $file in
                "")     continue ;;
-               [!/]*)  file="${PKG_PREFIX}/$file" ;;
+               [!/]*)  file="${PKG_DESTDIR}${PKG_PREFIX}/$file" ;;
                esac
                ${TEST} -f "$file" || continue
                case $f_mode:$f_user:$f_group in



Home | Main Index | Thread Index | Old Index