Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F169535599
D58974.id185277.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D58974.id185277.diff
View Options
diff --git a/tools/tools/nanobsd/customizations.sh b/tools/tools/nanobsd/customizations.sh
--- a/tools/tools/nanobsd/customizations.sh
+++ b/tools/tools/nanobsd/customizations.sh
@@ -112,6 +112,8 @@
# Install packages listed in NANO_PACKAGE_LIST from NANO_PACKAGE_DIR
cust_pkgng() {
+ # Unprivileged builds (-U) cannot install packages yet because
+ # pkg(8) may produce an invalid metalog (see also D58888 / PR 296409).
if ! $do_root && [ -n "$NANO_NOPRIV_BUILD" ]; then
pprint 2 'Skipping "cust_pkgng" (unprivileged builds not supported yet)'
return 0
@@ -132,14 +134,9 @@
if $do_clean; then
tgt_pkg install -F $NANO_PACKAGE_LIST
fi
- mount -t nullfs -o noatime -o ro "$(nano_pkg_cachedir)" "${NANO_WORLDDIR}/var/cache/pkg"
- trap "nano_umount ${NANO_WORLDDIR}/var/cache/pkg" 1 2 15 EXIT
fi
- cp /etc/resolv.conf "${NANO_WORLDDIR}/etc/resolv.conf"
- tgt_pkg_chroot install $NANO_PACKAGE_LIST
- rm -f "${NANO_WORLDDIR}/etc/resolv.conf"
- rm -rf "${NANO_WORLDDIR}/var/db/pkg/repos/"*
+ tgt_pkg install $NANO_PACKAGE_LIST
if [ -d "$NANO_PACKAGE_DIR" ]; then
trap - 1 2 15 EXIT
@@ -147,7 +144,6 @@
fi
}
-
#######################################################################
# Patch adduser(8)
diff --git a/tools/tools/nanobsd/legacy.sh b/tools/tools/nanobsd/legacy.sh
--- a/tools/tools/nanobsd/legacy.sh
+++ b/tools/tools/nanobsd/legacy.sh
@@ -117,6 +117,9 @@
NANO_CUST_FILES_MTREE=""
+# Where cust_pkgng() finds packages to install
+NANO_PACKAGE_DIR=${NANO_SRC}/${NANO_TOOLS}/Pkg
+NANO_PACKAGE_LIST="*"
#######################################################################
# Functions and variable definitions used by the legacy nanobsd
@@ -615,3 +618,80 @@
tgt_touch conf/default/etc/remount
)
}
+
+#######################################################################
+# Install packages from ${NANO_PACKAGE_DIR}
+
+#
+# Bootstrap pkg and install all packages from NANO_PACKAGE_DIR
+# into NANO_WORLDDIR via a nullfs-mounted chroot
+#
+cust_pkgng() {
+ # Unprivileged builds (-U) cannot install packages yet because
+ # pkg(8) may produce an invalid metalog (see also D58888 / PR 296409).
+ if ! $do_root && [ -n "$NANO_NOPRIV_BUILD" ]; then
+ pprint 2 'Skipping "cust_pkgng" (unprivileged builds not supported yet)'
+ return 0
+ fi
+
+ mkdir -p ${NANO_WORLDDIR}/usr/local/etc
+ local PKG_CONF="${NANO_WORLDDIR}/usr/local/etc/pkg.conf"
+ local PKGCMD="env BATCH=YES 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
+ NANO_PACKAGE_DIR="$(realpath $NANO_PACKAGE_DIR)"
+ if [ ! -d ${NANO_PACKAGE_DIR} ]; then
+ echo "DONE 0 packages"
+ return 0
+ fi
+
+ # Find a pkg-* package
+ for x in $(find -s ${NANO_PACKAGE_DIR} -iname 'pkg-*'); do
+ _NANO_PKG_PACKAGE=$(basename "$x")
+ done
+ if [ -z "${_NANO_PKG_PACKAGE}" -o ! -f "${NANO_PACKAGE_DIR}/${_NANO_PKG_PACKAGE}" ]; then
+ err "FAILED: need a pkg/ package for bootstrapping"
+ fi
+
+ # Mount packages into chroot
+ mkdir -p ${NANO_WORLDDIR}/_.p
+ mount -t nullfs -o noatime -o ro ${NANO_PACKAGE_DIR} ${NANO_WORLDDIR}/_.p
+ mount -t devfs devfs ${NANO_WORLDDIR}/dev
+
+ trap "nano_umount ${NANO_WORLDDIR}/dev; nano_umount ${NANO_WORLDDIR}/_.p ; rm -xrf ${NANO_WORLDDIR}/_.p" 1 2 15 EXIT
+
+ # Install pkg-* package
+ CR "${PKGCMD} add /_.p/${_NANO_PKG_PACKAGE}"
+
+ (
+ # Expand any glob characters in package list
+ cd "${NANO_PACKAGE_DIR}"
+ _PKGS=$(find ${NANO_PACKAGE_LIST} -not -name "${_NANO_PKG_PACKAGE}" -print | sort -u)
+
+ # Show todo
+ todo=$(echo "$_PKGS" | wc -l)
+ echo "=== TODO: $todo"
+ echo "$_PKGS"
+ echo "==="
+
+ # Install packages
+ for _PKG in $_PKGS; do
+ CR "${PKGCMD} add /_.p/${_PKG}"
+ done
+ )
+
+ CR0 "${PKGCMD} info"
+
+ trap - 1 2 15 EXIT
+ nano_umount ${NANO_WORLDDIR}/dev
+ nano_umount ${NANO_WORLDDIR}/_.p
+ rm -xrf ${NANO_WORLDDIR}/_.p
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Sep 2, 8:40 PM (23 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37683200
Default Alt Text
D58974.id185277.diff (4 KB)
Attached To
Mode
D58974: nanobsd: Refactor cust_pkgng
Attached
Detach File
Event Timeline
Log In to Comment