--- image.sh.orig 2019-06-06 08:24:36.445264000 -0700 +++ image.sh 2019-06-08 17:44:57.852022000 -0700 @@ -40,6 +40,7 @@ -n imagename -- The name of the generated image -o outputdir -- Image destination directory -p portstree -- Ports tree + -P -- Install packages from official repo -s size -- Set the image size -t type -- Type of image can be one of (default iso+zmfs): -- iso, iso+mfs, iso+zmfs, usb, usb+mfs, usb+zmfs, @@ -112,7 +113,7 @@ . ${SCRIPTPREFIX}/common.sh HOSTNAME=poudriere-image -while getopts "c:f:h:j:m:n:o:p:s:t:X:z:" FLAG; do +while getopts "c:f:h:j:m:n:o:Pp:s:t:X:z:" FLAG; do case "${FLAG}" in c) [ -d "${OPTARG}" ] || err 1 "No such extract directory: ${OPTARG}" @@ -146,6 +147,9 @@ OPTARG="${SAVED_PWD}/${OPTARG}" OUTPUTDIR=${OPTARG} ;; + P) + PKGREPO=1 + ;; p) PTNAME=${OPTARG} ;; @@ -239,7 +243,6 @@ mkdir -p ${WRKDIR}/out [ -z "${EXCLUDELIST}" ] || cat ${EXCLUDELIST} > ${excludelist} cat >> ${excludelist} << EOF -usr/src var/db/freebsd-update var/db/etcupdate boot/kernel.old @@ -351,8 +354,11 @@ make -C ${mnt}/usr/src DESTDIR=${WRKDIR}/world BATCH_DELETE_OLD_FILES=yes SRCCONF=${WRKDIR}/src.conf delete-old delete-old-libs [ ! -d "${EXTRADIR}" ] || cp -fRPp ${EXTRADIR}/ ${WRKDIR}/world/ -mv ${WRKDIR}/world/etc/login.conf.orig ${WRKDIR}/world/etc/login.conf -cap_mkdb ${WRKDIR}/world/etc/login.conf +if [ -e "${WRKDIR}/world/etc/login.conf.orig" ]; then + # No login.conf.orig on 13.0-CURRENT-i386 + mv ${WRKDIR}/world/etc/login.conf.orig ${WRKDIR}/world/etc/login.conf + cap_mkdb ${WRKDIR}/world/etc/login.conf +fi # Set hostname if [ -n "${HOSTNAME}" ]; then @@ -367,12 +373,15 @@ local REPOS_DIR=$(mktemp -dt poudriere_repo) local ABI_FILE - # This pkg rquery is always ran in host so we need a host-centric - # repo.conf always. - cat > "${REPOS_DIR}/repo.conf" <<-EOF - FreeBSD: { enabled: false } - local: { url: file:///${WRKDIR}/world/tmp/packages } - EOF + if [ -n "${PKGREPO}" ]; then + else + # This pkg rquery is always ran in host so we need a host-centric + # repo.conf always. + cat > "${REPOS_DIR}/repo.conf" <<-EOF + FreeBSD: { enabled: false } + local: { url: file:///${WRKDIR}/world/tmp/packages } + EOF + fi export REPOS_DIR PKG_DBDIR # Always need this from host. @@ -387,36 +396,83 @@ # install packages if any is needed if [ -n "${PACKAGELIST}" ]; then mkdir -p ${WRKDIR}/world/tmp/packages - ${NULLMOUNT} ${POUDRIERE_DATA}/packages/${MASTERNAME} ${WRKDIR}/world/tmp/packages + mount -t devfs devfs ${WRKDIR}/world/dev + chroot "${WRKDIR}/world" env /usr/sbin/pwd_mkdb -p /etc/master.passwd + [ -n "${RESOLV_CONF}" ] && cp -v "${RESOLV_CONF}" "${WRKDIR}/world/etc/" + mkdir -p ${POUDRIERE_DATA}/pkgcache/${MASTERNAME} + mkdir -p ${WRKDIR}/world/var/cache/pkg if [ "${arch}" == "${host_arch}" ]; then - cat > "${WRKDIR}/world/tmp/repo.conf" <<-EOF - FreeBSD: { enabled: false } - local: { url: file:///tmp/packages } - EOF - convert_package_list "${PACKAGELIST}" | \ - xargs chroot "${WRKDIR}/world" env \ - REPOS_DIR=/tmp ASSUME_ALWAYS_YES=yes \ - pkg install + if [ -n "${PKGREPO}" ]; then + ${NULLMOUNT} ${POUDRIERE_DATA}/pkgcache/${MASTERNAME} \ + ${WRKDIR}/world/var/cache/pkg + convert_package_list "${PACKAGELIST}" | \ + xargs chroot "${WRKDIR}/world" env \ + ASSUME_ALWAYS_YES=yes \ + pkg install + umount ${WRKDIR}/world/var/cache/pkg + else + ${NULLMOUNT} ${POUDRIERE_DATA}/packages/${MASTERNAME} ${WRKDIR}/world/tmp/packages + cat > "${WRKDIR}/world/tmp/repo.conf" <<-EOF + FreeBSD: { enabled: false } + local: { url: file:///tmp/packages } + EOF + convert_package_list "${PACKAGELIST}" | \ + xargs chroot "${WRKDIR}/world" env \ + REPOS_DIR=/tmp ASSUME_ALWAYS_YES=yes \ + pkg install + umount ${WRKDIR}/world/tmp/packages + fi else - cat > "${WRKDIR}/world/tmp/repo.conf" <<-EOF - FreeBSD: { enabled: false } - local: { url: file:///${WRKDIR}/world/tmp/packages } - EOF - ( - export ASSUME_ALWAYS_YES=yes SYSLOG=no \ - REPOS_DIR="${WRKDIR}/world/tmp/" \ - ABI_FILE="${WRKDIR}/world/usr/lib/crt1.o" - pkg -r "${WRKDIR}/world/" install pkg + if [ -n "${PKGREPO}" ]; then + # Try do same as for amd64 (we only care about i386) + ${NULLMOUNT} ${POUDRIERE_DATA}/pkgcache/${MASTERNAME} \ + ${WRKDIR}/world/var/cache/pkg convert_package_list "${PACKAGELIST}" | \ - xargs pkg -r "${WRKDIR}/world/" install - ) + xargs chroot "${WRKDIR}/world" env \ + ASSUME_ALWAYS_YES=yes \ + pkg install + umount ${WRKDIR}/world/var/cache/pkg + # ${NULLMOUNT} ${POUDRIERE_DATA}/pkgcache/${MASTERNAME} \ + # ${WRKDIR}/world/var/cache/pkg + # ( + # export ASSUME_ALWAYS_YES=yes SYSLOG=no \ + # ABI_FILE="${WRKDIR}/world/usr/lib/crt1.o" + # pkg -r "${WRKDIR}/world/" install pkg + # convert_package_list "${PACKAGELIST}" | \ + # xargs pkg -r "${WRKDIR}/world/" install + # ) + # umount ${WRKDIR}/world/var/cache/pkg + else + ${NULLMOUNT} ${POUDRIERE_DATA}/packages/${MASTERNAME} ${WRKDIR}/world/tmp/packages + cat > "${WRKDIR}/world/tmp/repo.conf" <<-EOF + FreeBSD: { enabled: false } + local: { url: file:///${WRKDIR}/world/tmp/packages } + EOF + ( + export ASSUME_ALWAYS_YES=yes SYSLOG=no \ + REPOS_DIR="${WRKDIR}/world/tmp/" \ + ABI_FILE="${WRKDIR}/world/usr/lib/crt1.o" + pkg -r "${WRKDIR}/world/" install pkg + convert_package_list "${PACKAGELIST}" | \ + xargs pkg -r "${WRKDIR}/world/" install + ) + umount ${WRKDIR}/world/tmp/packages + fi fi - rm -rf ${WRKDIR}/world/var/cache/pkg - umount ${WRKDIR}/world/tmp/packages + umount ${WRKDIR}/world/dev rmdir ${WRKDIR}/world/tmp/packages + rm -rf ${WRKDIR}/world/var/cache/pkg rm ${WRKDIR}/world/var/db/pkg/repo-* 2>/dev/null || : fi + +if [ -e "${WRKDIR}/world/overlay.sh" ]; then + export MASTERNAME + mount -t devfs devfs ${WRKDIR}/world/dev + chroot "${WRKDIR}/world" env LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib /overlay.sh + umount ${WRKDIR}/world/dev +fi + case ${MEDIATYPE} in *mfs) cat >> ${WRKDIR}/world/etc/fstab <<-EOF @@ -574,8 +630,8 @@ mkimg -s gpt -b ${mnt}/boot/pmbr \ -p efi:=${mnt}/boot/boot1.efifat \ -p freebsd-boot:=${mnt}/boot/gptboot \ - -p freebsd-ufs:=${WRKDIR}/raw.img \ - -p freebsd-swap::1M \ + -p freebsd-ufs/gfx-root:=${WRKDIR}/raw.img \ + -p freebsd-swap/gfx-swap::1G \ -o ${OUTPUTDIR}/${FINALIMAGE} ;; tar)