Most of the functionality that dracut implements are actually implemented
by dracut modules.  Dracut modules live in modules.d, and have the following
structure:

dracut_install_dir/modules.d/
	00modname/
		module-setup.sh
		check
		<other files as needed by the hook>

00modname: The name of the module prefixed by a two-digit numeric sort code.
	   The numeric code must be present and in the range of 00 - 99.
	   Modules with lower numbers are installed first.  This is important
	   because the dracut install functions (which install files onto
	   the initrd) refuse to overwrite already installed files. This makes
	   it easy for an earlier module to override the functionality of a
	   later module, so that you can have a distro or system specific
	   module override or modify the functionality of a generic module
	   without having to patch the more generic module.

module-setup.sh:
	 dracut sources this script to install the functionality that a
	 module implements onto the initrd.  For the most part, this amounts
	 to copying files from the host system onto the initrd in a controlled
	 manner.

install():
	 This function of module-setup.sh is called to install all
	 non-kernel files. dracut supplies several install functions that are
	 specialized for different file types.  Browse through dracut-functions
	 fore more details.  dracut also provides a $moddir variable if you
	 need to install a file from the module directory, such as an initrd
	 hook, a udev rule, or a specialized executable.

installkernel():
	 This function of module-setup.sh is called to install all
	 kernel related files.


check():
       Dracut calls this function to check and see if a module can be installed
       on the initrd.

       When called without options, check should check to make sure that
       any files it needs to install into the initrd from the host system
       are present.  It should exit with a 0 if they are, and a 1 if they are
       not.

       When called with $hostonly set, it should perform the same check
       that it would without it set, and it should also check to see if the
       functionality the module implements is being used on the host system.
       For example, if this module handles installing support for LUKS
       encrypted volumes, it should return 0 if all the tools to handle
       encrpted volumes are available and the host system has the root
       partition on an encrypted volume, 1 otherwise.

depends():
       This function should output a list of dracut modules
       that it relies upon.  An example would be the nfs and iscsi modules,
       which rely on the network module to detect and configure network
       interfaces.

Any other files in the module will not be touched by dracut directly.

You are encouraged to provide a README that describes what the module is for.


HOOKS
=====

init has the following hook points to inject scripts:

/lib/dracut/hooks/cmdline/*.sh
   scripts for command line parsing

/lib/dracut/hooks/pre-udev/*.sh
   scripts to run before udev is started

/lib/dracut/hooks/pre-trigger/*.sh
   scripts to run before the main udev trigger is pulled

/lib/dracut/hooks/initqueue/*.sh
   runs in parallel to the udev trigger
   Udev events can add scripts here with /sbin/initqueue.
   If /sbin/initqueue is called with the "--onetime" option, the script
   will be removed after it was run.
   If /lib/dracut/hooks/initqueue/work is created and udev >= 143 then
   this loop can process the jobs in parallel to the udevtrigger.
   If the udev queue is empty and no root device is found or no root
   filesystem was mounted, the user will be dropped to a shell after
   a timeout.
   Scripts can remove themselves from the initqueue by "rm $job".

/lib/dracut/hooks/pre-mount/*.sh
   scripts to run before the root filesystem is mounted
   Network filesystems like NFS that do not use device files are an
   exception. Root can be mounted already at this point.

/lib/dracut/hooks/mount/*.sh
   scripts to mount the root filesystem
   If the udev queue is empty and no root device is found or no root
   filesystem was mounted, the user will be dropped to a shell after
   a timeout.

/lib/dracut/hooks/pre-pivot/*.sh
   scripts to run before the real init is executed and the initramfs
   disappears
   All processes started before should be killed here.

