Author: imp
Date: Wed Apr  6 19:34:44 2016
New Revision: 297621
URL: https://svnweb.freebsd.org/changeset/base/297621

Log:
  Update cust_pkgng with a simpler, more robust version. We don't need
  to loop for pkg, which simplifies things.

Modified:
  head/tools/tools/nanobsd/defaults.sh   (contents, props changed)

Modified: head/tools/tools/nanobsd/defaults.sh
==============================================================================
--- head/tools/tools/nanobsd/defaults.sh        Wed Apr  6 16:50:18 2016        
(r297620)
+++ head/tools/tools/nanobsd/defaults.sh        Wed Apr  6 19:34:44 2016        
(r297621)
@@ -916,6 +916,17 @@ cust_install_files ( ) (
 
 cust_pkgng ( ) (
 
+       local PKG_CONF="${NANO_WORLDDIR}/usr/local/etc/pkg.conf"
+       local PKGCMD="env ASSUME_ALWAYS_YES=YES 
PKG_DBDIR=${NANO_PKG_META_BASE}/pkg SIGNATURE_TYPE=none /usr/sbin/pkg"
+
+       # Ensure pkg.conf points pkg to where the package meta data lives.
+       touch ${PKG_CONF}
+       if grep -Eiq '^PKG_DBDIR:.*' ${PKG_CONF}; then
+               sed -i -e "\|^PKG_DBDIR:.*|Is||PKG_DBDIR: 
"\"${NANO_PKG_META_BASE}/pkg\""|" ${PKG_CONF}
+       else
+               echo "PKG_DBDIR: \"${NANO_PKG_META_BASE}/pkg\"" >> ${PKG_CONF}
+       fi
+
        # If the package directory doesn't exist, we're done.
        if [ ! -d ${NANO_PACKAGE_DIR} ]; then
                echo "DONE 0 packages"
@@ -930,52 +941,28 @@ cust_pkgng ( ) (
                echo "FAILED: need a pkg/ package for bootstrapping"
                exit 2
        fi
+       NANO_PACKAGE_LIST="${_NANO_PKG_PACKAGE} ${NANO_PACKAGE_LIST}"
 
-       # Copy packages into chroot
-       mkdir -p ${NANO_WORLDDIR}/Pkg
-       (
-               cd "${NANO_PACKAGE_DIR}"
-               find ${NANO_PACKAGE_LIST} -print |
-               cpio -Ldumpv ${NANO_WORLDDIR}/Pkg
-       )
-
-       #Bootstrap pkg
-       CR env ASSUME_ALWAYS_YES=YES SIGNATURE_TYPE=none /usr/sbin/pkg add 
/Pkg/${_NANO_PKG_PACKAGE}
-       CR pkg -N >/dev/null 2>&1
-       if [ "$?" -ne "0" ]; then
-               echo "FAILED: pkg bootstrapping faied"
-               exit 2
-       fi
-       rm -f ${NANO_WORLDDIR}/Pkg/pkg-*
+       # Mount packages into chroot
+       mkdir -p ${NANO_WORLDDIR}/_.p
+       mount -t nullfs -o noatime -o ro ${NANO_PACKAGE_DIR} 
${NANO_WORLDDIR}/_.p
+
+       trap "umount ${NANO_WORLDDIR}/_.p ; rm -rf ${NANO_WORLDDIR}/_.p" 1 2 15
 
-       # Count & report how many we have to install
-       todo=`ls ${NANO_WORLDDIR}/Pkg | /usr/bin/wc -l`
-       todo=$(expr $todo + 1) # add one for pkg since it is installed already
+       # Install packages
+       todo="$(echo "${NANO_PACKAGE_LIST}" | awk '{ print NF }')"
        echo "=== TODO: $todo"
-       ls ${NANO_WORLDDIR}/Pkg
+       echo "${NANO_PACKAGE_LIST}"
        echo "==="
-       while true
-       do
-               # Record how many we have now
-               have=$(CR env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg info | 
/usr/bin/wc -l)
-
-               # Attempt to install more packages
-               CR0 'ls 'Pkg/*txz' | xargs env ASSUME_ALWAYS_YES=YES 
/usr/sbin/pkg add'
-
-               # See what that got us
-               now=$(CR env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg info | 
/usr/bin/wc -l)
-               echo "=== NOW $now"
-               CR env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg info
-               echo "==="
-               if [ $now -eq $todo ] ; then
-                       echo "DONE $now packages"
-                       break
-               elif [ $now -eq $have ] ; then
-                       echo "FAILED: Nothing happened on this pass"
-                       exit 2
-               fi
+       for _PKG in ${NANO_PACKAGE_LIST}; do
+               CR "${PKGCMD} add /_.p/${_PKG}"
        done
-       rm -rf ${NANO_WORLDDIR}/Pkg
+
+       CR0 "${PKGCMD} info"
+
+       trap - 1 2 15 EXIT
+       umount ${NANO_WORLDDIR}/_.p
+       rm -rf ${NANO_WORLDDIR}/_.p
 )
 
 #######################################################################
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to