initrd: Detach from the world and build on the fly
authorAaron LI <aly@aaronly.me>
Sat, 2 Jun 2018 05:31:45 +0000 (13:31 +0800)
committerAaron LI <liweitianux@live.com>
Fri, 8 Jun 2018 08:02:29 +0000 (16:02 +0800)
Why
---
Currently, the files for initrd image creation are built and installed at
/usr/share/initrd by "buildworld" and "installworld", respectively, and then
mkinitrd(8) simply packs them to create the initrd.img.gz.

For normal users, the shipped /usr/share/initrd and mkinitrd(8) don't make
much sense, since they don't need to modify the initrd contents and create
a modified initrd image.

From a developer's perspective, the required steps (buildworld, installworld
and mkinitrd) to create and test a new initrd image can be annoying.

How
---
Detach the build and installation of the initrd contents from the world.
Build the (rescue/initrd) tools on-the-fly when creating the initrd image.

As per ftigeot's suggestion, these statically linked tools can be useful when
dealing with a broken system, so install them under /rescue to be more
intuitive and easier to use (similar to FreeBSD and maybe other BSDs).

What
----
* Move "share/initrd" to be top-level, and detach it from world.

  + Update the patch in bsd.crunchgen.mk accordingly.
  + Add Makefile.inc to simplify subdir's makefiles.
  + Rewrite the Makefile with targets:
    - rescue: build and install the rescue tools into /rescue.
    - initrd: further packs the etc and rescue staffs to create the initrd
              image.

* Move "sbin/mkinitrd/mkinitrd.sh" under the new "initrd" directory and adapt
  it to work with the "initrd" make target.  Remove the other parts of
  mkinitrd(8).

* Export the above "rescue" and "initrd" targets to be top-level.

* Update nrelease framework to use the new "make initrd".

* Update build.7 man page accordingly.

* Print the message about updating the initrd image and 3rd-party packages
  after "make upgrade" instead of "make installworld".

* Document this change in UPDATING.

* Other small updates and style cleanups.

TODO
----
* Add initrd.7 man page
* Crunch more useful tools
* Crunch bin/sbin/etc. into a bundle to save space (??)

Reviewed-by: swildner
Thanks-to: dillon, swildner, ftigeot

35 files changed:
Makefile
Makefile.inc1
Makefile_upgrade.inc
README
UPDATING
etc/Makefile
etc/mtree/BSD.root.dist
etc/mtree/BSD.usr.dist
initrd/Makefile [new file with mode: 0644]
initrd/Makefile.inc [new file with mode: 0644]
initrd/bin/Makefile [moved from share/initrd/bin/Makefile with 95% similarity]
initrd/bin/dowpa [moved from share/initrd/bin/dowpa with 90% similarity]
initrd/etc/Makefile [new file with mode: 0644]
initrd/etc/motd [moved from share/initrd/etc/motd with 100% similarity]
initrd/etc/rc [moved from share/initrd/etc/rc with 100% similarity]
initrd/etc/rc.lvm2 [moved from share/initrd/etc/rc.lvm2 with 100% similarity]
initrd/etc/rcmount_crypt [moved from share/initrd/etc/rcmount_crypt with 100% similarity]
initrd/etc/rcmount_tcplay [moved from share/initrd/etc/rcmount_tcplay with 100% similarity]
initrd/mkinitrd.sh [new file with mode: 0755]
initrd/oinit/Makefile [moved from share/initrd/mini_init/Makefile with 57% similarity]
initrd/oinit/oinit.c [moved from share/initrd/mini_init/oinit.c with 96% similarity]
initrd/oinit/pathnames.h [moved from share/initrd/mini_init/pathnames.h with 96% similarity]
initrd/sbin.libcrypto/Makefile [moved from share/initrd/sbin.libcrypto/Makefile with 87% similarity]
initrd/sbin.lvm/Makefile [moved from share/initrd/sbin.lvm/Makefile with 96% similarity]
initrd/sbin/Makefile [moved from share/initrd/sbin/Makefile with 91% similarity]
nrelease/Makefile
sbin/Makefile
sbin/mkinitrd/Makefile [deleted file]
sbin/mkinitrd/mkinitrd.8 [deleted file]
sbin/mkinitrd/mkinitrd.sh [deleted file]
share/Makefile
share/initrd/Makefile [deleted file]
share/initrd/etc/Makefile [deleted file]
share/man/man7/build.7
share/mk/bsd.crunchgen.mk

index 80c08ed..713e190 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,8 +3,8 @@
 #
 # The user-driven targets are:
 #
-# buildworld          - Rebuild *everything*, including glue to help do
-#                       upgrades.
+# buildworld          - Rebuild *everything* but the kernel, including glue to
+#                       help do upgrades.
 # quickworld          - Skip bootstrap, build and cross-build tool steps.
 # realquickworld      - Skip above steps, plus depend.
 # crossworld          - Just do the bootstrap, build, and cross-build steps.
 # installkernel       - Install the kernel and the kernel-modules.
 # reinstallkernel     - Reinstall the kernel and the kernel-modules.
 # kernel              - buildkernel + installkernel.
-# preupgrade          - Do certain upgrades in /etc (typically the addition of
-#                       new users and groups used by installed utilities) before
+# preupgrade          - Do certain upgrades (typically the addition of new
+#                       users and groups used by installed utilities) before
 #                       the installworld.
 # upgrade             - Upgrade the files in /etc and also setup the rest
 #                       of the system for DragonFly. ex. two compilers.
+# rescue              - Build and install the statically linked rescue tools.
+# initrd              - Build the rescue tools and create the initrd image.
 # most                - Build user commands, no libraries or include files.
 # installmost         - Install user commands, no libraries or include files.
 # backupworld         - Copy /bin /sbin /usr/bin /usr/sbin /usr/lib
@@ -46,7 +48,7 @@
 # the mk files from the source tree which are supposed to DTRT.
 #
 # Most of the user-driven targets (as listed above) are implemented in
-# Makefile.inc1.  The exceptions are preupgrade and upgrade.
+# Makefile.inc1.
 #
 # For individuals wanting to build from the sources currently on their
 # system, the simple instructions are:
@@ -64,6 +66,7 @@
 # 5.  `make installworld'
 # 6.  `make upgrade'
 # 7.  `reboot'
+# 8.  `make initrd'       (after making sure that the new world works well).
 #
 # If TARGET_ARCH=arch (e.g. x86_64) is specified you can
 # cross build world for other architectures using the buildworld target,
@@ -80,7 +83,7 @@ TGTS= all all-man buildkernel quickkernel realquickkernel nativekernel \
        reinstallkernel installmost installworld installworld-force \
        libraries lint maninstall \
        manlint mk most obj objlink regress rerelease tags \
-       rescue backupworld restoreworld restoreworld-auto \
+       backupworld restoreworld restoreworld-auto \
        backup-clean backup-auto-clean \
        _obj _includes _libraries _depend _worldtmp \
        _bootstrap-tools _build-tools _cross-tools
@@ -200,5 +203,21 @@ preupgrade:
 upgrade:
        @cd ${.CURDIR}/etc; make -m ${.CURDIR}/share/mk upgrade_etc
 .if !defined(NOMAN) && !defined(NO_MAKEDB_RUN)
-       cd ${.CURDIR}/share/man; make makedb
+       @cd ${.CURDIR}/share/man; make makedb
 .endif
+       @echo "--------------------------------------------------------------"
+       @echo "Now you can reboot into the new system!  If the new system works as"
+       @echo "expected, consider updating the rescue tools and initrd image with:"
+       @echo "    # cd ${.CURDIR}; make initrd"
+       @echo "NOTE: Do this only after verifying the new system works as expected!"
+       @echo ""
+       @echo "You also need to upgrade the 3rd-party packages with:"
+       @echo "    # pkg update; pkg [-f] upgrade"
+       @echo "--------------------------------------------------------------"
+
+#
+# Build and install the statically linked rescue tools, and create the
+# initrd image.
+#
+rescue initrd: .PHONY
+       (cd ${.CURDIR}/initrd; make ${.TARGET})
index 1a868f3..06335e8 100644 (file)
@@ -493,8 +493,6 @@ installworld: installcheck
        @echo "--------------------------------------------------------------"
        @echo ">>> installworld target complete"
        @echo "--------------------------------------------------------------"
-       @echo "If things work as expected after a full reboot, consider updating the rescue"
-       @echo "image with 'make rescue'.  Do not do it until after rebooting."
 
 installworld-force:
        @echo "Doing a forced installworld.  This will install to a temporary directory,"
@@ -524,15 +522,6 @@ installworld-force:
        (cd ${.CURDIR}; ${MAKE} installworld OVERRIDE_CHECKS=TRUE)
        (cd ${.CURDIR}; ${MAKE} upgrade OVERRIDE_CHECKS=TRUE)
 
-# Create a rescue image.  We no longer do this automatically for several
-# reasons, primarily that users have had serious issue with mismatched 'vn'
-# vs the kldload image that can crash the system.  But also, the rescue image
-# is intended to be a rescue image, it is a bad idea to update it at the
-# same time the world is installed.
-#
-rescue:
-       mkinitrd -b ${DESTDIR}/boot
-
 #
 # reinstall
 #
index f911d95..64620c8 100644 (file)
@@ -3422,6 +3422,11 @@ TO_REMOVE+=/usr/include/netinet6/esp_rijndael.h
 TO_REMOVE+=/usr/sbin/btxld
 TO_REMOVE+=/usr/share/man/man8/btxld.8.gz
 TO_REMOVE+=/usr/share/examples/meteor
+TO_REMOVE+=/etc/defaults/mkinitrd.conf
+TO_REMOVE+=/usr/share/man/man8/mkinitrd.8.gz
+TO_REMOVE+=/usr/share/man/man5/mkinitrd.conf.5.gz
+TO_REMOVE+=/sbin/mkinitrd
+TO_REMOVE+=/usr/share/initrd/
 
 .if !defined(WANT_INSTALLER)
 TO_REMOVE+=/usr/sbin/dfuibe_installer
diff --git a/README b/README
index 2ef3820..56cc6a3 100644 (file)
--- a/README
+++ b/README
@@ -58,6 +58,9 @@ libexec               System daemons.
 
 nrelease       Framework for building the ``live'' CD image.
 
+initrd         Build system for statically linked /rescue utilities and
+               initial ramdisk creation.
+
 sbin           System commands.
 
 share          Shared resources.
index 48390b7..716ebc4 100644 (file)
--- a/UPDATING
+++ b/UPDATING
 +         UPGRADING DRAGONFLY FROM 5.2 TO LATER VERSIONS                +
 +-----------------------------------------------------------------------+
 
+MKINITRD COMMAND REMOVED
+------------------------
+
+The mkinitrd(8) command is removed and its functionality is replaced by
+the new "initrd" make target.  After rebooting into the new world and
+verifying everything works, execute "make initrd" to upgrade the rescue
+tools and initrd image.
+
 IPSEC, IPSEC_ESP AND IPSEC_DEBUG REMOVED FROM VKERNEL64 CONFIG
 --------------------------------------------------------------
 
index a1b6103..a3d9c45 100644 (file)
@@ -45,7 +45,7 @@ DIRS+=        lib/libssh usr.bin/openssl usr.bin/ssh usr.sbin/sshd
 #
 BIN2=  pccard_ether rc.suspend rc.resume
 
-DEFAULTS= compilers.conf devfs.conf make.conf mkinitrd.conf periodic.conf \
+DEFAULTS= compilers.conf devfs.conf make.conf periodic.conf \
          pfi.conf rc.conf uuids
 
 MTREE= BSD.include.dist BSD.root.dist BSD.usr.dist BSD.var.dist
index b29de72..1a7674c 100644 (file)
@@ -77,6 +77,8 @@
     ..
     proc            mode=0555
     ..
+    rescue
+    ..
     root            mode=0700
     ..
     sbin
index 23ebe8f..a6b0b32 100644 (file)
             iconv
             ..
         ..
-        initrd
-            bin
-            ..
-            etc
-            ..
-            sbin
-            ..
-        ..
         installer
         ..
         locale
diff --git a/initrd/Makefile b/initrd/Makefile
new file mode 100644 (file)
index 0000000..491bba3
--- /dev/null
@@ -0,0 +1,30 @@
+# Target directory to install the rescue tools
+RESCUE_DIR?=           /rescue
+
+# Temporary directory to stage the initrd files (e.g., /etc)
+# NOTE: Ignore ${DESTDIR} when staging files into this directory
+INITRD_STAGEDIR!=      mktemp -d -t initrd-stage
+
+.END:
+       rm -rf ${INITRD_STAGEDIR}
+
+rescue:
+       @${ECHO} ">>> Building and installing rescue tools ..."
+.for _dir in bin oinit sbin sbin.libcrypto sbin.lvm
+       (cd ${.CURDIR}/${_dir}; \
+           @${ECHO} "=> ${_dir}"; \
+           make BINDIR=${RESCUE_DIR} depend all install clean cleandepend)
+.endfor
+
+initrd: rescue
+       @${ECHO} ">>> Preparing initrd contents ..."
+       (cd ${.CURDIR}/etc; \
+           mkdir ${INITRD_STAGEDIR}/etc; \
+           make DESTDIR="" BINDIR=${INITRD_STAGEDIR}/etc \
+               depend all install)
+       @${ECHO} ">>> Creating initrd.img.gz ..."
+       sh ${.CURDIR}/mkinitrd.sh \
+           -b ${DESTDIR}/boot \
+           -r ${DESTDIR}${RESCUE_DIR} \
+           -c ${INITRD_STAGEDIR}
+       (cd ${.CURDIR}/etc; make clean cleandepend)
diff --git a/initrd/Makefile.inc b/initrd/Makefile.inc
new file mode 100644 (file)
index 0000000..41eae6a
--- /dev/null
@@ -0,0 +1,8 @@
+NOMAN=
+NOSHARED=
+WARNS?=                6
+
+# Define Makefile variable RESCUE
+CRUNCH_BUILDOPTS+= -DRESCUE
+# Define compile-time RESCUE symbol when compiling components
+CRUNCH_BUILDOPTS+= CRUNCH_CFLAGS=-DRESCUE
similarity index 95%
rename from share/initrd/bin/Makefile
rename to initrd/bin/Makefile
index 7e61494..5982137 100644 (file)
@@ -1,12 +1,7 @@
 #$FreeBSD: head/rescue/rescue/Makefile 252356 2013-06-28 21:00:08Z davide $
 #      @(#)Makefile    8.1 (Berkeley) 6/2/93
 
-NOMAN=
-
-.include <bsd.own.mk>
-
 PROG=  rescue
-BINDIR=        /usr/share/initrd/bin
 SCRIPTS=dowpa
 
 ###################################################################
similarity index 90%
rename from share/initrd/bin/dowpa
rename to initrd/bin/dowpa
index 1404bea..2ef9bc2 100644 (file)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 if [ $# != 3 ]; then
-    echo "dowpa ath0 ssid password"
+    echo "dowpa <interface> <ssid> <password>"
     exit 1
 fi
 
diff --git a/initrd/etc/Makefile b/initrd/etc/Makefile
new file mode 100644 (file)
index 0000000..ff8fe67
--- /dev/null
@@ -0,0 +1,24 @@
+ETC_SCRIPTS=   rc rc.lvm2 rcmount_crypt rcmount_tcplay
+ETC_FILES=     ${.CURDIR}/motd \
+               ${.CURDIR}/../../etc/group \
+               ${.CURDIR}/../../etc/master.passwd \
+               ${.CURDIR}/../../etc/protocols \
+               ${.CURDIR}/../../etc/regdomain.xml \
+               ${.CURDIR}/../../etc/wpa_supplicant.conf
+
+FILES=         ${ETC_SCRIPTS} ${ETC_FILES}
+
+.for file in ${ETC_SCRIPTS}
+FILESDIR_${file}=      ${BINDIR}
+FILESMODE_${file}=     555
+.endfor
+
+.for file in ${ETC_FILES}
+FILESDIR_${file}=      ${BINDIR}
+FILESMODE_${file}=     444
+.endfor
+
+afterinstall:
+       pwd_mkdb -d ${DESTDIR}${BINDIR} ${DESTDIR}${BINDIR}/master.passwd
+
+.include <bsd.prog.mk>
similarity index 100%
rename from share/initrd/etc/motd
rename to initrd/etc/motd
similarity index 100%
rename from share/initrd/etc/rc
rename to initrd/etc/rc
similarity index 100%
rename from share/initrd/etc/rc.lvm2
rename to initrd/etc/rc.lvm2
diff --git a/initrd/mkinitrd.sh b/initrd/mkinitrd.sh
new file mode 100755 (executable)
index 0000000..3fa7790
--- /dev/null
@@ -0,0 +1,295 @@
+#!/bin/sh
+#
+# Copyright (c) 2010, 2018
+#      The DragonFly Project.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 3. Neither the name of The DragonFly Project nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific, prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+#
+# Description
+#
+# This tool packs the (statically linked) rescue tools (at /rescue by
+# default) and contents specified by "-c <content_dirs>", such as the
+# necessary etc files, into an UFS-formatted VN image.  This image is
+# installed at /boot/kernel/initrd.img.gz and used as the initial ramdisk
+# to help mount the real root filesystem when it is encrypted or on LVM.
+#
+
+
+#
+# Default configurations
+#
+
+# Directory hierarchy on the initrad
+#
+# * 'new_root' will always be created
+# * 'sbin' will be symlinked to 'bin'
+# * 'tmp' will be symlinked to 'var/tmp'
+#
+INITRD_DIRS="bin dev etc mnt var"
+
+# Directory of the statically linked rescue tools which will be copied
+# onto the initrd.
+RESCUE_DIR="/rescue"
+
+# Specify the location that the initrd will be installed to, i.e.,
+# <BOOT_DIR>/kernel/initrd.img.gz
+BOOT_DIR="/boot"
+
+# Maximum size (number of MB) allowed for the initrd image
+INITRD_SIZE_MAX="15"  # MB
+
+
+#
+# Helper functions
+#
+
+log() {
+       echo "$@" >&2
+}
+
+error() {
+       local rc=$1
+       shift
+       log "$@"
+       exit ${rc}
+}
+
+check_dirs() {
+       for _dir; do
+               [ -d "${_dir}" ] ||
+                   error 1 "Directory '${_dir}' does not exist"
+       done
+       return 0
+}
+
+# Calculate the total size of the given directory, taking care of the
+# hard links.
+#
+# NOTE: Do not use 'du' since it gives the disk usage of the files,
+#       which varies between different filesystems.
+#
+calc_size() {
+       find "$1" -ls | \
+           awk '{ print $7,$1 }' | \
+           sort -n -k 2 | \
+           uniq -f 1 | \
+           awk '{ sum+=$1 } END { print sum }'  # byte
+}
+
+
+#
+# Functions
+#
+
+calc_initrd_size() {
+       log "Calculating required initrd size ..."
+       isize=0
+       for _dir; do
+               csize=$(calc_size ${_dir})
+               log "* ${_dir}: ${csize} bytes"
+               isize=$((${isize} + ${csize}))
+       done
+       # Round initrd size up by MB
+       isize_mb=$(echo ${isize} | awk '
+           function ceil(x) {
+               y = int(x);
+               return (x>y ? y+1 : y);
+           }
+           {
+               mb = $1/1024/1024;
+               print ceil(mb);
+           }')
+       # Add additional 1 MB
+       echo $((${isize_mb} + 1))
+}
+
+create_vn() {
+       kldload -n vn
+       VN_DEV=$(vnconfig -c -S ${INITRD_SIZE}m -Z -T vn ${INITRD_FILE}) &&
+           echo "Configured ${VN_DEV}" ||
+           error 1 "Failed to configure VN device"
+
+       newfs -i 131072 -m 0 /dev/${VN_DEV}s0 &&
+           echo "Formatted initrd image with UFS" ||
+           error 1 "Failed to format the initrd image"
+       mount_ufs /dev/${VN_DEV}s0 ${BUILD_DIR} &&
+           echo "Mounted initrd image on ${BUILD_DIR}" ||
+           error 1 "Failed to mount initrd image on ${BUILD_DIR}"
+}
+
+destroy_vn() {
+       umount /dev/${VN_DEV}s0 &&
+           echo "Unmounted initrd image" ||
+           error 1 "Failed to umount initrd image"
+       vnconfig -u ${VN_DEV} &&
+           echo "Unconfigured ${VN_DEV}" ||
+           error 1 "Failed to unconfigure ${VN_DEV}"
+}
+
+make_hier() {
+       mkdir -p ${BUILD_DIR}/new_root
+       # Symlink 'sbin' to 'bin'
+       ln -sf bin ${BUILD_DIR}/sbin
+       # Symlink 'tmp' to 'var/tmp', as '/var' will be mounted with
+       # tmpfs, saving a second tmpfs been mounted on '/tmp'.
+       ln -sf var/tmp ${BUILD_DIR}/tmp
+       for _dir in ${INITRD_DIRS}; do
+               [ ! -d "${BUILD_DIR}/${_dir}" ] &&
+                   mkdir -p ${BUILD_DIR}/${_dir}
+       done
+       echo "Created directory structure"
+}
+
+copy_rescue() {
+       cpdup -o -u ${RESCUE_DIR}/ ${BUILD_DIR}/bin/ &&
+           echo "Copied ${RESCUE_DIR} to ${BUILD_DIR}/bin" ||
+           error 1 "Failed to copy ${RESCUE_DIR} to ${BUILD_DIR}/bin"
+}
+
+copy_content() {
+       for _dir in ${CONTENT_DIRS}; do
+               cpdup -o -u ${_dir}/ ${BUILD_DIR}/ &&
+                   echo "Copied ${_dir} to ${BUILD_DIR}" ||
+                   error 1 "Failed to copy ${dir} to ${BUILD_DIR}"
+       done
+}
+
+print_info() {
+       lt ${BUILD_DIR}
+       df -h ${BUILD_DIR}
+}
+
+# Check the validity of the created initrd image before moving over.
+# This prevents creating an empty and broken initrd image by running
+# this tool but without ${CONTENT_DIRS} prepared.
+#
+# NOTE: Need more improvements.
+#
+check_initrd()
+{
+       [ -x "${BUILD_DIR}/sbin/oinit" ] || {
+               destroy_vn
+               error 1 "Created initrd image is invalid!"
+       }
+}
+
+usage() {
+       error 2 \
+           "usage: ${0##*/} [-b boot_dir] [-r rescue_dir]" \
+           "[-s size] [-S max_size] -c <content_dirs>"
+}
+
+
+#
+# Main
+#
+
+while getopts :b:c:hr:s:S: opt; do
+       case ${opt} in
+       b)
+               BOOT_DIR="${OPTARG}"
+               ;;
+       c)
+               CONTENT_DIRS="${OPTARG}"
+               ;;
+       h)
+               usage
+               ;;
+       r)
+               RESCUE_DIR="${OPTARG}"
+               ;;
+       s)
+               INITRD_SIZE="${OPTARG}"
+               ;;
+       S)
+               INITRD_SIZE_MAX="${OPTARG}"
+               ;;
+       \?)
+               log "Invalid option -${OPTARG}"
+               usage
+               ;;
+       :)
+               log "Option -${OPTARG} requires an argument"
+               usage
+               ;;
+       esac
+done
+
+shift $((OPTIND - 1))
+[ $# -ne 0 ] && usage
+[ -z "${BOOT_DIR}" -o -z "${RESCUE_DIR}" -o -z "${CONTENT_DIRS}" ] && usage
+check_dirs ${BOOT_DIR} ${RESCUE_DIR} ${CONTENT_DIRS}
+
+VN_DEV=""
+INITRD_SIZE=${INITRD_SIZE%[mM]}  # MB
+INITRD_SIZE_MAX=${INITRD_SIZE_MAX%[mM]}  # MB
+
+BUILD_DIR=$(mktemp -d -t initrd) || error $? "Cannot create build directory"
+echo "Initrd build directory: ${BUILD_DIR}"
+INITRD_FILE="${BUILD_DIR}.img"
+INITRD_DEST="${BOOT_DIR}/kernel/initrd.img.gz"
+
+CSIZE=$(calc_initrd_size ${RESCUE_DIR} ${CONTENT_DIRS})
+echo "Required initrd image size: ${CSIZE} MB"
+if [ -n "${INITRD_SIZE}" -a "${INITRD_SIZE}" != "0" ]; then
+       if [ ${CSIZE} -gt ${INITRD_SIZE} ]; then
+               error 1 "Given initrd size (${INITRD_SIZE} MB) too small"
+       fi
+else
+       INITRD_SIZE=${CSIZE}
+fi
+echo "Initrd size: ${INITRD_SIZE} MB"
+
+if [ -n "${INITRD_SIZE_MAX}" -a "${INITRD_SIZE_MAX}" != "0" ] && \
+   [ ${INITRD_SIZE} -gt ${INITRD_SIZE_MAX} ]; then
+       error 1 "Exceeded the maximum size (${INITRD_SIZE_MAX} MB)"
+fi
+
+create_vn
+make_hier
+copy_rescue
+copy_content
+print_info
+destroy_vn
+rm -rf ${BUILD_DIR}
+
+echo -n "Compressing ${INITRD_FILE} ..."
+gzip -9 ${INITRD_FILE}
+echo " OK"
+
+if [ -f "${INITRD_DEST}" ]; then
+       echo -n "Backing up ${INITRD_DEST} ..."
+       mv ${INITRD_DEST} ${INITRD_DEST}.old
+       echo " OK (${INITRD_DEST}.old)"
+fi
+
+echo -n "Copying ${INITRD_FILE}.gz to ${INITRD_DEST} ..."
+mv ${INITRD_FILE}.gz ${INITRD_DEST}
+echo " OK"
similarity index 57%
rename from share/initrd/mini_init/Makefile
rename to initrd/oinit/Makefile
index 7244fdc..7f0db38 100644 (file)
@@ -1,12 +1,7 @@
 #      @(#)Makefile    8.1 (Berkeley) 7/19/93
 # $FreeBSD: src/sbin/init/Makefile,v 1.20.2.4 2001/08/01 06:37:01 obrien Exp $
-# $DragonFly: src/sbin/init/Makefile,v 1.5 2006/10/17 00:55:41 pavalos Exp $
 
 PROG=  oinit
-NOSHARED=yes
-NOMAN=
-BINMODE=500
-BINDIR=${SHAREDIR}/initrd/sbin
 DPADD= ${LIBUTIL}
 LDADD= -lutil
 
similarity index 96%
rename from share/initrd/mini_init/oinit.c
rename to initrd/oinit/oinit.c
index a1fbb60..0c011bb 100644 (file)
@@ -103,12 +103,10 @@ static void
 runcom(char **argv_orig)
 {
        pid_t pid, wpid;
-       int status, fd, error;
+       int status, error;
        const char *argv[4];
        struct sigaction sa;
 
-       fd = -1;
-
        if ((pid = fork()) == 0) {
                sigemptyset(&sa.sa_mask);
                sa.sa_flags = 0;
@@ -133,15 +131,15 @@ runcom(char **argv_orig)
                wpid = waitpid(-1, &status, WUNTRACED);
        } while (wpid != pid);
 
-       error = chdir("/new_root");
+       error = chdir(_PATH_NEWROOT);
        if (error)
                goto chroot_failed;
 
-       error = chroot_kernel("/new_root");
+       error = chroot_kernel(_PATH_NEWROOT);
        if (error)
                goto chroot_failed;
 
-       error = chroot("/new_root");
+       error = chroot(_PATH_NEWROOT);
        if (error)
                goto chroot_failed;
 
similarity index 96%
rename from share/initrd/mini_init/pathnames.h
rename to initrd/oinit/pathnames.h
index 06890e0..b2763cc 100644 (file)
@@ -35,4 +35,5 @@
 #include <paths.h>
 
 #define        _PATH_RUNCOM    "/etc/rc"
-#define        _PATH_RUNDOWN   "/etc/rc.shutdown"
+#define        _PATH_RUNDOWN   "/etc/rc.shutdown"
+#define        _PATH_NEWROOT   "/new_root"
similarity index 87%
rename from share/initrd/sbin.libcrypto/Makefile
rename to initrd/sbin.libcrypto/Makefile
index 579fd89..b680fe6 100644 (file)
@@ -1,12 +1,7 @@
 #$FreeBSD: head/rescue/rescue/Makefile 252356 2013-06-28 21:00:08Z davide $
 #      @(#)Makefile    8.1 (Berkeley) 6/2/93
 
-NOMAN=
-
-.include <bsd.own.mk>
-
-PROG=  sbin.libcrypto
-BINDIR=        /usr/share/initrd/sbin
+PROG=  rescue.libcrypto
 
 CRUNCH_SRCDIRS+= sbin
 CRUNCH_PROGS_sbin= tcplay      \
similarity index 96%
rename from share/initrd/sbin.lvm/Makefile
rename to initrd/sbin.lvm/Makefile
index a608247..eb2f9b6 100644 (file)
@@ -1,16 +1,13 @@
 #      $NetBSD: Makefile,v 1.7 2009/12/01 23:12:51 haad Exp $
 
-BINDIR=                /usr/share/initrd/sbin
-NOSHARED=      yes
-NOMAN=
+PROG=          lvm
+WARNS?=                1
 
-LVM2_DIR=      ${.CURDIR}/../../../contrib/lvm2
+LVM2_DIR=      ${.CURDIR}/../../contrib/lvm2
 LVM2_DISTDIR=       ${LVM2_DIR}/dist
 LIBDM_DISTDIR=        ${LVM2_DIR}/dist/libdm
 LIBDM_SRCDIR= ${LVM2_DIR}/lib/libdevmapper
 
-PROG=          lvm
-
 SRCS=          dumpconfig.c formats.c lvchange.c lvconvert.c lvcreate.c \
                lvdisplay.c lvextend.c lvmchange.c lvmcmdline.c \
                lvmdiskscan.c lvreduce.c lvremove.c lvrename.c lvresize.c \
similarity index 91%
rename from share/initrd/sbin/Makefile
rename to initrd/sbin/Makefile
index d461682..d0adfa3 100644 (file)
@@ -1,14 +1,9 @@
 #$FreeBSD: head/rescue/rescue/Makefile 252356 2013-06-28 21:00:08Z davide $
 #      @(#)Makefile    8.1 (Berkeley) 6/2/93
 
-NOMAN=
-
-.include <bsd.own.mk>
-
 PROG=  rescue.sbin
-BINDIR=        /usr/share/initrd/sbin
 
-SCRIPTS= ../../../sbin/dhclient/dhclient-script
+SCRIPTS= ${.CURDIR}/../../sbin/dhclient/dhclient-script
 
 CRUNCH_SRCDIRS+= sbin
 CRUNCH_PROGS_sbin=     \
index fa92f9c..34f0622 100644 (file)
@@ -1,5 +1,5 @@
 #########################################################################
-#                              ENHANCEMENTS                            #
+#                              ENHANCEMENTS                            #
 #########################################################################
 
 # New method e.g. 'make gui release'.  A series of enhancement
@@ -11,7 +11,7 @@
 gui installer img nopkgs:
 
 #########################################################################
-#                               SETUP                                  #
+#                               SETUP                                  #
 #########################################################################
 
 DPORTS_PATH?=  /usr/dports
@@ -76,10 +76,6 @@ IMGFILE?=            ${ISODIR}/dfly-gui.img
 
 # NOTE: order important, do not sort package list
 #
-# Apps we want in the gui build but which have problems building:
-#      chat/xchat      link error on x86-64, something about ___progname
-#
-#
 .if !make(nopkgs)
 DPORTS_PACKAGES+=      x11/xorg \
                        x11-wm/fluxbox \
@@ -123,7 +119,7 @@ IMGUSBDEV ?= da8
 NRLOBJDIR?= /usr/obj
 
 #########################################################################
-#                              BASE ISO TARGETS                        #
+#                              BASE ISO TARGETS                        #
 #########################################################################
 
 release:       check clean buildworld1 buildkernel1 \
@@ -179,7 +175,7 @@ buildkernel1 buildkernel2:
 
 # note that we do not want to mess with any /usr/obj directories not related
 # to buildworld, buildkernel, or nrelease, so we must supply the proper
-# MAKEOBJDIRPREFIX for targets that are not run through the buildworld and 
+# MAKEOBJDIRPREFIX for targets that are not run through the buildworld and
 # buildkernel mechanism.
 #
 # Unconditionally clean out ${ISOROOT} so a previous img build
@@ -189,7 +185,6 @@ buildkernel1 buildkernel2:
 # We leave the kernel's debug variables intact.
 #
 buildiso:
-       -rm -rf ${ISOROOT}
        -chflags -R noschg ${ISOROOT}
        rm -rf ${ISOROOT}
        mkdir -p ${ISOROOT}
@@ -204,12 +199,7 @@ buildiso:
        done
        rm -rf ${ISOROOT}/boot/kernel.old
        ln -sf kernel ${ISOROOT}/boot/kernel/kernel.BOOTP
-       # This next mkinitrd has to be the INSTALLED version because else we
-       # can't rely on the -c option being present, but it needs to be run
-       # OUTSIDE of the chroot because it might want to load vn(4) and can't
-       # do so from inside of it.
-       #
-       ${ISOROOT}/sbin/mkinitrd -c ${ISOROOT}/usr/share/initrd -b ${ISOROOT}/boot
+       ( cd ${.CURDIR}/..; make DESTDIR=${ISOROOT} initrd )
        mtree -deU -f ${.CURDIR}/../etc/mtree/BSD.var.dist -p ${ISOROOT}/var
        dev_mkdb -f ${ISOROOT}/var/run/dev.db ${ISOROOT}/dev
 
index a2e7af2..8a215ff 100644 (file)
@@ -45,7 +45,6 @@ SUBDIR=       adjkerntz \
        kldunload \
        ldconfig \
        md5 \
-       mkinitrd \
        mountctl \
        mount \
        mount_ufs \
diff --git a/sbin/mkinitrd/Makefile b/sbin/mkinitrd/Makefile
deleted file mode 100644 (file)
index 32900ec..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-SCRIPTS=mkinitrd.sh
-MAN=   mkinitrd.8
-MLINKS=        mkinitrd.8 mkinitrd.conf.5
-
-.include <bsd.prog.mk>
diff --git a/sbin/mkinitrd/mkinitrd.8 b/sbin/mkinitrd/mkinitrd.8
deleted file mode 100644 (file)
index 295359c..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-.\"
-.\" Copyright (c) 2010, 2018
-.\"    The DragonFly Project.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\" 3. Neither the name of The DragonFly Project nor the names of its
-.\"    contributors may be used to endorse or promote products derived
-.\"    from this software without specific, prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
-.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
-.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.Dd March 30, 2018
-.Dt MKINITRD 8
-.Os
-.Sh NAME
-.Nm mkinitrd
-.Nd build an initial ramdisk image for use as early userland
-.Sh SYNOPSIS
-.Nm
-.Op Fl b Ar bootdir
-.Op Fl c Ar contentsdir
-.Op Fl t Ar tmpdir
-.Op Fl s Ar size
-.Op Fl S Ar max_size
-.Sh DESCRIPTION
-The
-.Nm
-script builds a ramdisk (md) image based on the UFS filesystem containing
-only the most basic tools, such as a minimal
-.Xr init 8 ,
-.Xr sh 1 ,
-various
-.Xr mount 8
-utilities,
-.Xr lvm 8 ,
-.Xr cryptsetup 8 ,
-.Xr tcplay 8 ,
-as well as some basic networking tools.
-And the ramdisk is required to help mount the encrypted root partition.
-.Pp
-The contents of
-.Pa /usr/share/initrd
-will be copied onto the ramdisk, maintaining the same hierarchy.
-This directory can be changed with the
-.Fl c
-option.
-.Pp
-By default
-.Nm
-will calculate the contents size and create a ramdisk just big enough.
-The
-.Fl s
-option accepting an integer (number of MB) can specify the required
-size of the ramdisk.
-The special value of
-.Pa 0
-can be given to ignore the
-.Pa INITRD_SIZE
-setting from the configuration file as described below.
-The
-.Fl S
-option also accepts an integer (number of MB) and constrains the maximum
-allowed size of the ramdisk.
-Specifying a value of
-.Pa 0
-will ignore the
-.Pa INITRD_SIZE_MAX
-setting from the configuration file.
-.Pp
-On completion, the final image will be copied to
-.Pa /boot/kernel/initrd.img.gz ,
-ready to be used as an early userland.
-The base directory for
-.Pa kernel/initrd.img.gz
-can be changed with the
-.Fl b
-option to an optional
-.Ar bootdir (the default is
-.Pa /boot ) .
-The temporary directory to be used for setting up the image can be specified
-using the
-.Fl t
-option (the default is
-.Pa /tmp ) .
-.Pp
-The
-.Nm
-script will read
-.Pa /etc/mkinitrd.conf
-if it exists and use the configuration from this file to override the
-following variables (defaults are in
-.Pa /etc/defaults/mkinitrd.conf ) :
-.Bd -literal -offset indent
-BUILD_DIR
-INITRD_SIZE_MAX
-INITRD_DIRS
-CONTENT_DIRS
-.Ed
-.Pp
-Adding the following lines to
-.Pa /boot/loader.conf
-will enable the use of the created initrd image:
-.Bd -literal -offset indent
-initrd.img_load="YES"
-initrd.img_type="md_image"
-vfs.root.mountfrom="ufs:md0s0"
-.Ed
-.Pp
-The format for vfs.root.realroot in
-.Pa /boot/loader.conf
-that allows the user to specify what system to mount as the
-new root in the initrd is specified in its general form below:
-.Bd -literal -offset indent
-vfs.root.realroot="<type>:[arg1[:arg2[:argN]]]"
-.Ed
-.Pp
-Currently, three types of real root are supported,
-.Pa local ,
-.Pa tcplay
-and
-.Pa crypt .
-The
-.Pa local
-type allows to mount any local file system that does not require any
-special setup apart from the initial discovery and calling the
-.Pa mount
-program. The general format is as follows:
-.Bd -literal -offset indent
-vfs.root.realroot="local:<FS TYPE>:<DEVICE PATH>[:<OPTIONS>]"
-.Ed
-.Pp
-The
-.Pa crypt
-type allows to mount volumes supported by cryptsetup. The device will
-be set up by prompting the user for his key, and this volume will then
-be mounted as the new root.
-.Bd -literal -offset indent
-vfs.root.realroot="crypt:<FS TYPE>:<DEVICE PATH>:<VOLUME NAME>[:<OPTIONS>]"
-.Ed
-.Pp
-The
-.Pa tcplay
-type allows to mount volumes supported by
-.Xr tcplay 8 .
-The device will be set up by prompting the user for his key, and this
-volume will then be mounted as the new root.
-.Bd -literal -offset indent
-vfs.root.realroot="tcplay:<FS TYPE>:<DEVICE PATH>:<VOLUME NAME>[:<OPTIONS>]"
-.Ed
-.Sh EXAMPLES
-.Bd -literal -offset indent
-vfs.root.realroot="local:ufs:/dev/vg00/lv0[:OPTIONS]"
-
-vfs.root.realroot="crypt:ufs:/dev/ad0s0a:secvolume[:OPTIONS]"
-
-vfs.root.realroot="crypt:hammer2:/dev/serno/XXXXXX.s1d:root[:OPTIONS]"
-.Ed
-.Sh SEE ALSO
-.Xr md 4 ,
-.Xr loader.conf 5
-.Sh HISTORY
-The
-.Nm
-command first appeared in
-.Dx 2.7 .
-.Sh AUTHORS
-.Nm
-was written by
-.An Alex Hornung Aq Mt ahornung@gmail.com .
diff --git a/sbin/mkinitrd/mkinitrd.sh b/sbin/mkinitrd/mkinitrd.sh
deleted file mode 100644 (file)
index 914f7c2..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2010, 2018
-#      The DragonFly Project.  All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-# 3. Neither the name of The DragonFly Project nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific, prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-
-. /etc/defaults/mkinitrd.conf
-
-if [ -r /etc/mkinitrd.conf ]; then
-       . /etc/mkinitrd.conf
-       echo "Loaded configuration from /etc/mkinitrd.conf"
-fi
-
-VN_DEV=""
-
-check_dirs()
-{
-       for _dir; do
-               [ -d "${_dir}" ] || {
-                       echo "Directory '${_dir}' does not exist"
-                       return 1
-               }
-       done
-       return 0
-}
-
-# Calculate the total size of the given directory, taking care of the
-# hard links.
-calc_size()
-{
-       find "$1" -ls | \
-           awk '{ print $7,$1 }' | \
-           sort -n -k 2 | \
-           uniq -f 1 | \
-           awk '{ sum+=$1 } END { print sum }'  # byte
-}
-
-calc_initrd_size()
-{
-       echo "Contents directories:" >&2
-       isize=0
-       for dir in ${CONTENT_DIRS}; do
-               csize=$(calc_size ${dir})
-               echo "* ${dir}: ${csize} bytes" >&2
-               isize=$((${isize} + ${csize}))
-       done
-       # Round initrd size up by MB
-       isize_mb=$(echo "${isize}" | awk '
-           function ceil(x) {
-               y = int(x);
-               return (x>y ? y+1 : y);
-           }
-           {
-               mb = $1/1024/1024;
-               print ceil(mb);
-           }')
-       # Add additional 1 MB
-       echo $((${isize_mb} + 1))
-}
-
-create_vn()
-{
-       local _vndev
-       _vndev=${TMP_DIR}/vndev.$$
-
-       if [ ! -d "$BUILD_DIR" ]; then
-               mkdir -p $BUILD_DIR
-               echo "Created build directory $BUILD_DIR"
-       fi
-       vnconfig -c -S ${INITRD_SIZE}m -Z -T vn ${TMP_DIR}/initrd.img \
-           > ${_vndev} || {
-               echo "Failed to configure vn device"
-               exit 1
-       }
-
-       VN_DEV=`cat ${_vndev} | cut -f 2 -d ' '`
-       rm ${_vndev}
-
-       echo "Configured $VN_DEV"
-       newfs -i 131072 -m 0 /dev/${VN_DEV}s0
-       echo "Formatted initrd image with UFS"
-       mount -t ufs /dev/${VN_DEV}s0 $BUILD_DIR
-       echo "Mounted initrd image on ${BUILD_DIR}"
-}
-
-destroy_vn()
-{
-       umount /dev/${VN_DEV}s0
-       echo "Unmounted initrd image"
-       vnconfig -u $VN_DEV
-       echo "Unconfigured $VN_DEV"
-       rmdir ${BUILD_DIR}
-}
-
-make_hier()
-{
-       mkdir -p ${BUILD_DIR}/new_root
-       # symlink 'tmp' to 'var/tmp', as '/var' will be mounted with
-       # tmpfs, saving a second tmpfs been mounted on '/tmp'.
-       ln -sf var/tmp ${BUILD_DIR}/tmp
-       for _dir in ${INITRD_DIRS}; do
-           [ ! -d "${BUILD_DIR}/${_dir}" ] &&
-               mkdir -p ${BUILD_DIR}/${_dir}
-       done
-       echo "Created directory structure"
-}
-
-copy_content()
-{
-       for dir in ${CONTENT_DIRS}; do
-               cpdup -o -u ${dir}/ ${BUILD_DIR}/ || {
-                       echo "Failed to copy ${dir} to ${BUILD_DIR}"
-                       exit 1
-               }
-       done
-}
-
-print_info()
-{
-       lt ${BUILD_DIR}
-       df -h ${BUILD_DIR}
-}
-
-usage()
-{
-       echo "usage: ${0##*/} [-b bootdir] [-c contentsdir] [-t tmpdir]" \
-            "[-s size] [-S max_size]"
-       exit 2
-}
-
-
-#
-# Main
-#
-
-while getopts :b:c:hs:S:t: opt; do
-       case ${opt} in
-       b)
-               BOOT_DIR="${OPTARG}"
-               ;;
-       c)
-               CONTENT_DIRS="${OPTARG}"
-               ;;
-       h)
-               usage
-               ;;
-       s)
-               INITRD_SIZE="${OPTARG}"
-               ;;
-       S)
-               INITRD_SIZE_MAX="${OPTARG}"
-               ;;
-       t)
-               TMP_DIR="${OPTARG}"
-               ;;
-       \?)
-               log "Invalid option -${OPTARG}"
-               usage
-               ;;
-       :)
-               log "Option -${OPTARG} requires an argument"
-               usage
-               ;;
-       esac
-done
-
-shift $((OPTIND - 1))
-[ $# -ne 0 ] && usage
-[ -z "${BOOT_DIR}" -o -z "${CONTENT_DIRS}"  -o -z "${TMP_DIR}" ] && usage
-check_dirs ${BOOT_DIR} ${CONTENT_DIRS} ${TMP_DIR}
-
-BUILD_DIR="${TMP_DIR}/initrd.$$"
-INITRD_SIZE=${INITRD_SIZE%[mM]}  # MB
-INITRD_SIZE_MAX=${INITRD_SIZE_MAX%[mM]}  # MB
-
-CSIZE=$(calc_initrd_size)
-echo "Required initrd image size: ${CSIZE} MB"
-if [ -n "${INITRD_SIZE}" -a "${INITRD_SIZE}" != "0" ]; then
-       if [ ${CSIZE} -gt ${INITRD_SIZE} ]; then
-               echo "Specified initrd size (${INITRD_SIZE} MB) too small"
-               exit 1
-       fi
-else
-       INITRD_SIZE=${CSIZE}
-fi
-echo "Initrd size: ${INITRD_SIZE} MB"
-
-if [ -n "${INITRD_SIZE_MAX}" -a "${INITRD_SIZE_MAX}" != "0" ] && \
-   [ ${INITRD_SIZE} -gt ${INITRD_SIZE_MAX} ]; then
-       echo "Exceeded the specified maximum size (${INITRD_SIZE_MAX} MB)"
-       exit 1
-fi
-
-create_vn
-copy_content
-make_hier
-print_info
-destroy_vn
-
-echo -n "Compressing ${TMP_DIR}/initrd.img ..."
-gzip -9 ${TMP_DIR}/initrd.img
-echo " OK"
-
-DEST="${BOOT_DIR}/kernel/initrd.img.gz"
-if [ -f "${DEST}" ]; then
-       echo -n "Backup ${DEST} ..."
-       mv ${DEST} ${DEST}.old
-       echo " OK (${DEST}.old)"
-fi
-
-echo -n "Copying ${TMP_DIR}/initrd.img.gz to ${DEST} ..."
-mv ${TMP_DIR}/initrd.img.gz ${DEST}
-echo " OK"
index 0060698..e510aae 100644 (file)
@@ -1,11 +1,30 @@
 #      @(#)Makefile    8.1 (Berkeley) 6/5/93
 # $FreeBSD: src/share/Makefile,v 1.22.2.4 2002/03/12 17:13:32 phantom Exp $
 
-SUBDIR= colldef dict doc examples i18n initrd locale-links \
-       man me misc mk ctypedef monetdef msgdef \
-       numericdef skel syscons tabset termcap terminfo timedef zoneinfo
+SUBDIR= colldef \
+       ctypedef \
+       dict \
+       doc \
+       examples \
+       i18n \
+       locale-links \
+       man \
+       me \
+       misc \
+       mk \
+       monetdef \
+       msgdef \
+       numericdef \
+       skel \
+       syscons \
+       tabset \
+       termcap \
+       terminfo \
+       timedef \
+       zoneinfo
 
-SUBDIR_ORDERED=                # maximum parallism
+# maximum parallism
+SUBDIR_ORDERED=
 
 .if defined(WANT_INSTALLER)
 SUBDIR+= installer
diff --git a/share/initrd/Makefile b/share/initrd/Makefile
deleted file mode 100644 (file)
index 58f2fa4..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-SUBDIR=        etc bin sbin sbin.libcrypto sbin.lvm mini_init
-
-.include <bsd.subdir.mk>
diff --git a/share/initrd/etc/Makefile b/share/initrd/etc/Makefile
deleted file mode 100644 (file)
index 7ee33a3..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#If you want to add files to other subdirectories, please use a similar
-#approach as below, for example for var:
-#
-#add VAR_FILES=        foo
-#add ${VAR_FILES} to FILES=
-#add a for loop for ${VAR_FILES}
-
-ETC_SCRIPTS=   rc rc.lvm2 rcmount_crypt rcmount_tcplay
-FILES=         ${ETC_SCRIPTS}
-
-.for file in ${ETC_SCRIPTS}
-FILESDIR_${file}=${SHAREDIR}/initrd/etc
-FILESMODE_${file}=555
-.endfor
-
-# Files that should be installed read-only (444)
-#
-ETC_FILES=     ${.CURDIR}/../../../etc/protocols       \
-               ${.CURDIR}/../../../etc/regdomain.xml   \
-               ${.CURDIR}/../../../etc/wpa_supplicant.conf     \
-               ${.CURDIR}/motd
-
-PW_FILES=      /tmp/pwd.db /tmp/spwd.db
-
-afterinstall:
-       ${INSTALL} -o root -g wheel -m 444 \
-               ${ETC_FILES} ${DESTDIR}${SHAREDIR}/initrd/etc
-       cp ${.CURDIR}/../../../etc/master.passwd /tmp
-       /usr/sbin/pwd_mkdb -d /tmp /tmp/master.passwd
-       ${INSTALL} -o root -g wheel -m 444 \
-               ${PW_FILES} ${DESTDIR}${SHAREDIR}/initrd/etc
-
-.include <bsd.prog.mk>
index 0723fc1..d13fa29 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man7/build.7,v 1.19.2.1 2002/03/18 08:33:02 murray Exp $
 .\"
-.Dd July 23, 2016
+.Dd June 2, 2018
 .Dt BUILD 7
 .Os
 .Sh NAME
@@ -143,7 +143,8 @@ Reinstall the kernel and the kernel-modules.
 .Cm installkernel .
 .It Cm preupgrade
 Perform certain upgrades that have to be done before
-.Cm installworld .
+.Cm installworld ,
+such as adding new users and groups.
 .Cm installworld
 will complain if they have not been done.
 .It Cm upgrade
@@ -152,7 +153,9 @@ the version of
 .Dx
 just installed.
 .It Cm rescue
-Create a rescue initrd.
+Build and install the statically linked rescue tools.
+.It Cm initrd
+Create the initial ramdisk based on the above rescue tools and install.
 .It Cm most
 Build user commands, no libraries or include files.
 .It Cm installmost
@@ -287,7 +290,7 @@ existence and present a menu option 'b' to allow you to boot from it.
 .Pp
 The second mechanism is related to the two-stage root mount.
 When using an encrypted root, the system will actually boot from a
-small UFS image stored as
+small initial ramdisk (a.k.a. initrd) image stored as
 .Pa /boot/kernel/initrd.img.gz .
 This image will handle the encrypted configuration, mount, and chroot
 to the real root.
@@ -298,12 +301,12 @@ or
 .Cm installkernel .
 Instead, updating this image has to be done by running the manual command:
 .Bd -literal -offset indent
-mkinitrd
+make initrd
 .Ed
 .Pp
-It is usually a good idea to run this command after rebooting into a new
+It is usually a good idea to run this command after rebooting into the new
 world that you installed (so you know the world you installed is good).
-This command will update the rescue ramdisk image in
+This command will update the initrd image in
 .Pa /boot/kernel .
 .Sh FILES
 .Bl -tag -width ".Pa /usr/src/Makefile_upgrade.inc" -compact
index 72d1036..a31d143 100644 (file)
@@ -40,7 +40,7 @@ CLEANFILES+= ${CONF} *.o *.lo *.c *.mk *.cache *.a *.h
 # Set a default SRCDIR for each for simpler handling below.
 .for D in ${CRUNCH_SRCDIRS}
 .for P in ${CRUNCH_PROGS_${D}}
-CRUNCH_SRCDIR_${P}?=   ${.CURDIR}/../../../${D}/${P}
+CRUNCH_SRCDIR_${P}?=   ${.CURDIR}/../../${D}/${P}
 .endfor
 .endfor