mkinitrd(8): Add two options for overriding the tmpdir and the bootdir.
authorSascha Wildner <saw@online.de>
Wed, 3 Nov 2010 20:31:52 +0000 (21:31 +0100)
committerSascha Wildner <saw@online.de>
Wed, 3 Nov 2010 20:32:32 +0000 (21:32 +0100)
This can be useful if you're installing to a mounted partition (e.g., from
the installer).

While here, clean up a bit and add a license.

sbin/mkinitrd/mkinitrd.8
sbin/mkinitrd/mkinitrd.sh

index 9cb199d..b1262c8 100644 (file)
@@ -28,7 +28,7 @@
 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd September 10, 2010
+.Dd November 3, 2010
 .Os
 .Dt MKINITRD 8
 .Sh NAME
@@ -36,8 +36,8 @@
 .Nd build an initial ramdisk image for use as early userland
 .Sh SYNOPSIS
 .Nm
-.\".Op Ar options ...
-.\".Ar target ...
+.Op Fl b Ar bootdir
+.Op Fl t Ar tmpdir
 .Sh DESCRIPTION
 The
 .Nm
@@ -56,6 +56,18 @@ onto the ramdisk, maintaining the same hierarchy.
 On completion, the final image will be copied to
 .Pa /boot/kernel/initrd.img ,
 ready to be used as an early userland.
+The base directory for
+.Pa kernel/initrd.img
+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
index d61e710..1ed2843 100644 (file)
@@ -1,6 +1,37 @@
 #!/bin/sh
+#
+# Copyright (c) 2010
+#      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.
 
-BUILD_DIR="/tmp/initrd"
+TMP_DIR="/tmp"
+BOOT_DIR="/boot"
 INITRD_SIZE="15m"
 BIN_TOOLS="mkdir rm sh kill"
 SBIN_TOOLS="mount mount_devfs mount_hammer mount_nfs mount_null mount_procfs mount_tmpfs umount iscontrol cryptsetup lvm sysctl udevd"
@@ -20,12 +51,13 @@ fi
 
 VN_DEV=""
 
-create_vn() {
+create_vn()
+{
        if [ ! -d  $BUILD_DIR ]; then
                mkdir -p $BUILD_DIR
                echo "Created build directory $BUILD_DIR"
        fi
-       VN_DEV=`vnconfig -c -S ${INITRD_SIZE} -Z -T vn initrd.img | cut -f 2 -d ' '`
+       VN_DEV=`vnconfig -c -S ${INITRD_SIZE} -Z -T vn ${TMP_DIR}/initrd.img | cut -f 2 -d ' '`
        echo "Configured $VN_DEV"
        newfs /dev/${VN_DEV}s0
        echo "Formatted initrd image with UFS"
@@ -33,14 +65,16 @@ create_vn() {
        echo "Mounted initrd image on ${BUILD_DIR}"
 }
 
-destroy_vn() {
+destroy_vn()
+{
        umount /dev/${VN_DEV}s0
        echo "Unmounted initrd image"
        vnconfig -u $VN_DEV
        echo "Unconfigured $VN_DEV"
 }
 
-make_hier() {
+make_hier()
+{
        for dir in ${INITRD_DIRS}; do
                mkdir -p ${BUILD_DIR}/${dir}
        done
@@ -48,7 +82,8 @@ make_hier() {
        echo "Created directory structure"
 }
 
-copy_tools() {
+copy_tools()
+{
        for tool in ${BIN_TOOLS}; do
                objcopy -S /bin/${tool} ${BUILD_DIR}/bin/${tool}
        done
@@ -60,22 +95,46 @@ copy_tools() {
        echo "Copied essential tools"
 }
 
-copy_content() {
+copy_content()
+{
        for dir in ${CONTENT_DIRS}; do
                cp -R ${dir}/* ${BUILD_DIR}/
        done
 }
 
-print_info() {
+print_info()
+{
        lt ${BUILD_DIR}
        df -h | head -n 1
        df -h | grep $VN_DEV
 }
 
+usage()
+{
+       echo "usage: $0 [-b bootdir] [-t tmpdir]"
+       exit 2
+}
+
+args=`getopt b:t: $*`
+test $? -ne 0 && usage
+
+set -- $args
+for i; do
+       case "$i" in
+       -b)     BOOT_DIR="$2"; shift; shift;;
+       -t)     TMP_DIR="$2"; shift; shift;;
+       --)     shift; break;
+       esac
+done
+test ! -d ${BOOT_DIR} && usage
+test ! -d ${TMP_DIR} && usage
+test ! -z $1 && usage
+BUILD_DIR="${TMP_DIR}/initrd"
+
 create_vn
 make_hier
 copy_tools
 copy_content
 print_info
 destroy_vn
-mv initrd.img /boot/kernel/initrd.img
+mv ${TMP_DIR}/initrd.img ${BOOT_DIR}/kernel/initrd.img