merge "cleanup" and "pre-pivot-cleanup" hooks
[platform/upstream/dracut.git] / README.modules
1 Most of the functionality that dracut implements are actually implemented
2 by dracut modules.  Dracut modules live in modules.d, and have the following
3 structure:
4
5 dracut_install_dir/modules.d/
6         00modname/
7                 module-setup.sh
8                 check
9                 <other files as needed by the hook>
10
11 00modname: The name of the module prefixed by a two-digit numeric sort code.
12            The numeric code must be present and in the range of 00 - 99.
13            Modules with lower numbers are installed first.  This is important
14            because the dracut install functions (which install files onto
15            the initrd) refuse to overwrite already installed files. This makes
16            it easy for an earlier module to override the functionality of a
17            later module, so that you can have a distro or system specific
18            module override or modify the functionality of a generic module
19            without having to patch the more generic module.
20
21 module-setup.sh:
22          dracut sources this script to install the functionality that a
23          module implements onto the initrd.  For the most part, this amounts
24          to copying files from the host system onto the initrd in a controlled
25          manner.
26
27 install():
28          This function of module-setup.sh is called to install all
29          non-kernel files. dracut supplies several install functions that are
30          specialized for different file types.  Browse through dracut-functions
31          fore more details.  dracut also provides a $moddir variable if you
32          need to install a file from the module directory, such as an initrd
33          hook, a udev rule, or a specialized executable.
34
35 installkernel():
36          This function of module-setup.sh is called to install all
37          kernel related files.
38
39
40 check():
41        Dracut calls this function to check and see if a module can be installed
42        on the initrd.
43
44        When called without options, check should check to make sure that
45        any files it needs to install into the initrd from the host system
46        are present.  It should exit with a 0 if they are, and a 1 if they are
47        not.
48
49        When called with $hostonly set, it should perform the same check
50        that it would without it set, and it should also check to see if the
51        functionality the module implements is being used on the host system.
52        For example, if this module handles installing support for LUKS
53        encrypted volumes, it should return 0 if all the tools to handle
54        encrpted volumes are available and the host system has the root
55        partition on an encrypted volume, 1 otherwise.
56
57 depends():
58        This function should output a list of dracut modules
59        that it relies upon.  An example would be the nfs and iscsi modules,
60        which rely on the network module to detect and configure network
61        interfaces.
62
63 Any other files in the module will not be touched by dracut directly.
64
65 You are encouraged to provide a README that describes what the module is for.
66
67
68 HOOKS
69 =====
70
71 init has the following hook points to inject scripts:
72
73 /lib/dracut/hooks/cmdline/*.sh
74    scripts for command line parsing
75
76 /lib/dracut/hooks/pre-udev/*.sh
77    scripts to run before udev is started
78
79 /lib/dracut/hooks/pre-trigger/*.sh
80    scripts to run before the main udev trigger is pulled
81
82 /lib/dracut/hooks/initqueue/*.sh
83    runs in parallel to the udev trigger
84    Udev events can add scripts here with /sbin/initqueue.
85    If /sbin/initqueue is called with the "--onetime" option, the script
86    will be removed after it was run.
87    If /lib/dracut/hooks/initqueue/work is created and udev >= 143 then
88    this loop can process the jobs in parallel to the udevtrigger.
89    If the udev queue is empty and no root device is found or no root
90    filesystem was mounted, the user will be dropped to a shell after
91    a timeout.
92    Scripts can remove themselves from the initqueue by "rm $job".
93
94 /lib/dracut/hooks/pre-mount/*.sh
95    scripts to run before the root filesystem is mounted
96    Network filesystems like NFS that do not use device files are an
97    exception. Root can be mounted already at this point.
98
99 /lib/dracut/hooks/mount/*.sh
100    scripts to mount the root filesystem
101    If the udev queue is empty and no root device is found or no root
102    filesystem was mounted, the user will be dropped to a shell after
103    a timeout.
104
105 /lib/dracut/hooks/pre-pivot/*.sh
106    scripts to run before latter initramfs cleanups
107
108 /lib/dracut/hooks/cleanup/*.sh
109    scripts to run before the real init is executed and the initramfs
110    disappears
111    All processes started before should be killed here.
112