701ced5ddb
Apply diff anaconda-21.48.21-1..anaconda-22.20.13-1 |
||
---|---|---|
.. | ||
anaconda-copy-cmdline.sh | ||
anaconda-copy-ks.sh | ||
anaconda-depmod.sh | ||
anaconda-diskroot | ||
anaconda-ifcfg.sh | ||
anaconda-ks-sendheaders.sh | ||
anaconda-lib.sh | ||
anaconda-modprobe.sh | ||
anaconda-netroot.sh | ||
anaconda-pre-shutdown.sh | ||
driver-updates | ||
driver-updates-net.sh | ||
driver-updates.sh | ||
driver-updates@.service | ||
fetch-driver-net.sh | ||
fetch-kickstart-disk | ||
fetch-kickstart-net.sh | ||
fetch-updates-disk | ||
kickstart-genrules.sh | ||
Makefile.am | ||
Makefile.in | ||
module-setup.sh | ||
parse-anaconda-dd.sh | ||
parse-anaconda-kickstart.sh | ||
parse-anaconda-net.sh | ||
parse-anaconda-options.sh | ||
parse-anaconda-repo.sh | ||
parse-kickstart | ||
python-deps | ||
README | ||
README-dd | ||
repo-genrules.sh | ||
save-initramfs.sh | ||
updates-genrules.sh |
SOME IMPORTANT NOTES ABOUT HOW DRACUT WORKS =========================================== Will Woods <wwoods@redhat.com> v1.0, August 2012 // vim: set syntax=asciidoc textwidth=78: File locations / installation ----------------------------- The files are installed into the initramfs according to the instructions in `module-setup.sh`. So this line: inst_hook cmdline 25 "$moddir/parse-anaconda-options.sh" means that the file `parse-anaconda-options.sh` will be installed at priority `25` in the `cmdline` hook. In practice, this means that it will be located at /lib/dracut/hooks/cmdline/25-parse-anaconda-options.sh inside the initramfs. Hooks and script ordering ------------------------- The hooks run in the following order: cmdline:: This is where you parse (and _only_ parse) the boot commandline. Just set up config files and do sanity checks; the real action is later. pre-udev:: This is where you write out udev rules (before udev starts). pre-trigger:: At this point udev is running but *kernel modules haven't been loaded*. If you need to set udev environment variables, set them here. initqueue:: This is the mainloop, where initramfs tries to find/fetch rootfs. Scripts in this hook will run _repeatedly_ until finished or timeout (see below). Runs at 0.5-second intervals. initqueue/settled:: This part of the mainloop only runs once _udev is settled_, i.e. once all devices have been found. initqueue/online:: This hook runs _every time a network device goes online_. initqueue/finished:: If all the scripts here return success dracut exits the mainloop, _even if some initqueue scripts have not yet run_. To put it another way, if you want dracut to wait for something to happen, you need a script in `initqueue/finished` that returns non-zero _until_ the thing you're waiting for happens. pre-mount:: Runs _once_ before trying to mount rootfs. mount:: Each script in this hook runs in order, until one of them mounts rootfs at `$NEWROOT`. May run multiple times. pre-pivot:: This is where you (e.g.) copy files into `$NEWROOT` before switching over. cleanup:: Clean up after your other hooks. The scripts _within_ each hook run according to the numeric priority given in the `inst_hook` lines in `module-setup.sh`. Variables, scope, sharing data between scripts ---------------------------------------------- Each script in a hook gets sourced by the same `bash` interpreter. If you define a function or variable in a script, each subsequent script _in the same hook_ can see and use it, but *it won't be visible to other hooks.* If you export a variable, it will be available to all subsequent scripts. You can, of course, also share data by writing files to `/tmp`. *NOTE:* You can break _other_ modules by accidentally overwriting their variables. Avoid the following variable names in your own code. Exported Variables ~~~~~~~~~~~~~~~~~~ ==== Special dracut variables ==== $root:: The root device. Must be set by the end of the `cmdline` hook. Might not actually be a device (e.g. "nfs"). $rflags:: Mount flags for the root device. $fstype:: The fstype of the root filesystem. Usually `auto`. $netroot:: The network root location. Syntax depends on type of network root. ==== Read-only dracut variables ==== $NEWROOT:: Mountpoint for the root filesystem. Usually `/sysroot`. $hookdir:: Location of the dracut hooks. Usually `/lib/dracut/hooks`. $RDRETRY:: Number of loops to try before giving up. Usually *60* (=30 seconds). $main_loop:: Counter for the current mainloop iteration. $DRACUT_QUIET:: Whether dracut should operate quietly; `yes` or `no`. (Don't worry about this; just use `info()` or `warn()` instead) $UDEVVERSION:: Self-explanatory. ==== Variables from other modules ==== $resume, $splash:: Used by `95resume`. $CURL_HOME:: Exported by `45url-lib`. ==== Anaconda ==== $kickstart:: Anaconda-style URL for the kickstart. $anac_updates:: Anaconda-style URL for `updates.img`. $ksdevice:: Network device to use for fetching kickstart/stage2/etc. Further Reading --------------- Dracut documentation: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html My other set of dracut notes: http://wwoods.fedorapeople.org/doc/dracut-notes.html