]>
Commit | Line | Data |
---|---|---|
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 |