MKINITCPIO
Section: mkinitcpio manual (8)
Updated: 10/16/2018
Page Index
NAME
mkinitcpio - Create an initial ramdisk environment
SYNOPSIS
mkinitcpio [options]
DESCRIPTION
Creates an initial ramdisk environment for booting the linux kernel. The initial ramdisk is in essence a very small environment (early userspace) which loads various kernel modules and sets up necessary things before handing over control to init. This makes it possible to have, for example, encrypted root filesystems and root filesystems on a software RAID array. mkinitcpio allows for easy extension with custom hooks, has autodetection at runtime, and many other features.
OPTIONS
-A, --addhooks hooks
-
Add the additional
hooks
to the image. These will be processed in order after all other hooks from the config file. Multiple hooks should be comma-separated. This option can be specified multiple times.
-c, --config config
-
Use
config
file to generate the ramdisk. Default: /etc/mkinitcpio.conf
-d, --generatedir directory
-
Set
directory
as the location where the initramfs is built. This might be useful to generate a shutdown ramfs in
/run/initramfs.
-g, --generate filename
-
Generate a CPIO image as
filename. Default: no; this means nothing will be written to the filesystem unless this option is specified.
-H, --hookhelp hookname
-
Output help for hookname
hookname.
-h, --help
-
Output a short overview of available command-line switches.
-k, --kernel kernelversion
-
Use
kernelversion, instead of the current running kernel. This may be a path to a kernel image (only supported for x86-based architectures), a specific kernel version or the special keyword
none. In the latter case, no kernel modules are added to the image.
-L, --listhooks
-
List all available hooks.
-M, --automods
-
Display modules found via autodetection. mkinitcpio will automatically try to determine which kernel modules are needed to start your computer. This option lists which modules were detected.
-n, --nocolor
-
Disable color output.
-P, --allpresets
-
Process all presets contained in
/etc/mkinitcpio.d. See the
-p
option for more detail about presets.
-p, --preset preset
-
Build initramfs image(s) according to specified
preset. This may be a file in /etc/mkinitcpio.d (without the .preset extension) or a full, absolute path to a file. This option may be specified multiple times to process multiple presets.
-r, --moduleroot root
-
Specifies the root directory to find modules in, defaulting to
/.
-S, --skiphooks hooks
-
Skip
hooks
when generating the image. Multiple hooks should be comma-separated. This option can be specified multiple times.
-s, --save
-
Saves the build directory for the initial ramdisk. Default: no; This means the directory will not be retained if this option isn't specified. Useful for debugging purposes.
-t, --builddir tmpdir
-
Use
tmpdir
as the temporary build directory instead of /tmp.
tmpdir
must exist. The
TMPDIR
environment variable is also honored to set this location, but the command line option will take precedence.
-V, --version
-
Display version information.
-v, --verbose
-
Verbose output. Outputs more information about what's happening during creation of the ramdisk.
-z, --compress compress
-
Override the compression method with the
compress
program.
ABOUT PRESETS
A preset is a pre-defined definition on how to create an initial ramdisk. Instead of specifying the configuration file and which output file, every time you generate a new initial ramdisk, you define a preset and use the -p switch to generate an initial ramdisk according to your preset. Presets are located in /etc/mkinitcpio.d
ABOUT INSTALL HOOKS
Install hooks are bash scripts which are sourced during mkinitcpio runtime in order to add modules, binaries, and other files to the image. A variety of functions exist to facilitate this.
add_module modname
-
Adds the module specified by
modname
to the image. Dependencies are derived and added automatically.
add_binary binary [ destination ] [ mode ]
-
Adds a binary to the image. The argument
binary
need not be an absolute path and, if needed, a lookup will be performed. If the binary is a dynamically linked ELF binary, dependencies will be automatically added. Optionally, a destination within the initramfs image as well as a file mode can be specified. By default, the destintation and mode be taken from the source derived from
binary.
add_file path [ destination ] [ mode ]
-
Adds a file and any needed parent directories to the image. Optionally, a destination within the initramfs image as well as a file mode can be specified. By default, the destination and mode will be taken from the source and mode of the file specified by the
path.
add_dir path
-
Adds a directory and its parents to the image.
add_full_dir directory [ glob ] [ strip_prefix ]
-
Recursively adds a directory to the image by walking the given path and calling
add_file,
add_dir, and
add_symlink
accordingly. This function will not follow symlinks, nor will it add the targets of symlinks.
-
If the 'glob' argument is passed, only files and symlinks matching this glob
will be added.
-
If the 'strip_prefix' argument is passed, it will be used to strip the
destination path (path in the initramfs image) from the prefix specified by
the 'strip_prefix' argument. This can be useful when writing rootfs-overlay
hooks.
add_symlink path [ link-target ]
-
Adds a symlink to the image at the specified
path, optionally pointing to the specified
link-target. If the
link-target
is not provided, it is assumed that this symlink exists in the real filesystem, and the target will be read using readlink. There is no checking done to ensure that the target of the symlink exists, and symlinks will not be followed recursively.
add_all_modules [ -f filter ] pattern
-
Adds modules to the image, without regard for the autodetect whitelist.
pattern
should be a subdirectory within the kernel tree describing a subset of modules to be included. Further refinement can be provided via the -f flag with an extended regular expression.
add_checked_modules [ -f filter ] pattern
-
Similar to
add_all_modules
with the constraint that only modules matching the whitelist generated by the autodetect hook will be added to the image. If the autodetect hook is not present in the image, this function is identical to
add_all_modules.
add_runscript
-
Adds a runtime hook to the image, which is a busybox ash compatible shell script. The name of the script is guaranteed to match the name of the hook the script is called from.
ABOUT RUNTIME HOOKS
Runtime hooks added to the image via the add_runscript function from an install hook are able to provide extra functionality during early userspace. Specific functions in these files will run at different times. A hook can define one or more of these. At each hook point, hooks are run in the order that they are defined in the HOOKS variable, except for cleanup hooks which are run in reverse.
run_earlyhook
-
Functions of this name will be run once the API mounts have been setup and the kernel command line has been parsed. Daemons needed for early userspace should be started from this hook point.
run_hook
-
Functions of this name will be run after any early hooks, and after user defined modules have been installed. This is the most common hook point, and functionality such as scanning for LVM volumes and mapping encrypted volumes should be performed here.
run_latehook
-
Functions of this name will be run after root has been mounted. This is generally used for further necessary setup in the real root, such as mounting other system partitions.
run_cleanuphook
-
Functions of this name are run as late as possible. Any daemons started from a run_earlyhook function should be shut down here in preparation for switching to the real root.
EARLY INIT ENVIRONMENT
mkinitcpio gives special treatment to certain environment variables passed on the kernel command line:
break[=<premount|postmount>]
-
If specified, mkinitcpio will start a shell during early init. The optional parameter controls when this occurs: when
premount
or no parameter are specified, the shell will be launched prior to mounting root. If
postmount
is specified, the shell will be launched after mounting root.
disablehooks=hooklist
-
This is a comma separated list of hooks which will be skipped during early init.
earlymodules=modulelist
-
This is a comma separated list of modules which will be loaded prior to any others. This is generally not needed, and usually points to a configuration or kernel problem.
quiet
-
Causes mkinitcpio to output fewer messages during boot. Errors will not be suppressed.
ro
-
Specifies that root should be mounted with readonly permissions. This is the default behavior.
rw
-
Specifies that root should be mounted with readwrite permissions. This is generally only useful if your initramfs uses the
fsck
hook.
root=rootdevice
-
This variable describes the root partition which early init will mount before passing control to the real init. mkinitcpio understands a variety of formats, the most basic of which is the path to the block device, either directly such as
/dev/sda2, or using a udev symlink such as
/dev/disk/by-label/CorsairF80-root. Support for identification by LABEL or UUID tags are also supported, such as,
LABEL=CorsairF80-root. As of util-linux 2.22, PARTUUID and PARTLABEL are also supported. Identification via hex encoded major/minor device ID is supported for legacy reasons, but should be avoided as it tends to be fragile.
rootdelay=seconds
-
Sets the delay, in seconds, that mkinitcpio is willing to wait for the root device to show up, if it is not available immediately. This defaults to 10 seconds. If an invalid integer is passed, this variable will have no effect.
rootflags=flaglist
-
A comma-separated list of flags which will be passed onto the
mount(8) command when mounting the root filesystem. Acceptable values are filesystem specific.
rootfstype=fstype
-
Overrides the type of filesystem being mounted as root. This should almost never be needed as
mount(8) usually detects this on its own.
rd.debug
-
Enables shell debug (xtrace). If
rd.log
is not also a parameter on the kernel command line, this parameter implies
rd.log=console.
rd.log[=<console|file|kmsg|all>]
-
Enables logging of early userspace messages. If specified, the optional parameter describes where this information is logged. Multiple options can be OR'd together using the pipe (|) character. Messages are always logged to the console unless the
quiet
parameter is passed. If the optional parameter is not specified,
kmsg|console
is assumed. If
rd.log
is not present on the kernel command line, no logging will take place.
console
-
Writes output to
/dev/console.
file
-
Writes output to
/run/initramfs/init.log.
kmsg
-
Writes output to the
/dev/kmsg
device (introduced in Linux 3.5). This option is a no-op if your kernel lacks support for
/dev/kmsg.
all
-
Writes output to all known log targets.
These are only the variables that the core of mkinitcpio honor. Additional hooks may look for other environment variables and should be documented by the help output for the hook.
FILES
/etc/mkinitcpio.conf
-
Default configuration file for mkinitcpio.
/etc/mkinitcpio.d
-
Directory containing mkinitcpio presets.
/etc/initcpio/install, /usr/lib/initcpio/install
-
Search path for build time hooks.
/etc/initcpio/hooks, /usr/lib/initcpio/hooks
-
Search path for early userspace runtime hooks.
EXAMPLES
mkinitcpio
-
Perform a
dry-run. This will generate an initial ramdisk but will not write anything. Use -g to create the real image.
mkinitcpio -p linux
-
Create an initial ramdisk based on the
linux
preset.
mkinitcpio -g /boot/initramfs-linux.img -k /boot/vmlinuz-linux
-
Create an initial ramdisk for the kernel at /boot/vmlinuz-linux. The resulting image will be written to /boot/initramfs-linux.img.
SEE ALSO
A more thorough article on configuring mkinitcpio: http://wiki.archlinux.org/index.php/Mkinitcpio
initrd(4), lsinitcpio(1), mkinitcpio.conf(5), bootparam(7)
BUGS
Upon writing this manpage, there were no noticeable bugs present. Please visit http://bugs.archlinux.org/ for an up to date list.
AUTHORS
mkinitcpio is created and maintained by the Arch Linux Developer community.
COPYRIGHT
Copyright (c) Arch Linux 2006-2012