summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Bächler <thomas@archlinux.org>2013-11-19 23:10:26 +0100
committerDave Reisner <dreisner@archlinux.org>2013-11-24 00:50:50 +0100
commit1bf318f11d42522973633aa1c837693476c3a9e0 (patch)
treeec6e4808fb3d09373941e7a129956ac46f65f4ec
parent95b2c16f44f02ac264686651cf1aa207c65cb93a (diff)
downloadmkinitcpio-1bf318f11d42522973633aa1c837693476c3a9e0.tar.gz
mkinitcpio-1bf318f11d42522973633aa1c837693476c3a9e0.tar.xz
mkinitcpio: add -d option
The -d (--generatedir) option writes the root of the generated image directly to the specified directory. Useful for generating a shutdown-ramfs with mkinitcpio -d /run/initramfs/.
-rw-r--r--functions35
-rwxr-xr-xmkinitcpio15
2 files changed, 28 insertions, 22 deletions
diff --git a/functions b/functions
index f0dce80..81a6072 100644
--- a/functions
+++ b/functions
@@ -627,45 +627,46 @@ initialize_buildroot() {
# creates a temporary directory for the buildroot and initialize it with a
# basic set of necessary directories and symlinks
- local workdir= kernver=$1 arch=$(uname -m)
+ local workdir= kernver=$1 arch=$(uname -m) buildroot
if ! workdir=$(mktemp -d --tmpdir mkinitcpio.XXXXXX); then
error 'Failed to create temporary working directory in %s' "${TMPDIR:-/tmp}"
return 1
fi
+ buildroot=${2:-$workdir/root}
# base directory structure
- install -dm755 "$workdir/root"/{new_root,proc,sys,dev,run,tmp,etc,usr/{local,lib,bin}}
- ln -s "usr/lib" "$workdir/root/lib"
- ln -s "../lib" "$workdir/root/usr/local/lib"
- ln -s "bin" "$workdir/root/usr/sbin"
- ln -s "usr/bin" "$workdir/root/bin"
- ln -s "usr/bin" "$workdir/root/sbin"
- ln -s "../bin" "$workdir/root/usr/local/bin"
- ln -s "../bin" "$workdir/root/usr/local/sbin"
+ install -dm755 "$buildroot"/{new_root,proc,sys,dev,run,tmp,etc,usr/{local,lib,bin}}
+ ln -s "usr/lib" "$buildroot/lib"
+ ln -s "../lib" "$buildroot/usr/local/lib"
+ ln -s "bin" "$buildroot/usr/sbin"
+ ln -s "usr/bin" "$buildroot/bin"
+ ln -s "usr/bin" "$buildroot/sbin"
+ ln -s "../bin" "$buildroot/usr/local/bin"
+ ln -s "../bin" "$buildroot/usr/local/sbin"
case $arch in
x86_64)
- ln -s "lib" "$workdir/root/usr/lib64"
- ln -s "usr/lib" "$workdir/root/lib64"
+ ln -s "lib" "$buildroot/usr/lib64"
+ ln -s "usr/lib" "$buildroot/lib64"
;;
esac
# mkinitcpio version stamp
- printf '%s' "$version" >"$workdir/root/VERSION"
+ printf '%s' "$version" >"$buildroot/VERSION"
# kernel module dir
- install -dm755 "$workdir/root/usr/lib/modules/$kernver/kernel"
+ install -dm755 "$buildroot/usr/lib/modules/$kernver/kernel"
# mount tables
- ln -s /proc/self/mounts "$workdir/root/etc/mtab"
- >"$workdir/root/etc/fstab"
+ ln -s /proc/self/mounts "$buildroot/etc/mtab"
+ >"$buildroot/etc/fstab"
# indicate that this is an initramfs
- >"$workdir/root/etc/initrd-release"
+ >"$buildroot/etc/initrd-release"
# add a blank ld.so.conf to keep ldconfig happy
- >"$workdir/root/etc/ld.so.conf"
+ >"$buildroot/etc/ld.so.conf"
printf '%s' "$workdir"
}
diff --git a/mkinitcpio b/mkinitcpio
index 7ce6c5c..30cff6a 100755
--- a/mkinitcpio
+++ b/mkinitcpio
@@ -19,7 +19,7 @@ _d_presets=mkinitcpio.d
# options and runtime data
_optmoduleroot= _optkver= _optgenimg=
-_optcompress=
+_optcompress= _opttargetdir=
_optshowautomods=0 _optsavetree=0 _optshowmods=0
_optquiet=1 _optcolor=1
_optskiphooks=() _optaddhooks=() _hooks=() _optpreset=()
@@ -53,6 +53,7 @@ usage: ${0##*/} [options]
-r, --moduleroot <dir> Root directory for modules (default: /)
-S, --skiphooks <hooks> Skip specified hooks, comma-separated, during build
-s, --save Save build directory. (default: no)
+ -d, --generatedir <dir> Write generated image into <dir>
-t, --builddir <dir> Use DIR as the temporary build directory
-V, --version Display version information and exit
-v, --verbose Verbose output (default: no)
@@ -298,10 +299,10 @@ process_preset() (
trap 'cleanup 130' INT
trap 'cleanup 143' TERM
-_opt_short='A:c:g:H:hk:nLMPp:r:S:st:Vvz:'
+_opt_short='A:c:g:H:hk:nLMPp:r:S:sd:t:Vvz:'
_opt_long=('add:' 'addhooks:' 'config:' 'generate:' 'hookhelp:' 'help'
'kernel:' 'listhooks' 'automods' 'moduleroot:' 'nocolor' 'allpresets'
- 'preset:' 'skiphooks:' 'save' 'builddir:' 'version' 'verbose' 'compress:')
+ 'preset:' 'skiphooks:' 'save' 'generatedir:' 'builddir:' 'version' 'verbose' 'compress:')
parseopts "$_opt_short" "${_opt_long[@]}" -- "$@" || exit 1
set -- "${OPTRET[@]}"
@@ -327,6 +328,10 @@ while :; do
-s|--save)
_optsavetree=1
;;
+ -d|--generatedir)
+ shift
+ _opttargetdir=$1
+ ;;
-g|--generate)
shift
[[ -d $1 ]] && die "Invalid image path -- must not be a directory"
@@ -414,8 +419,8 @@ KERNELVERSION=$(resolve_kernver "$_optkver") || cleanup 1
_d_kmoduledir=$_optmoduleroot/lib/modules/$KERNELVERSION
[[ -d $_d_kmoduledir ]] || die "'$_d_kmoduledir' is not a valid kernel module directory"
-_d_workdir=$(initialize_buildroot "$KERNELVERSION") || cleanup 1
-BUILDROOT=$_d_workdir/root
+_d_workdir=$(initialize_buildroot "$KERNELVERSION" $_opttargetdir) || cleanup 1
+BUILDROOT=${_opttargetdir:-$_d_workdir/root}
. "$_f_config" || die "Failed to read configuration \`%s'" "$_f_config"