Compare commits

..

277 Commits
025 ... 028

Author SHA1 Message Date
Harald Hoyer
036712546b NEWS: update 2013-06-12 13:29:39 +02:00
Harald Hoyer
391d605790 rename kernel command line param action_on_fail to rd.action_on_fail 2013-06-12 13:16:33 +02:00
Harald Hoyer
aef0f55791 dmsquash-live/iso-scan: wait until the iso-scan/filename is found
Do not only run once, but wait until all devices are found.
2013-06-12 12:49:03 +02:00
Harald Hoyer
66ed711ccf systemd/dracut-initqueue.service: specify all initqueues 2013-06-07 13:56:16 +02:00
Harald Hoyer
960b1e48e8 TODO: update 2013-06-07 12:39:46 +02:00
WANG Chao
437a56dc6b dracut-initqueue.service: Fix systemd start condition
Scripts in dracut initqueue hooks are placed under
/usr/lib/dracut/hooks/initqueue/*/ directory.

And also start initqueue service when kernel cmdline has
rd.break=initqueue

Signed-off-by: WANG Chao <chaowang@redhat.com>
2013-06-07 12:38:36 +02:00
Harald Hoyer
630aed8b66 udev-rules: add 80-net-name-slot.rules 2013-06-06 15:40:29 +02:00
Harald Hoyer
af6292f0fc cms/cmssetup.sh: untabify 2013-06-06 14:13:36 +02:00
Harald Hoyer
b710520a3d cms/cmssetup.sh: reload udev rules after adding them 2013-06-06 14:13:01 +02:00
Harald Hoyer
66e092bb53 cms/cmssetup.sh: fix LAYER2 ccw.conf setup 2013-06-06 12:32:36 +02:00
Harald Hoyer
fdc1037b19 cms/cmsifup.sh: correctly set MACADDR and MTU for the ip line
https://bugzilla.redhat.com/show_bug.cgi?id=971025
2013-06-06 12:28:34 +02:00
Harald Hoyer
76df206685 cms/cmssetup.sh: do not echo newlines for ccw.conf
https://bugzilla.redhat.com/show_bug.cgi?id=970982
2013-06-06 12:27:19 +02:00
WANG Chao
77364fd6bb base: setup correct system time and time zone in initrd
Currently in initrd, hardware clock is always considered to use UTC time
format and system time zone is also UTC. Thus system time isn't correct
if hw clock is localtime or we're using other time zone in real root.

To fix this, install /etc/adjtime and /etc/localtime to initrd. If not
using systemd, install /usr/sbin/hwclock for dracut init to setup system
time.

[harald: combined the two hostonly if's]

Signed-off-by: WANG Chao <chaowang@redhat.com>
Signed-off-by: Harald Hoyer <harald@redhat.com>
2013-06-06 12:10:50 +02:00
Harald Hoyer
41b0e41a09 Makefile: report syntax check files for V=1 2013-06-06 11:31:07 +02:00
Harald Hoyer
791532b0ce dracut-install: install libs also from one dir above
some HW has different flavors of basic libs

$ ldconfig -p|fgrep libc.so
libc.so.6 (libc6,64bit, hwcap: 0x0000001000000000, OS ABI: Linux 2.6.32) => /lib64/power6/libc.so.6
libc.so.6 (libc6,64bit, hwcap: 0x0000000000000200, OS ABI: Linux 2.6.32) => /lib64/power6x/libc.so.6
libc.so.6 (libc6,64bit, OS ABI: Linux 2.6.32) => /lib64/libc.so.6

because setting LD_HWCAP_MASK=0 does not work, we have to workaround
this.

$ LD_TRACE_LOADED_OBJECTS=1  LD_HWCAP_MASK=0 /lib64/ld64.so.1 /bin/sh | fgrep libc.so
libc.so.6 => /lib64/power6/libc.so.6 (0x000000804e260000)

Now we try to install the same library from one directory above the one
we installed also.
2013-06-06 11:06:55 +02:00
Harald Hoyer
ad45024416 lvm: fixed "thin" recognition 2013-06-06 09:40:26 +02:00
Dennis Gilmore
3ae5ac28af include panel-tfp410 module on arm systems in the initramfs needed for framebuffer on omap systems 2013-06-06 09:38:44 +02:00
Harald Hoyer
fd28794bbc TEST-99-RPM: generate rpms and exclude /boot loader entries 2013-05-31 10:00:07 +02:00
Harald Hoyer
d18fd0235b dmsquash-live/dmsquash-live-root.sh: fixup 32214acb3a 2013-05-31 09:04:55 +02:00
Harald Hoyer
15c5c072f4 dracut-functions.sh:get_persistent_dev() fix case for multipath
/dev/mapper/mpath* is not a persistent device path

https://bugzilla.redhat.com/show_bug.cgi?id=969068
2013-05-31 07:47:01 +02:00
Harald Hoyer
caf207afa7 ifcfg/write-ifcfg.sh: fixed logic
seems like nobody tested this with recent dracut versions.
2013-05-30 14:37:41 +02:00
Harald Hoyer
57937cf480 lvm: add tools for thin provisioning
https://bugzilla.redhat.com/show_bug.cgi?id=921235
2013-05-30 12:02:59 +02:00
Harald Hoyer
feaf30ffaa network: wait for all required interfaces if "rd.neednet=1"
also set bootdev to the first configured interface, if missing

https://bugzilla.redhat.com/show_bug.cgi?id=801829
2013-05-30 11:38:23 +02:00
Harald Hoyer
dcae873414 systemd/emergency.service: do not run for action_on_fail=continue
same as for dracut-emergency.service
2013-05-30 11:14:39 +02:00
Harald Hoyer
32214acb3a dmsquash-live/dmsquash-live-root.sh: add parameter rd.live.squashimg
rd.live.squashimg names the squash image in the rd.live.dir
and defaults to squashfs.img

https://bugzilla.redhat.com/show_bug.cgi?id=789036
https://bugzilla.redhat.com/show_bug.cgi?id=782108
2013-05-30 09:27:54 +02:00
Harald Hoyer
e64bcf5a99 kernel-modules/module-setup.sh: add hid-hyperv and hv-vmbus 2013-05-30 08:38:40 +02:00
Harald Hoyer
62cb52f431 base/dracut-lib.sh: export DRACUT_SYSTEMD and NEWROOT 2013-05-30 08:32:18 +02:00
dyoung@redhat.com
cf8b1b7853 selinux: load_policy script fix
chroot load_policy will use selinuxfs which should be mounted
in $NEWROOT/sys/fs/selinux for Fedora 19, but because there's
no $NEWROOT/sys/fs, so later process will fail.

Fixing this by bind mount /sys to $NEWROOT/sys.

Signed-off-by: Dave Young <dyoung@redhat.com>
2013-05-30 08:28:11 +02:00
Dan Horák
bc97e005fa use system provides udev rule and initialization script 2013-05-30 08:28:10 +02:00
Baoquan He
679fa7ed3c 99fs-lib/fs-lib.sh: Let user specify the action after fail for fsck
The fsck is ignored when replace emergency_shell with action_on_fail,
now add it.

Signed-off-by: Baoquan He <bhe@redhat.com>
2013-05-30 08:28:08 +02:00
Harald Hoyer
4f084f3ab5 fs-lib/module-setup.sh: add xfs_metadump 2013-05-29 17:51:57 +02:00
Harald Hoyer
af2716626a kernel-modules/module-setup.sh: add nvme kernel module
apparently not caught by the block driver regexp

https://bugzilla.redhat.com/show_bug.cgi?id=910734
2013-05-29 14:48:13 +02:00
Harald Hoyer
6625c085ae ifcfg/write-ifcfg.sh:
- fix ONBOOT for slaves
- set TYPE=Bond for bonding

https://bugzilla.redhat.com/show_bug.cgi?id=919001
2013-05-29 14:38:52 +02:00
Harald Hoyer
af2578562c udev-rules/module-setup.sh: optionally install /etc/pcmcia/config.opts
https://bugzilla.redhat.com/show_bug.cgi?id=920076
2013-05-29 14:29:02 +02:00
Harald Hoyer
8099e7b1ba crypt-loop/module-setup.sh: install loop kernel module 2013-05-29 13:31:54 +02:00
Harald Hoyer
0a3e348225 i18n/module-setup.sh: install default font latarcyrheb-sun16 2013-05-29 13:27:03 +02:00
Harald Hoyer
b78e6ac2c3 dracut-emergency.service: do not start for "action_on_fail=continue" 2013-05-29 11:33:25 +02:00
Dennis Schridde
cbfe65c2fe [40network] Provide a hostname fallback function, in case there is no executable of this name 2013-05-29 11:32:57 +02:00
Harald Hoyer
284d62da81 ifcfg/write-ifcfg.sh: proper NAME the interfaces
https://bugzilla.redhat.com/show_bug.cgi?id=965842
2013-05-28 16:56:40 +02:00
Harald Hoyer
c6df70fb48 btrfs: include btrfs-zero-log in the initramfs
https://bugzilla.redhat.com/show_bug.cgi?id=963257
2013-05-28 16:34:56 +02:00
Harald Hoyer
1b8616adee url-lib/url-lib.sh: turn off curl globbing
https://bugzilla.redhat.com/show_bug.cgi?id=907497
2013-05-28 16:16:26 +02:00
Harald Hoyer
639bd4873b dracut.spec: put selinux for kdump crash file contexts 2013-05-28 15:40:45 +02:00
Kamil Rytarowski
e0904b27ff Fix memory leak 2013-05-28 14:36:37 +02:00
Kamil Rytarowski
d9eff33ce2 Always check the return number of asprintf
asprintf prints to an allocated string. When  successful,  the
functions return the number of bytes printed. If memory allocation
wasn't possible, or some other error occurs, the function will return
-1.

Don't check strp as a result of asprintf, it's content may be undefined.

man 3 asprintf
2013-05-28 14:35:54 +02:00
Kamil Rytarowski
8974102f6b Use consistiently termination code macros
Operate in install_all and install_one consequently on EXIT_SUCCESS
and EXIT_FAILURE termination code macros as they are meant to be
returned from these functions.
2013-05-28 14:34:44 +02:00
Kamil Rytarowski
599182b108 Introduce stricter type correctness 2013-05-28 14:34:29 +02:00
Kamil Rytarowski
6a736cc129 Fix parsing command line arguments
Adjust correctly the *optstring argument of getopt_long. Add support
for a missing option -v|--verbose and drop unknown options -D, -I and -L.
2013-05-28 14:33:02 +02:00
Baoquan He
15b93069bb 01fips/module-setup.sh: add libssl.so.10 to make kdump work with fips mode
FIPS can work well in 1st kernel, but failed in kdump kernel. the
libssl.so.10 and related hmac file are needed. Now add it and it
works.

Signed-off-by: Baoquan He <bhe@redhat.com>
2013-05-28 14:26:31 +02:00
Harald Hoyer
19b5c10963 dracut-functions.sh: clarify instmods() error message 2013-05-28 14:25:49 +02:00
Harald Hoyer
bcfbddefe1 don't add volatile swap partitions to host_devs 2013-05-28 13:36:37 +02:00
Harald Hoyer
780cb33741 systemd: set environment vars DRACUT_SYSTEMD, NEWROOT in service file 2013-05-28 12:50:57 +02:00
Adam Williamson
8d7c07f191 don't specify "p" as a separator for dmraid arrays (RHBZ #966162)
As per RHBZ #966162, parted stopped unconditionally using "p" as a
separator for dmraid device names in version 3.1, so other things need
to fall in line with that convention now.
2013-05-27 10:08:53 +02:00
Harald Hoyer
fefd3f66f9 dracut.sh: degrade message about missing tools for stripping
warning -> info

https://bugzilla.redhat.com/show_bug.cgi?id=958519
2013-05-06 14:20:16 +02:00
Colin Guthrie
d57b8833c4 usrmount: Fix miss-detection of btrfs subvolumes.
This causes the root FS options to be incorrectly applied to to /usr
In some cases this can cause boot failure e.g. due to and XFS /usr
not supporting the 'acl' option from the ext4 root FS.

https://bugs.mageia.org/show_bug.cgi?id=9884
2013-05-06 14:06:07 +02:00
Harald Hoyer
9584c6ae90 zfcp: match udev rule against KERNEL=="zfcp"
zfcp_cfdc will go away in the future

	tt
2013-04-30 18:56:15 +02:00
Harald Hoyer
021b2fddff test: use grep option "-F" and install /etc/os-release 2013-04-30 18:54:33 +02:00
WANG Chao
b6f2e05819 _emergency_shell: Show current working directory correctly in shell.
When dropped to emergency shell, for example, use rd.break=pre-pivot,
the PS1 won't correctly show current directory we're in:

pre-pivot:/# cd /sysroot/
pre-pivot:/#
(still shows "/")

Let's take a look at PS1 variable:

(I'm adding prefix/suffix 'x' to make it clear):
pre-pivot:/# echo x${PS1}x
xpre-pivot:/# x
(PS1 isn't dynamic)

Regarding the current dracut code, it should be:

pre-pivot:/# cd /sysroot/etc
pre-pivot:/sysroot/etc#

With this patch:

pre-pivot:/# echo x${PS1}x
xpre-pivot:${PWD}# x
(Now PS1 is dynamic, it will show the directory correctly)

I tested for both normal boot and kdump boot.

Signed-off-by: WANG Chao <chaowang@redhat.com>
2013-04-30 12:13:56 +02:00
Harald Hoyer
3ed08d1e4d dracut-install: make use of _cleanup_* macros 2013-04-29 11:35:23 +02:00
Harald Hoyer
26a077fc7e fips: do not fail immediatly after loading the crypto modules
Fail only if tcrypt insmod failed.
2013-04-29 11:34:26 +02:00
Harald Hoyer
8461734ee4 dracut.sh: do not preunlink for fips mode
just install prelink and the cache files
2013-04-25 21:16:03 +02:00
Harald Hoyer
6f4c2dada4 fixed fips mode
- preserve timestamps
- copy /lib*/hmaccalc files
- run sha512hmac after kernel module loading
- add more fips kernel modules
2013-04-25 19:44:01 +02:00
Harald Hoyer
ab42fe38fd fixup 3be5d63c2f
either test or []
2013-04-19 15:08:16 +02:00
Harald Hoyer
3be5d63c2f shutdown: redirect output to /dev/console only if it exists 2013-04-19 15:00:20 +02:00
Harald Hoyer
b4dc22cab7 dracut-install: error out, if ldd reports no execution permission
This turns off lazy resolving on noexec mounted tmp directories.

https://bugzilla.redhat.com/show_bug.cgi?id=953426
2013-04-18 12:54:55 +02:00
Harald Hoyer
2b125c69cc base/dracut-lib.sh: do not setdebug, if not in initramfs 2013-04-18 12:54:30 +02:00
Harald Hoyer
9268366cad Makefile: remove dracut-version.sh on clean 2013-04-16 13:41:19 +02:00
Harald Hoyer
d0eedc4a5f .gitignore: ignore more files 2013-04-16 13:38:16 +02:00
Harald Hoyer
4460416abc lsinitrd.sh: do not output filename for a single file 2013-04-16 13:36:04 +02:00
Harald Hoyer
884e1cda7c lsinitrd: drop use of "file" 2013-04-16 13:04:21 +02:00
Harald Hoyer
46a885bf9f dracut-bash-completion.sh: file filename completion 2013-04-16 11:32:32 +02:00
Harald Hoyer
7dbca9be86 lsinitrd: add bash completion 2013-04-16 11:32:31 +02:00
Harald Hoyer
7d9bb76ac7 lsinitrd: switch to getopt and add "-f" and "-k" parameter 2013-04-16 11:32:31 +02:00
Harald Hoyer
26ab7b07a6 Makefile: fixup tarball Makefile 2013-04-15 11:53:03 +02:00
Harald Hoyer
14499534ba dmsquash-live: add support for "iso-scan/filename" kernel parameter
now you can write grub entries like

  set isofile="/Fedora-live.iso"
  loopback loop $isofile
  linux loop)/isolinux/vmlinuz iso-scan/filename=$isofile root=live:CDLABEL=Fedora-...
  initrd (loop)/isolinux/initrd0.img
2013-04-15 11:39:32 +02:00
Harald Hoyer
1540df0e79 url-lib/module-setup.sh: install ca-bundle.crt by libcurl.so
https://bugzilla.redhat.com/show_bug.cgi?id=950770

curl seems to look for /etc/pki/tls/certs/ca-bundle.crt

extract the correct path by disecting libcurl.so
2013-04-12 15:27:27 +02:00
Harald Hoyer
5d68c80b16 systemd: include the systemd-random-seed-load.service
The systemd cryptsetup-generator wants systemd-random-seed-load.service
in case /dev/urandom is the device.
2013-04-12 15:27:27 +02:00
Harald Hoyer
5f8cd1a4be Makefile,git2spec.pl: use "git describe" 2013-04-12 15:27:27 +02:00
Harald Hoyer
14201d23e7 AUTHORS: update 2013-04-12 15:27:27 +02:00
Harald Hoyer
a229b17434 plymouth/plymouth-pretrigger.sh: fixup of ca2c6936 2013-04-12 15:25:44 +02:00
Harald Hoyer
ca2c693679 Do not call plymouth with full path 2013-04-11 16:08:26 +02:00
Harald Hoyer
cdcb27a4fe crypt/module-setup.sh: also handle UUID= while filtering crypttab
The crypttab filter for host-only did not handle UUID= entries.
https://bugzilla.redhat.com/show_bug.cgi?id=919752
2013-04-10 10:16:49 +02:00
WANG Chao
0c5ccb35c7 ifup.sh: Add support for bridge over a vlan tagged interface
This patch add support for bridge a vlan tagged interface, like
br0 -> bond0.7 -> bond0 -> eth0

Signed-off-by: WANG Chao <chaowang@redhat.com>
2013-04-09 13:39:32 +02:00
Baoquan He
9d787df196 Let user specify the action after fail
Currently the default action is emergency_shell when failure happened
during system boot. In kdump, this default may not be expected. E.g,
if dump target is not rootfs, it does not matter if mount root failed.
Adding an action which allow dracut always go ahead though failure
happens is needed by kdump.

So here add a function action_on_fail() and cmdline parameter
action_on_fail=<shell | continue>. Use action_to_fail() to replace
emergency_shell which was called after failure. By $(getarg action_on_fail=),
decide to drop into shell, or to leave away the failure and go ahead.

v3->v4:
add handling of selinux policy loaded failure, and change code format to
be consitent

Signed-off-by: Baoquan He <bhe@redhat.com>

[Edited by harald@redhat.com]
2013-04-09 11:14:08 +02:00
Baoquan He
0290e98271 Wait for logical interface to be up
If bootdev is logical interface like bond, bridge or vlan, we need
wait them up.

Signed-off-by: Baoquan He <bhe@redhat.com>
2013-04-09 10:53:08 +02:00
Harald Hoyer
d136ca4eeb network: support multiple bonding interfaces
Currently dracut only support 1 bond, namyly bond0 by default. However multiple
bonds configuration may be needed. For example in kdump, in 1st kernel, more
than one bonds may be configured, and bondX other than bond0 is used as output
interface to remote host which will store dump core. This patch can solve this
problem, to write real bond information to initramfs, 2nd kdump kernel will
use it to create the relevant bondX interface.

Tested-by: Baoquan He <bhe@redhat.com>
Signed-off-by: Baoquan He <bhe@redhat.com>
2013-04-09 10:52:22 +02:00
WANG Chao
a55f910cf6 ifup.sh: Add support for bridge over team and vlan tagged team
Team is the same network stack as bonding. Therefore give ifup the ability to
handle bridge over team and vlan tagged team as bonding too.

Signed-off-by: WANG Chao <chaowang@redhat.com>
2013-04-09 10:52:22 +02:00
Harald Hoyer
96efbc51ac crypt/module-setup.sh: filter /etc/crypttab in host-only mode
only take those /etc/crypttab entries, which we need to boot the system
2013-04-09 10:48:26 +02:00
Harald Hoyer
9d36d4fb1d dracut-functions.sh: make use of findmnt 2013-04-09 10:47:39 +02:00
Harald Hoyer
41bfa5dad1 nfs/module-setup.sh: combine egreps for /etc/passwd and /etc/group 2013-04-05 16:34:36 +02:00
Harald Hoyer
db9fbaf9b8 TEST-99-RPM: ignore rescue images 2013-04-05 11:52:33 +02:00
Harald Hoyer
56fb5c4dbf TESTSUITE: s/i6300esbwdt/i6300esb ib700wdt/g 2013-04-05 11:07:55 +02:00
Harald Hoyer
a8986425a4 TEST-50-MULTINIC: fixup test suite
qemu of the day doesn't like multicast anymore
2013-04-05 11:07:40 +02:00
Harald Hoyer
ea3c4e8273 Add missing options to manpage and --help output
https://bugzilla.redhat.com/show_bug.cgi?id=948510
2013-04-05 09:01:48 +02:00
Harald Hoyer
6db8c5a5fe base/dracut-lib.sh:wait_for_dev()/cancel_wait_for_dev() set systemd timeouts
Set systemd unit timeouts for the devices we wait for. The systemd
default is 90 seconds, which is way too low for complicated setups.
2013-04-05 08:32:17 +02:00
Harald Hoyer
ab9b04f55b crypt/parse-crypt.sh: create udev rule for systemd
Start the systemd-cryptsetup@luks-*.service for the detected crypto_LUKS
device in the initqueue, so we block in the initqueue and wait for the
password entry.
2013-04-04 12:54:59 +02:00
Harald Hoyer
c4b572b5ca base/dracut-lib.sh: add dev_unit_name()
add helper function to convert device path to systemd unit names
2013-04-04 12:52:53 +02:00
Harald Hoyer
cc6f0925df base/init.sh: fix version output 2013-04-02 13:29:24 +02:00
Harald Hoyer
d50cf62d62 dracut.spec: Require systemd >= 199 2013-03-26 17:04:43 +01:00
Harald Hoyer
75369f8ba0 version 027 2013-03-26 16:55:03 +01:00
Harald Hoyer
8e2bcb4b42 dracut.spec: don't BuildRequire bash-completion for rhel 2013-03-26 16:54:34 +01:00
Harald Hoyer
bfac40665b systemd: add new timers.target and paths.target 2013-03-26 16:19:27 +01:00
Harald Hoyer
6c6d805765 use systemd*dir variables everywhere 2013-03-26 16:19:00 +01:00
Harald Hoyer
44f870be42 test: change qemu param -nographic to -display none for -daemonize
qemu does not like -nographic in combination with -daemonize
2013-03-26 16:17:24 +01:00
Harald Hoyer
b37398dc1c x-initrd-rootfs.mount -> x-initrd.mount 2013-03-26 15:38:50 +01:00
Harald Hoyer
1b0a362d83 multipath: install native systemd service 2013-03-25 07:58:45 +01:00
Harald Hoyer
bb425d20a1 systemd: add dracut.bootup(7) reference to service man pages 2013-03-25 07:56:12 +01:00
Harald Hoyer
cbd69dc6ff install dracut-*.service units 2013-03-25 07:56:12 +01:00
Harald Hoyer
cb8def95c4 dracut.sh: export systemdsystemconfdir 2013-03-22 09:09:10 +01:00
Harald Hoyer
78d1d4f86d dracut.sh: turn off hostonly mode, if udev database is not found 2013-03-20 10:25:23 +01:00
Harald Hoyer
5bfa3b363a dracut.sh: turn off host-only mode, if essential system filesystems not mounted 2013-03-20 10:22:41 +01:00
Harald Hoyer
1d4b337543 dracut.spec: use configure 2013-03-20 08:01:29 +01:00
Harald Hoyer
8c67d395d4 dracut.spec: use pkg-config for bashcompletiondir 2013-03-20 07:15:04 +01:00
Harald Hoyer
02566acdd7 dracut.sh: remove temporary cpio output in trap 2013-03-20 07:08:29 +01:00
Harald Hoyer
478aa7dac1 51-dracut-rescue-postinst.sh,51-dracut-rescue.install: use systemd-machine-id-setup
if /etc/machine-id is empty, use systemd-machine-id-setup
2013-03-20 07:08:29 +01:00
Harald Hoyer
967db70090 51-dracut-rescue-postinst.sh: Rename image and grub entry
grub2-mkconfig ordered the rescue entries higher than the normal ones.

https://bugzilla.redhat.com/show_bug.cgi?id=923439
2013-03-20 07:08:29 +01:00
Harald Hoyer
619c1bb334 51-dracut-rescue-postinst.sh: add extra checks 2013-03-19 16:56:56 +01:00
Harald Hoyer
57aa1e9140 TEST-40-NBD/test.sh: kill_server() after test_run() 2013-03-19 14:53:17 +01:00
Harald Hoyer
af2fcbafe8 network/netroot.sh: do not unset root 2013-03-19 14:53:09 +01:00
Harald Hoyer
7b6bdc3f94 nbd/nbdroot.sh: fix root != blockdev case 2013-03-19 12:26:06 +01:00
Harald Hoyer
db43f56d94 fs-lib/fs-lib.sh:write_fs_tab() start initrd-root-fs.target 2013-03-19 12:26:06 +01:00
Harald Hoyer
a1ebd77179 add dracut.bootup.7 man page 2013-03-19 12:26:06 +01:00
Harald Hoyer
e26d76dca1 systemd: add more ordering 2013-03-19 12:22:33 +01:00
Harald Hoyer
d59732004d drm/module-setup.sh: redirect grep to /dev/null
on some architectures, no pci devices exist
2013-03-18 14:17:19 +01:00
Harald Hoyer
a3a8f58d73 Makefile: use -D_FILE_OFFSET_BITS=64 to build dracut-install 2013-03-18 10:58:25 +01:00
Harald Hoyer
c9e5b75308 kernel-modules/module-setup.sh: don't fail hard on a missing module 2013-03-18 09:29:08 +01:00
Harald Hoyer
fd191a7b41 kernel-modules/module-setup.sh: install all host filesystem drivers
https://bugzilla.redhat.com/show_bug.cgi?id=922565
2013-03-18 08:43:23 +01:00
Harald Hoyer
e42c7a980c sosreport: mkdir /run/initramfs, if it does not exist yet 2013-03-16 10:34:20 +01:00
Harald Hoyer
85804a9197 dmsquash-live: force load squashfs kernel module
https://bugzilla.redhat.com/show_bug.cgi?id=922248
2013-03-16 10:31:37 +01:00
Harald Hoyer
ee2321c91e dracut.conf.5.asc: remove duplicated install_items 2013-03-15 16:54:38 +01:00
Harald Hoyer
11fbde4454 TEST-16-DMSQUASH: use current releasever 2013-03-15 14:41:11 +01:00
Harald Hoyer
fb05f9876a dracut-bash-completion.sh: add --kver kernel version completion 2013-03-15 10:42:18 +01:00
Harald Hoyer
7e9bfdde14 sosreport.sh: use -o short-monotonic for the journal output 2013-03-15 10:41:41 +01:00
Harald Hoyer
7e9fc37db8 dracut.spec: bump systemd version requirement 2013-03-15 07:11:17 +01:00
Harald Hoyer
bb278147cf fixed testsuite 2013-03-15 07:10:20 +01:00
Will Woods
81b676a675 fix typo in dracut.conf.5.asc
It's /etc/dracut.conf.d, not /etc/dracut/conf.d
2013-03-15 07:10:20 +01:00
Harald Hoyer
6b46e7baa0 systemd: do not use "systemd --version" until fixed 2013-03-15 07:10:20 +01:00
Harald Hoyer
85c85f07e2 systemd: switch to new initrd.target
(normal startup)
                                    :
                                    :
                                    v
                              basic.target
                                    |
             ______________________/|
            /                       |
            |                  sysroot.mount
            |                       |
            |                       v
            |             initrd-root-fs.target
            |                       |
            |                       v
            |            initrd-parse-etc.service
(custom initrd services)            |
            |                       v
            |            (sysroot-usr.mount and
            |             various mounts marked
            |               with fstab option
            |                x-initrd.mount)
            |                       |
            |                       v
            |                initrd-fs.target
            |                       |
            \______________________ |
                                   \|
                                    v
                               initrd.target
                                    |
                                    v
                          initrd-cleanup.service
                               isolates to
                         initrd-switch-root.target
                                    |
                                    v
             ______________________/|
            /                       |
            |        initrd-udevadm-cleanup-db.service
            |                       |
(custom initrd services)            |
            |                       |
            \______________________ |
                                   \|
                                    v
                        initrd-switch-root.target
                                    |
                                    v
                        initrd-switch-root.service
                                    |
                                    v
                               switch-root
2013-03-15 07:10:20 +01:00
Harald Hoyer
c853dc72e9 udev-rules/module-setup.sh: do not install /run/* 2013-03-14 18:30:35 +01:00
Harald Hoyer
18d0c9b858 nfs/nfsroot.sh: only cat /etc/fstab, if existant 2013-03-14 18:30:35 +01:00
Harald Hoyer
0a5fd0dcec iscsi/iscsiroot.sh: do not mount manually in systemd mode 2013-03-14 18:30:35 +01:00
Harald Hoyer
e0e99c59a5 ifcfg/write-ifcfg.sh: fixed typo 2013-03-14 18:30:35 +01:00
Harald Hoyer
d46394ad33 dracut.spec: fix requirements 2013-03-14 18:30:35 +01:00
Harald Hoyer
87dc81a1f6 dracut-install: handle more ldd errors 2013-03-14 18:30:35 +01:00
Harald Hoyer
ce92ca0527 51-dracut-rescue-postinst.sh: fixed new-kernel-pkg call 2013-03-14 18:30:35 +01:00
Harald Hoyer
c390590fac TODO: remove completed items 2013-03-14 18:30:35 +01:00
Radek Vykydal
fd8e4aef90 Write BOOTPROTO=ibft for ip=ibft to ifcfg files 2013-03-14 10:54:28 +01:00
Radek Vykydal
c5a742a3bf Don't write DHCPV6C=yes for each dhcp (ipv4) configuration.
Caused probably by commit 32ec0a762d
2013-03-14 10:54:28 +01:00
Harald Hoyer
fc4e10a859 shutdown/shutdown.sh: mount --move all basic mounts out of /oldroot
After mount moving /dev away, apps like plymouth can do reexec with fd
passing of devices, which they want to keep open until the very end.
2013-03-13 17:45:37 +01:00
Harald Hoyer
83bb0893ed dracut.sh: Add --noimageifnotneeded parameter
Do not create an image in host-only mode, if no kernel driver is needed
and no $initdir/etc/cmdline/*.conf is generated.
2013-03-13 14:49:20 +01:00
Harald Hoyer
8fdcc1a9b1 kernel-modules: move usb-storage out of fixed drivers 2013-03-13 14:46:39 +01:00
Harald Hoyer
a23b368c92 systemd: remove upstream renamed old service files 2013-03-13 14:45:55 +01:00
dyoung@redhat.com
bbfff3e58b Add memdebug at different points in 99base/init.sh
Previously I added several trace point to the begin of several
init hooks of systemd, old init script also need this debug info.

Doing same here as what's added in the systemd service scripts:
At cmdline hooks adding trace of "1+:mem 1+:iomem 3+:slab"
For other hooks adding trace of "1:shortmem 2+:mem 3+:slab"

Signed-off-by: Dave Young <dyoung@redhat.com>
2013-03-13 13:12:57 +01:00
dyoung@redhat.com
9c322b2f3b Improve documentation of rd.memdebug
Explain more about rd.memdebug verbose level in dracut.cmdline.7.asc.

Signed-off-by: Dave Young <dyoung@redhat.com>
2013-03-13 13:12:57 +01:00
dyoung@redhat.com
dff9a66c44 print memdebug to stderr
memory usage tracing outputs are debug info, so it should be moved to
stderr instead of stdout.

Signed-off-by: Dave Young <dyoung@redhat.com>
2013-03-13 13:12:57 +01:00
Harald Hoyer
449b0e0707 dracut-initramfs-restore.sh: also look for image in boot loader spec dir 2013-03-13 13:09:13 +01:00
Harald Hoyer
4a5a9c6d89 dracut.spec: fix requirements 2013-03-13 13:01:33 +01:00
Harald Hoyer
917f3e4d25 add dracut-bash-completion.sh 2013-03-13 13:01:33 +01:00
Harald Hoyer
7d848c55a6 dracut.sh: add --regenerate-all 2013-03-13 13:01:33 +01:00
Harald Hoyer
7d17d6c976 plymouth: do not install hooks in systemd mode 2013-03-13 13:01:20 +01:00
Harald Hoyer
b8060ef781 systemd: add sysctl.d and sysctl.conf 2013-03-13 11:37:05 +01:00
Harald Hoyer
727543c1e6 systemd: add modules-load.d modules to the initramfs 2013-03-13 11:37:05 +01:00
Harald Hoyer
c85cda9e2f systemd: local-fs.target is now root-fs.target and initrd-fs.target
Also rename dracut.target to initrd.target

see also systemd commit 700e07f
http://cgit.freedesktop.org/systemd/systemd/commit/?id=700e07f
2013-03-13 09:34:47 +01:00
Harald Hoyer
c0c6c74d99 51-dracut-rescue.install: create directory, if it does not exist 2013-03-13 09:32:14 +01:00
Harald Hoyer
d26bd6ca55 lsinitrd.sh: simplify check for boot loader spec dirs 2013-03-13 09:32:14 +01:00
Harald Hoyer
e22eb857be dracut.spec: add nohostonly and norescue subpackages
we need rpm subpackages, to be able to pull them in the installation
transaction for the initial %posttrans initramfs image creation.
2013-03-12 13:52:57 +01:00
Harald Hoyer
2fa6fd3aaa add 51-dracut-rescue-postinst.sh
also fixup 51-dracut-rescue.install to read in dracut conf
2013-03-11 18:58:32 +01:00
Harald Hoyer
dd5875499e dracut.sh: add swap partitions to host-only setup 2013-03-11 18:58:32 +01:00
Harald Hoyer
d351541ee6 make host_fs_types a hashmap
This requires bash >= 4, but hash maps are so much more comfortable
2013-03-11 18:58:32 +01:00
Harald Hoyer
d928724c3c lsinitrd.sh: removed trailing "}" 2013-03-11 15:46:37 +01:00
Harald Hoyer
727e68d0b5 lsinitrd.sh: fix for default initrd not found, but image given 2013-03-11 15:13:02 +01:00
Harald Hoyer
8d28614e4f 51-dracut-rescue.install: do not unset installonly on remove 2013-03-11 15:12:49 +01:00
Harald Hoyer
fba5fbbdad dracut.spec: add rescue module 2013-03-09 15:32:32 +01:00
Harald Hoyer
d008b6b89f dracut.sh: move cleanup trap, just after mktemp 2013-03-09 15:31:09 +01:00
Harald Hoyer
aede120c92 add rescue dracut module 2013-03-09 15:17:26 +01:00
Harald Hoyer
cc2303001e dracut.sh: add new default path to initramfs according to bootloader spec
see kernel-install(8) and
http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec
2013-03-09 15:17:26 +01:00
Harald Hoyer
54e7d7c32d dracut.sh: remove (default) marker in --help 2013-03-09 15:17:26 +01:00
Harald Hoyer
bcd352dfa1 fedora.conf.example: make hostonly default for fedora 2013-03-09 15:17:26 +01:00
Harald Hoyer
d837ac3984 add /lib/kernel/install.d/51-dracut-rescue.install
Upon installation of a kernel, check if a rescue image is already
available and if not, create a non-hostonly generic initramfs image with
the rescue module added.
2013-03-09 15:16:31 +01:00
Harald Hoyer
900e15da34 systemd/module-setup.sh: call systemd in private dir for version 2013-03-08 11:50:03 +01:00
Harald Hoyer
19d69051a3 NEWS: dracut-026 2013-03-08 07:07:48 +01:00
Harald Hoyer
31737a05e1 systemd: add version check in install() 2013-03-08 07:07:01 +01:00
Harald Hoyer
1161f03777 fips: add lzo module 2013-03-08 07:05:55 +01:00
Harald Hoyer
cf24ac8c19 crypt, dmraid, mdraid: use for_each_host_dev_and_slaves_all()
To catch _all_ UUIDs and not only the first one, use
for_each_host_dev_and_slaves_all
2013-03-07 16:00:00 +01:00
Harald Hoyer
af3ef92a6b dmsquash-live: add iso9660 kernel module 2013-03-07 15:49:24 +01:00
Harald Hoyer
c46cda8260 split 95udev-rules/59-persistent-storage.rules to md and dm modules 2013-03-07 15:01:47 +01:00
Harald Hoyer
34bd2be23f dracut-functions.sh: fix inst_rule_programs()
Logic for the $env{.*} check was reversed and env was missing.

Thanks Colin Guthrie!
2013-03-07 15:01:47 +01:00
Harald Hoyer
c3dd68fcf1 iscsi: run iscsiroot even if no network configured
Also inject finished hooks for every iscsiroot netroot
2013-03-07 14:17:49 +01:00
Harald Hoyer
3e35441f18 kernel-modules: better match for arm architecure 2013-03-07 14:17:33 +01:00
Harald Hoyer
dde2db3da9 lsinitrd: use /boot/<machine-id>/<kernel-version>/initrd as the default image
if /boot/<machine-id> exists; then
use /boot/<machine-id>/<kernel-version>/initrd as the default image;
else fallback to /boot/initramfs-<kernel-version>.img
2013-03-07 13:03:24 +01:00
Harald Hoyer
cbc21754e5 kernel-modules: move some kernel modules out of unconditional install 2013-03-07 12:10:53 +01:00
Harald Hoyer
eb2dc8c34b systemd: add missing dracut-mount.service dracut-pre-mount.service 2013-03-07 11:47:00 +01:00
Harald Hoyer
c4e098a514 document /usr/lib/dracut/dracut.conf.d 2013-03-07 11:44:44 +01:00
Harald Hoyer
72875215a3 dracut.conf: move default settings to distro example 2013-03-07 11:44:16 +01:00
Harald Hoyer
335bc217b3 dracut.sh: rename source_dirs_prio() to dropindirs_sort() 2013-03-07 11:43:52 +01:00
Harald Hoyer
510aecdbd8 systemd: add missing dracut-mount.sh dracut-pre-mount.sh dracut.target 2013-03-07 10:35:06 +01:00
Harald Hoyer
9dd9d81fc6 add 50-dracut.install 2013-03-07 10:08:35 +01:00
Harald Hoyer
a5b48ce798 add systemd-bootchart module 2013-03-07 09:56:30 +01:00
Harald Hoyer
59afbd8e73 add missing systemd service man pages 2013-03-07 09:42:00 +01:00
Harald Hoyer
348baca3e4 dracut.conf.d/fedora.conf.example: turn off rd.auto
realinitpath is not needed anymore for systemd >= 198
2013-03-06 17:29:12 +01:00
Harald Hoyer
83691c413f testsuite fixup 2013-03-06 17:29:12 +01:00
Harald Hoyer
ca36b9b8f8 base: save host_devs which we need bring up and process them with wait_for_dev 2013-03-06 17:29:12 +01:00
Harald Hoyer
a9c7dc74c4 base: in systemd mode parse-root-opts.sh is in the services 2013-03-06 17:29:12 +01:00
Harald Hoyer
ce862de624 base/dracut-lib.sh: reset /etc/profile 2013-03-06 17:29:12 +01:00
Harald Hoyer
500861cd05 base/init.sh: reset main loop counter, if work is in initqueue 2013-03-06 17:29:12 +01:00
Harald Hoyer
44d26d9209 base/dracut-lib.sh: extend wait_for_dev() for systemd 2013-03-06 17:29:12 +01:00
Harald Hoyer
35270e34d0 rootfs-block/parse-block.sh: wait_for_dev 2013-03-06 17:29:12 +01:00
Harald Hoyer
fe654ff0aa usrmount: in systemd mode, functionality is in systemd 2013-03-06 17:29:12 +01:00
Harald Hoyer
5e1e1ec060 iscsi, nbd: call write_fs_tab() and write /etc/fstab 2013-03-06 17:29:12 +01:00
Harald Hoyer
2673ff1932 rootfs-block: in systemd mode, functionality is in the dracut services 2013-03-06 17:29:11 +01:00
Harald Hoyer
e8f7ea6794 resume: generate rules already in parse-resume.sh 2013-03-06 17:29:11 +01:00
Harald Hoyer
3899211bfc resume: in systemd mode move functionality in the dracut services 2013-03-06 17:29:11 +01:00
Harald Hoyer
6e0c1c448d nfs/nfsroot.sh: trigger nfs mount with cat'ing /etc/fstab
otherwise the whole nfs communication can take too long for the
systemd-fstab-generator
2013-03-06 17:29:11 +01:00
Harald Hoyer
6ae68b4674 kernel-modules: handle rd.driver.* in systemd mode in dracut-pre-udev 2013-03-06 17:29:11 +01:00
Harald Hoyer
41eba87b32 dracut_need_initqueue 2013-03-06 17:29:11 +01:00
Harald Hoyer
a1084c02fd fs-lib/fs-lib.sh: add write_fs_tab() 2013-03-06 17:29:11 +01:00
Harald Hoyer
5ac8420abc crypt/parse-crypt.sh: don't generate luks rules in systemd mode 2013-03-06 17:29:11 +01:00
Harald Hoyer
24d009507f btrfs: no need for btrfs_timeout in systemd mode 2013-03-06 17:29:11 +01:00
Harald Hoyer
e9020221a7 crypt: do not cleanup in systemd mode 2013-03-06 17:29:11 +01:00
Harald Hoyer
b59e9e5724 network/netroot.sh: remove the dhcp finished hook, if we have a handler 2013-03-06 17:22:09 +01:00
Harald Hoyer
b5859d6359 i18n: no manual setup needed if systemd is in the game 2013-03-06 17:22:09 +01:00
Harald Hoyer
dbfaae0e34 systemd: changes for new initrd services
Requires systemd >= 198
2013-03-06 17:21:47 +01:00
Harald Hoyer
8d85429a44 dracut-functions.sh: add dracut_need_initqueue() dracut_module_included()
for all rules files, which reference initqueue also call
dracut_need_initqueue()
2013-03-06 16:04:03 +01:00
Harald Hoyer
3e4ab73cd4 test: make testsuite work with systemd 2013-03-02 13:27:08 +01:00
Harald Hoyer
4e32b2e916 test: removed unused cryptroot-ask.sh scripts 2013-03-02 13:22:29 +01:00
Harald Hoyer
356333b331 test: add finished-false.sh for create-root.sh initqueue job 2013-03-02 13:20:59 +01:00
Harald Hoyer
f62f3a2191 reset initqueue loop counter only if new uevents exist 2013-03-02 13:19:20 +01:00
Harald Hoyer
389333396a resume: move resume hook from mount to pre-mount 2013-03-02 13:11:38 +01:00
Harald Hoyer
cfb7410cd0 mdraid/mdraid_start.sh: remove mdmon workaround 2013-03-02 13:10:57 +01:00
Harald Hoyer
f672b1c399 btrfs/btrfs_timeout.sh: do not "exit 0" 2013-03-02 13:10:04 +01:00
Harald Hoyer
f12f694355 btrfs: Use upstream 64-btrfs.rules 2013-02-22 11:14:04 +01:00
Lars R. Damerow
9a9c6e1256 dracut: write initramfs to temp file then move into place
We've been finding cases where multiple instances of dracut can be launched
simultaneously, resulting in a corrupted initramfs file. This patch makes
dracut write the initramfs to a new file, then move it into place atomically.
2013-02-22 11:05:29 +01:00
Harald Hoyer
9c65c125a9 systemd: change path of switch-root.conf
we do not have to clean it up for /etc/switch-root.conf
2013-02-21 12:18:21 +01:00
Harald Hoyer
7d4d3f8da6 lvm/module-setup.sh: use for_each_host_dev_and_slaves_all
Use for_each_host_dev_and_slaves_all to get all lvm setups for the
host-only case.

Thanks to Olivier Thauvin
2013-02-21 12:13:56 +01:00
Harald Hoyer
569ffe77bf systemd: add systemd-modules-load.service and hook dirs 2013-02-21 12:13:09 +01:00
Harald Hoyer
a42b2b8133 introduce /usr/lib/dracut/dracut.conf.d/ drop-in directory
/usr/lib/dracut/dracut.conf.d/*.conf can be overwritten by the same
filenames in /etc/dracut.conf.d.

Packages should use /usr/lib/dracut/dracut.conf.d rather than
/etc/dracut.conf.d. /etc/dracut.conf.d belongs to the system
administrator.
2013-02-19 17:46:24 +01:00
Harald Hoyer
31ba4de21d url-lib/url-lib.sh: remove bashism
remove the forgotten bashism "+="
2013-02-19 16:13:49 +01:00
Stefan Reimer
a005c47763 base/init.sh: create /run/log
If the systemd module is not used /run/log is not created which results
in dangeling softlink from /var/log which causes stuff to fail.
2013-02-18 12:05:23 +01:00
Harald Hoyer
5db6ca5a4b dracut: enable initramfs building without kernel modules 2013-02-18 12:03:02 +01:00
Harald Hoyer
1a6fdf2417 btrfs: use "btrfs device ready" 2013-02-18 11:58:11 +01:00
Harald Hoyer
27a2c3a406 systemd: services got renamed 2013-02-14 12:32:12 +01:00
Harald Hoyer
b347edfa23 dracut-emergency.service: wants systemd-vconsole-setup.service 2013-02-14 12:32:04 +01:00
Colin Guthrie
3ed09d970e resume: Ensure we remove the timout job when we find the resume device 2013-02-13 17:46:24 +01:00
Thomas Backlund
a28e2aeefe kernel-modules: Add ehci support for kernel 3.8+
Kernel 3.8 split ehci-hcd into ehci-hcd, ehci-pci and ehci-platform,
so adapt the list to cope with this change.
2013-02-13 17:42:32 +01:00
Wim Muskee
c6a71c7b8a make nbd port check more robust
The following change makes the check for the nbd port or named export
more robust.
I wasn't sure whether to include sed in the dracut_install() of
module-setup.sh since net already does that (and nbd depends on that).
2013-02-11 15:44:11 +01:00
Harald Hoyer
6ecb9a2d68 url-lib/url-lib.sh: add proxy support for curl 2013-02-11 13:56:04 +01:00
Harald Hoyer
918a6874df url-lib/url-lib.sh: remove bashisms 2013-02-11 13:55:44 +01:00
Harald Hoyer
2663232a01 systemd/dracut-initqueue.sh: call udevadm settle directly 2013-02-11 11:49:19 +01:00
Harald Hoyer
cebab07e68 systemd/dracut-initqueue: run after cryptsetup.target 2013-02-11 11:49:19 +01:00
Harald Hoyer
a04f3077cd systemd/dracut-pre-pivot.sh: remove /dev/root symlink after shell 2013-02-11 11:49:19 +01:00
Harald Hoyer
04b873598b systemd: set udev debug/info via config file and report obsolete options 2013-02-11 11:49:19 +01:00
Harald Hoyer
22137f9cac systemd/dracut-pre-trigger.sh: enable rd.break=pre-trigger debug shell 2013-02-11 11:49:19 +01:00
Harald Hoyer
54665349ec systemd/dracut-cmdline.sh: create /run/log subdir 2013-02-11 11:49:19 +01:00
Harald Hoyer
f251a89772 systemd/dracut-pre-trigger.service: load service on demand 2013-02-11 11:49:19 +01:00
Harald Hoyer
fbdfa57746 systemd/dracut-pre-udev.service: load service on demand 2013-02-11 11:49:19 +01:00
Harald Hoyer
6b095274fb systemd: trigger systemd-vconsole-setup.service only on demand 2013-02-11 11:49:19 +01:00
Harald Hoyer
11174408e8 systemd/dracut-initqueue.sh: replace $UDEV_QUEUE_EMPTY
for systemd-udevd the version of udevd is high enough
2013-02-11 11:49:19 +01:00
Harald Hoyer
c2117747fd virtfs: add virtio_pci kernel module 2013-02-11 11:49:19 +01:00
Harald Hoyer
4f6e293308 udev-rules: modify udev rules on initramfs creation time 2013-02-11 11:49:19 +01:00
Harald Hoyer
d9076cac19 btrfs/btrfs_finished.sh: use btrfs device ready for probing 2013-02-08 16:52:38 +01:00
Harald Hoyer
ff52ca1b57 btrfs/80-btrfs.rules: remove modprobe of btrfs module
this should be automatically modprobed by the kernel on demand
2013-02-08 16:52:38 +01:00
Harald Hoyer
8a3c4957fc drm/module-setup.sh: make drm module only install on dependency 2013-02-08 16:52:38 +01:00
Harald Hoyer
3f54a83ca8 dracut.sh: make /var/log a symlink to /run/log 2013-02-08 16:52:38 +01:00
Harald Hoyer
7fa3b9e376 url-lib/url-lib.sh: turn off curl globbing
https://bugzilla.redhat.com/show_bug.cgi?id=907497
2013-02-08 16:52:38 +01:00
Harald Hoyer
39135af155 network/ifup.sh: echo in get_vid() instead of using the return value
The return value is module 256, so VLAN ids > 255 could not be returned.
2013-02-08 16:52:38 +01:00
Dan Horák
02640e8e65 set peer for point-to-point connections
network/net-lib.sh: only set net vars, if they have a value
2013-02-08 16:52:30 +01:00
Frederick Grose
579f385384 Provide devices to enable booting with rd.live.overlay.readonly=1 2013-02-06 13:52:30 +01:00
Kevin Yung
56d60c4b2d network/ifup.sh: enable bridged vlan interfaces
To use vlan for net boot, you need to specify vlan and ip kernel options
for the boot interface. For example,

 vlan=eth1.1:eth1 bootdev=eth1.1
 ip=1.2.3.4:1.2.3.4::255.255.255.0:my-hostname:eth1:none

To use bridge for net boot, you need to specify bridge and ip kernel
option for the boot interface. For example

 bridge=br1:eth1 bootdev=br1
 ip=1.2.3.4:1.2.3.4::255.255.255.0:my-hostname:eth1:none

In my environment, I needs to boot machines from network within
a vlan or on a bridged network.	I found curent dracut release
if-up.sh script in 40network module bypass ip setting for both
bridge and vlan interface.
2013-02-06 13:52:30 +01:00
Dan Horák
62fd2b3644 fix CTC example in rd.znet
The CTC interface uses 2 channels.
2013-02-06 13:52:30 +01:00
Colin Guthrie
cd9072d342 Mount /proc before including dracut-lib.sh.
When dracut-lib.sh is sourced it checks the command line (when not using systemd)
as part of the check_quiet() call.

Therefore mount /proc earlier in init.

Avoids the error:

init: 77: /lib/dracut-lib.sh: /proc/cmdline: No such file or directory
2013-02-06 13:52:30 +01:00
Harald Hoyer
19bab59c48 dracut.sh: reverting return value change
reverting _get_fs_type() return values of patch
c8d685c9d3
2013-02-05 16:45:42 +01:00
Harald Hoyer
d8b627b9dc shutdown: call "losetup -D" on shutdown 2013-02-05 11:04:02 +01:00
Harald Hoyer
6320d072a1 mdmon: renamed mdmon-offroot@.service to mdmon@.service 2013-02-05 10:58:06 +01:00
Harald Hoyer
7abeb49878 TODO: updated 2013-02-05 10:58:05 +01:00
Harald Hoyer
14fcfbec3e network/net-genrules.sh: remove some bashisms 2013-01-30 17:22:25 +01:00
Joe Lawrence
fa9f15e3be Support out-of-tree and updated drivers in initramfs creation
The find_kernel_modules_by_path function shouldn't filter out modules not
located underneath the /lib/modules/ver/kernel directory as out-of-tree
drivers may reside in /lib/modules/ver/extra and updated drivers in
/lib/modules/ver/updates.

Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com>
2013-01-25 13:07:59 +01:00
Harald Hoyer
ae4758ce0d rootfs-block/mount-root.sh: fixup for 8b6bf0ef5
not only fix the warning message, but the real mount arguments, too
2013-01-23 16:24:33 +01:00
Harald Hoyer
66f01450a8 NEWS: update for version 025 2013-01-23 16:12:18 +01:00
193 changed files with 3836 additions and 1757 deletions

4
.gitignore vendored
View File

@@ -13,3 +13,7 @@ test*.img
/.project /.project
/dracut-version.sh /dracut-version.sh
/install/dracut-install /install/dracut-install
/*.rpm
/*.[0-9]
/modules.d/98systemd/*.service.8
/*.sign

View File

@@ -1,12 +1,15 @@
Philippe Seewer <philippe.seewer@bfh.ch> <philippe.seewer-omB+W0Dpw2o@public.gmane.org> Philippe Seewer <philippe.seewer@bfh.ch> <philippe.seewer-omB+W0Dpw2o@public.gmane.org>
Seewer Philippe <philippe.seewer@bfh.ch> <philippe.seewer@bfh.ch> Seewer Philippe <philippe.seewer@bfh.ch> <philippe.seewer@bfh.ch>
Philippe Seewer <philippe.seewer@bfh.ch> <philippe.seewer@bfh.ch> Philippe Seewer <philippe.seewer@bfh.ch> <philippe.seewer@bfh.ch>
Victor Lowther <victor.lowther@gmail.com> <victor.lowther-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Victor Lowther <victor.lowther@gmail.com> <victor.lowther-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Harald Hoyer <harald@redhat.com> <harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Harald Hoyer <harald@redhat.com> <harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Harald Hoyer <harald@redhat.com> <harald@eeepc.(none)> Harald Hoyer <harald@redhat.com> <harald@eeepc.(none)>
Mike Snitzer <snitzer@redhat.com> <msnitzer@redhat.com> Mike Snitzer <snitzer@redhat.com> <msnitzer@redhat.com>
Amerigo Wang <amwang@redhat.com> <xiyou.wangcong@gmail.com> Amerigo Wang <amwang@redhat.com> <xiyou.wangcong@gmail.com>
Andrey Borzenkov <arvidjaar@gmail.com> <arvidjaar@mail.ru> Andrey Borzenkov <arvidjaar@gmail.com> <arvidjaar@mail.ru>
Dan Horák <dhorak@redhat.com> <dan@danny.cz> Dan Horák <dhorak@redhat.com> <dan@danny.cz>
John Reiser <jreiser@bitwagon.com> <jreiser@BitWagon.com> John Reiser <jreiser@bitwagon.com> <jreiser@BitWagon.com>
Luca Berra <bluca@vodka.it> <bluca@comedia.it> Luca Berra <bluca@vodka.it> <bluca@comedia.it>
Dave Young <dyoung@redhat.com> dyoung@redhat.com
Frederick Grose <fgrose@sugarlabs.org> <fgrose@gmail.com>
Frederic Crozat <fcrozat@suse.com> <fcrozat@mandriva.com>

33
50-dracut.install Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
if [[ -f /etc/kernel/cmdline ]]; then
readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
fi
if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
readarray -t BOOT_OPTIONS < /proc/cmdline
fi
unset noimageifnotneeded
for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
noimageifnotneeded="yes"
break
fi
done
ret=0
case "$1" in
add)
dracut ${noimageifnotneeded+--noimageifnotneeded} "$3"/initrd "$2"
ret=$?
;;
remove)
rm -f "$3"/initrd
ret=$?
;;
esac
exit $ret

70
51-dracut-rescue-postinst.sh Executable file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export LANG=C
KERNEL_VERSION="$1"
KERNEL_IMAGE="$2"
[[ -f /etc/os-release ]] && . /etc/os-release
if [[ ! -f /etc/machine-id ]] || [[ ! -s /etc/machine-id ]]; then
systemd-machine-id-setup
fi
[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
[[ $MACHINE_ID ]] || exit 1
[[ -f $KERNEL_IMAGE ]] || exit 1
INITRDFILE="/boot/initramfs-0-rescue-${MACHINE_ID}.img"
NEW_KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-0-rescue-${MACHINE_ID}"
[[ -f $INITRDFILE ]] && [[ -f $NEW_KERNEL_IMAGE ]] && exit 0
dropindirs_sort()
{
suffix=$1; shift
args=("$@")
files=$(
while (( $# > 0 )); do
for i in ${1}/*${suffix}; do
[[ -f $i ]] && echo ${i##*/}
done
shift
done | sort -Vu
)
for f in $files; do
for d in "${args[@]}"; do
if [[ -f "$d/$f" ]]; then
echo "$d/$f"
continue 2
fi
done
done
}
# source our config dir
for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
[[ -e $f ]] && . "$f"
done
[[ $dracut_rescue_image != "yes" ]] && exit 0
if [[ ! -f $INITRDFILE ]]; then
dracut --no-hostonly -a "rescue" "$INITRDFILE" "$KERNEL_VERSION"
((ret+=$?))
fi
if [[ ! -f $NEW_KERNEL_IMAGE ]]; then
cp "$KERNEL_IMAGE" "$NEW_KERNEL_IMAGE"
((ret+=$?))
fi
new-kernel-pkg --install "$KERNEL_VERSION" --kernel-image "$NEW_KERNEL_IMAGE" --initrdfile "$INITRDFILE" --banner "$NAME $VERSION_ID Rescue $MACHINE_ID"
((ret+=$?))
exit $ret

101
51-dracut-rescue.install Executable file
View File

@@ -0,0 +1,101 @@
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export LANG=C
COMMAND="$1"
KERNEL_VERSION="$2"
dropindirs_sort()
{
suffix=$1; shift
args=("$@")
files=$(
while (( $# > 0 )); do
for i in ${1}/*${suffix}; do
[[ -f $i ]] && echo ${i##*/}
done
shift
done | sort -Vu
)
for f in $files; do
for d in "${args[@]}"; do
if [[ -f "$d/$f" ]]; then
echo "$d/$f"
continue 2
fi
done
done
}
[[ -f /etc/os-release ]] && . /etc/os-release
if [[ ! -f /etc/machine-id ]] || [[ ! -s /etc/machine-id ]]; then
systemd-machine-id-setup
fi
[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
if [[ -f /etc/kernel/cmdline ]]; then
readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
fi
if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
readarray -t BOOT_OPTIONS < /proc/cmdline
fi
if ! [[ $BOOT_OPTIONS ]]; then
exit 1
fi
LOADER_ENTRY="/boot/loader/entries/${MACHINE_ID}-0-rescue.conf"
BOOT_DIR="/${MACHINE_ID}/0-rescue"
BOOT_DIR_ABS="/boot${BOOT_DIR}"
ret=0
case "$COMMAND" in
add)
for i in "/boot/loader/entries/${MACHINE_ID}-0-rescue.conf"; do
[[ -f $i ]] && exit 0
done
# source our config dir
for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
[[ -e $f ]] && . "$f"
done
[[ $dracut_rescue_image != "yes" ]] && exit 0
[[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS"
if ! cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS"/linux; then
echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'!" >&2
fi
dracut --no-hostonly -a "rescue" "$BOOT_DIR_ABS"/initrd "$2"
((ret+=$?))
{
echo "title $PRETTY_NAME - Rescue Image"
echo "version $KERNEL_VERSION"
echo "machine-id $MACHINE_ID"
echo "options ${BOOT_OPTIONS[@]} rd.auto=1"
echo "linux $BOOT_DIR/linux"
echo "initrd $BOOT_DIR/initrd"
} > $LOADER_ENTRY
((ret+=$?))
;;
remove)
exit 0
;;
*)
usage
ret=1;;
esac
((ret+=$?))
exit $ret

27
AUTHORS
View File

@@ -6,9 +6,9 @@ Warren Togami <wtogami@redhat.com>
Will Woods <wwoods@redhat.com> Will Woods <wwoods@redhat.com>
Jeremy Katz <katzj@redhat.com> Jeremy Katz <katzj@redhat.com>
David Dillow <dave@thedillows.org> David Dillow <dave@thedillows.org>
Dave Young <dyoung@redhat.com>
Michal Soltys <soltys@ziu.info> Michal Soltys <soltys@ziu.info>
Amerigo Wang <amwang@redhat.com> Amerigo Wang <amwang@redhat.com>
Dave Young <dyoung@redhat.com>
Colin Guthrie <colin@mageia.org> Colin Guthrie <colin@mageia.org>
Andrey Borzenkov <arvidjaar@gmail.com> Andrey Borzenkov <arvidjaar@gmail.com>
Andreas Thienemann <andreas@bawue.net> Andreas Thienemann <andreas@bawue.net>
@@ -17,53 +17,61 @@ Peter Jones <pjones@redhat.com>
John Reiser <jreiser@bitwagon.com> John Reiser <jreiser@bitwagon.com>
Luca Berra <bluca@vodka.it> Luca Berra <bluca@vodka.it>
Daniel Drake <dsd@laptop.org> Daniel Drake <dsd@laptop.org>
Dan Horák <dhorak@redhat.com>
Leho Kraav <leho@kraav.com> Leho Kraav <leho@kraav.com>
Brian C. Lane <bcl@redhat.com> Brian C. Lane <bcl@redhat.com>
Marc Grimme <grimme@atix.de> Marc Grimme <grimme@atix.de>
Chao Wang <chaowang@redhat.com> Chao Wang <chaowang@redhat.com>
Dan Horák <dhorak@redhat.com> Frederic Crozat <fcrozat@suse.com>
Jesse Keating <jkeating@redhat.com> Jesse Keating <jkeating@redhat.com>
Milan Broz <mbroz@redhat.com> Milan Broz <mbroz@redhat.com>
Roberto Sassu <roberto.sassu@polito.it> Roberto Sassu <roberto.sassu@polito.it>
dyoung@redhat.com <dyoung@redhat.com>
Anton Blanchard <anton@samba.org> Anton Blanchard <anton@samba.org>
Bill Nottingham <notting@redhat.com> Bill Nottingham <notting@redhat.com>
David Cantrell <dcantrell@redhat.com> David Cantrell <dcantrell@redhat.com>
Frederic Crozat <fcrozat@suse.com>
Jon Ander Hernandez <jonan.h@gmail.com> Jon Ander Hernandez <jonan.h@gmail.com>
Juan RP <xtraeme@gmail.com> Juan RP <xtraeme@gmail.com>
Lance Albertson <lance@osuosl.org> Lance Albertson <lance@osuosl.org>
Marian Ganisin <mganisin@redhat.com> Marian Ganisin <mganisin@redhat.com>
Michael Ploujnikov <plouj@somanetworks.com> Michael Ploujnikov <plouj@somanetworks.com>
Peter Rajnoha <prajnoha@redhat.com> Peter Rajnoha <prajnoha@redhat.com>
Radek Vykydal <rvykydal@redhat.com>
WANG Chao <chaowang@redhat.com>
Wim Muskee <wimmuskee@gmail.com>
Alan Jenkins <alan-jenkins@tuffmail.co.uk> Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Alan Pevec <apevec@redhat.com> Alan Pevec <apevec@redhat.com>
Baoquan He <bhe@redhat.com>
Colin Walters <walters@verbum.org> Colin Walters <walters@verbum.org>
Dennis Gilmore <dennis@ausil.us> Dennis Gilmore <dennis@ausil.us>
Frederick Grose <fgrose@sugarlabs.org>
Ian Dall <ian@beware.dropbear.id.au> Ian Dall <ian@beware.dropbear.id.au>
James Buren <ryuo@frugalware.org> James Buren <ryuo@frugalware.org>
Joey Boggs <jboggs@redhat.com> Joey Boggs <jboggs@redhat.com>
Mike Snitzer <snitzer@redhat.com> Mike Snitzer <snitzer@redhat.com>
Przemysław Rudy <prudy1@o2.pl> Przemysław Rudy <prudy1@o2.pl>
Stefan Reimer <it@startux.de>
Thomas Lange <lange@informatik.uni-koeln.de> Thomas Lange <lange@informatik.uni-koeln.de>
Vivek Goyal <vgoyal@redhat.com> Vivek Goyal <vgoyal@redhat.com>
Vladislav Bogdanov <bubble@hoster-ok.com> Vladislav Bogdanov <bubble@hoster-ok.com>
Wim Muskee <wimmuskee@gmail.com>
Alexander Todorov <atodorov@redhat.com> Alexander Todorov <atodorov@redhat.com>
Andy Lutomirski <luto@mit.edu> Andy Lutomirski <luto@mit.edu>
Anssi Hannula <anssi@mageia.org> Anssi Hannula <anssi@mageia.org>
Canek Peláez Valdés <caneko@gmail.com> Canek Peláez Valdés <caneko@gmail.com>
Chris Leech <cleech@redhat.com> Chris Leech <cleech@redhat.com>
Christian Heinz <christian.ch.heinz@gmail.com> Christian Heinz <christian.ch.heinz@gmail.com>
Cong Wang <amwang@redhat.com>
Dave Jones <davej@redhat.com> Dave Jones <davej@redhat.com>
Dave Young <dave@redhat.com>
Duane Griffin <duaneg@dghda.com> Duane Griffin <duaneg@dghda.com>
Frederic Crozat <fcrozat@mandriva.com>
Frederick Grose <fgrose@gmail.com>
Glen Gray <slaine@slaine.org> Glen Gray <slaine@slaine.org>
Hermann Gausterer <git-dracut-2012@mrq1.org> Hermann Gausterer <git-dracut-2012@mrq1.org>
James Laska <jlaska@redhat.com> James Laska <jlaska@redhat.com>
Jan Stodola <jstodola@redhat.com> Jan Stodola <jstodola@redhat.com>
Jiri Pirko <jiri@resnulli.us>
Joe Lawrence <Joe.Lawrence@stratus.com>
Kevin Yung <Kevin.Yung@myob.com>
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Lars R. Damerow <lars@pixar.com>
Lennert Buytenhek <buytenh@wantstofly.org> Lennert Buytenhek <buytenh@wantstofly.org>
Lubomir Rintel <lkundrak@v3.sk> Lubomir Rintel <lkundrak@v3.sk>
Matt <smoothsailing72@hotmail.com> Matt <smoothsailing72@hotmail.com>
@@ -71,17 +79,18 @@ Matt Smith <shadowfax@gmx.com>
Michal Schmidt <mschmidt@redhat.com> Michal Schmidt <mschmidt@redhat.com>
Mike Gorse <mgorse@suse.com> Mike Gorse <mgorse@suse.com>
Munehiro Matsuda <haro@kgt.co.jp> Munehiro Matsuda <haro@kgt.co.jp>
Nicolas Chauvet <kwizart@gmail.com>
Nikoli <nikoli@lavabit.com> Nikoli <nikoli@lavabit.com>
Olivier Blin <dev@blino.org> Olivier Blin <dev@blino.org>
Paolo Bonzini <pbonzini@redhat.com> Paolo Bonzini <pbonzini@redhat.com>
Peter Robinson <pbrobinson@fedoraproject.org> Peter Robinson <pbrobinson@fedoraproject.org>
Pádraig Brady <P@draigBrady.com> Pádraig Brady <P@draigBrady.com>
Quentin Armitage <quentin@armitage.org.uk> Quentin Armitage <quentin@armitage.org.uk>
Radek Vykydal <rvykydal@redhat.com> Robert Buchholz <rbu@goodpoint.de>
Sergey Fionov <fionov@gmail.com> Sergey Fionov <fionov@gmail.com>
Srinivasa T N <seenutn@linux.vnet.ibm.com> Srinivasa T N <seenutn@linux.vnet.ibm.com>
Stefan Reimer <it@startux.de>
Thilo Bangert <thilo.bangert@gmx.net> Thilo Bangert <thilo.bangert@gmx.net>
Thomas Backlund <tmb@mageia.org>
Tomasz Torcz <tomek@pipebreaker.pl> Tomasz Torcz <tomek@pipebreaker.pl>
Vadim Kuznetsov <vadimk@gentoo.org> Vadim Kuznetsov <vadimk@gentoo.org>
Ville Skyttä <ville.skytta@iki.fi> Ville Skyttä <ville.skytta@iki.fi>

View File

@@ -1,5 +1,6 @@
VERSION=025 RELEASEDVERSION = -- will be replaced by "make dist" --
GITVERSION=$(shell [ -d .git ] && git rev-list --abbrev-commit -n 1 HEAD |cut -b 1-8) VERSION = $(shell [ -d .git ] && git describe --abbrev=0 --tags || echo $(RELEASEDVERSION))
GITVERSION = $(shell [ -d .git ] && { v=$$(git describe --tags); echo -$${v\#*-}; } )
-include Makefile.inc -include Makefile.inc
@@ -11,29 +12,31 @@ sysconfdir ?= ${prefix}/etc
bindir ?= ${prefix}/bin bindir ?= ${prefix}/bin
mandir ?= ${prefix}/share/man mandir ?= ${prefix}/share/man
CFLAGS ?= -O2 -g -Wall CFLAGS ?= -O2 -g -Wall
CFLAGS += -std=gnu99 CFLAGS += -std=gnu99 -D_FILE_OFFSET_BITS=64
bashcompletiondir ?= ${datadir}/bash-completion/completions
man1pages = lsinitrd.1 man1pages = lsinitrd.1
man5pages = dracut.conf.5 man5pages = dracut.conf.5
man7pages = dracut.cmdline.7 man7pages = dracut.cmdline.7 \
dracut.bootup.7
man8pages = dracut.8 \ man8pages = dracut.8 \
dracut-catimages.8 \ dracut-catimages.8 \
mkinitrd.8 \ mkinitrd.8 \
modules.d/98systemd/dracut-cmdline.service.8 \ modules.d/98systemd/dracut-cmdline.service.8 \
modules.d/98systemd/dracut-initqueue.service.8 \ modules.d/98systemd/dracut-initqueue.service.8 \
modules.d/98systemd/dracut-mount.service.8 \
modules.d/98systemd/dracut-pre-mount.service.8 \
modules.d/98systemd/dracut-pre-pivot.service.8 \ modules.d/98systemd/dracut-pre-pivot.service.8 \
modules.d/98systemd/dracut-pre-trigger.service.8 \ modules.d/98systemd/dracut-pre-trigger.service.8 \
modules.d/98systemd/dracut-pre-udev.service.8 \ modules.d/98systemd/dracut-pre-udev.service.8
modules.d/98systemd/initrd-switch-root.service.8 \
modules.d/98systemd/udevadm-cleanup-db.service.8
manpages = $(man1pages) $(man5pages) $(man7pages) $(man8pages) manpages = $(man1pages) $(man5pages) $(man7pages) $(man8pages)
.PHONY: install clean archive rpm testimage test all check AUTHORS doc .PHONY: install clean archive rpm testimage test all check AUTHORS doc dracut-version.sh
all: syncheck dracut-version.sh dracut-install all: syncheck dracut-version.sh dracut-install
@@ -91,6 +94,7 @@ install: dracut-version.sh
install -m 0755 lsinitrd.sh $(DESTDIR)$(bindir)/lsinitrd install -m 0755 lsinitrd.sh $(DESTDIR)$(bindir)/lsinitrd
install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf
mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d
mkdir -p $(DESTDIR)$(pkglibdir)/dracut.conf.d
install -m 0755 dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions.sh install -m 0755 dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions.sh
install -m 0755 dracut-version.sh $(DESTDIR)$(pkglibdir)/dracut-version.sh install -m 0755 dracut-version.sh $(DESTDIR)$(pkglibdir)/dracut-version.sh
ln -fs dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions ln -fs dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions
@@ -110,13 +114,33 @@ endif
mkdir -p $(DESTDIR)$(systemdsystemunitdir)/shutdown.target.wants; \ mkdir -p $(DESTDIR)$(systemdsystemunitdir)/shutdown.target.wants; \
ln -s ../dracut-shutdown.service \ ln -s ../dracut-shutdown.service \
$(DESTDIR)$(systemdsystemunitdir)/shutdown.target.wants/dracut-shutdown.service; \ $(DESTDIR)$(systemdsystemunitdir)/shutdown.target.wants/dracut-shutdown.service; \
mkdir -p $(DESTDIR)$(systemdsystemunitdir)/initrd.target.wants; \
for i in \
dracut-cmdline.service \
dracut-initqueue.service \
dracut-mount.service \
dracut-pre-mount.service \
dracut-pre-pivot.service \
dracut-pre-trigger.service \
dracut-pre-udev.service \
; do \
install -m 0644 modules.d/98systemd/$$i $(DESTDIR)$(systemdsystemunitdir); \
ln -s ../$$i \
$(DESTDIR)$(systemdsystemunitdir)/initrd.target.wants/$i; \
done \
fi fi
if [ -f install/dracut-install ]; then \ if [ -f install/dracut-install ]; then \
install -m 0755 install/dracut-install $(DESTDIR)$(pkglibdir)/dracut-install; \ install -m 0755 install/dracut-install $(DESTDIR)$(pkglibdir)/dracut-install; \
fi fi
mkdir -p $(DESTDIR)${prefix}/lib/kernel/install.d
install -m 0755 50-dracut.install $(DESTDIR)${prefix}/lib/kernel/install.d/50-dracut.install
install -m 0755 51-dracut-rescue.install $(DESTDIR)${prefix}/lib/kernel/install.d/51-dracut-rescue.install
mkdir -p $(DESTDIR)${bashcompletiondir}
install -m 0644 dracut-bash-completion.sh $(DESTDIR)${bashcompletiondir}/dracut
install -m 0644 lsinitrd-bash-completion.sh $(DESTDIR)${bashcompletiondir}/lsinitrd
dracut-version.sh: dracut-version.sh:
@echo "DRACUT_VERSION=$(VERSION)-$(GITVERSION)" > dracut-version.sh @echo "DRACUT_VERSION=$(VERSION)$(GITVERSION)" > dracut-version.sh
clean: clean:
$(RM) *~ $(RM) *~
@@ -125,19 +149,19 @@ clean:
$(RM) $(manpages:%=%.xml) dracut.xml $(RM) $(manpages:%=%.xml) dracut.xml
$(RM) test-*.img $(RM) test-*.img
$(RM) dracut-*.rpm dracut-*.tar.bz2 $(RM) dracut-*.rpm dracut-*.tar.bz2
$(RM) dracut-version.sh
$(RM) dracut-install install/dracut-install $(DRACUT_INSTALL_OBJECTS) $(RM) dracut-install install/dracut-install $(DRACUT_INSTALL_OBJECTS)
$(RM) $(manpages) dracut.html $(RM) $(manpages) dracut.html
$(MAKE) -C test clean $(MAKE) -C test clean
archive: dracut-$(VERSION)-$(GITVERSION).tar.bz2
dist: dracut-$(VERSION).tar.bz2 dist: dracut-$(VERSION).tar.bz2
dracut-$(VERSION).tar.bz2: doc dracut-$(VERSION).tar.bz2: doc
git archive --format=tar $(VERSION) --prefix=dracut-$(VERSION)/ > dracut-$(VERSION).tar git archive --format=tar $(VERSION) --prefix=dracut-$(VERSION)/ > dracut-$(VERSION).tar
mkdir -p dracut-$(VERSION) mkdir -p dracut-$(VERSION)
cp $(manpages) dracut.html dracut-$(VERSION) cp $(manpages) dracut.html dracut-$(VERSION)
tar -rf dracut-$(VERSION).tar dracut-$(VERSION)/*.[0-9] dracut-$(VERSION)/dracut.html git show $(VERSION):Makefile | sed 's/^RELEASEDVERSION =.*/RELEASEDVERSION = $(VERSION)/' > dracut-$(VERSION)/Makefile
tar --owner=root --group=root -rf dracut-$(VERSION).tar dracut-$(VERSION)/*.[0-9] dracut-$(VERSION)/dracut.html dracut-$(VERSION)/Makefile
rm -fr dracut-$(VERSION).tar.bz2 dracut-$(VERSION) rm -fr dracut-$(VERSION).tar.bz2 dracut-$(VERSION)
bzip2 -9 dracut-$(VERSION).tar bzip2 -9 dracut-$(VERSION).tar
rm -f dracut-$(VERSION).tar rm -f dracut-$(VERSION).tar
@@ -156,14 +180,14 @@ syncheck:
modules.d/99base/init.sh modules.d/*/*.sh; do \ modules.d/99base/init.sh modules.d/*/*.sh; do \
[ "$${i##*/}" = "module-setup.sh" ] && continue; \ [ "$${i##*/}" = "module-setup.sh" ] && continue; \
read line < "$$i"; [ "$${line#*bash*}" != "$$line" ] && continue; \ read line < "$$i"; [ "$${line#*bash*}" != "$$line" ] && continue; \
dash -n "$$i" ; ret=$$(($$ret+$$?)); \ [ $$V ] && echo "dash syntax check: $$i"; dash -n "$$i" ; ret=$$(($$ret+$$?)); \
done;exit $$ret done;exit $$ret
@ret=0;for i in *.sh mkinitrd-dracut.sh modules.d/*/*.sh \ @ret=0;for i in *.sh mkinitrd-dracut.sh modules.d/*/*.sh \
modules.d/*/module-setup.sh; do \ modules.d/*/module-setup.sh; do \
bash -n "$$i" ; ret=$$(($$ret+$$?)); \ [ $$V ] && echo "bash syntax check: $$i"; bash -n "$$i" ; ret=$$(($$ret+$$?)); \
done;exit $$ret done;exit $$ret
check: all syncheck check: all syncheck rpm
@[ "$$EUID" == "0" ] || { echo "'check' must be run as root! Please use 'sudo'."; exit 1; } @[ "$$EUID" == "0" ] || { echo "'check' must be run as root! Please use 'sudo'."; exit 1; }
@$(MAKE) -C test check @$(MAKE) -C test check

95
NEWS
View File

@@ -1,3 +1,98 @@
dracut-028
==========
- full integration of crypto devs in systemd logic
- support for bridge over team and vlan tagged team
- support multiple bonding interfaces
- new kernel command line param "rd.action_on_fail"
to control the emergency action
- support for bridge over a vlan tagged interface
- support for "iso-scan/filename" kernel parameter
- lsinitrd got some love and does not use "file" anymore
- fixed issue with noexec mounted tmp dirs
- FIPS mode fixed
- dracut_install got some love
- fixed some /usr mounting problems
- ifcfg dracut module got some love and fixes
- default installed font is now latarcyrheb-sun16
- new parameters rd.live.dir and rd.live.squashimg
- lvm: add tools for thin provisioning
- also install non-hwcap libs
- setup correct system time and time zone in initrd
- s390: fixed cms setup
- add systemd-udevd persistent network interface naming
Contributions from:
Harald Hoyer
Kamil Rytarowski
WANG Chao
Baoquan He
Adam Williamson
Colin Guthrie
Dan Horák
Dave Young
Dennis Gilmore
Dennis Schridde
dracut-027
==========
- dracut now has bash-completion
- require bash version 4
- systemd module now requires systemd >= 199
- dracut makes use of native systemd initrd units
- added hooks for new-kernel-pkg and kernel-install
- hostonly is now default for fedora
- comply with the BootLoaderSpec paths
http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec
- added rescue module
- host_fs_types is now a hashmap
- new dracut argument "--regenerate-all"
- new dracut argument "--noimageifnotneeded"
- new man page dracut.bootup
- install all host filesystem drivers
- use -D_FILE_OFFSET_BITS=64 to build dracut-install
dracut-026
==========
- introduce /usr/lib/dracut/dracut.conf.d/ drop-in directory
/usr/lib/dracut/dracut.conf.d/*.conf can be overwritten by the same
filenames in /etc/dracut.conf.d.
Packages should use /usr/lib/dracut/dracut.conf.d rather than
/etc/dracut.conf.d for drop-in configuration files.
/etc/dracut.conf and /etc/dracut.conf.d belong to the system administrator.
- uses systemd-198 native initrd units
- totally rely on the fstab-generator in systemd mode for block devices
- dracut systemd now uses dracut.target rather than basic.target
- dracut systemd services optimize themselves away
- fixed hostonly parameter generation
- turn off curl globbing (fixes IPv6)
- modify the udev rules on install and not runtime time
- enable initramfs building without kernel modules (fixed regression)
- in the initqueue/timeout,
reset the main loop counter, as we see new udev events or initqueue/work
- fixed udev rule installation
dracut-025
==========
- do not strip signed kernel modules
- add sosreport script and generate /run/initramfs/sosreport.txt
- make short uuid specification for allow-discards work
- turn off RateLimit for the systemd journal
- fixed MAC address assignment
- add systemd checkisomd5 service
- splitout drm kernel modules from plymouth module
- add 'swapoff' to initramfs to fix shutdown/reboot
- add team device support
- add pre-shutdown hook
- kill all processes in shutdown and report remaining ones
- "--device" changed to "--add-device" and "add_device=" added for conf files
- add memory usage trace to different hook points
- cope with optional field #7 in /proc/self/mountinfo
- lots of small bugfixes
dracut-024 dracut-024
========== ==========
- new dracut option "--device" - new dracut option "--device"

8
TODO
View File

@@ -7,7 +7,6 @@ Items are ordered in priority.
INITRAMFS TODO INITRAMFS TODO
- use info and warn prefix - use info and warn prefix
- add sosreport
- generate systemd unit dracut-initramfs-restore in /run/systemd dynamically - generate systemd unit dracut-initramfs-restore in /run/systemd dynamically
- put "root=" parsing hooks in separate hook dir - put "root=" parsing hooks in separate hook dir
- call "root=" parsing hooks after getting new rootpath from dhcp - call "root=" parsing hooks after getting new rootpath from dhcp
@@ -20,18 +19,19 @@ INITRAMFS TODO
- disable write-ifcfg https://bugzilla.redhat.com/show_bug.cgi?id=840784 - disable write-ifcfg https://bugzilla.redhat.com/show_bug.cgi?id=840784
- check for /var to be mounted in convertfs https://bugzilla.redhat.com/show_bug.cgi?id=848172 - check for /var to be mounted in convertfs https://bugzilla.redhat.com/show_bug.cgi?id=848172
- probably fix "--include" https://bugzilla.redhat.com/show_bug.cgi?id=849338 - probably fix "--include" https://bugzilla.redhat.com/show_bug.cgi?id=849338
- iscsi livecd boot
GENERATOR TODO GENERATOR TODO
- remove wait for swap devs, if no "resume=" is given on the kernel command line
- add presets (predefined set of modules)
- add interpreter/plugin-scripts to be sourced at the beginning or end (can use dracut-functions) - add interpreter/plugin-scripts to be sourced at the beginning or end (can use dracut-functions)
- provide "installkernel" and "new-kernel-pkg"
- add mechanism for module specific command line options - add mechanism for module specific command line options
- pkg-config integration, to make it easy for other packages to use us. - pkg-config integration, to make it easy for other packages to use us.
- add recovery image creator (mkrecovery)
- default module specification could use some work - default module specification could use some work
- udev rule copying, as mentioned above, is a bit too hard-coded - udev rule copying, as mentioned above, is a bit too hard-coded
- dracut-install parse LD_SHOW_AUXV="" AT_PLATFORM for lib install
CODE TODO CODE TODO
- document more functions - document more functions

31
configure vendored
View File

@@ -25,6 +25,7 @@ read_arg() {
# return 1 to indicate they should do it instead. # return 1 to indicate they should do it instead.
return 1 return 1
fi fi
return 0
} }
while (($# > 0)); do while (($# > 0)); do
@@ -36,18 +37,42 @@ while (($# > 0)); do
--sbindir) read_arg sbindir "$@" || shift;; --sbindir) read_arg sbindir "$@" || shift;;
--mandir) read_arg mandir "$@" || shift;; --mandir) read_arg mandir "$@" || shift;;
--disable-documentation) enable_documentation=no;; --disable-documentation) enable_documentation=no;;
--program-prefix) read_arg programprefix "$@" || shift;;
--exec-prefix) read_arg execprefix "$@" || shift;;
--bindir) read_arg bindir "$@" || shift;;
--includedir) read_arg includedir "$@" || shift;;
--libexecdir) read_arg libexecdir "$@" || shift;;
--localstatedir) read_arg localstatedir "$@" || shift;;
--sharedstatedir) read_arg sharedstatedir "$@" || shift;;
--infodir) read_arg infodir "$@" || shift;;
--systemdsystemunitdir) read_arg systemdsystemunitdir "$@" || shift;;
--bashcompletiondir) read_arg bashcompletiondir "$@" || shift;;
*) echo "Ignoring unknown option '$1'";; *) echo "Ignoring unknown option '$1'";;
esac esac
shift shift
done done
cat > Makefile.inc.tmp <<EOF cat > Makefile.inc.$$ <<EOF
prefix ?= ${prefix} prefix ?= ${prefix}
libdir ?= ${libdir:-${prefix}/lib} libdir ?= ${libdir:-${prefix}/lib}
datadir ?= ${datadir:-${prefix}/share} datadir ?= ${datadir:-${prefix}/share}
sysconfdir ?= ${sysconfdir:-${prefix}/etc} sysconfdir ?= ${sysconfdir:-${prefix}/etc}
sbindir ?= ${sbindir:-${prefix}/sbin} sbindir ?= ${sbindir:-${prefix}/sbin}
mandir ?= ${mandir:-${prefix}/share/man} mandir ?= ${mandir:-${prefix}/share/man}
enable_documentation ?= ${enable_documentation} enable_documentation ?= ${enable_documentation:-yes}
bindir ?= ${bindir:-${prefix}/bin}
EOF EOF
mv Makefile.inc.tmp Makefile.inc
{
[[ $programprefix ]] && echo "programprefix ?= ${programprefix}"
[[ $execprefix ]] && echo "execprefix ?= ${execprefix}"
[[ $includedir ]] && echo "includedir ?= ${includedir}"
[[ $libexecdir ]] && echo "libexecdir ?= ${libexecdir}"
[[ $localstatedir ]] && echo "localstatedir ?= ${localstatedir}"
[[ $sharedstatedir ]] && echo "sharedstatedir ?= ${sharedstatedir}"
[[ $infodir ]] && echo "infodir ?= ${infodir}"
[[ $systemdsystemunitdir ]] && echo "systemdsystemunitdir ?= ${systemdsystemunitdir}"
[[ $bashcompletiondir ]] && echo "bashcompletiondir ?= ${bashcompletiondir}"
} >> Makefile.inc.$$
mv Makefile.inc.$$ Makefile.inc

75
dracut-bash-completion.sh Normal file
View File

@@ -0,0 +1,75 @@
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
#
# Copyright 2013 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
__contains_word () {
local word=$1; shift
for w in $*; do [[ $w = $word ]] && return 0; done
return 1
}
_dracut() {
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
[STANDALONE]='-f -v -q -l -H -h -M -N
--ro-mnt --force --kernel-only --no-kernel --strip --nostrip
--hardlink --nohardlink --noprefix --mdadmconf --nomdadmconf
--lvmconf --nolvmconf --debug --profile --verbose --quiet
--local --hostonly --no-hostonly --fstab --help --bzip2 --lzma
--xz --no-compress --gzip --list-modules --show-modules --keep
--printsize --regenerate-all --noimageifnotneeded'
[ARG]='-a -m -o -d -I -k -c -L --kver --add --force-add --add-drivers
--omit-drivers --modules --omit --drivers --filesystems --install
--fwdir --libdirs --fscks --add-fstab --mount --device --nofscks
--kmoddir --conf --confdir --tmpdir --stdlog --compress --prefix
--kernel-cmdline --sshkey'
)
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--kmoddir|-k|--fwdir|--confdir|--tmpdir)
comps=$(compgen -d -- "$cur")
compopt -o filenames
;;
-c|--conf|--sshkey|--add-fstab|--add-device|-I|--install)
comps=$(compgen -f -- "$cur")
compopt -o filenames
;;
-a|-m|-o|--add|--modules|--omit)
comps=$(dracut --list-modules 2>/dev/null)
;;
--kver)
comps=$(cd /lib/modules; echo [0-9]*)
;;
*)
return 0
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
}
complete -F _dracut dracut

View File

@@ -110,6 +110,14 @@ fi
export hookdirs export hookdirs
} }
dracut_need_initqueue() {
>"$initdir/lib/dracut/need-initqueue"
}
dracut_module_included() {
strstr "$mods_to_load $modules_loaded" "$@"
}
# Create all subdirectories for given path without creating the last element. # Create all subdirectories for given path without creating the last element.
# $1 = path # $1 = path
mksubdirs() { [[ -e ${1%/*} ]] || mkdir -m 0755 -p ${1%/*}; } mksubdirs() { [[ -e ${1%/*} ]] || mkdir -m 0755 -p ${1%/*}; }
@@ -246,6 +254,7 @@ get_persistent_dev() {
[ -z "$_dev" ] && return [ -z "$_dev" ] && return
for i in /dev/mapper/* /dev/disk/by-uuid/* /dev/disk/by-id/*; do for i in /dev/mapper/* /dev/disk/by-uuid/* /dev/disk/by-id/*; do
[[ $i == /dev/mapper/mpath* ]] && continue
_tmp=$(udevadm info --query=name --name="$i" 2>/dev/null) _tmp=$(udevadm info --query=name --name="$i" 2>/dev/null)
if [ "$_tmp" = "$_dev" ]; then if [ "$_tmp" = "$_dev" ]; then
echo $i echo $i
@@ -311,44 +320,79 @@ get_maj_min() {
# $ find_block_device /usr # $ find_block_device /usr
# 8:4 # 8:4
find_block_device() { find_block_device() {
local _x _mpt _majmin _dev _fs _maj _min _find_mpt local _majmin _dev _majmin _find_mpt
_find_mpt="$1" _find_mpt="$1"
if [[ $use_fstab != yes ]]; then if [[ $use_fstab != yes ]]; then
while read _x; do [[ -d $_find_mpt/. ]]
set -- $_x while read _majmin _dev; do
_majmin="$3" if [[ -b $_dev ]]; then
_mpt="$5" if ! [[ $_majmin ]] || [[ $_majmin == 0:* ]]; then
[[ $8 = "-" ]] && shift read _majmin < <(get_maj_min $_dev)
_fs="$8" fi
_dev="$9" if [[ $_majmin ]]; then
[[ $_mpt = $_find_mpt ]] || continue echo $_majmin
[[ $_fs = nfs ]] && { echo $_dev; return 0;} else
[[ $_fs = nfs3 ]] && { echo $_dev; return 0;} echo $_dev
[[ $_fs = nfs4 ]] && { echo $_dev; return 0;} fi
[[ $_fs = btrfs ]] && { return 0
get_maj_min $_dev
return 0;
}
if [[ ${_majmin#0:} = $_majmin ]]; then
echo $_majmin
return 0 # we have a winner!
fi fi
done < /proc/self/mountinfo if [[ $_dev = *:* ]]; then
echo $_dev
return 0
fi
done < <(findmnt -e -v -n -o 'MAJ:MIN,SOURCE' "$_find_mpt")
fi fi
# fall back to /etc/fstab # fall back to /etc/fstab
while read _dev _mpt _fs _x; do
[ "${_dev%%#*}" != "$_dev" ] && continue
if [[ $_mpt = $_find_mpt ]]; then while read _majmin _dev; do
[[ $_fs = nfs ]] && { echo $_dev; return 0;} if ! [[ $_dev ]]; then
[[ $_fs = nfs3 ]] && { echo $_dev; return 0;} _dev="$_majmin"
[[ $_fs = nfs4 ]] && { echo $_dev; return 0;} unset _majmin
[[ $_dev != ${_dev#UUID=} ]] && _dev=/dev/disk/by-uuid/${_dev#UUID=}
[[ $_dev != ${_dev#LABEL=} ]] && _dev=/dev/disk/by-label/${_dev#LABEL=}
[[ -b $_dev ]] || return 1 # oops, not a block device.
get_maj_min "$_dev" && return 0
fi fi
done < /etc/fstab if [[ -b $_dev ]]; then
[[ $_majmin ]] || read _majmin < <(get_maj_min $_dev)
if [[ $_majmin ]]; then
echo $_majmin
else
echo $_dev
fi
return 0
fi
if [[ $_dev = *:* ]]; then
echo $_dev
return 0
fi
done < <(findmnt -e --fstab -v -n -o 'MAJ:MIN,SOURCE' "$_find_mpt")
return 1
}
# find_mp_fstype <mountpoint>
# Echo the filesystem type for a given mountpoint.
# /proc/self/mountinfo is taken as the primary source of information
# and /etc/fstab is used as a fallback.
# No newline is appended!
# Example:
# $ find_mp_fstype /;echo
# ext4
find_mp_fstype() {
local _fs
if [[ $use_fstab != yes ]]; then
while read _fs; do
[[ $_fs ]] || continue
[[ $_fs = "autofs" ]] && continue
echo -n $_fs
return 0
done < <(findmnt -e -v -n -o 'FSTYPE' "$1")
fi
while read _fs; do
[[ $_fs ]] || continue
[[ $_fs = "autofs" ]] && continue
echo -n $_fs
return 0
done < <(findmnt --fstab -e -v -n -o 'FSTYPE' "$1")
return 1 return 1
} }
@@ -364,105 +408,35 @@ find_block_device() {
find_dev_fstype() { find_dev_fstype() {
local _x _mpt _majmin _dev _fs _maj _min _find_dev local _x _mpt _majmin _dev _fs _maj _min _find_dev
_find_dev="$1" _find_dev="$1"
strstr "$_find_dev" "/dev" || _find_dev="/dev/block/$_find_dev" [[ "$_find_dev" = /dev* ]] || _find_dev="/dev/block/$_find_dev"
while read _x; do find_mp_fstype "$_find_dev"
set -- $_x
_majmin="$3"
_mpt="$5"
[[ $8 = "-" ]] && shift
_fs="$8"
_dev="$9"
strstr "$_dev" "/dev" || continue
[[ $_dev -ef $_find_dev ]] || continue
[[ $_fs = "autofs" ]] && continue
echo -n $_fs;
return 0;
done < /proc/self/mountinfo
# fall back to /etc/fstab
while read _dev _mpt _fs _x; do
[ "${_dev%%#*}" != "$_dev" ] && continue
case "$_dev" in
LABEL=*)
_dev="$(echo $_dev | sed 's,/,\\x2f,g')"
_dev="/dev/disk/by-label/${_dev#LABEL=}"
;;
UUID=*)
_dev="/dev/disk/by-uuid/${_dev#UUID=}"
;;
PARTUUID=*)
_dev="/dev/disk/by-partuuid/${_dev#PARTUUID=}"
;;
esac
[[ $_dev -ef $_find_dev ]] || continue
echo -n $_fs;
return 0;
done < /etc/fstab
return 1
}
# find_mp_fstype <mountpoint>
# Echo the filesystem type for a given mountpoint.
# /proc/self/mountinfo is taken as the primary source of information
# and /etc/fstab is used as a fallback.
# No newline is appended!
# Example:
# $ find_mp_fstype /;echo
# ext4
find_mp_fstype() {
local _x _mpt _majmin _dev _fs _maj _min _find_mpt
_find_mpt="$1"
while read _x; do
set -- $_x
_majmin="$3"
_mpt="$5"
[[ $8 = "-" ]] && shift
_fs="$8"
_dev="$9"
[[ $_mpt = $_find_mpt ]] || continue
[[ $_fs = "autofs" ]] && continue
echo -n $_fs;
return 0;
done < /proc/self/mountinfo
# fall back to /etc/fstab
while read _dev _mpt _fs _x; do
[ "${_dev%%#*}" != "$_dev" ] && continue
[[ $_mpt = $_find_mpt ]] || continue
echo -n $_fs;
return 0;
done < /etc/fstab
return 1
} }
# finds the major:minor of the block device backing the root filesystem. # finds the major:minor of the block device backing the root filesystem.
find_root_block_device() { find_block_device /; } find_root_block_device() { find_block_device /; }
# for_each_host_dev_fs <func> # for_each_host_dev_fs <func>
# Execute "<func> <dev> <filesystem>" for every "<dev>|<fs>" pair found # Execute "<func> <dev> <filesystem>" for every "<dev> <fs>" pair found
# in ${host_fs_types[@]} # in ${host_fs_types[@]}
for_each_host_dev_fs() for_each_host_dev_fs()
{ {
local _func="$1" local _func="$1"
local _dev local _dev
local _fs
local _ret=1 local _ret=1
for f in ${host_fs_types[@]}; do
OLDIFS="$IFS" [[ "${!host_fs_types[@]}" ]] || return 0
IFS="|"
set -- $f for _dev in "${!host_fs_types[@]}"; do
IFS="$OLDIFS" $_func "$_dev" "${host_fs_types[$_dev]}" && _ret=0
_dev="$1"
[[ -b "$_dev" ]] || continue
_fs="$2"
$_func $_dev $_fs && _ret=0
done done
return $_ret return $_ret
} }
host_fs_all()
{
echo "${host_fs_types[@]}"
}
# Walk all the slave relationships for a given block device. # Walk all the slave relationships for a given block device.
# Stop when our helper function returns success # Stop when our helper function returns success
# $1 = function to call on every found block device # $1 = function to call on every found block device
@@ -508,6 +482,9 @@ for_each_host_dev_and_slaves_all()
local _func="$1" local _func="$1"
local _dev local _dev
local _ret=1 local _ret=1
[[ "${host_devs[@]}" ]] || return 0
for _dev in ${host_devs[@]}; do for _dev in ${host_devs[@]}; do
[[ -b "$_dev" ]] || continue [[ -b "$_dev" ]] || continue
if check_block_and_slaves_all $_func $(get_maj_min $_dev); then if check_block_and_slaves_all $_func $(get_maj_min $_dev); then
@@ -521,6 +498,9 @@ for_each_host_dev_and_slaves()
{ {
local _func="$1" local _func="$1"
local _dev local _dev
[[ "${host_devs[@]}" ]] || return 0
for _dev in ${host_devs[@]}; do for _dev in ${host_devs[@]}; do
[[ -b "$_dev" ]] || continue [[ -b "$_dev" ]] || continue
check_block_and_slaves $_func $(get_maj_min $_dev) && return 0 check_block_and_slaves $_func $(get_maj_min $_dev) && return 0
@@ -870,7 +850,7 @@ inst_rule_programs() {
_bin="" _bin=""
if [ -x ${udevdir}/$_prog ]; then if [ -x ${udevdir}/$_prog ]; then
_bin=${udevdir}/$_prog _bin=${udevdir}/$_prog
elif [[ "${_prog/\$\{/}" != "$_prog" ]]; then elif [[ "${_prog/\$env\{/}" == "$_prog" ]]; then
_bin=$(find_binary "$_prog") || { _bin=$(find_binary "$_prog") || {
dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found" dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found"
continue; continue;
@@ -885,7 +865,7 @@ inst_rule_programs() {
_bin="" _bin=""
if [ -x ${udevdir}/$_prog ]; then if [ -x ${udevdir}/$_prog ]; then
_bin=${udevdir}/$_prog _bin=${udevdir}/$_prog
elif [[ "${_prog/\$\{/}" != "$_prog" ]]; then elif [[ "${_prog/\$env\{/}" == "$_prog" ]] && [[ "${_prog}" != "/sbin/initqueue" ]]; then
_bin=$(find_binary "$_prog") || { _bin=$(find_binary "$_prog") || {
dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found" dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found"
continue; continue;
@@ -900,7 +880,7 @@ inst_rule_programs() {
_bin="" _bin=""
if [ -x ${udevdir}/$_prog ]; then if [ -x ${udevdir}/$_prog ]; then
_bin=${udevdir}/$_prog _bin=${udevdir}/$_prog
elif [[ "${_prog/\$\{/}" != "$_prog" ]]; then elif [[ "${_prog/\$env\{/}" == "$_prog" ]]; then
_bin=$(find_binary "$_prog") || { _bin=$(find_binary "$_prog") || {
dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found" dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found"
continue; continue;
@@ -932,6 +912,12 @@ inst_rule_group_owner() {
fi fi
} }
inst_rule_initqueue() {
if grep -q -F initqueue "$1"; then
dracut_need_initqueue
fi
}
# udev rules always get installed in the same place, so # udev rules always get installed in the same place, so
# create a function to install them to make life simpler. # create a function to install them to make life simpler.
inst_rules() { inst_rules() {
@@ -946,6 +932,7 @@ inst_rules() {
_found="$r/$_rule" _found="$r/$_rule"
inst_rule_programs "$_found" inst_rule_programs "$_found"
inst_rule_group_owner "$_found" inst_rule_group_owner "$_found"
inst_rule_initqueue "$_found"
inst_simple "$_found" inst_simple "$_found"
fi fi
done done
@@ -955,6 +942,7 @@ inst_rules() {
_found="${r}$_rule" _found="${r}$_rule"
inst_rule_programs "$_found" inst_rule_programs "$_found"
inst_rule_group_owner "$_found" inst_rule_group_owner "$_found"
inst_rule_initqueue "$_found"
inst_simple "$_found" "$_target/${_found##*/}" inst_simple "$_found" "$_target/${_found##*/}"
fi fi
done done
@@ -962,6 +950,33 @@ inst_rules() {
done done
} }
prepare_udev_rules() {
[ -z "$UDEVVERSION" ] && export UDEVVERSION=$(udevadm --version)
for f in "$@"; do
f="${initdir}/etc/udev/rules.d/$f"
[ -e "$f" ] || continue
while read line; do
if [ "${line%%IMPORT PATH_ID}" != "$line" ]; then
if [ $UDEVVERSION -ge 174 ]; then
printf '%sIMPORT{builtin}="path_id"\n' "${line%%IMPORT PATH_ID}"
else
printf '%sIMPORT{program}="path_id %%p"\n' "${line%%IMPORT PATH_ID}"
fi
elif [ "${line%%IMPORT BLKID}" != "$line" ]; then
if [ $UDEVVERSION -ge 176 ]; then
printf '%sIMPORT{builtin}="blkid"\n' "${line%%IMPORT BLKID}"
else
printf '%sIMPORT{program}="/sbin/blkid -o udev -p $tempnode"\n' "${line%%IMPORT BLKID}"
fi
else
echo "$line"
fi
done < "${f}" > "${f}.new"
mv "${f}.new" "$f"
done
}
# install function specialized for hooks # install function specialized for hooks
# $1 = type of hook, $2 = hook priority (lower runs first), $3 = hook # $1 = type of hook, $2 = hook priority (lower runs first), $3 = hook
# All hooks should be POSIX/SuS compliant, they will be sourced by init. # All hooks should be POSIX/SuS compliant, they will be sourced by init.
@@ -1499,13 +1514,16 @@ module_is_host_only() (
find_kernel_modules_by_path () ( find_kernel_modules_by_path () (
local _OLDIFS local _OLDIFS
_OLDIFS=$IFS
IFS=: [[ -f $srcmods/modules.dep ]] || return 0
while read a rest; do
[[ $a = kernel*/$1/* ]] || continue _OLDIFS=$IFS
echo $srcmods/$a IFS=:
done < $srcmods/modules.dep while read a rest; do
IFS=$_OLDIFS [[ $a = */$1/* ]] || continue
echo $srcmods/$a
done < $srcmods/modules.dep
IFS=$_OLDIFS
return 0 return 0
) )
@@ -1591,7 +1609,7 @@ instmods() {
while read _mod; do while read _mod; do
inst1mod "${_mod%.ko*}" || { inst1mod "${_mod%.ko*}" || {
if [[ "$_check" == "yes" ]]; then if [[ "$_check" == "yes" ]]; then
[[ "$_silent" == "no" ]] && dfatal "Failed to install $_mod" [[ "$_silent" == "no" ]] && dfatal "Failed to install module $_mod"
return 1 return 1
fi fi
} }
@@ -1600,7 +1618,7 @@ instmods() {
while (($# > 0)); do # filenames as arguments while (($# > 0)); do # filenames as arguments
inst1mod ${1%.ko*} || { inst1mod ${1%.ko*} || {
if [[ "$_check" == "yes" ]]; then if [[ "$_check" == "yes" ]]; then
[[ "$_silent" == "no" ]] && dfatal "Failed to install $1" [[ "$_silent" == "no" ]] && dfatal "Failed to install module $1"
return 1 return 1
fi fi
} }

View File

@@ -1,17 +1,28 @@
#!/bin/sh #!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh # ex: ts=8 sw=4 sts=4 et filetype=sh
set -e set -e
KERNEL_VERSION="$(uname -r)"
[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
if [[ $MACHINE_ID ]] && [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then
IMG="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
fi
[[ -f $IMG ]] || IMG="/boot/initramfs-${KERNEL_VERSION}.img"
cd /run/initramfs cd /run/initramfs
IMG="/boot/initramfs-$(uname -r).img"
[ -f .need_shutdown -a -f "$IMG" ] || exit 1 [ -f .need_shutdown -a -f "$IMG" ] || exit 1
if zcat "$IMG" | cpio -id >/dev/null 2>&1; then if zcat "$IMG" | cpio -id --quiet >/dev/null; then
rm .need_shutdown rm .need_shutdown
elif xzcat "$IMG" | cpio -id >/dev/null 2>&1; then elif xzcat "$IMG" | cpio -id --quiet >/dev/null; then
rm .need_shutdown rm .need_shutdown
else else
# something failed, so we clean up # something failed, so we clean up
echo "Unpacking of $IMG to /run/initramfs failed" >&2
rm -f /run/initramfs/shutdown rm -f /run/initramfs/shutdown
exit 1 exit 1
fi fi

View File

@@ -75,12 +75,12 @@ version is:
---- ----
If you want to create lighter, smaller initramfs images, you may want to specify If you want to create lighter, smaller initramfs images, you may want to specify
the --host-only or -H option. Using this option, the resulting image will the --hostonly or -H option. Using this option, the resulting image will
contain only those dracut modules, kernel modules and filesystems, which are contain only those dracut modules, kernel modules and filesystems, which are
needed to boot this specific machine. This has the drawback, that you can't put needed to boot this specific machine. This has the drawback, that you can't put
the disk on another controller or machine, and that you can't switch to another the disk on another controller or machine, and that you can't switch to another
root filesystem, without recreating the initramfs image. The usage of the root filesystem, without recreating the initramfs image. The usage of the
--host-only option is only for experts and you will have to keep the broken --hostonly option is only for experts and you will have to keep the broken
pieces. At least keep a copy of a general purpose image (and corresponding pieces. At least keep a copy of a general purpose image (and corresponding
kernel) as a fallback to rescue your system. kernel) as a fallback to rescue your system.
@@ -376,7 +376,7 @@ will not be able to boot. Equivalent to "--compress=bzip2"
[WARNING] [WARNING]
==== ====
Make sure your kernel has lzma decompression support compiled in, otherwise you Make sure your kernel has lzma decompression support compiled in, otherwise you
will not be able to boot. Equivalent to "--compress=lzma -9" will not be able to boot. Equivalent to "lzma --compress=lzma -9"
==== ====
**--xz**:: **--xz**::
@@ -385,8 +385,7 @@ will not be able to boot. Equivalent to "--compress=lzma -9"
[WARNING] [WARNING]
==== ====
Make sure your kernel has xz decompression support compiled in, otherwise you Make sure your kernel has xz decompression support compiled in, otherwise you
will not be able to boot. Equivalent to "--compress=xz --check=crc32 will not be able to boot. Equivalent to "lzma --compress=xz --check=crc32 --lzma2=dict=1MiB"
--lzma2=dict=1MiB"
==== ====
**--compress** _<compressor>_:: **--compress** _<compressor>_::
@@ -409,6 +408,31 @@ will not be able to boot. Equivalent to "--compress=xz --check=crc32
**--keep**:: **--keep**::
Keep the initramfs temporary directory for debugging purposes. Keep the initramfs temporary directory for debugging purposes.
**--printsize**::
Print out the module install size
**--profile**:
Output profile information of the build process
**--ro-mnt**:
Mount / and /usr read-only by default.
**-L, --stdlog** _<level>_::
[0-6] Specify logging level (to standard error)
----
0 - suppress any messages
1 - only fatal errors
2 - all errors
3 - warnings
4 - info
5 - debug info (here starts lots of output)
6 - trace info (and even more)
----
**--regenerate-all**::
Regenerate all initramfs images at the default location with the kernel versions found on the system.
Additional parameters are passed through.
FILES FILES
----- -----
_/var/log/dracut.log_:: _/var/log/dracut.log_::
@@ -424,6 +448,9 @@ _/etc/dracut.conf_::
_/etc/dracut.conf.d/*.conf_:: _/etc/dracut.conf.d/*.conf_::
see dracut.conf5 see dracut.conf5
_/usr/lib/dracut/dracut.conf.d/*.conf_::
see dracut.conf5
Configuration in the initramfs Configuration in the initramfs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_/etc/conf.d/_:: _/etc/conf.d/_::

View File

@@ -120,6 +120,9 @@ final cleanup tasks. On an initramfs, the initial root file system cannot be
rotated away. Instead, it is simply emptied and the final root file system rotated away. Instead, it is simply emptied and the final root file system
mounted over the top. mounted over the top.
If the systemd module is used in the initramfs, the ordering of the services
started looks like <<dracutbootup7>>.
== Dracut on shutdown == Dracut on shutdown
On a systemd driven system, the dracut initramfs is also used for the shutdown procedure. On a systemd driven system, the dracut initramfs is also used for the shutdown procedure.
@@ -531,19 +534,19 @@ all files in _/etc/dracut.conf.d/*.conf_
As well as the information from <<all-bug-reports>> include the following As well as the information from <<all-bug-reports>> include the following
information: information:
* Include physical volume information by running the command: * Include physical volume information by running the command:
+ +
---- ----
# lvm pvdisplay # lvm pvdisplay
---- ----
+ +
* Include volume group information by running the command: * Include volume group information by running the command:
+ +
---- ----
# lvm vgdisplay # lvm vgdisplay
---- ----
+ +
* Include logical volume information by running the command: * Include logical volume information by running the command:
+ +
---- ----
# lvm lvdisplay # lvm lvdisplay
@@ -554,7 +557,7 @@ information:
As well as the information from <<all-bug-reports>>, include the following As well as the information from <<all-bug-reports>>, include the following
information: information:
* If using software RAID disk partitions, please include the output of * If using software RAID disk partitions, please include the output of
+ +
---- ----
# cat /proc/mdstat # cat /proc/mdstat
@@ -659,7 +662,7 @@ title Fedora (2.6.29.5-191.fc11.x86_64)
No root device found No root device found
Dropping to debug shell. Dropping to debug shell.
# #
---- ----
+ +
. Use this shell prompt to gather the information requested above (see <<all-bug-reports>>). . Use this shell prompt to gather the information requested above (see <<all-bug-reports>>).
@@ -679,7 +682,7 @@ The exact method for locating and preparing will vary. However, to continue with
a successful boot, the objective is to locate your root volume and create a a successful boot, the objective is to locate your root volume and create a
symlink _/dev/root_ which points to the file system. For example, the following symlink _/dev/root_ which points to the file system. For example, the following
example demonstrates accessing and booting a root volume that is an encrypted example demonstrates accessing and booting a root volume that is an encrypted
LVM Logical volume. LVM Logical volume.
. Inspect your partitions using parted . Inspect your partitions using parted
+ +
@@ -695,7 +698,7 @@ Number Start End Size Type File system Flags
---- ----
+ +
. You recall that your root volume was a LVM logical volume. Scan and activate . You recall that your root volume was a LVM logical volume. Scan and activate
any logical volumes. any logical volumes.
+ +
---- ----
# lvm vgscan # lvm vgscan
@@ -721,7 +724,7 @@ Installation Guide, you unlock your encrypted root volume.
# UUID=$(cryptsetup luksUUID /dev/mapper/linux-root) # UUID=$(cryptsetup luksUUID /dev/mapper/linux-root)
# cryptsetup luksOpen /dev/mapper/linux-root luks-$UUID # cryptsetup luksOpen /dev/mapper/linux-root luks-$UUID
Enter passphrase for /dev/mapper/linux-root: Enter passphrase for /dev/mapper/linux-root:
Key slot 0 unlocked. Key slot 0 unlocked.
---- ----
+ +
. Next, make a symbolic link to the unlocked root volume . Next, make a symbolic link to the unlocked root volume
@@ -780,7 +783,7 @@ processes, and switches to the real root device for further booting. dracut
modules can insert custom script at various points, to control the boot process. modules can insert custom script at various points, to control the boot process.
These hooks are plain directories containing shell scripts ending with ".sh", These hooks are plain directories containing shell scripts ending with ".sh",
which are sourced by init. which are sourced by init.
Common used functions are in _dracut-lib.sh_, which can be sourced by any script. Common used functions are in _dracut-lib.sh_, which can be sourced by any script.
@@ -829,7 +832,7 @@ udevadm.
=== Trigger Udev === Trigger Udev
udev is triggered by calling udevadm trigger, which sends add events for all udev is triggered by calling udevadm trigger, which sends add events for all
devices and subsystems. devices and subsystems.
@@ -909,7 +912,6 @@ still running from the initramfs should not have any open file descriptors left.
== Network Infrastructure == Network Infrastructure
FIXME FIXME
@@ -1028,13 +1030,11 @@ instmods
=== Creation Functions === Creation Functions
FIXME FIXME
=== Initramfs Functions === Initramfs Functions
FIXME FIXME
@@ -1042,6 +1042,9 @@ FIXME
FIXME FIXME
:leveloffset: 1
[[dracutbootup7]]
include::dracut.bootup.7.asc[]
:leveloffset: 1 :leveloffset: 1
[[dracut8]] [[dracut8]]

122
dracut.bootup.7.asc Normal file
View File

@@ -0,0 +1,122 @@
DRACUT.BOOTUP(7)
================
:doctype: manpage
:man source: dracut
:man manual: dracut
NAME
----
dracut.bootup - boot ordering in the initramfs
DESCRIPTION
-----------
This flow chart illustrates the ordering of the services, if systemd is used in the dracut initramfs.
----
systemd-journal.socket
|
v
dracut-cmdline.service
|
v
dracut-pre-udev.service
|
v
systemd-udevd.service
|
v
local-fs-pre.target dracut-pre-trigger.service
| |
v v
(various mounts) (various swap systemd-udev-trigger.service
| devices...) | (various low-level (various low-level
| | | services: seed, API VFS mounts:
v v v tmpfiles, random mqueue, configfs,
local-fs.target swap.target dracut-initqueue.service sysctl, ...) debugfs, ...)
| | | | |
\_______________|____________________ | ___________________|____________________/
\|/
v
sysinit.target
|
_________________/|\___________________
/ | \
| | |
v | v
(various | rescue.service
sockets...) | |
| | v
v | rescue.target
sockets.target |
| |
\_________________ | emergency.service
\| |
v v
basic.target emergency.target
|
______________________/|
/ |
| v
| dracut-pre-mount.service
| |
| v
| sysroot.mount
| |
| v
| initrd-root-fs.target
(custom initrd services) |
| v
| dracut-mount.service
| |
| v
| initrd-parse-etc.service
| |
| v
| (sysroot-usr.mount and
| various mounts marked
| with fstab option
| x-initrd.mount)
| |
| v
| initrd-fs.target
\______________________ |
\|
v
initrd.target
|
v
dracut-pre-pivot.service
|
v
initrd-cleanup.service
isolates to
initrd-switch-root.target
|
v
______________________/|
/ |
| initrd-udevadm-cleanup-db.service
| |
(custom initrd services) |
| |
\______________________ |
\|
v
initrd-switch-root.target
|
v
initrd-switch-root.service
|
v
switch-root
----
AUTHOR
------
Harald Hoyer
SEE ALSO
--------
*dracut*(8) *bootup*(7)

View File

@@ -121,6 +121,10 @@ Misc
specify the controlling terminal for the console. specify the controlling terminal for the console.
This is useful, if you have multiple "console=" arguments. This is useful, if you have multiple "console=" arguments.
**rd.action_on_fail=**_{shell|continue}_::
Specify the action after failure. By default it's emergency_shell.
'continue' means: ignore the current failure and go ahead.
[[dracutkerneldebug]] [[dracutkerneldebug]]
Debug Debug
~~~~~ ~~~~~
@@ -144,8 +148,12 @@ It should be attached to any report about dracut problems.
If "quiet" is set, it also logs to the console. If "quiet" is set, it also logs to the console.
**rd.memdebug=[0-3]**:: **rd.memdebug=[0-3]**::
print memory usage debug info, set the verbose level from 1 to 3 Print memory usage info at various points, set the verbose level from 0 to 3
print nothing when set rd.memdebug=0 Higher level means more debugging output:
0 - no output
1 - partial /proc/meminfo
2 - /proc/meminfo
3 - /proc/meminfo + /proc/slabinfo
**rd.break**:: **rd.break**::
drop to a shell at the end drop to a shell at the end
@@ -600,7 +608,7 @@ ZNET
+ +
---- ----
rd.znet=qeth,0.0.0600,0.0.0601,0.0.0602,layer2=1,portname=foo rd.znet=qeth,0.0.0600,0.0.0601,0.0.0602,layer2=1,portname=foo
rd.znet=ctc,0.0.0600,0.0.0601,0.0.0602,protocol=bar rd.znet=ctc,0.0.0600,0.0.0601,protocol=bar
---- ----
Plymouth Boot Splash Plymouth Boot Splash

View File

@@ -1,11 +1,11 @@
# PUT YOUR CONFIG HERE OR IN separate files named *.conf # PUT YOUR CONFIG HERE OR IN separate files named *.conf
# in /etc/dracut.conf.d # in /etc/dracut.conf.d
# /etc/dracut.conf.d/*.conf will override the settings in here # SEE man dracut.conf(5)
# Sample dracut config file # Sample dracut config file
logfile=/var/log/dracut.log #logfile=/var/log/dracut.log
fileloglvl=6 #fileloglvl=6
# Exact list of dracut modules to use. Modules not listed here are not going # Exact list of dracut modules to use. Modules not listed here are not going
# to be included. If you only want to add some optional modules use # to be included. If you only want to add some optional modules use
@@ -29,10 +29,10 @@ fileloglvl=6
# #
# install local /etc/mdadm.conf # install local /etc/mdadm.conf
mdadmconf="yes" #mdadmconf="no"
# install local /etc/lvm/lvm.conf # install local /etc/lvm/lvm.conf
lvmconf="yes" #lvmconf="no"
# A list of fsck tools to install. If it's not specified, module's hardcoded # A list of fsck tools to install. If it's not specified, module's hardcoded
# default is used, currently: "umount mount /sbin/fsck* xfs_db xfs_check # default is used, currently: "umount mount /sbin/fsck* xfs_db xfs_check

View File

@@ -10,17 +10,24 @@ dracut.conf - configuration file(s) for dracut
SYNOPSIS SYNOPSIS
-------- --------
_/etc/dracut.conf_ _/etc/dracut.conf.d/*.conf_ _/etc/dracut.conf_ _/etc/dracut.conf.d/*.conf_ _/usr/lib/dracut/dracut.conf.d/*.conf_
Description Description
----------- -----------
_dracut.conf_ is loaded during the initialisation phase of dracut. Command line _dracut.conf_ is loaded during the initialisation phase of dracut. Command line
parameter will overwrite any values set here. _dracut.conf.d/*.conf_ files are parameter will overwrite any values set here.
read in alphanumerical order and will overwrite parameters set in
_*.conf_ files are read from /usr/lib/dracut/dracut.conf.d and /etc/dracut.conf.d.
Files with the same name in /etc/dracut.conf.d will replace files in /usr/lib/dracut/dracut.conf.d.
The files are then read in alphanumerical order and will overwrite parameters set in
_/etc/dracut.conf_. Each line specifies an attribute and a value. A '#' _/etc/dracut.conf_. Each line specifies an attribute and a value. A '#'
indicates the beginning of a comment; following characters, up to the end of the indicates the beginning of a comment; following characters, up to the end of the
line are not interpreted. line are not interpreted.
dracut command line options will overwrite any values set here.
Configuration files must have the extension .conf; other extensions are ignored.
*dracutmodules+=*" __<dracut modules>__ ":: *dracutmodules+=*" __<dracut modules>__ "::
Specify a space-separated list of dracut modules to call when building the Specify a space-separated list of dracut modules to call when building the
initramfs. Modules are located in _/usr/lib/dracut/modules.d_. initramfs. Modules are located in _/usr/lib/dracut/modules.d_.
@@ -44,10 +51,6 @@ line are not interpreted.
Specify a space-separated list of kernel modules not to add to the Specify a space-separated list of kernel modules not to add to the
initramfs. The kernel modules have to be specified without the ".ko" suffix. initramfs. The kernel modules have to be specified without the ".ko" suffix.
*install_items+=*" __<kernel modules>__ "::
Specify a space-separated list of files, which are added to the initramfs
image.
*filesystems+=*" __<filesystem names>__ ":: *filesystems+=*" __<filesystem names>__ "::
Specify a space-separated list of kernel filesystem modules to exclusively Specify a space-separated list of kernel filesystem modules to exclusively
include in the generic initramfs. include in the generic initramfs.
@@ -127,13 +130,13 @@ If chrooted to another root other than the real root device, use --fstab and pro
Path to log file. Path to log file.
*show_modules=*"__{yes|no}__":: *show_modules=*"__{yes|no}__"::
Print included module's name to standard output during build. Print the name of the included modules to standard output during build.
Files Files
----- -----
_/etc/dracut.conf_:: _/etc/dracut.conf_::
Old configuration file. You better use your own file in Old configuration file. You better use your own file in
_/etc/dracut/conf.d/_. _/etc/dracut.conf.d/_.
_/etc/dracut.conf.d/_:: _/etc/dracut.conf.d/_::
Any _/etc/dracut.conf.d/*.conf_ file can overwrite the values in Any _/etc/dracut.conf.d/*.conf_ file can overwrite the values in

View File

@@ -2,14 +2,16 @@
# i18n # i18n
i18n_vars="/etc/sysconfig/keyboard:KEYTABLE-KEYMAP /etc/sysconfig/i18n:SYSFONT-FONT,FONTACM-FONT_MAP,FONT_UNIMAP" i18n_vars="/etc/sysconfig/keyboard:KEYTABLE-KEYMAP /etc/sysconfig/i18n:SYSFONT-FONT,FONTACM-FONT_MAP,FONT_UNIMAP"
omit_drivers+=" .*/fs/ocfs/.* i2o_scsi" omit_drivers+=' .*/fs/ocfs/.* i2o_scsi'
stdloglvl=3 stdloglvl=3
logfile=/var/log/dracut.log
fileloglvl=6
install_items+=" vi /etc/virc ps grep cat rm " install_items+=" vi /etc/virc ps grep cat rm "
prefix="/" prefix="/"
systemdutildir=/usr/lib/systemd systemdutildir=/usr/lib/systemd
systemdsystemunitdir=/usr/lib/systemd/system systemdsystemunitdir=/usr/lib/systemd/system
systemdsystemconfdir=/etc/systemd/system
udevdir=/usr/lib/udev udevdir=/usr/lib/udev
add_dracutmodules+=" systemd " add_dracutmodules+=" systemd "
realinitpath="/usr/lib/systemd/systemd" hostonly="yes"
kernel_cmdline+=" rd.auto=1 " dracut_rescue_image="yes"

262
dracut.sh
View File

@@ -7,7 +7,7 @@
# of the various mkinitrd implementations out there # of the various mkinitrd implementations out there
# #
# Copyright 2005-2010 Red Hat, Inc. All rights reserved. # Copyright 2005-2013 Red Hat, Inc. All rights reserved.
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -69,33 +69,35 @@ Creates initial ramdisk images for preloading modules
--kver [VERSION] Set kernel version to [VERSION]. --kver [VERSION] Set kernel version to [VERSION].
-f, --force Overwrite existing initramfs file. -f, --force Overwrite existing initramfs file.
-a, --add [LIST] Add a space-separated list of dracut modules.
-m, --modules [LIST] Specify a space-separated list of dracut modules to -m, --modules [LIST] Specify a space-separated list of dracut modules to
call when building the initramfs. Modules are located call when building the initramfs. Modules are located
in /usr/lib/dracut/modules.d. in /usr/lib/dracut/modules.d.
-o, --omit [LIST] Omit a space-separated list of dracut modules. -o, --omit [LIST] Omit a space-separated list of dracut modules.
-a, --add [LIST] Add a space-separated list of dracut modules. --force-add [LIST] Force to add a space-separated list of dracut modules
to the default set of modules, when -H is specified.
-d, --drivers [LIST] Specify a space-separated list of kernel modules to -d, --drivers [LIST] Specify a space-separated list of kernel modules to
exclusively include in the initramfs. exclusively include in the initramfs.
--add-drivers [LIST] Specify a space-separated list of kernel --add-drivers [LIST] Specify a space-separated list of kernel
modules to add to the initramfs. modules to add to the initramfs.
--omit-drivers [LIST] Specify a space-separated list of kernel --omit-drivers [LIST] Specify a space-separated list of kernel
modules not to add to the initramfs. modules not to add to the initramfs.
--filesystems [LIST] Specify a space-separated list of kernel filesystem --filesystems [LIST] Specify a space-separated list of kernel filesystem
modules to exclusively include in the generic modules to exclusively include in the generic
initramfs. initramfs.
-k, --kmoddir [DIR] Specify the directory, where to look for kernel -k, --kmoddir [DIR] Specify the directory, where to look for kernel
modules modules
--fwdir [DIR] Specify additional directories, where to look for --fwdir [DIR] Specify additional directories, where to look for
firmwares, separated by : firmwares, separated by :
--kernel-only Only install kernel drivers and firmware files --kernel-only Only install kernel drivers and firmware files
--no-kernel Do not install kernel drivers and firmware files --no-kernel Do not install kernel drivers and firmware files
--kernel-cmdline [PARAMETERS] Specify default kernel command line parameters --kernel-cmdline [PARAMETERS] Specify default kernel command line parameters
--strip Strip binaries in the initramfs (default) --strip Strip binaries in the initramfs
--nostrip Do not strip binaries in the initramfs --nostrip Do not strip binaries in the initramfs
--hardlink Hardlink files in the initramfs (default) --hardlink Hardlink files in the initramfs
--nohardlink Do not hardlink files in the initramfs --nohardlink Do not hardlink files in the initramfs
--prefix [DIR] Prefix initramfs files with [DIR] --prefix [DIR] Prefix initramfs files with [DIR]
--noprefix Do not prefix initramfs files (default) --noprefix Do not prefix initramfs files
--mdadmconf Include local /etc/mdadm.conf --mdadmconf Include local /etc/mdadm.conf
--nomdadmconf Do not include local /etc/mdadm.conf --nomdadmconf Do not include local /etc/mdadm.conf
--lvmconf Include local /etc/lvm/lvm.conf --lvmconf Include local /etc/lvm/lvm.conf
@@ -111,11 +113,11 @@ Creates initial ramdisk images for preloading modules
1 - only fatal errors 1 - only fatal errors
2 - all errors 2 - all errors
3 - warnings 3 - warnings
4 - info (default) 4 - info
5 - debug info (here starts lots of output) 5 - debug info (here starts lots of output)
6 - trace info (and even more) 6 - trace info (and even more)
-v, --verbose Increase verbosity level (default is info(4)) -v, --verbose Increase verbosity level
-q, --quiet Decrease verbosity level (default is info(4)) -q, --quiet Decrease verbosity level
-c, --conf [FILE] Specify configuration file to use. -c, --conf [FILE] Specify configuration file to use.
Default: /etc/dracut.conf Default: /etc/dracut.conf
--confdir [DIR] Specify configuration directory to use *.conf files --confdir [DIR] Specify configuration directory to use *.conf files
@@ -235,6 +237,30 @@ read_arg() {
fi fi
} }
dropindirs_sort()
{
suffix=$1; shift
args=("$@")
files=$(
while (( $# > 0 )); do
for i in ${1}/*${suffix}; do
[[ -f $i ]] && echo ${i##*/}
done
shift
done | sort -Vu
)
for f in $files; do
for d in "${args[@]}"; do
if [[ -f "$d/$f" ]]; then
echo "$d/$f"
continue 2
fi
done
done
}
verbosity_mod_l=0 verbosity_mod_l=0
unset kernel unset kernel
unset outfile unset outfile
@@ -293,7 +319,9 @@ TEMP=$(unset POSIXLY_CORRECT; getopt \
--long quiet \ --long quiet \
--long local \ --long local \
--long hostonly \ --long hostonly \
--long host-only \
--long no-hostonly \ --long no-hostonly \
--long no-host-only \
--long fstab \ --long fstab \
--long help \ --long help \
--long bzip2 \ --long bzip2 \
@@ -305,6 +333,8 @@ TEMP=$(unset POSIXLY_CORRECT; getopt \
--long show-modules \ --long show-modules \
--long keep \ --long keep \
--long printsize \ --long printsize \
--long regenerate-all \
--long noimageifnotneeded \
-- "$@") -- "$@")
if (( $? != 0 )); then if (( $? != 0 )); then
@@ -365,8 +395,10 @@ while :; do
[[ -f "$(readlink -f ${0%/*})/dracut-functions.sh" ]] \ [[ -f "$(readlink -f ${0%/*})/dracut-functions.sh" ]] \
&& dracutbasedir="$(readlink -f ${0%/*})" && dracutbasedir="$(readlink -f ${0%/*})"
;; ;;
-H|--hostonly) hostonly_l="yes" ;; -H|--hostonly|--host-only)
-N|--no-hostonly) hostonly_l="no" ;; hostonly_l="yes" ;;
-N|--no-hostonly|--no-host-only)
hostonly_l="no" ;;
--fstab) use_fstab_l="yes" ;; --fstab) use_fstab_l="yes" ;;
-h|--help) long_usage; exit 1 ;; -h|--help) long_usage; exit 1 ;;
-i|--include) push include_src "$2" -i|--include) push include_src "$2"
@@ -382,6 +414,8 @@ while :; do
;; ;;
--keep) keep="yes";; --keep) keep="yes";;
--printsize) printsize="yes";; --printsize) printsize="yes";;
--regenerate-all) regenerate_all="yes";;
--noimageifnotneeded) noimageifnotneeded="yes";;
--) shift; break;; --) shift; break;;
@@ -413,12 +447,45 @@ while (($# > 0)); do
shift shift
done done
if [[ $regenerate_all == "yes" ]]; then
ret=0
if [[ $kernel ]]; then
echo "--regenerate-all cannot be called with a kernel version" >&2
exit 1
fi
if [[ $outfile ]]; then
echo "--regenerate-all cannot be called with a image file" >&2
exit 1
fi
((len=${#dracut_args[@]}))
for ((i=0; i < len; i++)); do
[[ ${dracut_args[$i]} == "--regenerate-all" ]] && \
unset dracut_args[$i]
done
cd /lib/modules
for i in *; do
[[ -f $i/modules.builtin ]] || continue
dracut --kver=$i "${dracut_args[@]}"
((ret+=$?))
done
exit $ret
fi
if ! [[ $kernel ]]; then if ! [[ $kernel ]]; then
kernel=$(uname -r) kernel=$(uname -r)
fi fi
if ! [[ $outfile ]]; then if ! [[ $outfile ]]; then
outfile="/boot/initramfs-$kernel.img" [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then
outfile="/boot/${MACHINE_ID}/$kernel/initrd"
else
outfile="/boot/initramfs-$kernel.img"
fi
fi fi
for i in /usr/sbin /sbin /usr/bin /bin; do for i in /usr/sbin /sbin /usr/bin /bin; do
@@ -465,11 +532,9 @@ fi
[[ -f $conffile ]] && . "$conffile" [[ -f $conffile ]] && . "$conffile"
# source our config dir # source our config dir
if [[ $confdir && -d $confdir ]]; then for f in $(dropindirs_sort ".conf" "$confdir" "$dracutbasedir/dracut.conf.d"); do
for f in "$confdir"/*.conf; do [[ -e $f ]] && . "$f"
[[ -e $f ]] && . "$f" done
done
fi
# these optins add to the stuff in the config file # these optins add to the stuff in the config file
if (( ${#add_dracutmodules_l[@]} )); then if (( ${#add_dracutmodules_l[@]} )); then
@@ -595,6 +660,11 @@ readonly initdir=$(mktemp --tmpdir="$TMPDIR/" -d -t initramfs.XXXXXX)
exit 1 exit 1
} }
# clean up after ourselves no matter how we die.
trap 'ret=$?;[[ $outfile ]] && [[ -f $outfile.$$ ]] && rm -f "$outfile.$$";[[ $keep ]] && echo "Not removing $initdir." >&2 || { [[ $initdir ]] && rm -rf "$initdir";exit $ret; };' EXIT
# clean up after ourselves no matter how we die.
trap 'exit 1;' SIGINT
export DRACUT_KERNEL_LAZY="1" export DRACUT_KERNEL_LAZY="1"
export DRACUT_RESOLVE_LAZY="1" export DRACUT_RESOLVE_LAZY="1"
@@ -689,10 +759,11 @@ esac
abs_outfile=$(readlink -f "$outfile") && outfile="$abs_outfile" abs_outfile=$(readlink -f "$outfile") && outfile="$abs_outfile"
[[ -f $srcmods/modules.dep ]] || { if [[ -d $srcmods ]]; then
dfatal "$srcmods/modules.dep is missing. Did you run depmod?" [[ -f $srcmods/modules.dep ]] || {
exit 1 dwarn "$srcmods/modules.dep is missing. Did you run depmod?"
} }
fi
if [[ -f $outfile && ! $force ]]; then if [[ -f $outfile && ! $force ]]; then
dfatal "Will not override existing initramfs ($outfile) without --force" dfatal "Will not override existing initramfs ($outfile) without --force"
@@ -703,7 +774,7 @@ outdir=${outfile%/*}
[[ $outdir ]] || outdir="/" [[ $outdir ]] || outdir="/"
if [[ ! -d "$outdir" ]]; then if [[ ! -d "$outdir" ]]; then
dfatal "Can't write $outfile: Directory $outdir does not exist." dfatal "Can't write to $outdir: Directory $outdir does not exist or is not accessible."
exit 1 exit 1
elif [[ ! -w "$outdir" ]]; then elif [[ ! -w "$outdir" ]]; then
dfatal "No permission to write to $outdir." dfatal "No permission to write to $outdir."
@@ -713,19 +784,29 @@ elif [[ -f "$outfile" && ! -w "$outfile" ]]; then
exit 1 exit 1
fi fi
# clean up after ourselves no matter how we die.
trap 'ret=$?;[[ $keep ]] && echo "Not removing $initdir." >&2 || rm -rf "$initdir";exit $ret;' EXIT
# clean up after ourselves no matter how we die.
trap 'exit 1;' SIGINT
# Need to be able to have non-root users read stuff (rpcbind etc) # Need to be able to have non-root users read stuff (rpcbind etc)
chmod 755 "$initdir" chmod 755 "$initdir"
if [[ $hostonly ]]; then
for i in /sys /proc /run /dev; do
if ! findmnt "$i" &>/dev/null; then
dwarning "Turning off host-only mode: '$i' is not mounted!"
unset hostonly
fi
done
if ! [[ -d /run/udev/data ]]; then
dwarning "Turning off host-only mode: udev database not found!"
unset hostonly
fi
fi
declare -A host_fs_types
for line in "${fstab_lines[@]}"; do for line in "${fstab_lines[@]}"; do
set -- $line set -- $line
#dev mp fs fsopts #dev mp fs fsopts
push host_devs "$1" push host_devs "$1"
push host_fs_types "$1|$3" host_fs_types["$1"]="$3"
done done
for f in $add_fstab; do for f in $add_fstab; do
@@ -749,7 +830,7 @@ if [[ $hostonly ]]; then
# in hostonly mode, determine all devices, which have to be accessed # in hostonly mode, determine all devices, which have to be accessed
# and examine them for filesystem types # and examine them for filesystem types
push host_mp \ for mp in \
"/" \ "/" \
"/etc" \ "/etc" \
"/usr" \ "/usr" \
@@ -757,39 +838,62 @@ if [[ $hostonly ]]; then
"/usr/sbin" \ "/usr/sbin" \
"/usr/lib" \ "/usr/lib" \
"/usr/lib64" \ "/usr/lib64" \
"/boot" "/boot";
do
for mp in "${host_mp[@]}"; do
mountpoint "$mp" >/dev/null 2>&1 || continue mountpoint "$mp" >/dev/null 2>&1 || continue
push host_devs $(readlink -f "/dev/block/$(find_block_device "$mp")") push host_devs $(readlink -f "/dev/block/$(find_block_device "$mp")")
done done
while read dev type rest; do
[[ -b $dev ]] || continue
[[ "$type" == "partition" ]] || continue
while read _d _m _t _o _r; do
[[ "$_d" == \#* ]] && continue
[[ $_d ]] || continue
[[ $_t != "swap" ]] || [[ $_m != "swap" ]] && continue
[[ "$_o" == *noauto* ]] && continue
[[ "$_d" == UUID\=* ]] && _d="/dev/disk/by-uuid/${_d#UUID=}"
[[ "$_d" == LABEL\=* ]] && _d="/dev/disk/by-label/$_d#LABEL=}"
[[ "$_d" -ef "$dev" ]] || continue
while read _mapper _a _p _o; do
[[ $_mapper = \#* ]] && continue
[[ "$_d" -ef /dev/mapper/"$_mapper" ]] || continue
[[ "$_o" ]] || _o="$_p"
# skip mkswap swap
[[ $_o == *swap* ]] && continue 2
done < /etc/crypttab
push host_devs $(readlink -f $dev)
break
done < /etc/fstab
done < /proc/swaps
fi fi
_get_fs_type() ( _get_fs_type() (
[[ $1 ]] || return 1 [[ $1 ]] || return
if [[ -b $1 ]] && get_fs_env $1; then if [[ -b $1 ]] && get_fs_env $1; then
echo "$(readlink -f $1)|$ID_FS_TYPE" echo "$(readlink -f $1) $ID_FS_TYPE"
return 0 return 1
fi fi
if [[ -b /dev/block/$1 ]] && get_fs_env /dev/block/$1; then if [[ -b /dev/block/$1 ]] && get_fs_env /dev/block/$1; then
echo "$(readlink -f /dev/block/$1)|$ID_FS_TYPE" echo "$(readlink -f /dev/block/$1) $ID_FS_TYPE"
return 0 return 1
fi fi
if fstype=$(find_dev_fstype $1); then if fstype=$(find_dev_fstype $1); then
echo "$1|$fstype" echo "$1 $fstype"
return 0 return 1
fi fi
return 1 return 1
) )
for dev in "${host_devs[@]}"; do for dev in "${host_devs[@]}"; do
unset fs_type while read key val; do
for fstype in $(_get_fs_type $dev) \ host_fs_types["$key"]="$val"
$(check_block_and_slaves _get_fs_type $(get_maj_min $dev)); do done < <(
if ! strstr " ${host_fs_types[*]} " " $fstype ";then _get_fs_type $dev
push host_fs_types "$fstype" check_block_and_slaves_all _get_fs_type $(get_maj_min $dev)
fi )
done
done done
[[ -d $udevdir ]] \ [[ -d $udevdir ]] \
@@ -801,23 +905,30 @@ fi
[[ -d $systemdutildir ]] \ [[ -d $systemdutildir ]] \
|| systemdutildir=$(pkg-config systemd --variable=systemdutildir 2>/dev/null) || systemdutildir=$(pkg-config systemd --variable=systemdutildir 2>/dev/null)
[[ -d $systemdsystemunitdir ]] \
|| systemdsystemunitdir=$(pkg-config systemd --variable=systemdsystemunitdir 2>/dev/null)
if ! [[ -d "$systemdutildir" ]]; then if ! [[ -d "$systemdutildir" ]]; then
[[ -d /lib/systemd ]] && systemdutildir=/lib/systemd [[ -d /lib/systemd ]] && systemdutildir=/lib/systemd
[[ -d /usr/lib/systemd ]] && systemdutildir=/usr/lib/systemd [[ -d /usr/lib/systemd ]] && systemdutildir=/usr/lib/systemd
fi fi
[[ -d $systemdsystemunitdir ]] \
|| systemdsystemunitdir=$(pkg-config systemd --variable=systemdsystemunitdir 2>/dev/null)
[[ -d "$systemdsystemunitdir" ]] || systemdsystemunitdir=${systemdutildir}/system [[ -d "$systemdsystemunitdir" ]] || systemdsystemunitdir=${systemdutildir}/system
[[ -d $systemdsystemconfdir ]] \
|| systemdsystemconfdir=$(pkg-config systemd --variable=systemdsystemconfdir 2>/dev/null)
[[ -d "$systemdsystemconfdir" ]] || systemdsystemconfdir=/etc/systemd/system
export initdir dracutbasedir dracutmodules \ export initdir dracutbasedir dracutmodules \
fw_dir drivers_dir debug no_kernel kernel_only \ fw_dir drivers_dir debug no_kernel kernel_only \
omit_drivers mdadmconf lvmconf \ omit_drivers mdadmconf lvmconf \
use_fstab fstab_lines libdirs fscks nofscks ro_mnt \ use_fstab fstab_lines libdirs fscks nofscks ro_mnt \
stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
debug host_fs_types host_devs sshkey add_fstab \ debug host_fs_types host_devs sshkey add_fstab \
DRACUT_VERSION udevdir systemdutildir systemdsystemunitdir \ DRACUT_VERSION udevdir prefix filesystems drivers \
prefix filesystems drivers systemdutildir systemdsystemunitdir systemdsystemconfdir
# Create some directory structure first # Create some directory structure first
[[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}" [[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}"
@@ -833,7 +944,7 @@ if [[ $prefix ]]; then
fi fi
if [[ $kernel_only != yes ]]; then if [[ $kernel_only != yes ]]; then
for d in usr/bin usr/sbin bin etc lib sbin tmp usr var var/log $libdirs; do for d in usr/bin usr/sbin bin etc lib sbin tmp usr var $libdirs; do
[[ -e "${initdir}${prefix}/$d" ]] && continue [[ -e "${initdir}${prefix}/$d" ]] && continue
if [ -L "/$d" ]; then if [ -L "/$d" ]; then
inst_symlink "/$d" "${prefix}/$d" inst_symlink "/$d" "${prefix}/$d"
@@ -852,6 +963,7 @@ if [[ $kernel_only != yes ]]; then
ln -sfn ../run "$initdir/var/run" ln -sfn ../run "$initdir/var/run"
ln -sfn ../run/lock "$initdir/var/lock" ln -sfn ../run/lock "$initdir/var/lock"
ln -sfn ../run/log "$initdir/var/log"
else else
for d in lib "$libdir"; do for d in lib "$libdir"; do
[[ -e "${initdir}${prefix}/$d" ]] && continue [[ -e "${initdir}${prefix}/$d" ]] && continue
@@ -943,6 +1055,16 @@ if [[ $no_kernel != yes ]]; then
dinfo "*** Installing kernel module dependencies and firmware ***" dinfo "*** Installing kernel module dependencies and firmware ***"
dracut_kernel_post dracut_kernel_post
dinfo "*** Installing kernel module dependencies and firmware done ***" dinfo "*** Installing kernel module dependencies and firmware done ***"
if [[ $noimageifnotneeded == yes ]] && [[ $hostonly ]]; then
if [[ ! -f "$initdir/lib/dracut/need-initqueue" ]] && \
[[ -f ${initdir}/lib/modules/$kernel/modules.dep && ! -s ${initdir}/lib/modules/$kernel/modules.dep ]]; then
for i in ${initdir}/etc/cmdline.d/*.conf; do
# We need no initramfs image and do not generate one.
[[ $i == "${initdir}/etc/cmdline.d/*.conf" ]] && exit 0
done
fi
fi
fi fi
if [[ $kernel_only != yes ]]; then if [[ $kernel_only != yes ]]; then
@@ -958,6 +1080,15 @@ if [[ $kernel_only != yes ]]; then
cat $f >> "${initdir}/etc/fstab" cat $f >> "${initdir}/etc/fstab"
done done
if [ -d ${initdir}/$systemdutildir ]; then
mkdir -p ${initdir}/etc/conf.d
{
echo "systemdutildir=\"$systemdutildir\""
echo "systemdsystemunitdir=\"$systemdsystemunitdir\""
echo "systemdsystemconfdir=\"$systemdsystemconfdir\""
} > ${initdir}/etc/conf.d/systemd.conf
fi
if [[ $DRACUT_RESOLVE_LAZY ]] && [[ $DRACUT_INSTALL ]]; then if [[ $DRACUT_RESOLVE_LAZY ]] && [[ $DRACUT_INSTALL ]]; then
dinfo "*** Resolving executable dependencies ***" dinfo "*** Resolving executable dependencies ***"
find "$initdir" -type f \ find "$initdir" -type f \
@@ -1016,12 +1147,8 @@ fi
PRELINK_BIN=$(command -v prelink) PRELINK_BIN=$(command -v prelink)
if [[ $UID = 0 ]] && [[ $PRELINK_BIN ]]; then if [[ $UID = 0 ]] && [[ $PRELINK_BIN ]]; then
if [[ $DRACUT_FIPS_MODE ]]; then if [[ $DRACUT_FIPS_MODE ]]; then
dinfo "*** Pre-unlinking files ***" dinfo "*** Installing prelink files ***"
dracut_install -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf /etc/prelink.cache dracut_install -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf /etc/prelink.cache
chroot "$initdir" $PRELINK_BIN -u -a
rm -f "$initdir"/$PRELINK_BIN
rm -fr "$initdir"/etc/prelink.*
dinfo "*** Pre-unlinking files done ***"
else else
dinfo "*** Pre-linking files ***" dinfo "*** Pre-linking files ***"
dracut_install -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf dracut_install -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf
@@ -1042,7 +1169,7 @@ fi
if [[ $do_strip = yes ]] ; then if [[ $do_strip = yes ]] ; then
for p in strip xargs find; do for p in strip xargs find; do
if ! type -P $p >/dev/null; then if ! type -P $p >/dev/null; then
dwarn "Could not find '$p'. Not stripping the initramfs." dinfo "Could not find '$p'. Not stripping the initramfs."
do_strip=no do_strip=no
fi fi
done done
@@ -1055,6 +1182,8 @@ if [[ $do_strip = yes ]] ; then
-executable -not -path '*/lib/modules/*.ko' -print0 \ -executable -not -path '*/lib/modules/*.ko' -print0 \
| while read -r -d $'\0' f; do | while read -r -d $'\0' f; do
if ! [[ -e "${f%/*}/.${f##*/}.hmac" ]] \ if ! [[ -e "${f%/*}/.${f##*/}.hmac" ]] \
&& ! [[ -e "/lib/hmaccalc/${f##*/}.hmac" ]] \
&& ! [[ -e "/lib64/hmaccalc/${f##*/}.hmac" ]] \
&& ! [[ -e "/lib/fipscheck/${f##*/}.hmac" ]] \ && ! [[ -e "/lib/fipscheck/${f##*/}.hmac" ]] \
&& ! [[ -e "/lib64/fipscheck/${f##*/}.hmac" ]]; then && ! [[ -e "/lib64/fipscheck/${f##*/}.hmac" ]]; then
echo -n "$f"; echo -n -e "\000" echo -n "$f"; echo -n -e "\000"
@@ -1079,10 +1208,11 @@ fi
rm -f "$outfile" rm -f "$outfile"
dinfo "*** Creating image file ***" dinfo "*** Creating image file ***"
if ! ( umask 077; cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet| \ if ! ( umask 077; cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet| \
$compress > "$outfile"; ); then $compress > "$outfile.$$"; ); then
dfatal "dracut: creation of $outfile failed" dfatal "dracut: creation of $outfile.$$ failed"
exit 1 exit 1
fi fi
mv $outfile.$$ $outfile
dinfo "*** Creating image file done ***" dinfo "*** Creating image file done ***"
dinfo "Wrote $outfile:" dinfo "Wrote $outfile:"

View File

@@ -34,7 +34,13 @@ BuildRequires: dash bash git
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: pkgconfig
%endif %endif
%if 0%{?fedora}
BuildRequires: bash-completion
BuildRequires: pkgconfig
%endif
%if 0%{?suse_version} %if 0%{?suse_version}
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
%endif %endif
@@ -70,7 +76,7 @@ Provides: mkinitrd = 2.6.1
Obsoletes: dracut-kernel < 005 Obsoletes: dracut-kernel < 005
Provides: dracut-kernel = %{version}-%{release} Provides: dracut-kernel = %{version}-%{release}
Requires: bash Requires: bash >= 4
Requires: coreutils Requires: coreutils
Requires: cpio Requires: cpio
Requires: filesystem >= 2.1.0 Requires: filesystem >= 2.1.0
@@ -78,16 +84,16 @@ Requires: findutils
Requires: grep Requires: grep
Requires: hardlink Requires: hardlink
Requires: gzip xz Requires: gzip xz
Requires: module-init-tools >= 3.7-9 Requires: kmod
Requires: sed Requires: sed
Requires: file
Requires: kpartx Requires: kpartx
Requires: udev > 166
Requires: kbd kbd-misc
%if 0%{?fedora} || 0%{?rhel} > 6 %if 0%{?fedora} || 0%{?rhel} > 6
Requires: util-linux >= 2.21 Requires: util-linux >= 2.21
Conflicts: systemd < 187 Requires: systemd >= 199
Conflicts: grubby < 8.23
%else %else
Requires: udev > 166
Requires: util-linux-ng >= 2.21 Requires: util-linux-ng >= 2.21
%endif %endif
@@ -96,6 +102,8 @@ Conflicts: initscripts < 8.63-1
Conflicts: plymouth < 0.8.0-0.2009.29.09.19.1 Conflicts: plymouth < 0.8.0-0.2009.29.09.19.1
%endif %endif
Conflicts: mdadm < 3.2.6-14
%description %description
dracut contains tools to create a bootable initramfs for 2.6 Linux kernels. dracut contains tools to create a bootable initramfs for 2.6 Linux kernels.
Unlike existing implementations, dracut does hard-code as little as possible Unlike existing implementations, dracut does hard-code as little as possible
@@ -130,7 +138,7 @@ Requires: nss-softokn-freebl
%description fips %description fips
This package requires everything which is needed to build an This package requires everything which is needed to build an
all purpose initramfs with dracut, which does an integrity check. initramfs with dracut, which does an integrity check.
%endif %endif
%package fips-aesni %package fips-aesni
@@ -139,8 +147,7 @@ Requires: %{name}-fips = %{version}-%{release}
%description fips-aesni %description fips-aesni
This package requires everything which is needed to build an This package requires everything which is needed to build an
all purpose initramfs with dracut, which does an integrity check initramfs with dracut, which does an integrity check and adds the aesni-intel kernel module.
and adds the aesni-intel kernel module.
%package caps %package caps
Summary: dracut modules to build a dracut initramfs which drops capabilities Summary: dracut modules to build a dracut initramfs which drops capabilities
@@ -149,7 +156,23 @@ Requires: libcap
%description caps %description caps
This package requires everything which is needed to build an This package requires everything which is needed to build an
all purpose initramfs with dracut, which drops capabilities. initramfs with dracut, which drops capabilities.
%package nohostonly
Summary: dracut configuration to turn off hostonly image generation
Requires: %{name} = %{version}-%{release}
%description nohostonly
This package provides the configuration to turn off the host specific initramfs
generation with dracut.
%package norescue
Summary: dracut configuration to turn off rescue image generation
Requires: %{name} = %{version}-%{release}
%description norescue
This package provides the configuration to turn off the rescue initramfs
generation with dracut.
%package tools %package tools
Summary: dracut tools to build the local initramfs Summary: dracut tools to build the local initramfs
@@ -173,19 +196,17 @@ git am -p1 %{patches}
%endif %endif
%build %build
make all %configure --systemdsystemunitdir=%{_unitdir} --bashcompletiondir=$(pkg-config --variable=completionsdir bash-completion) --libdir=%{_prefix}/lib
make %{?_smp_mflags}
%install %install
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT
%endif %endif
make install DESTDIR=$RPM_BUILD_ROOT \ make %{?_smp_mflags} install \
libdir=%{_prefix}/lib \ DESTDIR=$RPM_BUILD_ROOT \
bindir=%{_bindir} \ libdir=%{_prefix}/lib
%if %{defined _unitdir}
systemdsystemunitdir=%{_unitdir} \
%endif
sysconfdir=/etc mandir=%{_mandir}
echo "DRACUT_VERSION=%{version}-%{release}" > $RPM_BUILD_ROOT/%{dracutlibdir}/dracut-version.sh echo "DRACUT_VERSION=%{version}-%{release}" > $RPM_BUILD_ROOT/%{dracutlibdir}/dracut-version.sh
@@ -194,6 +215,11 @@ rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/01fips
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/02fips-aesni rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/02fips-aesni
%endif %endif
%if %{defined _unitdir}
# for systemd, better use systemd-bootchart
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/00bootchart
%endif
# we do not support dash in the initramfs # we do not support dash in the initramfs
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/00dash rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/00dash
@@ -205,7 +231,6 @@ rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/50gensplash
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/96securityfs rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/96securityfs
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/97masterkey rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/97masterkey
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/98integrity rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/98integrity
rm -fr $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/98selinux
%endif %endif
mkdir -p $RPM_BUILD_ROOT/boot/dracut mkdir -p $RPM_BUILD_ROOT/boot/dracut
@@ -215,12 +240,12 @@ touch $RPM_BUILD_ROOT%{_localstatedir}/log/dracut.log
mkdir -p $RPM_BUILD_ROOT%{_sharedstatedir}/initramfs mkdir -p $RPM_BUILD_ROOT%{_sharedstatedir}/initramfs
%if 0%{?fedora} || 0%{?rhel} || 0%{?suse_version} %if 0%{?fedora} || 0%{?rhel} || 0%{?suse_version}
install -m 0644 dracut.conf.d/fedora.conf.example $RPM_BUILD_ROOT/etc/dracut.conf.d/01-dist.conf install -m 0644 dracut.conf.d/fedora.conf.example $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/01-dist.conf
install -m 0644 dracut.conf.d/fips.conf.example $RPM_BUILD_ROOT/etc/dracut.conf.d/40-fips.conf install -m 0644 dracut.conf.d/fips.conf.example $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/40-fips.conf
%endif %endif
%if 0%{?suse_version} %if 0%{?suse_version}
install -m 0644 dracut.conf.d/suse.conf.example $RPM_BUILD_ROOT/etc/dracut.conf.d/01-dist.conf install -m 0644 dracut.conf.d/suse.conf.example $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/01-dist.conf
%endif %endif
%if 0%{?fedora} <= 12 && 0%{?rhel} < 6 && 0%{?suse_version} <= 9999 %if 0%{?fedora} <= 12 && 0%{?rhel} < 6 && 0%{?suse_version} <= 9999
@@ -228,8 +253,17 @@ rm $RPM_BUILD_ROOT%{_bindir}/mkinitrd
rm $RPM_BUILD_ROOT%{_bindir}/lsinitrd rm $RPM_BUILD_ROOT%{_bindir}/lsinitrd
%endif %endif
mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d %if 0%{?fedora} || 0%{?rhel} > 6
install -m 0644 dracut.logrotate $RPM_BUILD_ROOT/etc/logrotate.d/dracut_log # FIXME: remove after F19
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d
install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
echo 'hostonly="no"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-nohostonly.conf
echo 'dracut_rescue_image="no"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-norescue.conf
%endif
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -m 0644 dracut.logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/dracut_log
# create compat symlink # create compat symlink
mkdir -p $RPM_BUILD_ROOT/sbin mkdir -p $RPM_BUILD_ROOT/sbin
@@ -244,6 +278,8 @@ rm -rf $RPM_BUILD_ROOT
%{_bindir}/dracut %{_bindir}/dracut
# compat symlink # compat symlink
/sbin/dracut /sbin/dracut
%{_datadir}/bash-completion/completions/dracut
%{_datadir}/bash-completion/completions/lsinitrd
%if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999 %if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999
%{_bindir}/mkinitrd %{_bindir}/mkinitrd
%{_bindir}/lsinitrd %{_bindir}/lsinitrd
@@ -256,11 +292,12 @@ rm -rf $RPM_BUILD_ROOT
%{dracutlibdir}/dracut-logger.sh %{dracutlibdir}/dracut-logger.sh
%{dracutlibdir}/dracut-initramfs-restore %{dracutlibdir}/dracut-initramfs-restore
%{dracutlibdir}/dracut-install %{dracutlibdir}/dracut-install
%config(noreplace) /etc/dracut.conf %config(noreplace) %{_sysconfdir}/dracut.conf
%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel}
%config /etc/dracut.conf.d/01-dist.conf %{dracutlibdir}/dracut.conf.d/01-dist.conf
%endif %endif
%dir /etc/dracut.conf.d %dir %{_sysconfdir}/dracut.conf.d
%dir %{dracutlibdir}/dracut.conf.d
%{_mandir}/man8/dracut.8* %{_mandir}/man8/dracut.8*
%{_mandir}/man8/*service.8* %{_mandir}/man8/*service.8*
%if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999 %if 0%{?fedora} > 12 || 0%{?rhel} >= 6 || 0%{?suse_version} > 9999
@@ -269,8 +306,14 @@ rm -rf $RPM_BUILD_ROOT
%endif %endif
%{_mandir}/man7/dracut.kernel.7* %{_mandir}/man7/dracut.kernel.7*
%{_mandir}/man7/dracut.cmdline.7* %{_mandir}/man7/dracut.cmdline.7*
%{_mandir}/man7/dracut.bootup.7*
%{_mandir}/man5/dracut.conf.5* %{_mandir}/man5/dracut.conf.5*
%if %{defined _unitdir}
%{dracutlibdir}/modules.d/00systemd-bootchart
%else
%{dracutlibdir}/modules.d/00bootchart %{dracutlibdir}/modules.d/00bootchart
%endif
%{dracutlibdir}/modules.d/03rescue
%{dracutlibdir}/modules.d/04watchdog %{dracutlibdir}/modules.d/04watchdog
%{dracutlibdir}/modules.d/05busybox %{dracutlibdir}/modules.d/05busybox
%{dracutlibdir}/modules.d/10i18n %{dracutlibdir}/modules.d/10i18n
@@ -304,12 +347,12 @@ rm -rf $RPM_BUILD_ROOT
%if %{undefined _unitdir} %if %{undefined _unitdir}
%{dracutlibdir}/modules.d/96securityfs %{dracutlibdir}/modules.d/96securityfs
%{dracutlibdir}/modules.d/97masterkey %{dracutlibdir}/modules.d/97masterkey
%{dracutlibdir}/modules.d/98selinux
%{dracutlibdir}/modules.d/98integrity %{dracutlibdir}/modules.d/98integrity
%endif %endif
%{dracutlibdir}/modules.d/97biosdevname %{dracutlibdir}/modules.d/97biosdevname
%{dracutlibdir}/modules.d/98ecryptfs %{dracutlibdir}/modules.d/98ecryptfs
%{dracutlibdir}/modules.d/98pollcdrom %{dracutlibdir}/modules.d/98pollcdrom
%{dracutlibdir}/modules.d/98selinux
%{dracutlibdir}/modules.d/98syslog %{dracutlibdir}/modules.d/98syslog
%{dracutlibdir}/modules.d/98systemd %{dracutlibdir}/modules.d/98systemd
%{dracutlibdir}/modules.d/98usrmount %{dracutlibdir}/modules.d/98usrmount
@@ -317,12 +360,32 @@ rm -rf $RPM_BUILD_ROOT
%{dracutlibdir}/modules.d/99fs-lib %{dracutlibdir}/modules.d/99fs-lib
%{dracutlibdir}/modules.d/99img-lib %{dracutlibdir}/modules.d/99img-lib
%{dracutlibdir}/modules.d/99shutdown %{dracutlibdir}/modules.d/99shutdown
%config(noreplace) /etc/logrotate.d/dracut_log %config(noreplace) %{_sysconfdir}/logrotate.d/dracut_log
%attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log %attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log
%dir %{_sharedstatedir}/initramfs %dir %{_sharedstatedir}/initramfs
%if %{defined _unitdir} %if %{defined _unitdir}
%{_unitdir}/dracut-shutdown.service %{_unitdir}/dracut-shutdown.service
%{_unitdir}/shutdown.target.wants/dracut-shutdown.service %{_unitdir}/shutdown.target.wants/dracut-shutdown.service
%{_unitdir}/dracut-cmdline.service
%{_unitdir}/dracut-initqueue.service
%{_unitdir}/dracut-mount.service
%{_unitdir}/dracut-pre-mount.service
%{_unitdir}/dracut-pre-pivot.service
%{_unitdir}/dracut-pre-trigger.service
%{_unitdir}/dracut-pre-udev.service
%{_unitdir}/initrd.target.wants/dracut-cmdline.service
%{_unitdir}/initrd.target.wants/dracut-initqueue.service
%{_unitdir}/initrd.target.wants/dracut-mount.service
%{_unitdir}/initrd.target.wants/dracut-pre-mount.service
%{_unitdir}/initrd.target.wants/dracut-pre-pivot.service
%{_unitdir}/initrd.target.wants/dracut-pre-trigger.service
%{_unitdir}/initrd.target.wants/dracut-pre-udev.service
%endif
%if 0%{?fedora} || 0%{?rhel} > 6
%{_prefix}/lib/kernel/install.d/50-dracut.install
%{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
%endif %endif
%files network %files network
@@ -343,7 +406,7 @@ rm -rf $RPM_BUILD_ROOT
%files fips %files fips
%defattr(-,root,root,0755) %defattr(-,root,root,0755)
%{dracutlibdir}/modules.d/01fips %{dracutlibdir}/modules.d/01fips
%config(noreplace) /etc/dracut.conf.d/40-fips.conf %{dracutlibdir}/dracut.conf.d/40-fips.conf
%endif %endif
%files fips-aesni %files fips-aesni
@@ -363,4 +426,12 @@ rm -rf $RPM_BUILD_ROOT
%dir /var/lib/dracut %dir /var/lib/dracut
%dir /var/lib/dracut/overlay %dir /var/lib/dracut/overlay
%files nohostonly
%defattr(-,root,root,0755)
%{dracutlibdir}/dracut.conf.d/02-nohostonly.conf
%files norescue
%defattr(-,root,root,0755)
%{dracutlibdir}/dracut.conf.d/02-norescue.conf
%changelog %changelog

View File

@@ -1,21 +1,5 @@
#!/usr/bin/perl #!/usr/bin/perl
sub last_tag {
open( GIT, 'git log --pretty=format:%H |');
LINE: while( <GIT> ) {
open( GIT2, "git tag --contains $_ |");
while( <GIT2> ) {
chomp;
last LINE if /..*/;
}
close GIT2;
}
$tag=$_;
close GIT2;
close GIT; # be done
return $tag;
};
sub create_patches { sub create_patches {
my $tag=shift; my $tag=shift;
my $pdir=shift; my $pdir=shift;
@@ -31,7 +15,8 @@ my $datestr = strftime "%Y%m%d", gmtime;
my $tag=shift; my $tag=shift;
my $pdir=shift; my $pdir=shift;
$tag=&last_tag if not defined $tag; $tag=`git describe --abbrev=0 --tags` if not defined $tag;
chomp($tag);
my @patches=&create_patches($tag, $pdir); my @patches=&create_patches($tag, $pdir);
my $num=$#patches + 2; my $num=$#patches + 2;
$tag=~s/[^0-9]+?([0-9]+)/$1/; $tag=~s/[^0-9]+?([0-9]+)/$1/;

View File

@@ -62,6 +62,10 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
static size_t dir_len(char const *file) static size_t dir_len(char const *file)
{ {
size_t length; size_t length;
if(!file)
return 0;
/* Strip the basename and any redundant slashes before it. */ /* Strip the basename and any redundant slashes before it. */
for (length = strlen(file)-1; 0 < length; length--) for (length = strlen(file)-1; 0 < length; length--)
if (file[length] == '/' && file[length-1] != '/') if (file[length] == '/' && file[length-1] != '/')
@@ -73,20 +77,23 @@ static char *convert_abs_rel(const char *from, const char *target)
{ {
/* we use the 4*MAXPATHLEN, which should not overrun */ /* we use the 4*MAXPATHLEN, which should not overrun */
char relative_from[MAXPATHLEN * 4]; char relative_from[MAXPATHLEN * 4];
char *realtarget = NULL; _cleanup_free_ char *realtarget = NULL;
char *p, *q; _cleanup_free_ char *target_dir_p = NULL, *realpath_p = NULL;
const char *realfrom = from; const char *realfrom = from;
int level = 0, fromlevel = 0, targetlevel = 0; size_t level = 0, fromlevel = 0, targetlevel = 0;
int l, i, rl; int l;
int dirlen; size_t i, rl, dirlen;
int ret;
p = strdup(target); target_dir_p = strdup(target);
dirlen = dir_len(p); if (!target_dir_p)
p[dirlen] = '\0'; return strdup(from);
q = realpath(p, NULL);
if (q == NULL) { dirlen = dir_len(target_dir_p);
free(p); target_dir_p[dirlen] = '\0';
realpath_p = realpath(target_dir_p, NULL);
if (realpath_p == NULL) {
log_warning("convert_abs_rel(): target '%s' directory has no realpath.", target); log_warning("convert_abs_rel(): target '%s' directory has no realpath.", target);
return strdup(from); return strdup(from);
} }
@@ -95,11 +102,13 @@ static char *convert_abs_rel(const char *from, const char *target)
* character - need to skip all leading /'s */ * character - need to skip all leading /'s */
rl = strlen(target); rl = strlen(target);
for (i = dirlen+1; i < rl; ++i) for (i = dirlen+1; i < rl; ++i)
if (p[i] != '/') if (target_dir_p[i] != '/')
break; break;
asprintf(&realtarget, "%s/%s", q, &p[i]); ret = asprintf(&realtarget, "%s/%s", realpath_p, &target_dir_p[i]);
free(p); if (ret < 0) {
free(q); log_error("Out of memory!");
exit(EXIT_FAILURE);
}
/* now calculate the relative path from <from> to <target> and /* now calculate the relative path from <from> to <target> and
store it in <relative_from> store it in <relative_from>
@@ -122,8 +131,6 @@ static char *convert_abs_rel(const char *from, const char *target)
if (realtarget[i] == '/') if (realtarget[i] == '/')
level++; level++;
free(realtarget);
/* add "../" to the relative_from path, until the common pathname is /* add "../" to the relative_from path, until the common pathname is
reached */ reached */
for (i = level; i < targetlevel; i++) { for (i = level; i < targetlevel; i++) {
@@ -155,18 +162,16 @@ static char *convert_abs_rel(const char *from, const char *target)
static int ln_r(const char *src, const char *dst) static int ln_r(const char *src, const char *dst)
{ {
int ret; int ret;
const char *points_to = convert_abs_rel(src, dst); _cleanup_free_ const char *points_to = convert_abs_rel(src, dst);
log_info("ln -s '%s' '%s'", points_to, dst); log_info("ln -s '%s' '%s'", points_to, dst);
ret = symlink(points_to, dst); ret = symlink(points_to, dst);
if (ret != 0) { if (ret != 0) {
log_error("ERROR: ln -s '%s' '%s': %m", points_to, dst); log_error("ERROR: ln -s '%s' '%s': %m", points_to, dst);
free((char *)points_to);
return 1; return 1;
} }
free((char *)points_to);
return 0; return 0;
} }
@@ -186,11 +191,11 @@ static bool use_clone = true;
static int cp(const char *src, const char *dst) static int cp(const char *src, const char *dst)
{ {
int pid; int pid;
int ret; int ret = 0;
if (use_clone) { if (use_clone) {
struct stat sb; struct stat sb;
int dest_desc, source_desc; _cleanup_close_ int dest_desc = -1, source_desc = -1;
if (lstat(src, &sb) != 0) if (lstat(src, &sb) != 0)
goto normal_copy; goto normal_copy;
@@ -207,20 +212,24 @@ static int cp(const char *src, const char *dst)
(sb.st_mode) & (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)); (sb.st_mode) & (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO));
if (dest_desc < 0) { if (dest_desc < 0) {
close(source_desc);
goto normal_copy; goto normal_copy;
} }
ret = clone_file(dest_desc, source_desc); ret = clone_file(dest_desc, source_desc);
close(source_desc);
if (ret == 0) { if (ret == 0) {
struct timeval tv[2];
if (fchown(dest_desc, sb.st_uid, sb.st_gid) != 0) if (fchown(dest_desc, sb.st_uid, sb.st_gid) != 0)
fchown(dest_desc, -1, sb.st_gid); fchown(dest_desc, (__uid_t)-1, sb.st_gid);
close(dest_desc); tv[0].tv_sec = sb.st_atime;
tv[0].tv_usec = 0;
tv[1].tv_sec = sb.st_mtime;
tv[1].tv_usec = 0;
futimes(dest_desc, tv);
return ret; return ret;
} }
close(dest_desc); close(dest_desc);
dest_desc = -1;
/* clone did not work, remove the file */ /* clone did not work, remove the file */
unlink(dst); unlink(dst);
/* do not try clone again */ /* do not try clone again */
@@ -230,16 +239,83 @@ static int cp(const char *src, const char *dst)
normal_copy: normal_copy:
pid = fork(); pid = fork();
if (pid == 0) { if (pid == 0) {
execlp("cp", "cp", "--reflink=auto", "--sparse=auto", "--preserve=mode", "-fL", src, dst, NULL); execlp("cp", "cp", "--reflink=auto", "--sparse=auto", "--preserve=mode,timestamps", "-fL", src, dst, NULL);
_exit(EXIT_FAILURE); _exit(EXIT_FAILURE);
} }
while (waitpid(pid, &ret, 0) < 0) { while (waitpid(pid, &ret, 0) < 0) {
if (errno != EINTR) { if (errno != EINTR) {
ret = -1; ret = -1;
log_error("Failed: cp --reflink=auto --sparse=auto --preserve=mode,timestamps -fL %s %s", src, dst);
break; break;
} }
} }
log_debug("cp ret = %d", ret);
return ret;
}
static int library_install(const char *src, const char *lib)
{
_cleanup_free_ char *p = NULL;
_cleanup_free_ char *pdir = NULL, *ppdir = NULL, *clib = NULL;
char *q;
int r, ret = 0;
p = strdup(lib);
r = dracut_install(p, p, false, false, true);
if (r != 0)
log_error("ERROR: failed to install '%s' for '%s'", p, src);
else
log_debug("Lib install: '%s'", p);
ret += r;
/* also install lib.so for lib.so.* files */
q = strstr(p, ".so.");
if (q) {
q[3] = '\0';
/* ignore errors for base lib symlink */
if (dracut_install(p, p, false, false, true) == 0)
log_debug("Lib install: '%s'", p);
}
/* Also try to install the same library from one directory above.
This fixes the case, where only the HWCAP lib would be installed
# ldconfig -p|fgrep libc.so
libc.so.6 (libc6,64bit, hwcap: 0x0000001000000000, OS ABI: Linux 2.6.32) => /lib64/power6/libc.so.6
libc.so.6 (libc6,64bit, hwcap: 0x0000000000000200, OS ABI: Linux 2.6.32) => /lib64/power6x/libc.so.6
libc.so.6 (libc6,64bit, OS ABI: Linux 2.6.32) => /lib64/libc.so.6
*/
free(p);
p = strdup(lib);
pdir = dirname(p);
if (!pdir)
return ret;
pdir = strdup(pdir);
ppdir = dirname(pdir);
if (!ppdir)
return ret;
ppdir = strdup(ppdir);
strcpy(p, lib);
clib = strjoin(ppdir, "/", basename(p), NULL);
if (dracut_install(clib, clib, false, false, true) == 0)
log_debug("Lib install: '%s'", clib);
/* also install lib.so for lib.so.* files */
q = strstr(clib, ".so.");
if (q) {
q[3] = '\0';
/* ignore errors for base lib symlink */
if (dracut_install(clib, clib, false, false, true) == 0)
log_debug("Lib install: '%s'", p);
}
return ret; return ret;
} }
@@ -248,17 +324,19 @@ static int resolve_deps(const char *src)
{ {
int ret = 0; int ret = 0;
char *buf = malloc(LINE_MAX); _cleanup_free_ char *buf = malloc(LINE_MAX);
size_t linesize = LINE_MAX; size_t linesize = LINE_MAX;
FILE *fptr; _cleanup_pclose_ FILE *fptr = NULL;
char *cmd; _cleanup_free_ char *cmd = NULL;
if (strstr(src, ".so") == 0) { if (strstr(src, ".so") == 0) {
int fd; _cleanup_close_ int fd = -1;
fd = open(src, O_RDONLY | O_CLOEXEC); fd = open(src, O_RDONLY | O_CLOEXEC);
if (fd < 0)
return -errno;
read(fd, buf, LINE_MAX); read(fd, buf, LINE_MAX);
buf[LINE_MAX - 1] = '\0'; buf[LINE_MAX - 1] = '\0';
close(fd);
if (buf[0] == '#' && buf[1] == '!') { if (buf[0] == '#' && buf[1] == '!') {
/* we have a shebang */ /* we have a shebang */
char *p, *q; char *p, *q;
@@ -274,7 +352,14 @@ static int resolve_deps(const char *src)
} }
/* run ldd */ /* run ldd */
asprintf(&cmd, "ldd %s 2>&1", src); ret = asprintf(&cmd, "ldd %s 2>&1", src);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
ret = 0;
fptr = popen(cmd, "r"); fptr = popen(cmd, "r");
while (!feof(fptr)) { while (!feof(fptr)) {
@@ -285,6 +370,12 @@ static int resolve_deps(const char *src)
log_debug("ldd: '%s'", buf); log_debug("ldd: '%s'", buf);
if (strstr(buf, "you do not have execution permission")) {
log_error("%s", buf);
ret+=1;
break;
}
if (strstr(buf, "not a dynamic executable")) if (strstr(buf, "not a dynamic executable"))
break; break;
@@ -294,31 +385,21 @@ static int resolve_deps(const char *src)
if (strstr(buf, "not regular file")) if (strstr(buf, "not regular file"))
break; break;
p = strstr(buf, "/"); if (strstr(buf, "cannot read header"))
break;
if (strstr(buf, destrootdir))
break;
p = strchr(buf, '/');
if (p) { if (p) {
int r;
for (q = p; *q && *q != ' ' && *q != '\n'; q++) ; for (q = p; *q && *q != ' ' && *q != '\n'; q++) ;
*q = '\0'; *q = '\0';
r = dracut_install(p, p, false, false, true);
if (r != 0)
log_error("ERROR: failed to install '%s' for '%s'", p, src);
else
log_debug("Lib install: '%s'", p);
ret += r;
/* also install lib.so for lib.so.* files */ ret += library_install(src, p);
q = strstr(p, ".so.");
if (q) {
q += 3;
*q = '\0';
/* ignore errors for base lib symlink */
if (dracut_install(p, p, false, false, true) == 0)
log_debug("Lib install: '%s'", p);
}
} }
} }
pclose(fptr);
return ret; return ret;
} }
@@ -326,10 +407,15 @@ static int resolve_deps(const char *src)
/* Install ".<filename>.hmac" file for FIPS self-checks */ /* Install ".<filename>.hmac" file for FIPS self-checks */
static int hmac_install(const char *src, const char *dst, const char *hmacpath) static int hmac_install(const char *src, const char *dst, const char *hmacpath)
{ {
char *srcpath = strdup(src); _cleanup_free_ char *srcpath = strdup(src);
char *dstpath = strdup(dst); _cleanup_free_ char *dstpath = strdup(dst);
char *srchmacname = NULL; _cleanup_free_ char *srchmacname = NULL;
char *dsthmacname = NULL; _cleanup_free_ char *dsthmacname = NULL;
int ret;
if (!(srcpath && dstpath))
return -ENOMEM;
size_t dlen = dir_len(src); size_t dlen = dir_len(src);
if (endswith(src, ".hmac")) if (endswith(src, ".hmac"))
@@ -338,35 +424,51 @@ static int hmac_install(const char *src, const char *dst, const char *hmacpath)
if (!hmacpath) { if (!hmacpath) {
hmac_install(src, dst, "/lib/fipscheck"); hmac_install(src, dst, "/lib/fipscheck");
hmac_install(src, dst, "/lib64/fipscheck"); hmac_install(src, dst, "/lib64/fipscheck");
hmac_install(src, dst, "/lib/hmaccalc");
hmac_install(src, dst, "/lib64/hmaccalc");
} }
srcpath[dlen] = '\0'; srcpath[dlen] = '\0';
dstpath[dir_len(dst)] = '\0'; dstpath[dir_len(dst)] = '\0';
if (hmacpath) { if (hmacpath) {
asprintf(&srchmacname, "%s/%s.hmac", hmacpath, &src[dlen + 1]); ret = asprintf(&srchmacname, "%s/%s.hmac", hmacpath, &src[dlen + 1]);
asprintf(&dsthmacname, "%s/%s.hmac", hmacpath, &src[dlen + 1]); if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
ret = asprintf(&dsthmacname, "%s/%s.hmac", hmacpath, &src[dlen + 1]);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
} else { } else {
asprintf(&srchmacname, "%s/.%s.hmac", srcpath, &src[dlen + 1]); ret = asprintf(&srchmacname, "%s/.%s.hmac", srcpath, &src[dlen + 1]);
asprintf(&dsthmacname, "%s/.%s.hmac", dstpath, &src[dlen + 1]); if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
ret = asprintf(&dsthmacname, "%s/.%s.hmac", dstpath, &src[dlen + 1]);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
} }
log_debug("hmac cp '%s' '%s')", srchmacname, dsthmacname); log_debug("hmac cp '%s' '%s')", srchmacname, dsthmacname);
dracut_install(srchmacname, dsthmacname, false, false, true); dracut_install(srchmacname, dsthmacname, false, false, true);
free(dsthmacname);
free(srchmacname);
free(srcpath);
free(dstpath);
return 0; return 0;
} }
static int dracut_install(const char *src, const char *dst, bool isdir, bool resolvedeps, bool hashdst) static int dracut_install(const char *src, const char *dst, bool isdir, bool resolvedeps, bool hashdst)
{ {
struct stat sb, db; struct stat sb, db;
char *dname = NULL; _cleanup_free_ char *fulldstpath = NULL;
char *fulldstpath = NULL; _cleanup_free_ char *fulldstdir = NULL;
char *fulldstdir = NULL;
int ret; int ret;
bool src_exists = true; bool src_exists = true;
char *i, *existing; char *i = NULL;
char *existing;
log_debug("dracut_install('%s', '%s')", src, dst); log_debug("dracut_install('%s', '%s')", src, dst);
@@ -399,9 +501,16 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
} }
i = strdup(dst); i = strdup(dst);
if (!i)
return -ENOMEM;
hashmap_put(items, i, i); hashmap_put(items, i, i);
asprintf(&fulldstpath, "%s%s", destrootdir, dst); ret = asprintf(&fulldstpath, "%s%s", destrootdir, dst);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
ret = stat(fulldstpath, &sb); ret = stat(fulldstpath, &sb);
@@ -417,7 +526,6 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
} else } else
log_debug("'%s' already exists", fulldstpath); log_debug("'%s' already exists", fulldstpath);
free(fulldstpath);
/* dst does already exist */ /* dst does already exist */
return ret; return ret;
} }
@@ -429,6 +537,8 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
ret = stat(fulldstdir, &db); ret = stat(fulldstdir, &db);
if (ret < 0) { if (ret < 0) {
_cleanup_free_ char *dname = NULL;
if (errno != ENOENT) { if (errno != ENOENT) {
log_error("ERROR: stat '%s': %m", fulldstdir); log_error("ERROR: stat '%s': %m", fulldstdir);
return 1; return 1;
@@ -436,35 +546,34 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
/* create destination directory */ /* create destination directory */
log_debug("dest dir '%s' does not exist", fulldstdir); log_debug("dest dir '%s' does not exist", fulldstdir);
dname = strdup(dst); dname = strdup(dst);
if (!dname)
return 1;
dname[dir_len(dname)] = '\0'; dname[dir_len(dname)] = '\0';
ret = dracut_install(dname, dname, true, false, true); ret = dracut_install(dname, dname, true, false, true);
free(dname);
if (ret != 0) { if (ret != 0) {
log_error("ERROR: failed to create directory '%s'", fulldstdir); log_error("ERROR: failed to create directory '%s'", fulldstdir);
free(fulldstdir);
return 1; return 1;
} }
} }
free(fulldstdir);
if (isdir && !src_exists) { if (isdir && !src_exists) {
log_info("mkdir '%s'", fulldstpath); log_info("mkdir '%s'", fulldstpath);
return mkdir(fulldstpath, 0755); ret = mkdir(fulldstpath, 0755);
return ret;
} }
/* ready to install src */ /* ready to install src */
if (S_ISDIR(sb.st_mode)) { if (S_ISDIR(sb.st_mode)) {
log_info("mkdir '%s'", fulldstpath); log_info("mkdir '%s'", fulldstpath);
return mkdir(fulldstpath, sb.st_mode | S_IWUSR); ret = mkdir(fulldstpath, sb.st_mode | S_IWUSR);
return ret;
} }
if (S_ISLNK(sb.st_mode)) { if (S_ISLNK(sb.st_mode)) {
char *abspath; _cleanup_free_ char *abspath = NULL;
char *absdestpath = NULL;
abspath = realpath(src, NULL); abspath = realpath(src, NULL);
@@ -482,15 +591,17 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
} }
if (lstat(fulldstpath, &sb) != 0) { if (lstat(fulldstpath, &sb) != 0) {
_cleanup_free_ char *absdestpath = NULL;
asprintf(&absdestpath, "%s%s", destrootdir, abspath); ret = asprintf(&absdestpath, "%s%s", destrootdir, abspath);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
ln_r(absdestpath, fulldstpath); ln_r(absdestpath, fulldstpath);
free(absdestpath);
} }
free(abspath);
if (arg_hmac) { if (arg_hmac) {
/* copy .hmac files also */ /* copy .hmac files also */
hmac_install(src, dst, NULL); hmac_install(src, dst, NULL);
@@ -508,8 +619,12 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
} }
} }
log_debug("dracut_install ret = %d", ret);
log_info("cp '%s' '%s'", src, fulldstpath); log_info("cp '%s' '%s'", src, fulldstpath);
ret += cp(src, fulldstpath); ret += cp(src, fulldstpath);
log_debug("dracut_install ret = %d", ret);
return ret; return ret;
} }
@@ -520,49 +635,49 @@ static void item_free(char *i)
} }
static void usage(int status) static void usage(int status)
{ {
/* */ /* */
printf("\ printf("Usage: %s -D DESTROOTDIR [OPTION]... -a SOURCE...\n"
Usage: %s -D DESTROOTDIR [OPTION]... -a SOURCE...\n\ "or: %s -D DESTROOTDIR [OPTION]... SOURCE DEST\n"
or: %s -D DESTROOTDIR [OPTION]... SOURCE DEST\n\ "\n"
\n\ "Install SOURCE to DEST in DESTROOTDIR with all needed dependencies.\n"
Install SOURCE to DEST in DESTROOTDIR with all needed dependencies.\n\ "\n"
\n\ " -D --destrootdir Install all files to DESTROOTDIR as the root\n"
-D --destrootdir Install all files to DESTROOTDIR as the root\n\ " -a --all Install all SOURCE arguments to DESTROOTDIR\n"
-a --all Install all SOURCE arguments to DESTROOTDIR\n\ " -o --optional If SOURCE does not exist, do not fail\n"
-o --optional If SOURCE does not exist, do not fail\n\ " -d --dir SOURCE is a directory\n"
-d --dir SOURCE is a directory\n\ " -l --ldd Also install shebang executables and libraries\n"
-l --ldd Also install shebang executables and libraries\n\ " -R --resolvelazy Only install shebang executables and libraries\n"
-R --resolvelazy Only install shebang executables and libraries for all SOURCE files\n\ " for all SOURCE files\n"
-H --fips Also install all '.SOURCE.hmac' files\n\ " -H --fips Also install all '.SOURCE.hmac' files\n"
-v --verbose Show more output\n\ " -v --verbose Show more output\n"
--debug Show debug output\n\ " --debug Show debug output\n"
--version Show package version\n\ " --version Show package version\n"
-h --help Show this help\n\ " -h --help Show this help\n"
\n\ "\n"
Example:\n\ "Example:\n"
# mkdir -p /var/tmp/test-root\n\ "# mkdir -p /var/tmp/test-root\n"
# %s -D /var/tmp/test-root --ldd -a sh tr\n\ "# %s -D /var/tmp/test-root --ldd -a sh tr\n"
# tree /var/tmp/test-root\n\ "# tree /var/tmp/test-root\n"
/var/tmp/test-root\n\ "/var/tmp/test-root\n"
|-- lib64 -> usr/lib64\n\ "|-- lib64 -> usr/lib64\n"
`-- usr\n\ "`-- usr\n"
|-- bin\n\ " |-- bin\n"
| |-- bash\n\ " | |-- bash\n"
| |-- sh -> bash\n\ " | |-- sh -> bash\n"
| `-- tr\n\ " | `-- tr\n"
`-- lib64\n\ " `-- lib64\n"
|-- ld-2.15.90.so\n\ " |-- ld-2.15.90.so\n"
|-- ld-linux-x86-64.so.2 -> ld-2.15.90.so\n\ " |-- ld-linux-x86-64.so.2 -> ld-2.15.90.so\n"
|-- libc-2.15.90.so\n\ " |-- libc-2.15.90.so\n"
|-- libc.so\n\ " |-- libc.so\n"
|-- libc.so.6 -> libc-2.15.90.so\n\ " |-- libc.so.6 -> libc-2.15.90.so\n"
|-- libdl-2.15.90.so\n\ " |-- libdl-2.15.90.so\n"
|-- libdl.so -> libdl-2.15.90.so\n\ " |-- libdl.so -> libdl-2.15.90.so\n"
|-- libdl.so.2 -> libdl-2.15.90.so\n\ " |-- libdl.so.2 -> libdl-2.15.90.so\n"
|-- libtinfo.so.5 -> libtinfo.so.5.9\n\ " |-- libtinfo.so.5 -> libtinfo.so.5.9\n"
`-- libtinfo.so.5.9\n\ " `-- libtinfo.so.5.9\n"
", program_invocation_short_name, program_invocation_short_name, program_invocation_short_name); , program_invocation_short_name, program_invocation_short_name, program_invocation_short_name);
exit(status); exit(status);
} }
@@ -575,7 +690,7 @@ static int parse_argv(int argc, char *argv[])
ARG_DEBUG ARG_DEBUG
}; };
static const struct option const options[] = { static struct option const options[] = {
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, ARG_VERSION}, {"version", no_argument, NULL, ARG_VERSION},
{"dir", no_argument, NULL, 'd'}, {"dir", no_argument, NULL, 'd'},
@@ -590,7 +705,7 @@ static int parse_argv(int argc, char *argv[])
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
while ((c = getopt_long(argc, argv, "adhloD:DHILR", options, NULL)) != -1) { while ((c = getopt_long(argc, argv, "adhloD:HR", options, NULL)) != -1) {
switch (c) { switch (c) {
case ARG_VERSION: case ARG_VERSION:
puts(PROGRAM_VERSION_STRING); puts(PROGRAM_VERSION_STRING);
@@ -641,7 +756,7 @@ static int parse_argv(int argc, char *argv[])
static int resolve_lazy(int argc, char **argv) static int resolve_lazy(int argc, char **argv)
{ {
int i; int i;
int destrootdirlen = strlen(destrootdir); size_t destrootdirlen = strlen(destrootdir);
int ret = 0; int ret = 0;
char *item; char *item;
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
@@ -671,10 +786,12 @@ static int resolve_lazy(int argc, char **argv)
static char *find_binary(const char *src) static char *find_binary(const char *src)
{ {
char *path; _cleanup_free_ char *path = NULL;
char *p, *q; char *p, *q;
bool end = false; bool end = false;
char *newsrc = NULL; char *newsrc = NULL;
int ret;
path = getenv("PATH"); path = getenv("PATH");
if (path == NULL) { if (path == NULL) {
@@ -683,6 +800,12 @@ static char *find_binary(const char *src)
} }
path = strdup(path); path = strdup(path);
p = path; p = path;
if (path == NULL) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
log_debug("PATH=%s", path); log_debug("PATH=%s", path);
do { do {
@@ -695,7 +818,12 @@ static char *find_binary(const char *src)
else else
*q = '\0'; *q = '\0';
asprintf(&newsrc, "%s/%s", p, src); ret = asprintf(&newsrc, "%s/%s", p, src);
if (ret < 0) {
log_error("Out of memory!");
exit(EXIT_FAILURE);
}
p = q + 1; p = q + 1;
if (stat(newsrc, &sb) != 0) { if (stat(newsrc, &sb) != 0) {
@@ -709,15 +837,15 @@ static char *find_binary(const char *src)
} while (!end); } while (!end);
free(path);
if (newsrc) if (newsrc)
log_debug("find_binary(%s) == %s", src, newsrc); log_debug("find_binary(%s) == %s", src, newsrc);
return newsrc; return newsrc;
} }
static int install_one(const char *src, const char *dst) static int install_one(const char *src, const char *dst)
{ {
int r = 0; int r = EXIT_SUCCESS;
int ret; int ret;
if (strchr(src, '/') == NULL) { if (strchr(src, '/') == NULL) {
@@ -746,29 +874,27 @@ static int install_one(const char *src, const char *dst)
static int install_all(int argc, char **argv) static int install_all(int argc, char **argv)
{ {
int r = 0; int r = EXIT_SUCCESS;
int i; int i;
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
int ret; int ret;
log_debug("Handle '%s'", argv[i]); log_debug("Handle '%s'", argv[i]);
if (strchr(argv[i], '/') == NULL) { if (strchr(argv[i], '/') == NULL) {
char *newsrc = find_binary(argv[i]); _cleanup_free_ char *newsrc = find_binary(argv[i]);
if (newsrc) { if (newsrc) {
log_debug("dracut_install '%s'", newsrc); log_debug("dracut_install '%s'", newsrc);
ret = dracut_install(newsrc, newsrc, arg_createdir, arg_resolvedeps, true); ret = dracut_install(newsrc, newsrc, arg_createdir, arg_resolvedeps, true);
if (ret == 0) { if (ret == 0) {
log_debug("dracut_install '%s' OK", newsrc); log_debug("dracut_install '%s' OK", newsrc);
} }
free(newsrc);
} else { } else {
ret = -1; ret = -1;
} }
} else { } else {
char *dest = strdup(argv[i]); _cleanup_free_ char *dest = strdup(argv[i]);
ret = dracut_install(argv[i], dest, arg_createdir, arg_resolvedeps, true); ret = dracut_install(argv[i], dest, arg_createdir, arg_resolvedeps, true);
free(dest);
} }
if ((ret != 0) && (!arg_optional)) { if ((ret != 0) && (!arg_optional)) {

View File

@@ -1,7 +1,6 @@
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
#ifndef foomacrohfoo #pragma once
#define foomacrohfoo
/*** /***
This file is part of systemd. This file is part of systemd.
@@ -45,16 +44,38 @@
#define _hidden_ __attribute__ ((visibility("hidden"))) #define _hidden_ __attribute__ ((visibility("hidden")))
#define _weakref_(x) __attribute__((weakref(#x))) #define _weakref_(x) __attribute__((weakref(#x)))
#define _introspect_(x) __attribute__((section("introspect." x))) #define _introspect_(x) __attribute__((section("introspect." x)))
#define _alignas_(x) __attribute__((aligned(__alignof(x))))
#define _cleanup_(x) __attribute__((cleanup(x)))
/* automake test harness */
#define EXIT_TEST_SKIP 77
#define XSTRINGIFY(x) #x #define XSTRINGIFY(x) #x
#define STRINGIFY(x) XSTRINGIFY(x) #define STRINGIFY(x) XSTRINGIFY(x)
/* Rounds up */ /* Rounds up */
#define ALIGN(l) ALIGN_TO((l), sizeof(void*))
#define ALIGN4(l) (((l) + 3) & ~3)
#define ALIGN8(l) (((l) + 7) & ~7)
#if __SIZEOF_POINTER__ == 8
#define ALIGN(l) ALIGN8(l)
#elif __SIZEOF_POINTER__ == 4
#define ALIGN(l) ALIGN4(l)
#else
#error "Wut? Pointers are neither 4 nor 8 bytes long?"
#endif
#define ALIGN_PTR(p) ((void*) ALIGN((unsigned long) p))
#define ALIGN4_PTR(p) ((void*) ALIGN4((unsigned long) p))
#define ALIGN8_PTR(p) ((void*) ALIGN8((unsigned long) p))
static inline size_t ALIGN_TO(size_t l, size_t ali) { static inline size_t ALIGN_TO(size_t l, size_t ali) {
return ((l + ali - 1) & ~(ali - 1)); return ((l + ali - 1) & ~(ali - 1));
} }
#define ALIGN_TO_PTR(p, ali) ((void*) ALIGN_TO((unsigned long) p))
#define ELEMENTSOF(x) (sizeof(x)/sizeof((x)[0])) #define ELEMENTSOF(x) (sizeof(x)/sizeof((x)[0]))
/* /*
@@ -64,34 +85,35 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
* @member: the name of the member within the struct. * @member: the name of the member within the struct.
* *
*/ */
#define container_of(ptr, type, member) ({ \ #define container_of(ptr, type, member) \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \ __extension__ ({ \
(type *)( (char *)__mptr - offsetof(type,member) );}) const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) ); \
#ifndef MAX
#define MAX(a,b) \
__extension__ ({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a > _b ? _a : _b; \
}) })
#endif
#define MAX3(a,b,c) \ #undef MAX
MAX(MAX(a,b),c) #define MAX(a,b) \
__extension__ ({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a > _b ? _a : _b; \
})
#ifndef MIN #define MAX3(x,y,z) \
__extension__ ({ \
typeof(x) _c = MAX(x,y); \
MAX(_c, z); \
})
#undef MIN
#define MIN(a,b) \ #define MIN(a,b) \
__extension__ ({ \ __extension__ ({ \
typeof(a) _a = (a); \ typeof(a) _a = (a); \
typeof(b) _b = (b); \ typeof(b) _b = (b); \
_a < _b ? _a : _b; \ _a < _b ? _a : _b; \
}) })
#endif
#define MIN3(a,b,c) \
MIN(MIN(a,b),c)
#ifndef CLAMP
#define CLAMP(x, low, high) \ #define CLAMP(x, low, high) \
__extension__ ({ \ __extension__ ({ \
typeof(x) _x = (x); \ typeof(x) _x = (x); \
@@ -99,6 +121,7 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
typeof(high) _high = (high); \ typeof(high) _high = (high); \
((_x > _high) ? _high : ((_x < _low) ? _low : _x)); \ ((_x > _high) ? _high : ((_x < _low) ? _low : _x)); \
}) })
#endif
#define assert_se(expr) \ #define assert_se(expr) \
do { \ do { \
@@ -119,14 +142,21 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
log_assert_failed_unreachable(t, __FILE__, __LINE__, __PRETTY_FUNCTION__); \ log_assert_failed_unreachable(t, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
} while (false) } while (false)
#define assert_cc(expr) \ #if defined(static_assert)
do { \ #define assert_cc(expr) \
switch (0) { \ do { \
case 0: \ static_assert(expr, #expr); \
case !!(expr): \
; \
} \
} while (false) } while (false)
#else
#define assert_cc(expr) \
do { \
switch (0) { \
case 0: \
case !!(expr): \
; \
} \
} while (false)
#endif
#define PTR_TO_UINT(p) ((unsigned int) ((uintptr_t) (p))) #define PTR_TO_UINT(p) ((unsigned int) ((uintptr_t) (p)))
#define UINT_TO_PTR(u) ((void*) ((uintptr_t) (u))) #define UINT_TO_PTR(u) ((void*) ((uintptr_t) (u)))
@@ -149,6 +179,8 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
#define memzero(x,l) (memset((x), 0, (l))) #define memzero(x,l) (memset((x), 0, (l)))
#define zero(x) (memzero(&(x), sizeof(x))) #define zero(x) (memzero(&(x), sizeof(x)))
#define CHAR_TO_STR(x) ((char[2]) { x, 0 })
#define char_array_0(x) x[sizeof(x)-1] = 0; #define char_array_0(x) x[sizeof(x)-1] = 0;
#define IOVEC_SET_STRING(i, s) \ #define IOVEC_SET_STRING(i, s) \
@@ -187,6 +219,66 @@ static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) {
return k; return k;
} }
#include "log.h" #define VA_FORMAT_ADVANCE(format, ap) \
do { \
int _argtypes[128]; \
size_t _i, _k; \
_k = parse_printf_format((format), ELEMENTSOF(_argtypes), _argtypes); \
assert(_k < ELEMENTSOF(_argtypes)); \
for (_i = 0; _i < _k; _i++) { \
if (_argtypes[_i] & PA_FLAG_PTR) { \
(void) va_arg(ap, void*); \
continue; \
} \
\
switch (_argtypes[_i]) { \
case PA_INT: \
case PA_INT|PA_FLAG_SHORT: \
case PA_CHAR: \
(void) va_arg(ap, int); \
break; \
case PA_INT|PA_FLAG_LONG: \
(void) va_arg(ap, long int); \
break; \
case PA_INT|PA_FLAG_LONG_LONG: \
(void) va_arg(ap, long long int); \
break; \
case PA_WCHAR: \
(void) va_arg(ap, wchar_t); \
break; \
case PA_WSTRING: \
case PA_STRING: \
case PA_POINTER: \
(void) va_arg(ap, void*); \
break; \
case PA_FLOAT: \
case PA_DOUBLE: \
(void) va_arg(ap, double); \
break; \
case PA_DOUBLE|PA_FLAG_LONG_DOUBLE: \
(void) va_arg(ap, long double); \
break; \
default: \
assert_not_reached("Unknown format string argument."); \
} \
} \
} while(false)
#endif /* Because statfs.t_type can be int on some architecures, we have to cast
* the const magic to the type, otherwise the compiler warns about
* signed/unsigned comparison, because the magic can be 32 bit unsigned.
*/
#define F_TYPE_CMP(a, b) (a == (typeof(a)) b)
/* Returns the number of chars needed to format variables of the
* specified type as a decimal string. Adds in extra space for a
* negative '-' prefix. */
#define DECIMAL_STR_MAX(type) \
(1+(sizeof(type) <= 1 ? 3 : \
sizeof(type) <= 2 ? 5 : \
sizeof(type) <= 4 ? 10 : \
sizeof(type) <= 8 ? 20 : sizeof(int[-2*(sizeof(type) > 8)])))
#include "log.h"

View File

@@ -185,3 +185,95 @@ static const char *const log_level_table[] = {
}; };
DEFINE_STRING_TABLE_LOOKUP(log_level, int); DEFINE_STRING_TABLE_LOOKUP(log_level, int);
char *strnappend(const char *s, const char *suffix, size_t b) {
size_t a;
char *r;
if (!s && !suffix)
return strdup("");
if (!s)
return strndup(suffix, b);
if (!suffix)
return strdup(s);
assert(s);
assert(suffix);
a = strlen(s);
if (b > ((size_t) -1) - a)
return NULL;
r = new(char, a+b+1);
if (!r)
return NULL;
memcpy(r, s, a);
memcpy(r+a, suffix, b);
r[a+b] = 0;
return r;
}
char *strappend(const char *s, const char *suffix) {
return strnappend(s, suffix, suffix ? strlen(suffix) : 0);
}
char *strjoin(const char *x, ...) {
va_list ap;
size_t l;
char *r, *p;
va_start(ap, x);
if (x) {
l = strlen(x);
for (;;) {
const char *t;
size_t n;
t = va_arg(ap, const char *);
if (!t)
break;
n = strlen(t);
if (n > ((size_t) -1) - l) {
va_end(ap);
return NULL;
}
l += n;
}
} else
l = 0;
va_end(ap);
r = new(char, l+1);
if (!r)
return NULL;
if (x) {
p = stpcpy(r, x);
va_start(ap, x);
for (;;) {
const char *t;
t = va_arg(ap, const char *);
if (!t)
break;
p = stpcpy(p, t);
}
va_end(ap);
} else
r[0] = 0;
return r;
}

View File

@@ -507,6 +507,42 @@ void* memdup(const void *p, size_t l);
int is_kernel_thread(pid_t pid); int is_kernel_thread(pid_t pid);
static inline void freep(void *p) {
free(*(void**) p);
}
static inline void fclosep(FILE **f) {
if (*f)
fclose(*f);
}
static inline void pclosep(FILE **f) {
if (*f)
pclose(*f);
}
static inline void closep(int *fd) {
if (*fd >= 0)
close_nointr_nofail(*fd);
}
static inline void closedirp(DIR **d) {
if (*d)
closedir(*d);
}
static inline void umaskp(mode_t *u) {
umask(*u);
}
#define _cleanup_free_ _cleanup_(freep)
#define _cleanup_fclose_ _cleanup_(fclosep)
#define _cleanup_pclose_ _cleanup_(pclosep)
#define _cleanup_close_ _cleanup_(closep)
#define _cleanup_closedir_ _cleanup_(closedirp)
#define _cleanup_umask_ _cleanup_(umaskp)
#define _cleanup_globfree_ _cleanup_(globfree)
int fd_inc_sndbuf(int fd, size_t n); int fd_inc_sndbuf(int fd, size_t n);
int fd_inc_rcvbuf(int fd, size_t n); int fd_inc_rcvbuf(int fd, size_t n);
@@ -524,4 +560,6 @@ bool in_initrd(void);
void warn_melody(void); void warn_melody(void);
char *strjoin(const char *x, ...) _sentinel_;
#endif #endif

View File

@@ -0,0 +1,63 @@
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
#
# Copyright 2013 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
__contains_word () {
local word=$1; shift
for w in $*; do [[ $w = $word ]] && return 0; done
return 1
}
_lsinitrd() {
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
[STANDALONE]='-s --size -h --help'
[ARG]='-f --file -k --kver'
)
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--file|-f)
comps=$(compgen -f -- "$cur")
compopt -o filenames
;;
--kver|-k)
comps=$(cd /lib/modules; echo [0-9]*)
;;
*)
return 0
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
comps=$(compgen -f -- "$cur")
compopt -o filenames
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _lsinitrd lsinitrd

View File

@@ -10,12 +10,15 @@ lsinitrd - tool to show the contents of an initramfs image
SYNOPSIS SYNOPSIS
-------- --------
*lsinit* ['OPTION...'] [<image>] *lsinitrd* ['OPTION...'] [<image> [<filename> [<filename> [...] ]]]
*lsinitrd* ['OPTION...'] -k <kernel-version>
DESCRIPTION DESCRIPTION
----------- -----------
lsinitrd shows the contents of an initramfs image. if <image> is omitted, then lsinitrd shows the contents of an initramfs image. if <image> is omitted, then
lsinitrd uses the default image /boot/initramfs-<kernel version>.img. lsinitrd uses the default image _/boot/<machine-id>/<kernel-version>/initrd_ or
_/boot/initramfs-<kernel-version>.img_.
OPTIONS OPTIONS
------- -------
@@ -25,6 +28,12 @@ OPTIONS
**-s, --size**:: **-s, --size**::
sort the contents of the initramfs by size. sort the contents of the initramfs by size.
**-f, --file** _<filename>_::
print the contents of <filename>.
**-k, --kver** _<kernel version>_::
inspect the initramfs of <kernel version>.
AVAILABILITY AVAILABILITY
------------ ------------
The lsinitrd command is part of the dracut package and is available from The lsinitrd command is part of the dracut package and is available from

View File

@@ -21,55 +21,132 @@
usage() usage()
{ {
echo "Usage: $(${0##*/}) [-s] [<initramfs file> [<filename>]]" {
echo "Usage: ${0##*/} [options] [<initramfs file> [<filename> [<filename> [...] ]]]"
echo "Usage: ${0##*/} [options] -k <kernel version>"
echo
echo "-h, --help print a help message and exit."
echo "-s, --size sort the contents of the initramfs by size."
echo "-f, --file <filename> print the contents of <filename>."
echo "-k, --kver <kernel version> inspect the initramfs of <kernel version>."
echo
} >&2
} }
[[ $# -le 2 ]] || { usage ; exit 1 ; }
sorted=0 sorted=0
while getopts "s" opt; do declare -A filenames
case $opt in
s) sorted=1;; unset POSIXLY_CORRECT
h) usage; exit 0;; TEMP=$(getopt \
\?) usage; exit 1;; -o "shf:k:" \
--long kver: \
--long file: \
--long help \
--long size \
-- "$@")
if (( $? != 0 )); then
usage
exit 1
fi
eval set -- "$TEMP"
while (($# > 0)); do
case $1 in
-k|--kver) KERNEL_VERSION="$2"; shift;;
-f|--file) filenames[${2#/}]=1; shift;;
-s|--size) sorted=1;;
-h|--help) usage; exit 0;;
--) shift;break;;
*) usage; exit 1;;
esac esac
shift
done done
shift $((OPTIND-1))
image="${1:-/boot/initramfs-$(uname -r).img}" [[ $KERNEL_VERSION ]] || KERNEL_VERSION="$(uname -r)"
[[ -f "$image" ]] || { echo "$image does not exist" ; exit 1 ; }
CAT=zcat if [[ $1 ]]; then
FILE_T=$(file --dereference "$image") image="$1"
if ! [[ -f "$image" ]]; then
if echo "test"|xz|xz -dc --single-stream >/dev/null 2>&1; then {
XZ_SINGLE_STREAM="--single-stream" echo "$image does not exist"
fi echo
} >&2
if [[ "$FILE_T" =~ :\ gzip\ compressed\ data ]]; then usage
CAT=zcat exit 1
elif [[ "$FILE_T" =~ :\ xz\ compressed\ data ]]; then fi
CAT="xzcat $XZ_SINGLE_STREAM"
elif [[ "$FILE_T" =~ :\ XZ\ compressed\ data ]]; then
CAT="xzcat $XZ_SINGLE_STREAM"
elif [[ "$FILE_T" =~ :\ LZMA ]]; then
CAT="xzcat $XZ_SINGLE_STREAM"
elif [[ "$FILE_T" =~ :\ data ]]; then
CAT="xzcat $XZ_SINGLE_STREAM"
fi
if [[ $# -eq 2 ]]; then
$CAT $image | cpio --extract --verbose --quiet --to-stdout ${2#/} 2>/dev/null
exit $?
fi
echo "$image: $(du -h $image | while read a b; do echo $a;done)"
echo "========================================================================"
$CAT "$image" | cpio --extract --verbose --quiet --to-stdout '*lib/dracut/dracut-*' 2>/dev/null
echo "========================================================================"
if [ "$sorted" -eq 1 ]; then
$CAT "$image" | cpio --extract --verbose --quiet --list | sort -n -k5
else else
$CAT "$image" | cpio --extract --verbose --quiet --list | sort -k9 [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
if [[ -d /boot/loader/entries || -L /boot/loader/entries ]] \
&& [[ $MACHINE_ID ]] \
&& [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then
image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
else
image="/boot/initramfs-${KERNEL_VERSION}.img"
fi
fi fi
echo "========================================================================"
shift
while (($# > 0)); do
filenames[${1#/}]=1;
shift
done
if ! [[ -f "$image" ]]; then
{
echo "No <initramfs file> specified and the default image '$image' cannot be accessed!"
echo
} >&2
usage
exit 1
fi
read -N 6 bin < "$image"
case $bin in
$'\x1f\x8b'*)
CAT="zcat";;
BZh*)
CAT="bzcat";;
070701)
CAT="cat";;
*)
CAT="xzcat";
if echo "test"|xz|xzcat --single-stream >/dev/null 2>&1; then
CAT="xzcat --single-stream"
fi
;;
esac
ret=0
if (( ${#filenames[@]} > 0 )); then
(( ${#filenames[@]} == 1 )) && nofileinfo=1
for f in ${!filenames[@]}; do
[[ $nofileinfo ]] || echo "initramfs:/$f"
[[ $nofileinfo ]] || echo "========================================================================"
$CAT $image | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null
((ret+=$?))
[[ $nofileinfo ]] || echo "========================================================================"
[[ $nofileinfo ]] || echo
done
else
echo "Image: $image: $(du -h $image | while read a b; do echo $a;done)"
echo "========================================================================"
version=$($CAT "$image" | cpio --extract --verbose --quiet --to-stdout '*lib/dracut/dracut-*' 2>/dev/null)
((ret+=$?))
echo "$version with dracut modules:"
$CAT "$image" | cpio --extract --verbose --quiet --to-stdout 'usr/lib/dracut/modules.txt' 2>/dev/null
((ret+=$?))
echo "========================================================================"
if [ "$sorted" -eq 1 ]; then
$CAT "$image" | cpio --extract --verbose --quiet --list | sort -n -k5
else
$CAT "$image" | cpio --extract --verbose --quiet --list | sort -k9
fi
((ret+=$?))
echo "========================================================================"
fi
exit $ret

View File

@@ -0,0 +1,18 @@
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
check() {
[[ "$mount_needs" ]] && return 1
[ -x $systemdutildir/systemd-bootchart ] || return 1
return 255
}
depends() {
return 0
}
install() {
inst_symlink /init /sbin/init
dracut_install $systemdutildir/systemd-bootchart
}

View File

@@ -51,7 +51,6 @@ mount_boot()
do_fips() do_fips()
{ {
info "Checking integrity of kernel"
KERNEL=$(uname -r) KERNEL=$(uname -r)
if ! [ -e "/boot/.vmlinuz-${KERNEL}.hmac" ]; then if ! [ -e "/boot/.vmlinuz-${KERNEL}.hmac" ]; then
@@ -59,19 +58,21 @@ do_fips()
return 1 return 1
fi fi
sha512hmac -c "/boot/.vmlinuz-${KERNEL}.hmac" || return 1
FIPSMODULES=$(cat /etc/fipsmodules) FIPSMODULES=$(cat /etc/fipsmodules)
info "Loading and integrity checking all crypto modules" info "Loading and integrity checking all crypto modules"
for module in $FIPSMODULES; do for module in $FIPSMODULES; do
if [ "$module" != "tcrypt" ]; then if [ "$module" != "tcrypt" ]; then
modprobe ${module} || return 1 modprobe ${module}
fi fi
done done
info "Self testing crypto algorithms" info "Self testing crypto algorithms"
modprobe tcrypt || return 1 modprobe tcrypt || return 1
rmmod tcrypt rmmod tcrypt
info "Checking integrity of kernel"
sha512hmac -c "/boot/.vmlinuz-${KERNEL}.hmac" || return 1
info "All initrd crypto checks done" info "All initrd crypto checks done"
> /tmp/fipsdone > /tmp/fipsdone

View File

@@ -12,9 +12,11 @@ depends() {
installkernel() { installkernel() {
local _fipsmodules _mod local _fipsmodules _mod
_fipsmodules="aead aes_generic xts aes-x86_64 ansi_cprng cbc ccm chainiv ctr gcm ghash_generic" _fipsmodules="aead aes_generic aes-x86_64 ansi_cprng arc4 blowfish camellia cast6 cbc ccm "
_fipsmodules+=" des deflate ecb eseqiv hmac seqiv sha256 sha256_generic sha512 sha512_generic" _fipsmodules+="chainiv crc32c cryptomgr crypto_null ctr cts deflate des des3_ede dm-crypt dm-mod "
_fipsmodules+=" cryptomgr crypto_null tcrypt dm-mod dm-crypt" _fipsmodules+="ecb eseqiv fcrypt gcm ghash_generic hmac khazad lzo md4 md5 michael_mic rmd128 "
_fipsmodules+="rmd160 rmd256 rmd320 rot13 salsa20 seed seqiv serpent sha1 sha224 sha256 sha256_generic "
_fipsmodules+="sha384 sha512 sha512_generic tcrypt tea tnepres twofish wp256 wp384 wp512 xeta xtea xts zlib"
mkdir -m 0755 -p "${initdir}/etc/modprobe.d" mkdir -m 0755 -p "${initdir}/etc/modprobe.d"
@@ -36,7 +38,7 @@ install() {
inst_libdir_file libsoftokn3.so libsoftokn3.so \ inst_libdir_file libsoftokn3.so libsoftokn3.so \
libsoftokn3.chk libfreebl3.so libfreebl3.chk \ libsoftokn3.chk libfreebl3.so libfreebl3.chk \
libssl.so 'hmaccalc/sha512hmac.hmac' libssl.so 'hmaccalc/sha512hmac.hmac' libssl.so.10
dracut_install -o prelink dracut_install -o prelink
} }

View File

@@ -0,0 +1,19 @@
#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
check() {
# do not add this module by default
return 255
}
depends() {
return 0
}
install() {
dracut_install -o ps grep more cat rm strace free showmount \
ping netstat rpcinfo vi scp ping6 ssh \
fsck fsck.ext2 fsck.ext4 fsck.ext3 fsck.ext4dev fsck.vfat e2fsck
}

View File

@@ -4,8 +4,8 @@
[ -n "$DRACUT_SYSTEMD" ] && exit 0 [ -n "$DRACUT_SYSTEMD" ] && exit 0
if [ -x /lib/systemd/systemd-vconsole-setup ]; then if [ -x $systemdutildir/systemd-vconsole-setup ]; then
/lib/systemd/systemd-vconsole-setup "$@" $systemdutildir/systemd-vconsole-setup "$@"
fi fi
[ -e /etc/vconsole.conf ] && . /etc/vconsole.conf [ -e /etc/vconsole.conf ] && . /etc/vconsole.conf

View File

@@ -12,9 +12,9 @@ depends() {
} }
install() { install() {
[ -x /lib/systemd/systemd-vconsole-setup ] && dracut_install /lib/systemd/systemd-vconsole-setup dracut_install -o $systemdutildir/systemd-vconsole-setup
KBDSUBDIRS=consolefonts,consoletrans,keymaps,unimaps KBDSUBDIRS=consolefonts,consoletrans,keymaps,unimaps
DEFAULT_FONT=LatArCyrHeb-16 DEFAULT_FONT=latarcyrheb-sun16
I18N_CONF="/etc/locale.conf" I18N_CONF="/etc/locale.conf"
VCONFIG_CONF="/etc/vconsole.conf" VCONFIG_CONF="/etc/vconsole.conf"
@@ -86,9 +86,11 @@ install() {
install_base() { install_base() {
dracut_install setfont loadkeys kbd_mode stty dracut_install setfont loadkeys kbd_mode stty
inst ${moddir}/console_init.sh /lib/udev/console_init if ! dracut_module_included "systemd"; then
inst_rules ${moddir}/10-console.rules inst ${moddir}/console_init.sh /lib/udev/console_init
inst_hook cmdline 20 "${moddir}/parse-i18n.sh" inst_rules ${moddir}/10-console.rules
inst_hook cmdline 20 "${moddir}/parse-i18n.sh"
fi
} }
install_all_kbd() { install_all_kbd() {

View File

@@ -17,16 +17,22 @@ type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
# $netif reads easier than $1 # $netif reads easier than $1
netif=$1 netif=$1
use_bridge='false'
use_vlan='false'
# enslave this interface to bond? # enslave this interface to bond?
if [ -e /tmp/bond.info ]; then for i in /tmp/bond.*.info; do
. /tmp/bond.info [ -e "$i" ] || continue
unset bondslaves
unset bondname
. "$i"
for slave in $bondslaves ; do for slave in $bondslaves ; do
if [ "$netif" = "$slave" ] ; then if [ "$netif" = "$slave" ] ; then
netif=$bondname netif=$bondname
break 2
fi fi
done done
fi done
if [ -e /tmp/team.info ]; then if [ -e /tmp/team.info ]; then
. /tmp/team.info . /tmp/team.info
@@ -37,6 +43,20 @@ if [ -e /tmp/team.info ]; then
done done
fi fi
if [ -e /tmp/vlan.info ]; then
. /tmp/vlan.info
if [ "$netif" = "$phydevice" ]; then
if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
: # We need to really setup bond (recursive call)
elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
: # We need to really setup team (recursive call)
else
netif="$vlanname"
use_vlan='true'
fi
fi
fi
# bridge this interface? # bridge this interface?
if [ -e /tmp/bridge.info ]; then if [ -e /tmp/bridge.info ]; then
. /tmp/bridge.info . /tmp/bridge.info
@@ -44,24 +64,18 @@ if [ -e /tmp/bridge.info ]; then
if [ "$netif" = "$ethname" ]; then if [ "$netif" = "$ethname" ]; then
if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
: # We need to really setup bond (recursive call) : # We need to really setup bond (recursive call)
elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
: # We need to really setup team (recursive call)
elif [ "$netif" = "$vlanname" ] && [ -n "$DO_VLAN_SETUP" ]; then
: # We need to really setup vlan (recursive call)
else else
netif="$bridgename" netif="$bridgename"
use_bridge='true'
fi fi
fi fi
done done
fi fi
if [ -e /tmp/vlan.info ]; then
. /tmp/vlan.info
if [ "$netif" = "$phydevice" ]; then
if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
: # We need to really setup bond (recursive call)
else
netif="$vlanname"
fi
fi
fi
# disable manual ifup while netroot is set for simplifying our logic # disable manual ifup while netroot is set for simplifying our logic
# in netroot case we prefer netroot to bringup $netif automaticlly # in netroot case we prefer netroot to bringup $netif automaticlly
[ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2" [ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2"
@@ -109,10 +123,10 @@ do_static() {
[ -n "$mtu" ] && ip link set mtu $mtu dev $netif [ -n "$mtu" ] && ip link set mtu $mtu dev $netif
if strstr $ip '*:*:*'; then if strstr $ip '*:*:*'; then
# note no ip addr flush for ipv6 # note no ip addr flush for ipv6
ip addr add $ip/$mask dev $netif ip addr add $ip/$mask ${srv+peer $srv} dev $netif
else else
ip addr flush dev $netif ip addr flush dev $netif
ip addr add $ip/$mask brd + dev $netif ip addr add $ip/$mask ${srv+peer $srv} brd + dev $netif
fi fi
[ -n "$gw" ] && echo ip route add default via $gw dev $netif > /tmp/net.$netif.gw [ -n "$gw" ] && echo ip route add default via $gw dev $netif > /tmp/net.$netif.gw
@@ -130,11 +144,12 @@ if [ "$netif" = "lo" ] ; then
fi fi
# start bond if needed # start bond if needed
if [ -e /tmp/bond.info ]; then if [ -e /tmp/bond.${netif}.info ]; then
. /tmp/bond.info . /tmp/bond.${netif}.info
if [ "$netif" = "$bondname" ] && [ ! -e /tmp/net.$bondname.up ] ; then # We are master bond device if [ "$netif" = "$bondname" ] && [ ! -e /tmp/net.$bondname.up ] ; then # We are master bond device
modprobe bonding modprobe bonding
echo "+$netif" > /sys/class/net/bonding_masters
ip link set $netif down ip link set $netif down
# Stolen from ifup-eth # Stolen from ifup-eth
@@ -208,6 +223,10 @@ if [ -e /tmp/bridge.info ]; then
for ethname in $ethnames ; do for ethname in $ethnames ; do
if [ "$ethname" = "$bondname" ] ; then if [ "$ethname" = "$bondname" ] ; then
DO_BOND_SETUP=yes ifup $bondname -m DO_BOND_SETUP=yes ifup $bondname -m
elif [ "$ethname" = "$teammaster" ] ; then
DO_TEAM_SETUP=yes ifup $teammaster -m
elif [ "$ethname" = "$vlanname" ]; then
DO_VLAN_SETUP=yes ifup $vlanname -m
else else
linkup $ethname linkup $ethname
fi fi
@@ -219,10 +238,10 @@ fi
get_vid() { get_vid() {
case "$1" in case "$1" in
vlan*) vlan*)
return ${1#vlan} echo ${1#vlan}
;; ;;
*.*) *.*)
return ${1##*.} echo ${1##*.}
;; ;;
esac esac
} }
@@ -231,10 +250,13 @@ if [ "$netif" = "$vlanname" ] && [ ! -e /tmp/net.$vlanname.up ]; then
modprobe 8021q modprobe 8021q
if [ "$phydevice" = "$bondname" ] ; then if [ "$phydevice" = "$bondname" ] ; then
DO_BOND_SETUP=yes ifup $phydevice -m DO_BOND_SETUP=yes ifup $phydevice -m
elif [ "$phydevice" = "$teammaster" ] ; then
DO_TEAM_SETUP=yes ifup $phydevice -m
else else
linkup "$phydevice" linkup "$phydevice"
fi fi
ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid $vlanname; echo $?)" ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid $vlanname)"
ip link set "$vlanname" up
fi fi
# setup nameserver # setup nameserver
@@ -256,6 +278,7 @@ if [ -z "$ip" ]; then
fi fi
fi fi
# Specific configuration, spin through the kernel command line # Specific configuration, spin through the kernel command line
# looking for ip= lines # looking for ip= lines
for p in $(getargs ip=); do for p in $(getargs ip=); do
@@ -264,7 +287,9 @@ for p in $(getargs ip=); do
[ "$autoconf" = "ibft" ] && continue [ "$autoconf" = "ibft" ] && continue
# If this option isn't directed at our interface, skip it # If this option isn't directed at our interface, skip it
[ -n "$dev" ] && [ "$dev" != "$netif" ] && continue [ -n "$dev" ] && [ "$dev" != "$netif" ] && \
[ "$use_bridge" != 'true' ] && \
[ "$use_vlan" != 'true' ] && continue
# Store config for later use # Store config for later use
for i in ip srv gw mask hostname macaddr; do for i in ip srv gw mask hostname macaddr; do

View File

@@ -95,5 +95,7 @@ install() {
inst_libdir_file {"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \ inst_libdir_file {"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \
{"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*" {"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*"
dracut_need_initqueue
} }

View File

@@ -14,8 +14,10 @@ fix_bootif() {
echo $macaddr | sed 'y/ABCDEF/abcdef/' echo $macaddr | sed 'y/ABCDEF/abcdef/'
} }
getargbool 0 rd.neednet && NEEDNET=1
# Don't continue if we don't need network # Don't continue if we don't need network
if [ -z "$netroot" ] && [ ! -e "/tmp/net.ifaces" ] && ! getargbool 0 rd.neednet >/dev/null; then if [ -z "$netroot" ] && [ ! -e "/tmp/net.ifaces" ] && [ "$NEEDNET" != "1" ]; then
return return
fi fi
@@ -24,24 +26,31 @@ fi
# bridge: attempt only the defined interface # bridge: attempt only the defined interface
if [ -e /tmp/bridge.info ]; then if [ -e /tmp/bridge.info ]; then
. /tmp/bridge.info . /tmp/bridge.info
IFACES+=" ${ethnames%% *}" IFACES="$IFACES ${ethnames%% *}"
MASTER_IFACES="$MASTER_IFACES $bridgename"
fi fi
# bond: attempt only the defined interface (override bridge defines) # bond: attempt only the defined interface (override bridge defines)
if [ -e /tmp/bond.info ]; then for i in /tmp/bond.*.info; do
. /tmp/bond.info [ -e "$i" ] || continue
unset bondslaves
unset bondname
. "$i"
# It is enough to fire up only one # It is enough to fire up only one
IFACES+=" ${bondslaves%% *}" IFACES="$IFACES ${bondslaves%% *}"
fi MASTER_IFACES="$MASTER_IFACES ${bondname}"
done
if [ -e /tmp/team.info ]; then if [ -e /tmp/team.info ]; then
. /tmp/team.info . /tmp/team.info
IFACES+=" ${teamslaves}" IFACES="$IFACES ${teamslaves}"
MASTER_IFACES="$MASTER_IFACES ${teammaster}"
fi fi
if [ -e /tmp/vlan.info ]; then if [ -e /tmp/vlan.info ]; then
. /tmp/vlan.info . /tmp/vlan.info
IFACES+=" $phydevice" IFACES="$IFACES $phydevice"
MASTER_IFACES="$MASTER_IFACES ${vlanname}"
fi fi
if [ -z "$IFACES" ]; then if [ -z "$IFACES" ]; then
@@ -66,11 +75,16 @@ fi
elif [ -n "$IFACES" ] ; then elif [ -n "$IFACES" ] ; then
for iface in $IFACES ; do for iface in $IFACES ; do
printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="%s"\n' "$iface" "/sbin/initqueue --onetime $ifup" printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="%s"\n' "$iface" "/sbin/initqueue --onetime $ifup"
if [ "$bootdev" = "$iface" ]; then if [ "$bootdev" = "$iface" ] || [ "$NEEDNET" = "1" ]; then
echo "[ -f /tmp/setup_net_${iface}.ok ]" >$hookdir/initqueue/finished/wait-$iface.sh echo "[ -f /tmp/setup_net_${iface}.ok ]" >$hookdir/initqueue/finished/wait-$iface.sh
fi fi
done done
for iface in $MASTER_IFACES; do
if [ "$bootdev" = "$iface" ] || [ "$NEEDNET" = "1" ]; then
echo "[ -f /tmp/setup_net_${iface}.ok ]" >$hookdir/initqueue/finished/wait-$iface.sh
fi
done
# Default: We don't know the interface to use, handle all # Default: We don't know the interface to use, handle all
# Fixme: waiting for the interface as well. # Fixme: waiting for the interface as well.
else else

View File

@@ -159,6 +159,7 @@ ibft_to_cmdline() {
hostname=$(read a < ${iface}/hostname; echo $a) hostname=$(read a < ${iface}/hostname; echo $a)
echo "ip=$ip::$gw:$mask:$hostname:$dev:none" echo "ip=$ip::$gw:$mask:$hostname:$dev:none"
fi fi
echo $mac > /tmp/net.${dev}.has_ibft_config
done done
) >> /etc/cmdline.d/40-ibft.conf ) >> /etc/cmdline.d/40-ibft.conf
# reread cmdline # reread cmdline
@@ -271,11 +272,11 @@ ip_to_var() {
case $# in case $# in
0) autoconf="error" ;; 0) autoconf="error" ;;
1) autoconf=$1 ;; 1) autoconf=$1 ;;
2) dev=$1; autoconf=$2 ;; 2) [ -n "$1" ] && dev=$1; [ -n "$2" ] && autoconf=$2 ;;
3) dev=$1; autoconf=$2; mtu=$3 ;; 3) [ -n "$1" ] && dev=$1; [ -n "$2" ] && autoconf=$2; [ -n "$3" ] && mtu=$3 ;;
4) dev=$1; autoconf=$2; mtu=$3; macaddr=$4 ;; 4) [ -n "$1" ] && dev=$1; [ -n "$2" ] && autoconf=$2; [ -n "$3" ] && mtu=$3; [ -n "$4" ] && macaddr=$4 ;;
*) ip=$1; srv=$2; gw=$3; mask=$4; *) [ -n "$1" ] && ip=$1; [ -n "$2" ] && srv=$2; [ -n "$3" ] && gw=$3; [ -n "$4" ] && mask=$4;
hostname=$5; dev=$6; autoconf=$7; mtu=$8; [ -n "$5" ] && hostname=$5; [ -n "$6" ] && dev=$6; [ -n "$7" ] && autoconf=$7; [ -n "$8" ] && mtu=$8;
if [ -n "${9}" -a -n "${10}" -a -n "${11}" -a -n "${12}" -a -n "${13}" -a -n "${14}" ]; then if [ -n "${9}" -a -n "${10}" -a -n "${11}" -a -n "${12}" -a -n "${13}" -a -n "${14}" ]; then
macaddr="${9}:${10}:${11}:${12}:${13}:${14}" macaddr="${9}:${10}:${11}:${12}:${13}:${14}"
fi fi
@@ -365,3 +366,7 @@ linkup() {
&& wait_for_if_up $1 2>/dev/null && wait_for_if_up $1 2>/dev/null
} }
type hostname >/dev/null 2>&1 || \
hostname() {
cat /proc/sys/kernel/hostname
}

View File

@@ -24,9 +24,6 @@ netif=$1
# handlers when this is not called from manually network bringing up. # handlers when this is not called from manually network bringing up.
if [ -z "$2" ]; then if [ -z "$2" ]; then
if [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] ; then if [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] ; then
# Unset root so we can check later
unset root
# Load dhcp options # Load dhcp options
[ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
@@ -67,6 +64,7 @@ source_hook netroot $netif
# Run the handler; don't store the root, it may change from device to device # Run the handler; don't store the root, it may change from device to device
# XXX other variables to export? # XXX other variables to export?
if $handler $netif $netroot $NEWROOT; then if $handler $netif $netroot $NEWROOT; then
rm -f $hookdir/initqueue/finished/dhcp.sh
# Network rootfs mount successful - save interface info for ifcfg etc. # Network rootfs mount successful - save interface info for ifcfg etc.
save_netinfo $netif save_netinfo $netif
fi fi

View File

@@ -54,8 +54,8 @@ if getarg bond >/dev/null; then
fi fi
# Make it suitable for initscripts export # Make it suitable for initscripts export
bondoptions=$(str_replace "$bondoptions" ";" ",") bondoptions=$(str_replace "$bondoptions" ";" ",")
echo "bondname=$bondname" > /tmp/bond.info echo "bondname=$bondname" > /tmp/bond.${bondname}.info
echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.info echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.${bondname}.info
echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.info echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.${bondname}.info
return return
fi fi

View File

@@ -37,12 +37,6 @@ parsebridge() {
unset bridgename ethnames unset bridgename ethnames
iface=eth0 iface=eth0
if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
if [ -n "$bondname" ] ; then
iface=$bondname
fi
fi
# Parse bridge for bridgename and ethnames # Parse bridge for bridgename and ethnames
if bridge="$(getarg bridge)"; then if bridge="$(getarg bridge)"; then

View File

@@ -54,6 +54,12 @@ fi
for p in $(getargs ip=); do for p in $(getargs ip=); do
ip_to_var $p ip_to_var $p
# make first device specified the BOOTDEV
if [ -z "$BOOTDEV" ] && [ -n "$dev" ]; then
BOOTDEV="$dev"
[ -n "$NEEDBOOTDEV" ] && warn "Setting bootdev to '$BOOTDEV'"
fi
# skip ibft since we did it above # skip ibft since we did it above
[ "$autoconf" = "ibft" ] && continue [ "$autoconf" = "ibft" ] && continue
@@ -121,6 +127,3 @@ fi
# Store BOOTDEV and IFACES for later use # Store BOOTDEV and IFACES for later use
[ -n "$BOOTDEV" ] && echo $BOOTDEV > /tmp/net.bootdev [ -n "$BOOTDEV" ] && echo $BOOTDEV > /tmp/net.bootdev
[ -n "$IFACES" ] && echo $IFACES > /tmp/net.ifaces [ -n "$IFACES" ] && echo $IFACES > /tmp/net.ifaces
# We need a ip= line for the configured bootdev=
[ -n "$NEEDBOOTDEV" ] && [ -z "$BOOTDEVOK" ] && die "Bootdev Argument '$BOOTDEV' not found"

View File

@@ -4,14 +4,6 @@
# NFS root might have reached here before /tmp/net.ifaces was written # NFS root might have reached here before /tmp/net.ifaces was written
udevadm settle --timeout=30 udevadm settle --timeout=30
# Don't write anything if we don't know our bootdev
[ -f /tmp/net.ifaces ] || return 1
read IFACES < /tmp/net.ifaces
if [ -e /tmp/bond.info ]; then
. /tmp/bond.info
fi
if [ -e /tmp/bridge.info ]; then if [ -e /tmp/bridge.info ]; then
. /tmp/bridge.info . /tmp/bridge.info
@@ -83,12 +75,27 @@ print_s390() {
echo "OPTIONS=\"${OPTIONS}\"" echo "OPTIONS=\"${OPTIONS}\""
} }
for netup in /tmp/net.*.did-setup ; do
[ -f $netup ] || continue
for netif in $IFACES ; do netif=${netup%%.did-setup}
netif=${netif##*/net.}
[ -e /tmp/ifcfg/ifcfg-$netif ] && continue [ -e /tmp/ifcfg/ifcfg-$netif ] && continue
# bridge?
unset bridge unset bridge
unset bond unset bond
unset bondslaves
unset bondname
unset bondoptions
unset uuid
unset ip
unset gw
unset mtu
unset mask
unset macaddr
unset slave
unset ethname
[ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info
uuid=$(cat /proc/sys/kernel/random/uuid) uuid=$(cat /proc/sys/kernel/random/uuid)
if [ "$netif" = "$bridgename" ]; then if [ "$netif" = "$bridgename" ]; then
bridge=yes bridge=yes
@@ -99,39 +106,46 @@ for netif in $IFACES ; do
cat /sys/class/net/$netif/address > /tmp/net.$netif.hwaddr cat /sys/class/net/$netif/address > /tmp/net.$netif.hwaddr
{ {
echo "# Generated by dracut initrd" echo "# Generated by dracut initrd"
echo "DEVICE=$netif" echo "DEVICE=\"$netif\""
echo "ONBOOT=yes" echo "ONBOOT=yes"
echo "NETBOOT=yes" echo "NETBOOT=yes"
echo "UUID=$uuid" echo "UUID=\"$uuid\""
[ -n "$mtu" ] && echo "MTU=$mtu" if [ -f /tmp/dhclient.$netif.lease ]; then
if [ -f /tmp/net.$netif.lease ]; then [ -f /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
strstr "$ip" '*:*:*' && strstr "$ip" '*:*:*' && echo "IPV6INIT=yes"
echo "IPV6INIT=yes" if [ -f /tmp/net.$netif.has_ibft_config ]; then
echo "DHCPV6C=yes" echo "BOOTPROTO=ibft"
echo "BOOTPROTO=dhcp" else
cp /tmp/net.$netif.lease /tmp/ifcfg-leases/dhclient-$uuid-$netif.lease echo "BOOTPROTO=dhcp"
fi
cp /tmp/dhclient.$netif.lease /tmp/ifcfg-leases/dhclient-$uuid-$netif.lease
else else
# If we've booted with static ip= lines, the override file is there # If we've booted with static ip= lines, the override file is there
[ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override [ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override
if strstr "$ip" '*:*:*'; then if strstr "$ip" '*:*:*'; then
echo "IPV6INIT=yes" echo "IPV6INIT=yes"
echo "IPV6_AUTOCONF=no" echo "IPV6_AUTOCONF=no"
echo "IPV6ADDR=$ip/$mask" echo "IPV6ADDR=\"$ip/$mask\""
else else
echo "BOOTPROTO=none" if [ -f /tmp/net.$netif.has_ibft_config ]; then
echo "IPADDR=$ip" echo "BOOTPROTO=ibft"
if strstr "$mask" "."; then
echo "NETMASK=$mask"
else else
echo "PREFIX=$mask" echo "BOOTPROTO=none"
echo "IPADDR=\"$ip\""
if strstr "$mask" "."; then
echo "NETMASK=\"$mask\""
else
echo "PREFIX=\"$mask\""
fi
fi fi
fi fi
if strstr "$gw" '*:*:*'; then if strstr "$gw" '*:*:*'; then
echo "IPV6_DEFAULTGW=$gw" echo "IPV6_DEFAULTGW=\"$gw\""
elif [ -n "$gw" ]; then elif [ -n "$gw" ]; then
echo "GATEWAY=$gw" echo "GATEWAY=\"$gw\""
fi fi
fi fi
[ -n "$mtu" ] && echo "MTU=\"$mtu\""
} > /tmp/ifcfg/ifcfg-$netif } > /tmp/ifcfg/ifcfg-$netif
# bridge needs different things written to ifcfg # bridge needs different things written to ifcfg
@@ -139,14 +153,14 @@ for netif in $IFACES ; do
# standard interface # standard interface
{ {
if [ -n "$macaddr" ]; then if [ -n "$macaddr" ]; then
echo "MACADDR=$macaddr" echo "MACADDR=\"$macaddr\""
else else
echo "HWADDR=\"$(cat /sys/class/net/$netif/address)\"" echo "HWADDR=\"$(cat /sys/class/net/$netif/address)\""
fi fi
print_s390 $netif print_s390 $netif
echo "TYPE=Ethernet" echo "TYPE=Ethernet"
echo "NAME=\"Boot Disk\"" echo "NAME=\"$netif\""
[ -n "$mtu" ] && echo "MTU=$mtu" [ -n "$mtu" ] && echo "MTU=\"$mtu\""
} >> /tmp/ifcfg/ifcfg-$netif } >> /tmp/ifcfg/ifcfg-$netif
fi fi
@@ -155,22 +169,22 @@ for netif in $IFACES ; do
{ {
# This variable is an indicator of a bond interface for initscripts # This variable is an indicator of a bond interface for initscripts
echo "BONDING_OPTS=\"$bondoptions\"" echo "BONDING_OPTS=\"$bondoptions\""
echo "NAME=\"Boot Disk\"" echo "NAME=\"$netif\""
echo "TYPE=Bond"
} >> /tmp/ifcfg/ifcfg-$netif } >> /tmp/ifcfg/ifcfg-$netif
for slave in $bondslaves ; do for slave in $bondslaves ; do
# Set ONBOOT=no to prevent initscripts from trying to setup already bonded physical interface
# write separate ifcfg file for the raw eth interface # write separate ifcfg file for the raw eth interface
{ {
echo "# Generated by dracut initrd" echo "# Generated by dracut initrd"
echo "DEVICE=$slave" echo "DEVICE=\"$slave\""
echo "TYPE=Ethernet" echo "TYPE=Ethernet"
echo "ONBOOT=no" echo "ONBOOT=yes"
echo "NETBOOT=yes" echo "NETBOOT=yes"
echo "HWADDR=$(cat /sys/class/net/$slave/address)" echo "HWADDR=\"$(cat /sys/class/net/$slave/address)\""
echo "SLAVE=yes" echo "SLAVE=yes"
echo "MASTER=$netif" echo "MASTER=\"$netif\""
echo "NAME=$slave" echo "NAME=\"$slave\""
} >> /tmp/ifcfg/ifcfg-$slave } >> /tmp/ifcfg/ifcfg-$slave
done done
fi fi
@@ -179,52 +193,50 @@ for netif in $IFACES ; do
# bridge # bridge
{ {
echo "TYPE=Bridge" echo "TYPE=Bridge"
echo "NAME=\"Boot Disk\"" echo "NAME=\"$netif\""
} >> /tmp/ifcfg/ifcfg-$netif } >> /tmp/ifcfg/ifcfg-$netif
if [ "$ethname" = "$bondname" ] ; then if [ "$ethname" = "$bondname" ] ; then
{ {
# Set ONBOOT=no to prevent initscripts from trying to setup already bridged bond interface
echo "# Generated by dracut initrd" echo "# Generated by dracut initrd"
echo "DEVICE=$bondname" echo "DEVICE=\"$bondname\""
echo "ONBOOT=no" echo "ONBOOT=yes"
echo "NETBOOT=yes" echo "NETBOOT=yes"
# This variable is an indicator of a bond interface for initscripts # This variable is an indicator of a bond interface for initscripts
echo "BONDING_OPTS=\"$bondoptions\"" echo "BONDING_OPTS=\"$bondoptions\""
echo "BRIDGE=$netif" echo "BRIDGE=\"$netif\""
echo "NAME=\"$bondname\"" echo "NAME=\"$bondname\""
} >> /tmp/ifcfg/ifcfg-$bondname } >> /tmp/ifcfg/ifcfg-$bondname
for slave in $bondslaves ; do for slave in $bondslaves ; do
# write separate ifcfg file for the raw eth interface # write separate ifcfg file for the raw eth interface
# Set ONBOOT=no to prevent initscripts from trying to setup already bridged physical interface
{ {
echo "# Generated by dracut initrd" echo "# Generated by dracut initrd"
echo "DEVICE=$slave" echo "DEVICE=\"$slave\""
echo "TYPE=Ethernet" echo "TYPE=Ethernet"
echo "ONBOOT=no" echo "ONBOOT=yes"
echo "NETBOOT=yes" echo "NETBOOT=yes"
echo "HWADDR=$(cat /sys/class/net/$slave/address)" echo "HWADDR=\"$(cat /sys/class/net/$slave/address)\""
echo "SLAVE=yes" echo "SLAVE=yes"
echo "MASTER=$bondname" echo "MASTER=\"$bondname\""
echo "NAME=$slave" echo "NAME=\"$slave\""
} >> /tmp/ifcfg/ifcfg-$slave } >> /tmp/ifcfg/ifcfg-$slave
done done
else else
# write separate ifcfg file for the raw eth interface # write separate ifcfg file for the raw eth interface
{ {
echo "# Generated by dracut initrd" echo "# Generated by dracut initrd"
echo "DEVICE=$ethname" echo "DEVICE=\"$ethname\""
echo "TYPE=Ethernet" echo "TYPE=Ethernet"
echo "ONBOOT=no" echo "ONBOOT=yes"
echo "NETBOOT=yes" echo "NETBOOT=yes"
echo "HWADDR=$(cat /sys/class/net/$ethname/address)" echo "HWADDR=\"$(cat /sys/class/net/$ethname/address)\""
echo "BRIDGE=$netif" echo "BRIDGE=\"$netif\""
echo "NAME=$ethname" echo "NAME=\"$ethname\""
} >> /tmp/ifcfg/ifcfg-$ethname } >> /tmp/ifcfg/ifcfg-$ethname
fi fi
fi fi
i=1 i=1
for ns in $(getargs nameserver); do for ns in $(getargs nameserver); do
echo "DNS${i}=${ns}" >> /tmp/ifcfg/ifcfg-$netif echo "DNS${i}=\"${ns}\"" >> /tmp/ifcfg/ifcfg-$netif
i=$((i+1)) i=$((i+1))
done done
done done

View File

@@ -12,6 +12,7 @@ depends() {
} }
install() { install() {
local _dir _crt _found
inst_simple "$moddir/url-lib.sh" "/lib/url-lib.sh" inst_simple "$moddir/url-lib.sh" "/lib/url-lib.sh"
dracut_install curl dracut_install curl
# also install libs for curl https # also install libs for curl https
@@ -20,11 +21,17 @@ install() {
inst_libdir_file "libsoftokn3.so*" inst_libdir_file "libsoftokn3.so*"
inst_libdir_file "libsqlite3.so*" inst_libdir_file "libsqlite3.so*"
mkdir -m 0755 -p "$initdir/etc/ssl/certs" for _dir in $libdirs; do
if ! inst_any -t /etc/ssl/certs/ca-bundle.crt \ [[ -d $_dir ]] || continue
/etc/ssl/certs/ca-bundle.crt \ _crt=$(grep -F --binary-files=text -z .crt $_dir/libcurl.so)
/etc/ssl/certs/ca-certificates.crt; then [[ $_crt ]] || continue
dwarn "Couldn't find SSL CA cert bundle; HTTPS won't work." [[ $_crt == /*/* ]] || continue
fi if ! inst_simple "$_crt"; then
dwarn "Couldn't install '$_crt' SSL CA cert bundle; HTTPS might not work."
continue
fi
_found=1
done
[[ $_found ]] || dwarn "Couldn't find SSL CA cert bundle; HTTPS won't work."
} }

View File

@@ -54,8 +54,11 @@ add_url_handler() {
export CURL_HOME="/run/initramfs/url-lib" export CURL_HOME="/run/initramfs/url-lib"
mkdir -p $CURL_HOME mkdir -p $CURL_HOME
curl_args="--location --retry 3 --fail --show-error" curl_args="--globoff --location --retry 3 --fail --show-error"
getargbool 0 rd.noverifyssl && curl_args+=" --insecure" getargbool 0 rd.noverifyssl && curl_args="$curl_args --insecure"
proxy=$(getarg proxy=)
[ -n "$proxy" ] && curl_args="$curl_args --proxy $proxy"
curl_fetch_url() { curl_fetch_url() {
local url="$1" outloc="$2" local url="$1" outloc="$2"

View File

@@ -3,7 +3,7 @@
# ex: ts=8 sw=4 sts=4 et filetype=sh # ex: ts=8 sw=4 sts=4 et filetype=sh
check() { check() {
return 0 return 255
} }
depends() { depends() {
@@ -54,7 +54,7 @@ installkernel() {
# as we could e.g. be in the installer; nokmsboot boot parameter will disable # as we could e.g. be in the installer; nokmsboot boot parameter will disable
# loading of the driver if needed # loading of the driver if needed
if [[ $hostonly ]] && modinfo -F alias $_modname | sed -e 's,\?,\.,g' -e 's,\*,\.\*,g' \ if [[ $hostonly ]] && modinfo -F alias $_modname | sed -e 's,\?,\.,g' -e 's,\*,\.\*,g' \
| grep -qxf - /sys/bus/pci/devices/*/modalias; then | grep -qxf - /sys/bus/pci/devices/*/modalias 2>/dev/null; then
hostonly='' instmods $_modname hostonly='' instmods $_modname
continue continue
fi fi

View File

@@ -4,7 +4,7 @@
check() { check() {
[[ "$mount_needs" ]] && return 1 [[ "$mount_needs" ]] && return 1
[[ -x /sbin/plymouthd && -x /bin/plymouth && -x /usr/sbin/plymouth-set-default-theme ]] type -P plymouthd >/dev/null && type -P plymouth >/dev/null
} }
depends() { depends() {
@@ -17,12 +17,16 @@ install() {
. "$moddir"/plymouth-populate-initrd.sh . "$moddir"/plymouth-populate-initrd.sh
else else
PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="$dracutfunctions" \ PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="$dracutfunctions" \
/usr/libexec/plymouth/plymouth-populate-initrd -t $initdir /usr/libexec/plymouth/plymouth-populate-initrd -t "$initdir"
fi fi
inst_hook pre-pivot 90 "$moddir"/plymouth-newroot.sh
inst_hook pre-trigger 10 "$moddir"/plymouth-pretrigger.sh
inst_hook emergency 50 "$moddir"/plymouth-emergency.sh inst_hook emergency 50 "$moddir"/plymouth-emergency.sh
dracut_install readlink dracut_install readlink
if ! dracut_module_included "systemd"; then
inst_hook pre-trigger 10 "$moddir"/plymouth-pretrigger.sh
inst_hook pre-pivot 90 "$moddir"/plymouth-newroot.sh
fi
} }

View File

@@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh # ex: ts=8 sw=4 sts=4 et filetype=sh
[ -x /bin/plymouth ] && /bin/plymouth --hide-splash plymouth --hide-splash 2>/dev/null || :

View File

@@ -2,6 +2,6 @@
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh # ex: ts=8 sw=4 sts=4 et filetype=sh
if [ -x /bin/plymouth -a -z "$DRACUT_SYSTEMD" ]; then if type plymouth >/dev/null 2>&1 && [ -z "$DRACUT_SYSTEMD" ]; then
/bin/plymouth --newroot=$NEWROOT plymouth --newroot=$NEWROOT
fi fi

View File

@@ -4,15 +4,14 @@
PLYMOUTH_LOGO_FILE="/usr/share/pixmaps/system-logo-white.png" PLYMOUTH_LOGO_FILE="/usr/share/pixmaps/system-logo-white.png"
PLYMOUTH_THEME=$(plymouth-set-default-theme) PLYMOUTH_THEME=$(plymouth-set-default-theme)
inst /sbin/plymouthd /bin/plymouthd dracut_install plymouthd plymouth \
dracut_install /bin/plymouth \
"${PLYMOUTH_LOGO_FILE}" \ "${PLYMOUTH_LOGO_FILE}" \
/etc/system-release /etc/system-release
mkdir -m 0755 -p "${initdir}/usr/share/plymouth" mkdir -m 0755 -p "${initdir}/usr/share/plymouth"
inst_libdir_file "plymouth/text.so" "plymouth/details.so" inst_libdir_file "plymouth/text.so" "plymouth/details.so"
if [[ $hostonly ]]; then if [[ $hostonly ]]; then
dracut_install \ dracut_install \
"/usr/share/plymouth/themes/details/details.plymouth" \ "/usr/share/plymouth/themes/details/details.plymouth" \

View File

@@ -2,7 +2,7 @@
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh # ex: ts=8 sw=4 sts=4 et filetype=sh
if [ -x /bin/plymouthd -a -z "$DRACUT_SYSTEMD" ]; then if type plymouthd >/dev/null 2>&1 && [ -z "$DRACUT_SYSTEMD" ]; then
if getargbool 1 plymouth.enable && getargbool 1 rd.plymouth -d -n rd_NO_PLYMOUTH; then if getargbool 1 plymouth.enable && getargbool 1 rd.plymouth -d -n rd_NO_PLYMOUTH; then
# first trigger graphics subsystem # first trigger graphics subsystem
udevadm trigger --action=add --attr-match=class=0x030000 >/dev/null 2>&1 udevadm trigger --action=add --attr-match=class=0x030000 >/dev/null 2>&1
@@ -16,8 +16,8 @@ if [ -x /bin/plymouthd -a -z "$DRACUT_SYSTEMD" ]; then
read consoledev rest < /sys/class/tty/console/active read consoledev rest < /sys/class/tty/console/active
consoledev=${consoledev:-tty0} consoledev=${consoledev:-tty0}
[ -x /lib/udev/console_init -a -e "/dev/$consoledev" ] && /lib/udev/console_init "/dev/$consoledev" [ -x /lib/udev/console_init -a -e "/dev/$consoledev" ] && /lib/udev/console_init "/dev/$consoledev"
[ -x /bin/plymouthd ] && /bin/plymouthd --attach-to-session --pid-file /run/plymouth/pid plymouthd --attach-to-session --pid-file /run/plymouth/pid
/bin/plymouth --show-splash 2>&1 | vinfo plymouth --show-splash 2>&1 | vinfo
# reset tty after plymouth messed with it # reset tty after plymouth messed with it
[ -x /lib/udev/console_init -a -e "/dev/$consoledev" ] && /lib/udev/console_init "/dev/$consoledev" [ -x /lib/udev/console_init -a -e "/dev/$consoledev" ] && /lib/udev/console_init "/dev/$consoledev"
fi fi

View File

@@ -27,7 +27,7 @@ else
fi fi
{ {
echo "ip=$IPADDR::$GATEWAY:$NETMASK:$HOSTNAME:$DEVICE:none:$MACADDR" echo "ip=$IPADDR::$GATEWAY:$NETMASK:$HOSTNAME:$DEVICE:none:$MTU:$MACADDR"
for i in $DNS1 $DNS2; do for i in $DNS1 $DNS2; do
echo "nameserver=$i" echo "nameserver=$i"
done done

View File

@@ -51,152 +51,152 @@ function dasd_settle_all() {
fi fi
done done
return 0 return 0
} }
# prints a canonocalized device bus ID for a given devno of any format # prints a canonocalized device bus ID for a given devno of any format
function canonicalize_devno() function canonicalize_devno()
{ {
case ${#1} in case ${#1} in
3) echo "0.0.0${1}" ;; 3) echo "0.0.0${1}" ;;
4) echo "0.0.${1}" ;; 4) echo "0.0.${1}" ;;
*) echo "${1}" ;; *) echo "${1}" ;;
esac esac
return 0 return 0
} }
# read file from CMS and write it to /tmp # read file from CMS and write it to /tmp
function readcmsfile() # $1=dasdport $2=filename function readcmsfile() # $1=dasdport $2=filename
{ {
local dev local dev
local numcpus local numcpus
local devname local devname
local ret=0 local ret=0
if [ $# -ne 2 ]; then return; fi if [ $# -ne 2 ]; then return; fi
# precondition: udevd created dasda block device node # precondition: udevd created dasda block device node
if ! dasd_cio_free -d $1 ; then if ! dasd_cio_free -d $1 ; then
echo $"DASD $1 could not be cleared from device blacklist" echo $"DASD $1 could not be cleared from device blacklist"
return 1 return 1
fi fi
modprobe dasd_mod dasd=$CMSDASD modprobe dasd_mod dasd=$CMSDASD
modprobe dasd_eckd_mod modprobe dasd_eckd_mod
udevadm settle udevadm settle
# precondition: dasd_eckd_mod driver incl. dependencies loaded, # precondition: dasd_eckd_mod driver incl. dependencies loaded,
# dasd_mod must be loaded without setting any DASD online # dasd_mod must be loaded without setting any DASD online
dev=$(canonicalize_devno $1) dev=$(canonicalize_devno $1)
numcpus=$( numcpus=$(
while read line; do while read line; do
if strstr "$line" "# processors"; then if strstr "$line" "# processors"; then
echo ${line##*:}; echo ${line##*:};
break; break;
fi; fi;
done < /proc/cpuinfo done < /proc/cpuinfo
) )
if [ ${numcpus} -eq 1 ]; then if [ ${numcpus} -eq 1 ]; then
echo 1 > /sys/bus/ccw/devices/$dev/online echo 1 > /sys/bus/ccw/devices/$dev/online
else else
if ! sysecho /sys/bus/ccw/devices/$dev/online 1; then if ! sysecho /sys/bus/ccw/devices/$dev/online 1; then
echo $"DASD $dev could not be set online" echo $"DASD $dev could not be set online"
return 1 return 1
fi
udevadm settle
if ! dasd_settle $dev ; then
echo $"Could not access DASD $dev in time"
return 1
fi
fi fi
udevadm settle udevadm settle
if ! dasd_settle $dev ; then
echo $"Could not access DASD $dev in time" devname=$(cd /sys/bus/ccw/devices/$dev/block; set -- *; [ -b /dev/$1 ] && echo $1)
return 1 devname=${devname:-dasda}
[[ -d /mnt ]] || mkdir /mnt
if cmsfs-fuse --to=UTF-8 -a /dev/$devname /mnt; then
cat /mnt/$2 > /run/initramfs/$2
umount /mnt || umount -l /mnt
udevadm settle
else
echo $"Could not read conf file $2 on CMS DASD $1."
ret=1
fi fi
fi
udevadm settle if ! sysecho /sys/bus/ccw/devices/$dev/online 0; then
echo $"DASD $dev could not be set offline again"
devname=$(cd /sys/bus/ccw/devices/$dev/block; set -- *; [ -b /dev/$1 ] && echo $1)
devname=${devname:-dasda}
[[ -d /mnt ]] || mkdir /mnt
if cmsfs-fuse --to=UTF-8 -a /dev/$devname /mnt; then
cat /mnt/$2 > /run/initramfs/$2
umount /mnt || umount -l /mnt
udevadm settle
else
echo $"Could not read conf file $2 on CMS DASD $1."
ret=1
fi
if ! sysecho /sys/bus/ccw/devices/$dev/online 0; then
echo $"DASD $dev could not be set offline again"
#return 1 #return 1
fi fi
udevadm settle udevadm settle
# unbind all dasds to unload the dasd modules for a clean start # unbind all dasds to unload the dasd modules for a clean start
( cd /sys/bus/ccw/drivers/dasd-eckd; for i in *.*; do echo $i > unbind;done) ( cd /sys/bus/ccw/drivers/dasd-eckd; for i in *.*; do echo $i > unbind;done)
udevadm settle udevadm settle
modprobe -r dasd_eckd_mod modprobe -r dasd_eckd_mod
udevadm settle udevadm settle
modprobe -r dasd_diag_mod modprobe -r dasd_diag_mod
udevadm settle udevadm settle
modprobe -r dasd_mod modprobe -r dasd_mod
udevadm settle udevadm settle
return $ret return $ret
} }
processcmsfile() processcmsfile()
{ {
source /tmp/cms.conf source /tmp/cms.conf
if [[ $NETTYPE ]]; then if [[ $NETTYPE ]]; then
( (
echo -n $NETTYPE,$SUBCHANNELS echo -n $NETTYPE,$SUBCHANNELS
[[ $PORTNAME ]] && echo ",portname=$PORTNAME" [[ $PORTNAME ]] && echo -n ",portname=$PORTNAME"
[[ $LAYER2 ]] && echo ",layer2=$LAYER" [[ $LAYER2 ]] && echo -n ",layer2=$LAYER2"
[[ "$NETTYPE" = "ctc" ]] && [[ $CTCPROT ]] && echo ",protocol=$CTCPROT" [[ "$NETTYPE" = "ctc" ]] && [[ $CTCPROT ]] && echo -n ",protocol=$CTCPROT"
echo echo
) >> /etc/ccw.conf ) >> /etc/ccw.conf
OLDIFS=$IFS OLDIFS=$IFS
IFS=, IFS=,
read -a subch_array <<< "indexzero,$SUBCHANNELS" read -a subch_array <<< "indexzero,$SUBCHANNELS"
IFS=$OLDIFS IFS=$OLDIFS
devbusid=${subch_array[1]} devbusid=${subch_array[1]}
if [ "$NETTYPE" = "ctc" ]; then if [ "$NETTYPE" = "ctc" ]; then
driver="ctcm" driver="ctcm"
else else
driver=$NETTYPE driver=$NETTYPE
fi
printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", KERNELS=="%s", ENV{INTERFACE}=="?*", RUN+="/sbin/initqueue --onetime --unique --name cmsifup-$env{INTERFACE} /sbin/cmsifup $env{INTERFACE}"\n' "$driver" "$devbusid" > /etc/udev/rules.d/99-cms.rules
# remove the default net rules
rm -f /etc/udev/rules.d/91-default-net.rules
[[ -f /etc/udev/rules.d/90-net.rules ]] \
|| printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$env{INTERFACE} source_hook initqueue/online"\n' >> /etc/udev/rules.d/99-cms.rules
udevadm control --reload
znet_cio_free
fi fi
printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", KERNELS=="%s", ENV{INTERFACE}=="?*", RUN+="/sbin/initqueue --onetime --unique --name cmsifup-$env{INTERFACE} /sbin/cmsifup $env{INTERFACE}"\n' "$driver" "$devbusid" > /etc/udev/rules.d/99-cms.rules if [[ $DASD ]]; then
# remove the default net rules echo $DASD | normalize_dasd_arg > /etc/dasd.conf
rm -f /etc/udev/rules.d/91-default-net.rules echo "options dasd_mod dasd=$DASD" > /etc/modprobe.d/dasd_mod.conf
[[ -f /etc/udev/rules.d/90-net.rules ]] \ dasd_cio_free
|| printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$env{INTERFACE} source_hook initqueue/online"\n' >> /etc/udev/rules.d/99-cms.rules fi
znet_cio_free unset _do_zfcp
fi for i in ${!FCP_*}; do
echo "${!i}" >> /etc/zfcp.conf
_do_zfcp=1
done
[[ $_do_zfcp ]] && zfcp_cio_free
unset _do_zfcp
}
if [[ $DASD ]]; then [[ $CMSDASD ]] || CMSDASD=$(getarg "CMSDASD=")
echo $DASD | normalize_dasd_arg > /etc/dasd.conf [[ $CMSCONFFILE ]] || CMSCONFFILE=$(getarg "CMSCONFFILE=")
echo "options dasd_mod dasd=$DASD" > /etc/modprobe.d/dasd_mod.conf
dasd_cio_free
fi
unset _do_zfcp
for i in ${!FCP_*}; do
echo "${!i}" >> /etc/zfcp.conf
_do_zfcp=1
done
[[ $_do_zfcp ]] && zfcp_cio_free
unset _do_zfcp
}
[[ $CMSDASD ]] || CMSDASD=$(getarg "CMSDASD=")
[[ $CMSCONFFILE ]] || CMSCONFFILE=$(getarg "CMSCONFFILE=")
# Parse configuration # Parse configuration
if [ -n "$CMSDASD" -a -n "$CMSCONFFILE" ]; then if [ -n "$CMSDASD" -a -n "$CMSCONFFILE" ]; then
if readcmsfile $CMSDASD $CMSCONFFILE; then if readcmsfile $CMSDASD $CMSCONFFILE; then
ln -s /run/initramfs/$CMSCONFFILE /tmp/$CMSCONFFILE ln -s /run/initramfs/$CMSCONFFILE /tmp/$CMSCONFFILE
ln -s /run/initramfs/$CMSCONFFILE /tmp/cms.conf ln -s /run/initramfs/$CMSCONFFILE /tmp/cms.conf
processcmsfile processcmsfile
fi
fi fi
fi

View File

@@ -29,4 +29,5 @@ install() {
inst_libdir_file "gconv/*" inst_libdir_file "gconv/*"
#inst /usr/lib/locale/locale-archive #inst /usr/lib/locale/locale-archive
dracut_need_initqueue
} }

View File

@@ -1,11 +1,8 @@
SUBSYSTEM!="block", GOTO="btrfs_end" SUBSYSTEM!="block", GOTO="btrfs_end"
ACTION!="add|change", GOTO="btrfs_end" ACTION!="add|change", GOTO="btrfs_end"
ENV{ID_FS_TYPE}!="btrfs", GOTO="btrfs_end" ENV{ID_FS_TYPE}!="btrfs", GOTO="btrfs_end"
RUN+="/sbin/modprobe btrfs"
RUN+="/sbin/btrfs device scan $env{DEVNAME}" RUN+="/sbin/btrfs device scan $env{DEVNAME}"
RUN+="/sbin/initqueue --finished --unique --name btrfs_finished /sbin/btrfs_finished" RUN+="/sbin/initqueue --finished --unique --name btrfs_finished /sbin/btrfs_finished"
RUN+="/sbin/initqueue --timeout --onetime --unique --name btrfs_timeout /sbin/btrfs_timeout"
LABEL="btrfs_end" LABEL="btrfs_end"

View File

@@ -0,0 +1,21 @@
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
btrfs_check_complete() {
local _rootinfo _dev
_dev="${1:-/dev/root}"
[ -e "$_dev" ] || return 0
_rootinfo=$(udevadm info --query=env "--name=$_dev" 2>/dev/null)
if strstr "$_rootinfo" "ID_FS_TYPE=btrfs"; then
info "Checking, if btrfs device complete"
btrfs device ready "$_dev" >/dev/null 2>&1
return $?
fi
return 0
}
btrfs_check_complete $1
exit $?

View File

@@ -5,5 +5,4 @@
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
info "Scanning for all btrfs devices" info "Scanning for all btrfs devices"
/sbin/btrfs device scan 2>&1 | vinfo /sbin/btrfs device scan >/dev/null 2>&1
exit 0

View File

@@ -9,12 +9,10 @@ check() {
type -P btrfs >/dev/null || return 1 type -P btrfs >/dev/null || return 1
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
local _found
for fs in ${host_fs_types[@]}; do for fs in ${host_fs_types[@]}; do
strstr "$fs" "\|btrfs" && _found="1" [[ "$fs" == "btrfs" ]] && return 0
done done
[[ $_found ]] || return 1 return 255
unset _found
} }
return 0 return 0
@@ -30,10 +28,22 @@ installkernel() {
} }
install() { install() {
inst_rules "$moddir/80-btrfs.rules" if ! inst_rules 64-btrfs.rules; then
inst_script "$moddir/btrfs_finished.sh" /sbin/btrfs_finished inst_rules "$moddir/80-btrfs.rules"
inst_script "$moddir/btrfs_timeout.sh" /sbin/btrfs_timeout case "$(btrfs --help)" in
dracut_install btrfsck *device\ ready*)
inst_script "$moddir/btrfs_device_ready.sh" /sbin/btrfs_finished ;;
*)
inst_script "$moddir/btrfs_finished.sh" /sbin/btrfs_finished ;;
esac
fi
if ! dracut_module_included "systemd"; then
inst_script "$moddir/btrfs_timeout.sh" \
/usr/lib/dracut/hooks/initqueue/timeout/btrfs_timeout.sh
fi
dracut_install -o btrfsck btrfs-zero-log
inst $(command -v btrfs) /sbin/btrfs inst $(command -v btrfs) /sbin/btrfs
} }

View File

@@ -47,8 +47,8 @@ ask_for_password() {
{ flock -s 9; { flock -s 9;
# Prompt for password with plymouth, if installed and running. # Prompt for password with plymouth, if installed and running.
if [ -x /bin/plymouth ] && /bin/plymouth --ping; then if type plymouth >/dev/null 2>&1 && plymouth --ping 2>/dev/null; then
/bin/plymouth ask-for-password \ plymouth ask-for-password \
--prompt "$ply_prompt" --number-of-tries=$ply_tries \ --prompt "$ply_prompt" --number-of-tries=$ply_tries \
--command="$ply_cmd" --command="$ply_cmd"
ret=$? ret=$?

View File

@@ -7,25 +7,11 @@ check() {
# if cryptsetup is not installed, then we cannot support encrypted devices. # if cryptsetup is not installed, then we cannot support encrypted devices.
type -P cryptsetup >/dev/null || return 1 type -P cryptsetup >/dev/null || return 1
check_crypt() {
local dev=$1 fs=$2
[[ $fs = "crypto_LUKS" ]] || return 1
ID_FS_UUID=$(udevadm info --query=property --name=$dev \
| while read line; do
[[ ${line#ID_FS_UUID} = $line ]] && continue
eval "$line"
echo $ID_FS_UUID
break
done)
[[ ${ID_FS_UUID} ]] || return 1
if ! [[ $kernel_only ]]; then
echo " rd.luks.uuid=luks-${ID_FS_UUID} " >> "${initdir}/etc/cmdline.d/90crypt.conf"
fi
return 0
}
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for_each_host_dev_fs check_crypt || return 1 for fs in "${host_fs_types[@]}"; do
[[ $fs = "crypto_LUKS" ]] && return 0
done
return 255
} }
return 0 return 0
@@ -41,13 +27,55 @@ installkernel() {
} }
install() { install() {
check_crypt() {
local dev=$1 fs=$2
[[ $fs = "crypto_LUKS" ]] || return 1
ID_FS_UUID=$(udevadm info --query=property --name=$dev \
| while read line; do
[[ ${line#ID_FS_UUID} = $line ]] && continue
eval "$line"
echo $ID_FS_UUID
break
done)
[[ ${ID_FS_UUID} ]] || return 1
if ! [[ $kernel_only ]]; then
echo " rd.luks.uuid=luks-${ID_FS_UUID} " >> "${initdir}/etc/cmdline.d/90crypt.conf"
fi
return 0
}
for_each_host_dev_fs check_crypt
dracut_install cryptsetup rmdir readlink umount dracut_install cryptsetup rmdir readlink umount
inst_script "$moddir"/cryptroot-ask.sh /sbin/cryptroot-ask inst_script "$moddir"/cryptroot-ask.sh /sbin/cryptroot-ask
inst_script "$moddir"/probe-keydev.sh /sbin/probe-keydev inst_script "$moddir"/probe-keydev.sh /sbin/probe-keydev
inst_hook cmdline 10 "$moddir/parse-keydev.sh" inst_hook cmdline 10 "$moddir/parse-keydev.sh"
inst_hook cmdline 30 "$moddir/parse-crypt.sh" inst_hook cmdline 30 "$moddir/parse-crypt.sh"
inst_hook cleanup 30 "$moddir/crypt-cleanup.sh" if ! dracut_module_included "systemd"; then
[[ $hostonly ]] && inst_simple /etc/crypttab inst_hook cleanup 30 "$moddir/crypt-cleanup.sh"
fi
if [[ $hostonly ]]; then
# filter /etc/crypttab for the devices we need
while read _mapper _dev _rest; do
[[ $_mapper = \#* ]] && continue
[[ $_dev ]] || continue
[[ $_dev == UUID=* ]] && \
_dev="/dev/disk/by-uuid/${_dev#UUID=}"
for _hdev in "${!host_fs_types[@]}"; do
[[ ${host_fs_types[$_hdev]} == "crypto_LUKS" ]] || continue
if [[ $_hdev -ef $_dev ]] || [[ /dev/block/$_hdev -ef $_dev ]]; then
echo "$_mapper $_dev $_rest"
break
fi
done
done < /etc/crypttab > $initdir/etc/crypttab
fi
inst_simple "$moddir/crypt-lib.sh" "/lib/dracut-crypt-lib.sh" inst_simple "$moddir/crypt-lib.sh" "/lib/dracut-crypt-lib.sh"
dracut_install -o \ dracut_install -o \
@@ -60,4 +88,5 @@ install() {
$systemdsystemunitdir/sysinit.target.wants/cryptsetup.target \ $systemdsystemunitdir/sysinit.target.wants/cryptsetup.target \
systemd-ask-password systemd-tty-ask-password-agent systemd-ask-password systemd-tty-ask-password-agent
inst_script "$moddir"/crypt-run-generator.sh /sbin/crypt-run-generator inst_script "$moddir"/crypt-run-generator.sh /sbin/crypt-run-generator
dracut_need_initqueue
} }

View File

@@ -32,8 +32,8 @@ else
printf -- 'ENV{ID_FS_TYPE}=="crypto_LUKS", ' printf -- 'ENV{ID_FS_TYPE}=="crypto_LUKS", '
printf -- 'ENV{ID_FS_UUID}=="*%s*", ' $luksid printf -- 'ENV{ID_FS_UUID}=="*%s*", ' $luksid
printf -- 'RUN+="%s --unique --onetime ' $(command -v initqueue) printf -- 'RUN+="%s --unique --onetime ' $(command -v initqueue)
printf -- '--name crypt-run-generator-%%k %s ' $(command -v crypt-run-generator) printf -- '--name systemd-cryptsetup-%%k %s start ' $(command -v systemctl)
printf -- '$env{DEVNAME} luks-$env{ID_FS_UUID}"\n' printf -- 'systemd-cryptsetup@luks$$(dev_unit_name -$env{ID_FS_UUID}).service"\n'
} >> /etc/udev/rules.d/70-luks.rules.new } >> /etc/udev/rules.d/70-luks.rules.new
fi fi

View File

@@ -0,0 +1,15 @@
SUBSYSTEM!="block", GOTO="dm_end"
ACTION!="add|change", GOTO="dm_end"
# Also don't process disks that are slated to be a multipath device
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="dm_end"
KERNEL!="dm-[0-9]*", GOTO="dm_end"
ACTION=="add", GOTO="dm_end"
IMPORT{program}="/sbin/dmsetup info -c --nameprefixes --unquoted --rows --noheadings -o name,uuid,suspended,readonly,major,minor,open,tables_loaded,names_using_dev -j%M -m%m"
ENV{DM_NAME}!="?*", GOTO="dm_end"
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="dm_end"
ENV{DM_UUID}=="CRYPT-TEMP-?*", GOTO="dm_end"
ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", GOTO="dm_end"
IMPORT BLKID
LABEL="dm_end"

View File

@@ -32,6 +32,9 @@ install() {
inst_rules "$moddir/11-dm.rules" inst_rules "$moddir/11-dm.rules"
inst_rules "$moddir/59-persistent-storage-dm.rules"
prepare_udev_rules 59-persistent-storage-dm.rules
inst_hook shutdown 30 "$moddir/dm-shutdown.sh" inst_hook shutdown 30 "$moddir/dm-shutdown.sh"
} }

View File

@@ -28,7 +28,7 @@ if [ -n "$DM_RAIDS" ] || getargbool 0 rd.auto; then
if [ "${s##$r}" != "$s" ]; then if [ "${s##$r}" != "$s" ]; then
info "Activating $s" info "Activating $s"
dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo
[ -e "/dev/mapper/$s" ] && kpartx -a -p p "/dev/mapper/$s" 2>&1 | vinfo [ -e "/dev/mapper/$s" ] && kpartx -a "/dev/mapper/$s" 2>&1 | vinfo
udevsettle udevsettle
fi fi
done done
@@ -38,7 +38,7 @@ if [ -n "$DM_RAIDS" ] || getargbool 0 rd.auto; then
for s in $SETS; do for s in $SETS; do
info "Activating $s" info "Activating $s"
dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo dmraid -ay -i -p --rm_partitions "$s" 2>&1 | vinfo
[ -e "/dev/mapper/$s" ] && kpartx -a -p p "/dev/mapper/$s" 2>&1 | vinfo [ -e "/dev/mapper/$s" ] && kpartx -a "/dev/mapper/$s" 2>&1 | vinfo
done done
fi fi

View File

@@ -8,9 +8,27 @@ check() {
# in trying to support it in the initramfs. # in trying to support it in the initramfs.
type -P dmraid >/dev/null || return 1 type -P dmraid >/dev/null || return 1
[[ $hostonly ]] || [[ $mount_needs ]] && {
for fs in "${host_fs_types[@]}"; do
[[ $fs = *_raid_member ]] && return 0
done
return 255
}
return 0
}
depends() {
echo dm rootfs-block
return 0
}
install() {
local _i
check_dmraid() { check_dmraid() {
local dev=$1 fs=$2 holder DEVPATH DM_NAME local dev=$1 fs=$2 holder DEVPATH DM_NAME
[[ "$fs" = "${fs%%_raid_member}" ]] && return 1 [[ "$fs" != *_raid_member ]] && return 1
DEVPATH=$(udevadm info --query=property --name=$dev \ DEVPATH=$(udevadm info --query=property --name=$dev \
| while read line; do | while read line; do
@@ -37,20 +55,8 @@ check() {
return 0 return 0
} }
[[ $hostonly ]] || [[ $mount_needs ]] && { for_each_host_dev_fs check_dmraid
for_each_host_dev_fs check_dmraid || return 1
}
return 0
}
depends() {
echo dm rootfs-block
return 0
}
install() {
local _i
dracut_install dmraid dracut_install dmraid
dracut_install -o kpartx dracut_install -o kpartx
inst $(command -v partx) /sbin/partx inst $(command -v partx) /sbin/partx

View File

@@ -19,6 +19,9 @@ livedev="$1"
# specified as their own things # specified as their own things
live_dir=$(getarg rd.live.dir -d live_dir) live_dir=$(getarg rd.live.dir -d live_dir)
[ -z "$live_dir" ] && live_dir="LiveOS" [ -z "$live_dir" ] && live_dir="LiveOS"
squash_image=$(getarg rd.live.squashimg)
[ -z "$squash_image" ] && squash_image="squashfs.img"
getargbool 0 rd.live.ram -d -y live_ram && live_ram="yes" getargbool 0 rd.live.ram -d -y live_ram && live_ram="yes"
getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes" getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes"
getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay="" getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay=""
@@ -31,7 +34,7 @@ if [ "$fs" = "iso9660" -o "$fs" = "udf" ]; then
fi fi
getarg rd.live.check -d check || check="" getarg rd.live.check -d check || check=""
if [ -n "$check" ]; then if [ -n "$check" ]; then
[ -x /bin/plymouth ] && /bin/plymouth --hide-splash type plymouth >/dev/null 2>&1 && plymouth --hide-splash
if [ -n "$DRACUT_SYSTEMD" ]; then if [ -n "$DRACUT_SYSTEMD" ]; then
p=$(str_replace "$livedev" "-" '\x2d') p=$(str_replace "$livedev" "-" '\x2d')
systemctl start checkisomd5@${p}.service systemctl start checkisomd5@${p}.service
@@ -42,16 +45,19 @@ if [ -n "$check" ]; then
die "CD check failed!" die "CD check failed!"
exit 1 exit 1
fi fi
[ -x /bin/plymouth ] && /bin/plymouth --show-splash type plymouth >/dev/null 2>&1 && plymouth --show-splash
fi fi
ln -s $livedev /run/initramfs/livedev ln -s $livedev /run/initramfs/livedev
# determine filesystem type for a filesystem image # determine filesystem type for a filesystem image
det_img_fs() { det_img_fs() {
udevadm settle
blkid -s TYPE -u noraid -o value "$1" blkid -s TYPE -u noraid -o value "$1"
} }
modprobe squashfs
for arg in $CMDLINE; do case $arg in ro|rw) liverw=$arg ;; esac; done for arg in $CMDLINE; do case $arg in ro|rw) liverw=$arg ;; esac; done
# mount the backing of the live image first # mount the backing of the live image first
mkdir -m 0755 -p /run/initramfs/live mkdir -m 0755 -p /run/initramfs/live
@@ -110,18 +116,34 @@ do_live_overlay() {
umount -l /run/initramfs/overlayfs || : umount -l /run/initramfs/overlayfs || :
fi fi
if [ -z "$setup" ]; then if [ -z "$setup" -o -n "$readonly_overlay" ]; then
if [ -n "$devspec" -a -n "$pathspec" ]; then if [ -n "$setup" ]; then
warn "Using temporary overlay."
elif [ -n "$devspec" -a -n "$pathspec" ]; then
warn "Unable to find persistent overlay; using temporary" warn "Unable to find persistent overlay; using temporary"
sleep 5 sleep 5
fi fi
dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((512*1024)) 2> /dev/null dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((512*1024)) 2> /dev/null
losetup $OVERLAY_LOOPDEV /overlay if [ -n "$setup" -a -n "$readonly_overlay" ]; then
RO_OVERLAY_LOOPDEV=$( losetup -f )
losetup $RO_OVERLAY_LOOPDEV /overlay
else
losetup $OVERLAY_LOOPDEV /overlay
fi
fi fi
# set up the snapshot # set up the snapshot
echo 0 `blockdev --getsz $BASE_LOOPDEV` snapshot $BASE_LOOPDEV $OVERLAY_LOOPDEV p 8 | dmsetup create $readonly_overlay live-rw sz=$(blockdev --getsz $BASE_LOOPDEV)
if [ -n "$readonly_overlay" ]; then
echo 0 $sz snapshot $BASE_LOOPDEV $OVERLAY_LOOPDEV p 8 | dmsetup create $readonly_overlay live-ro
base="/dev/mapper/live-ro"
over=$RO_OVERLAY_LOOPDEV
else
base=$BASE_LOOPDEV
over=$OVERLAY_LOOPDEV
fi
echo 0 $sz snapshot $base $over p 8 | dmsetup create live-rw
} }
# live cd helper function # live cd helper function
@@ -161,8 +183,8 @@ if [ -n "$FSIMG" ] ; then
fi fi
# we might have an embedded fs image on squashfs (compressed live) # we might have an embedded fs image on squashfs (compressed live)
if [ -e /run/initramfs/live/${live_dir}/squashfs.img ]; then if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]; then
SQUASHED="/run/initramfs/live/${live_dir}/squashfs.img" SQUASHED="/run/initramfs/live/${live_dir}/${squash_image}"
fi fi
if [ -e "$SQUASHED" ] ; then if [ -e "$SQUASHED" ] ; then

View File

@@ -0,0 +1,38 @@
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
PATH=/usr/sbin:/usr/bin:/sbin:/bin
isofile=$1
[ -z "$isofile" ] && exit 1
ismounted "/run/initramfs/isoscan" && exit 1
mkdir -p "/run/initramfs/isoscan"
do_iso_scan() {
local _name
local dev
for dev in /dev/disk/by-uuid/*; do
_name=$(dev_unit_name "$dev")
[ -e /tmp/isoscan-${_name} ] && continue
> /tmp/isoscan-${_name}
mount -t auto -o ro "$dev" "/run/initramfs/isoscan" || continue
if [ -f "/run/initramfs/isoscan/$isofile" ]; then
losetup -f "/run/initramfs/isoscan/$isofile"
rm -f "$job"
exit 0
else
umount "/run/initramfs/isoscan"
fi
done
}
do_iso_scan
rmdir "/run/initramfs/isoscan"
exit 1

View File

@@ -16,19 +16,21 @@ depends() {
} }
installkernel() { installkernel() {
instmods squashfs loop instmods squashfs loop iso9660
} }
install() { install() {
dracut_install umount dmsetup blkid dd losetup grep blockdev dracut_install umount dmsetup blkid dd losetup grep blockdev
dracut_install -o checkisomd5 dracut_install -o checkisomd5
inst_hook cmdline 30 "$moddir/parse-dmsquash-live.sh" inst_hook cmdline 30 "$moddir/parse-dmsquash-live.sh"
inst_hook cmdline 31 "$moddir/parse-iso-scan.sh"
inst_hook pre-udev 30 "$moddir/dmsquash-live-genrules.sh" inst_hook pre-udev 30 "$moddir/dmsquash-live-genrules.sh"
inst_hook pre-udev 30 "$moddir/dmsquash-liveiso-genrules.sh" inst_hook pre-udev 30 "$moddir/dmsquash-liveiso-genrules.sh"
inst_hook pre-pivot 20 "$moddir/apply-live-updates.sh" inst_hook pre-pivot 20 "$moddir/apply-live-updates.sh"
inst_script "$moddir/dmsquash-live-root.sh" "/sbin/dmsquash-live-root" inst_script "$moddir/dmsquash-live-root.sh" "/sbin/dmsquash-live-root"
inst_script "$moddir/iso-scan.sh" "/sbin/iso-scan"
# should probably just be generally included # should probably just be generally included
inst_rules 60-cdrom_id.rules inst_rules 60-cdrom_id.rules
inst_simple "$moddir/checkisomd5@.service" "/etc/systemd/system/checkisomd5@.service" inst_simple "$moddir/checkisomd5@.service" "/etc/systemd/system/checkisomd5@.service"
dracut_need_initqueue
} }

View File

@@ -0,0 +1,14 @@
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
# live images are specified with
# root=live:backingdev
isofile=$(getarg iso-scan/filename)
if [ -n "$isofile" ]; then
{
printf 'KERNEL=="loop0", RUN+="/sbin/initqueue --settled --unique /sbin/iso-scan %s"\n' \
"'${isofile}'"
} >> /etc/udev/rules.d/99-isofile-mount.rules
fi

View File

@@ -35,15 +35,21 @@ installkernel() {
return 0 return 0
} }
hostonly='' instmods sr_mod sd_mod scsi_dh scsi_dh_rdac scsi_dh_emc ata_piix \ hostonly='' instmods sr_mod sd_mod scsi_dh ata_piix \
pcmcia firewire-ohci yenta_socket \ ehci-hcd ehci-pci ehci-platform ohci-hcd uhci-hcd xhci-hcd hid_generic \
usb_storage sdhci sdhci-pci \
sdhci_esdhc_imx mmci sdhci_tegra mvsdio \
omap omapdrm omap_hsmmc sdhci_dove ahci_platform pata_imx sata_mv \
atkbd i8042 usbhid hid-apple hid-sunplus hid-cherry hid-logitech \
hid-logitech-dj hid-microsoft ehci-hcd ohci-hcd uhci-hcd xhci-hcd hid_generic \
unix unix
instmods yenta_socket scsi_dh_rdac scsi_dh_emc \
atkbd i8042 usbhid hid-apple hid-sunplus hid-cherry hid-logitech \
hid-logitech-dj hid-microsoft firewire-ohci \
pcmcia usb_storage nvme hid-hyperv hv-vmbus
if [[ "$(uname -p)" == arm* ]]; then
# arm specific modules
hostonly='' instmods sdhci_esdhc_imx mmci sdhci_tegra mvsdio omap omapdrm \
omap_hsmmc panel-tfp410 sdhci_dove ahci_platform pata_imx sata_mv
fi
# install virtual machine support # install virtual machine support
instmods virtio virtio_blk virtio_ring virtio_pci virtio_scsi \ instmods virtio virtio_blk virtio_ring virtio_pci virtio_scsi \
"=drivers/pcmcia" =ide "=drivers/usb/storage" "=drivers/pcmcia" =ide "=drivers/usb/storage"
@@ -59,18 +65,19 @@ installkernel() {
instmods '=fs' instmods '=fs'
fi fi
else else
inst_fs() { for i in $(host_fs_all); do
[[ $2 ]] || return 1 hostonly='' instmods $i
hostonly='' instmods $2 done
}
for_each_host_dev_fs inst_fs
fi fi
fi fi
:
} }
install() { install() {
dracut_install -o /lib/modprobe.d/*.conf dracut_install -o /lib/modprobe.d/*.conf
[[ $hostonly ]] && dracut_install -o /etc/modprobe.d/*.conf /etc/modprobe.conf [[ $hostonly ]] && dracut_install -o /etc/modprobe.d/*.conf /etc/modprobe.conf
inst_hook cmdline 01 "$moddir/parse-kernel.sh" if ! dracut_module_included "systemd"; then
inst_hook cmdline 01 "$moddir/parse-kernel.sh"
fi
inst_simple "$moddir/insmodpost.sh" /sbin/insmodpost.sh inst_simple "$moddir/insmodpost.sh" /sbin/insmodpost.sh
} }

View File

@@ -14,5 +14,6 @@ install() {
inst_hook cmdline 29 "$moddir/parse-livenet.sh" inst_hook cmdline 29 "$moddir/parse-livenet.sh"
inst_hook initqueue/online 95 "$moddir/fetch-liveupdate.sh" inst_hook initqueue/online 95 "$moddir/fetch-liveupdate.sh"
inst_script "$moddir/livenetroot.sh" "/sbin/livenetroot" inst_script "$moddir/livenetroot.sh" "/sbin/livenetroot"
dracut_need_initqueue
} }

View File

@@ -3,26 +3,14 @@
# ex: ts=8 sw=4 sts=4 et filetype=sh # ex: ts=8 sw=4 sts=4 et filetype=sh
check() { check() {
local _rootdev _activated
# No point trying to support lvm if the binaries are missing # No point trying to support lvm if the binaries are missing
type -P lvm >/dev/null || return 1 type -P lvm >/dev/null || return 1
check_lvm() {
local DM_VG_NAME DM_LV_NAME DM_UDEV_DISABLE_DISK_RULES_FLAG
eval $(udevadm info --query=property --name=/dev/block/$1|egrep '(DM_VG_NAME|DM_LV_NAME|DM_UDEV_DISABLE_DISK_RULES_FLAG)=')
[[ "$DM_UDEV_DISABLE_DISK_RULES_FLAG" = "1" ]] && return 1
[[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1
if ! strstr " ${_activated[*]} " " ${DM_VG_NAME}/${DM_LV_NAME} "; then
if ! [[ $kernel_only ]]; then
echo " rd.lvm.lv=${DM_VG_NAME}/${DM_LV_NAME} " >> "${initdir}/etc/cmdline.d/90lvm.conf"
fi
push _activated "${DM_VG_NAME}/${DM_LV_NAME}"
fi
return 0
}
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for_each_host_dev_and_slaves check_lvm || return 1 for fs in "${host_fs_types[@]}"; do
[[ $fs = LVM*_member ]] && return 0
done
return 255
} }
return 0 return 0
@@ -36,8 +24,31 @@ depends() {
install() { install() {
local _i local _i
local _needthin
local _activated
inst lvm inst lvm
check_lvm() {
local DM_VG_NAME DM_LV_NAME DM_UDEV_DISABLE_DISK_RULES_FLAG
eval $(udevadm info --query=property --name=$1 | egrep '(DM_VG_NAME|DM_LV_NAME|DM_UDEV_DISABLE_DISK_RULES_FLAG)=')
[[ "$DM_UDEV_DISABLE_DISK_RULES_FLAG" = "1" ]] && return 1
[[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1
if ! strstr " ${_activated[*]} " " ${DM_VG_NAME}/${DM_LV_NAME} "; then
if ! [[ $kernel_only ]]; then
echo " rd.lvm.lv=${DM_VG_NAME}/${DM_LV_NAME} " >> "${initdir}/etc/cmdline.d/90lvm.conf"
fi
push _activated "${DM_VG_NAME}/${DM_LV_NAME}"
fi
if ! [[ $_needthin ]]; then
[[ $(lvs --noheadings -o segtype ${DM_VG_NAME}) == *thin* ]] && _needthin=1
fi
return 0
}
for_each_host_dev_fs check_lvm
inst_rules "$moddir/64-lvm.rules" inst_rules "$moddir/64-lvm.rules"
if [[ $hostonly ]] || [[ $lvmconf = "yes" ]]; then if [[ $hostonly ]] || [[ $lvmconf = "yes" ]]; then
@@ -59,5 +70,10 @@ install() {
inst_hook cmdline 30 "$moddir/parse-lvm.sh" inst_hook cmdline 30 "$moddir/parse-lvm.sh"
inst_libdir_file "libdevmapper-event-lvm*.so" inst_libdir_file "libdevmapper-event-lvm*.so"
if [[ $_needthin ]]; then
dracut_install -o thin_dump thin_restore thin_check
fi
} }

View File

@@ -0,0 +1,23 @@
SUBSYSTEM!="block", GOTO="md_end"
ACTION!="add|change", GOTO="md_end"
# Also don't process disks that are slated to be a multipath device
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="md_end"
KERNEL!="md[0-9]*|md_d[0-9]*|md/*", KERNEL!="md*", GOTO="md_end"
# partitions have no md/{array_state,metadata_version}
ENV{DEVTYPE}=="partition", GOTO="md_ignore_state"
# container devices have a metadata version of e.g. 'external:ddf' and
# never leave state 'inactive'
ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state"
TEST!="md/array_state", GOTO="md_end"
ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
LABEL="md_ignore_state"
IMPORT{program}="/sbin/mdadm --detail --export $tempnode"
IMPORT BLKID
OPTIONS+="link_priority=100"
OPTIONS+="watch"
LABEL="md_end"

View File

@@ -29,9 +29,6 @@ _md_force_run() {
_path_d="${_path_s%/*}/degraded" _path_d="${_path_s%/*}/degraded"
[ ! -r "$_path_d" ] && continue [ ! -r "$_path_d" ] && continue
# workaround for mdmon bug
[ "$(cat "$_path_d")" -gt "0" ] && mdmon $_offroot --takeover "$md"
done done
} }

View File

@@ -7,27 +7,11 @@ check() {
# No mdadm? No mdraid support. # No mdadm? No mdraid support.
type -P mdadm >/dev/null || return 1 type -P mdadm >/dev/null || return 1
check_mdraid() {
local dev=$1 fs=$2 holder DEVPATH MD_UUID
[[ "$fs" = "${fs%%_raid_member}" ]] && return 1
MD_UUID=$(/sbin/mdadm --examine --export $dev \
| while read line; do
[[ ${line#MD_UUID} = $line ]] && continue
eval "$line"
echo $MD_UUID
break
done)
[[ ${MD_UUID} ]] || return 1
if ! [[ $kernel_only ]]; then
echo " rd.md.uuid=${MD_UUID} " >> "${initdir}/etc/cmdline.d/90mdraid.conf"
fi
return 0
}
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for_each_host_dev_fs check_mdraid || return 1 for fs in "${host_fs_types[@]}"; do
[[ "$fs" == *_raid_member ]] && return 0
done
return 255
} }
return 0 return 0
@@ -48,23 +32,39 @@ install() {
inst $(command -v partx) /sbin/partx inst $(command -v partx) /sbin/partx
inst $(command -v mdadm) /sbin/mdadm inst $(command -v mdadm) /sbin/mdadm
# XXX: mdmon really needs to run as non-root? check_mdraid() {
# If so, write only the user it needs in the initrd's /etc/passwd (and maybe /etc/group) local dev=$1 fs=$2 holder DEVPATH MD_UUID
# in a similar fashion to modules.d/95nfs. Do not copy /etc/passwd and /etc/group from [[ "$fs" != *_raid_member ]] && return 1
# the system into the initrd.
# dledford has hardware to test this, so he should be able to clean this up.
# inst /etc/passwd
# inst /etc/group
inst_rules 64-md-raid.rules MD_UUID=$(/sbin/mdadm --examine --export $dev \
# remove incremental assembly from stock rules, so they don't shadow | while read line; do
# 65-md-inc*.rules and its fine-grained controls, or cause other problems [[ ${line#MD_UUID} = $line ]] && continue
# when we explicitly don't want certain components to be incrementally eval "$line"
# assembled echo $MD_UUID
sed -i -r -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}${udevdir}/rules.d/64-md-raid.rules" break
done)
[[ ${MD_UUID} ]] || return 1
if ! [[ $kernel_only ]]; then
echo " rd.md.uuid=${MD_UUID} " >> "${initdir}/etc/cmdline.d/90mdraid.conf"
fi
return 0
}
for_each_host_dev_fs check_mdraid
inst_rules 64-md-raid.rules
# remove incremental assembly from stock rules, so they don't shadow
# 65-md-inc*.rules and its fine-grained controls, or cause other problems
# when we explicitly don't want certain components to be incrementally
# assembled
sed -i -r -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}${udevdir}/rules.d/64-md-raid.rules"
inst_rules "$moddir/65-md-incremental-imsm.rules" inst_rules "$moddir/65-md-incremental-imsm.rules"
inst_rules "$moddir/59-persistent-storage-md.rules"
prepare_udev_rules 59-persistent-storage-md.rules
# guard against pre-3.0 mdadm versions, that can't handle containers # guard against pre-3.0 mdadm versions, that can't handle containers
if ! mdadm -Q -e imsm /dev/null >/dev/null 2>&1; then if ! mdadm -Q -e imsm /dev/null >/dev/null 2>&1; then
inst_hook pre-trigger 30 "$moddir/md-noimsm.sh" inst_hook pre-trigger 30 "$moddir/md-noimsm.sh"
@@ -88,8 +88,10 @@ install() {
inst_hook shutdown 30 "$moddir/md-shutdown.sh" inst_hook shutdown 30 "$moddir/md-shutdown.sh"
inst_script "$moddir/mdraid-cleanup.sh" /sbin/mdraid-cleanup inst_script "$moddir/mdraid-cleanup.sh" /sbin/mdraid-cleanup
inst_script "$moddir/mdraid_start.sh" /sbin/mdraid_start inst_script "$moddir/mdraid_start.sh" /sbin/mdraid_start
if [ -e /lib/systemd/system/mdmon-offroot@.service ]; then if dracut_module_included "systemd"; then
inst_simple /lib/systemd/system/mdmon-offroot@.service if [ -e $systemdsystemunitdir/mdmon@.service ]; then
inst_simple $systemdsystemunitdir/mdmon@.service
fi
fi fi
inst_hook pre-shutdown 30 "$moddir/mdmon-pre-shutdown.sh" inst_hook pre-shutdown 30 "$moddir/mdmon-pre-shutdown.sh"
} }

View File

@@ -15,7 +15,7 @@ check() {
} }
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for_each_host_dev_and_slaves is_mpath || return 1 for_each_host_dev_and_slaves is_mpath || return 255
} }
return 0 return 0
@@ -75,6 +75,7 @@ install() {
mpath_wait \ mpath_wait \
multipath \ multipath \
multipathd \ multipathd \
mpathpersist \
xdrgetuid \ xdrgetuid \
xdrgetprio \ xdrgetprio \
/etc/xdrdevices.conf \ /etc/xdrdevices.conf \
@@ -85,8 +86,15 @@ install() {
inst_libdir_file "libmultipath*" "multipath/*" inst_libdir_file "libmultipath*" "multipath/*"
inst_hook pre-trigger 02 "$moddir/multipathd.sh" if dracut_module_included "systemd"; then
inst_hook cleanup 02 "$moddir/multipathd-stop.sh" dracut_install \
$systemdsystemunitdir/multipathd.service
mkdir -p "${initdir}${systemdsystemconfdir}/sysinit.target.wants"
ln -rfs "${initdir}${systemdsystemunitdir}/multipathd.service" "${initdir}${systemdsystemconfdir}/sysinit.target.wants/multipathd.service"
else
inst_hook pre-trigger 02 "$moddir/multipathd.sh"
inst_hook cleanup 02 "$moddir/multipathd-stop.sh"
fi
inst_rules 40-multipath.rules 62-multipath.rules 65-multipath.rules 66-kpartx.rules inst_rules 40-multipath.rules 62-multipath.rules 65-multipath.rules 66-kpartx.rules
} }

View File

@@ -8,7 +8,12 @@ depends() {
echo crypt echo crypt
} }
installkernel() {
instmods loop
}
install() { install() {
dracut_install losetup dracut_install losetup
inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh" inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
dracut_need_initqueue
} }

View File

@@ -8,7 +8,7 @@ check() {
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for fs in ${host_fs_types[@]}; do for fs in ${host_fs_types[@]}; do
strstr "$fs" "\|cifs" && return 0 [[ "$fs" == "cifs" ]] && return 0
done done
return 255 return 255
} }
@@ -43,4 +43,5 @@ install() {
inst_hook cmdline 90 "$moddir/parse-cifsroot.sh" inst_hook cmdline 90 "$moddir/parse-cifsroot.sh"
inst "$moddir/cifsroot.sh" "/sbin/cifsroot" inst "$moddir/cifsroot.sh" "/sbin/cifsroot"
inst "$moddir/cifs-lib.sh" "/lib/cifs-lib.sh" inst "$moddir/cifs-lib.sh" "/lib/cifs-lib.sh"
dracut_need_initqueue
} }

View File

@@ -33,5 +33,6 @@ install() {
inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd" inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd"
inst "$moddir/fcoe-genrules.sh" "/sbin/fcoe-genrules.sh" inst "$moddir/fcoe-genrules.sh" "/sbin/fcoe-genrules.sh"
inst_hook cmdline 99 "$moddir/parse-fcoe.sh" inst_hook cmdline 99 "$moddir/parse-fcoe.sh"
dracut_need_initqueue
} }

View File

@@ -10,6 +10,7 @@
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
type parse_iscsi_root >/dev/null 2>&1 || . /lib/net-lib.sh type parse_iscsi_root >/dev/null 2>&1 || . /lib/net-lib.sh
type write_fs_tab >/dev/null 2>&1 || . /lib/fs-lib.sh
PATH=/usr/sbin:/usr/bin:/sbin:/bin PATH=/usr/sbin:/usr/bin:/sbin:/bin
@@ -43,6 +44,8 @@ if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
# if root is not specified try to mount the whole iSCSI LUN # if root is not specified try to mount the whole iSCSI LUN
printf 'ENV{DEVTYPE}!="partition", SYMLINK=="disk/by-path/*-iscsi-*-*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-iscsi-root.rules printf 'ENV{DEVTYPE}!="partition", SYMLINK=="disk/by-path/*-iscsi-*-*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-iscsi-root.rules
udevadm control --reload udevadm control --reload
write_fs_tab /dev/root
wait_for_dev /dev/root
fi fi
for p in $(getargs rd.iscsi.param -d iscsi_param); do for p in $(getargs rd.iscsi.param -d iscsi_param); do
@@ -50,6 +53,8 @@ if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
done done
iscsistart -b $iscsi_param iscsistart -b $iscsi_param
echo 'started' > "/tmp/iscsistarted-iscsi"
echo 'started' > "/tmp/iscsistarted-firmware"
exit 0 exit 0
fi fi
@@ -136,14 +141,14 @@ handle_netroot()
# if root is not specified try to mount the whole iSCSI LUN # if root is not specified try to mount the whole iSCSI LUN
printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' $iscsi_lun >> /etc/udev/rules.d/99-iscsi-root.rules printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' $iscsi_lun >> /etc/udev/rules.d/99-iscsi-root.rules
udevadm control --reload udevadm control --reload
write_fs_tab /dev/root
wait_for_dev /dev/root
# install mount script # install mount script
echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh [ -z "$DRACUT_SYSTEMD" ] && \
echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh
fi fi
# inject new exit_if_exists
echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/initqueue/iscsi-settle.sh
# force udevsettle to break # force udevsettle to break
> $hookdir/initqueue/work > $hookdir/initqueue/work
@@ -158,6 +163,10 @@ handle_netroot()
${iscsi_netdev_name+--param iface.net_ifacename=$iscsi_netdev_name} \ ${iscsi_netdev_name+--param iface.net_ifacename=$iscsi_netdev_name} \
${iscsi_param} \ ${iscsi_param} \
|| : || :
netroot_enc=$(str_replace "$1" '/' '\2f')
echo 'started' > "/tmp/iscsistarted-iscsi:${netroot_enc}"
} }
# loop over all netroot parameter # loop over all netroot parameter

View File

@@ -78,5 +78,8 @@ install() {
inst_hook cmdline 90 "$moddir/parse-iscsiroot.sh" inst_hook cmdline 90 "$moddir/parse-iscsiroot.sh"
inst_hook cleanup 90 "$moddir/cleanup-iscsi.sh" inst_hook cleanup 90 "$moddir/cleanup-iscsi.sh"
inst "$moddir/iscsiroot.sh" "/sbin/iscsiroot" inst "$moddir/iscsiroot.sh" "/sbin/iscsiroot"
inst "$moddir/mount-lun.sh" "/bin/mount-lun.sh" if ! dracut_module_included "systemd"; then
inst "$moddir/mount-lun.sh" "/bin/mount-lun.sh"
fi
dracut_need_initqueue
} }

View File

@@ -24,6 +24,8 @@
[ -n "$iscsiroot" ] && [ -n "$iscsi_firmware" ] && die "Mixing iscsiroot and iscsi_firmware is dangerous" [ -n "$iscsiroot" ] && [ -n "$iscsi_firmware" ] && die "Mixing iscsiroot and iscsi_firmware is dangerous"
type write_fs_tab >/dev/null 2>&1 || . /lib/fs-lib.sh
# Root takes precedence over netroot # Root takes precedence over netroot
if [ "${root%%:*}" = "iscsi" ] ; then if [ "${root%%:*}" = "iscsi" ] ; then
if [ -n "$netroot" ] ; then if [ -n "$netroot" ] ; then
@@ -33,6 +35,8 @@ if [ "${root%%:*}" = "iscsi" ] ; then
# if root is not specified try to mount the whole iSCSI LUN # if root is not specified try to mount the whole iSCSI LUN
printf 'ENV{DEVTYPE}!="partition", SYMLINK=="disk/by-path/*-iscsi-*-*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-iscsi-root.rules printf 'ENV{DEVTYPE}!="partition", SYMLINK=="disk/by-path/*-iscsi-*-*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-iscsi-root.rules
root=/dev/root root=/dev/root
write_fs_tab /dev/root
fi fi
# If it's not empty or iscsi we don't continue # If it's not empty or iscsi we don't continue
@@ -58,6 +62,7 @@ if [ -n "$iscsi_firmware" ] ; then
netroot=${netroot:-iscsi} netroot=${netroot:-iscsi}
modprobe -q iscsi_boot_sysfs 2>/dev/null modprobe -q iscsi_boot_sysfs 2>/dev/null
modprobe -q iscsi_ibft modprobe -q iscsi_ibft
echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_firmware_started.sh
fi fi
# If it's not iscsi we don't continue # If it's not iscsi we don't continue
@@ -79,9 +84,17 @@ if ! [ -e /sys/module/iscsi_tcp ]; then
modprobe -q iscsi_tcp || die "iscsiroot requested but kernel/initrd does not support iscsi" modprobe -q iscsi_tcp || die "iscsiroot requested but kernel/initrd does not support iscsi"
fi fi
if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then
if ! getargbool 1 rd.neednet >/dev/null || ! getarg "ip="; then
initqueue --onetime --settled /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
fi
fi
netroot_enc=$(str_replace "$netroot" '/' '\2f')
echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh
# Done, all good! # Done, all good!
rootok=1 rootok=1
# Shut up init error check # Shut up init error check
[ -z "$root" ] && root="iscsi" [ -z "$root" ] && root="iscsi"

View File

@@ -33,5 +33,6 @@ install() {
inst nbd-client inst nbd-client
inst_hook cmdline 90 "$moddir/parse-nbdroot.sh" inst_hook cmdline 90 "$moddir/parse-nbdroot.sh"
inst_script "$moddir/nbdroot.sh" "/sbin/nbdroot" inst_script "$moddir/nbdroot.sh" "/sbin/nbdroot"
dracut_need_initqueue
} }

View File

@@ -17,21 +17,21 @@ PATH=/usr/sbin:/usr/bin:/sbin:/bin
# root is in the form root=nbd:srv:port[:fstype[:rootflags[:nbdopts]]] # root is in the form root=nbd:srv:port[:fstype[:rootflags[:nbdopts]]]
netif="$1" netif="$1"
root="$2" nroot="$2"
NEWROOT="$3" NEWROOT="$3"
# If it's not nbd we don't continue # If it's not nbd we don't continue
[ "${root%%:*}" = "nbd" ] || return [ "${nroot%%:*}" = "nbd" ] || return
root=${root#nbd:} nroot=${nroot#nbd:}
nbdserver=${root%%:*}; root=${root#*:} nbdserver=${nroot%%:*}; nroot=${nroot#*:}
nbdport=${root%%:*}; root=${root#*:} nbdport=${nroot%%:*}; nroot=${nroot#*:}
nbdfstype=${root%%:*}; root=${root#*:} nbdfstype=${nroot%%:*}; nroot=${nroot#*:}
nbdflags=${root%%:*} nbdflags=${nroot%%:*}
nbdopts=${root#*:} nbdopts=${nroot#*:}
# If nbdport not an integer, then assume name based import # If nbdport not an integer, then assume name based import
if [ "${nbdport%[0-9]}" = "$nbdport" ]; then if [ ! -z $(echo "$nbdport" | sed 's/[0-9]//g') ]; then
nbdport="-N $nbdport" nbdport="-N $nbdport"
fi fi
@@ -92,23 +92,27 @@ while [ ! -b /dev/nbd0 ]; do
else else
sleep 0.1 sleep 0.1
fi fi
i=$(( $i + 1)) i=$(($i + 1))
done done
nbd-client $preopts "$nbdserver" $nbdport /dev/nbd0 $opts || exit 1
# If we didn't get a root= on the command line, then we need to # If we didn't get a root= on the command line, then we need to
# add the udev rules for mounting the nbd0 device # add the udev rules for mounting the nbd0 device
root=$(getarg root=) if [ -z "$root" -o -n "${root%%block:*}" -o "$root" = "block:/dev/root" ]; then
if [ -z "$root" ] || strstr "$root" "nbd:" || strstr "$root" "dhcp"; then printf 'KERNEL=="nbd0", ENV{DEVTYPE}!="partition", ENV{ID_FS_TYPE}=="?*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-nbd-root.rules
echo '[ -e /dev/root ] || { info=$(udevadm info --query=env --name=/dev/nbd0); [ -z "${info%%*ID_FS_TYPE*}" ] && { ln -s /dev/nbd0 /dev/root 2>/dev/null; :; };} && rm $job;' \ udevadm control --reload
> $hookdir/initqueue/settled/nbd.sh type write_fs_tab >/dev/null 2>&1 || . /lib/fs-lib.sh
write_fs_tab /dev/root "$nbdfstype" "$fsopts"
wait_for_dev /dev/root
printf '/bin/mount -t %s -o %s %s %s\n' \ if [ -z "$DRACUT_SYSTEMD" ]; then
"$nbdfstype" "$fsopts" /dev/nbd0 "$NEWROOT" \ printf '/bin/mount %s\n' \
> $hookdir/mount/01-$$-nbd.sh "$NEWROOT" \
> $hookdir/mount/01-$$-nbd.sh
fi
fi fi
nbd-client $preopts "$nbdserver" $nbdport /dev/nbd0 $opts || exit 1
# NBD doesn't emit uevents when it gets connected, so kick it # NBD doesn't emit uevents when it gets connected, so kick it
echo change > /sys/block/nbd0/uevent echo change > /sys/block/nbd0/uevent
udevadm settle udevadm settle

View File

@@ -9,9 +9,9 @@ check() {
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for fs in ${host_fs_types[@]}; do for fs in ${host_fs_types[@]}; do
strstr "$fs" "\|nfs" && return 0 [[ "$fs" == "nfs" ]] && return 0
strstr "$fs" "\|nfs3" && return 0 [[ "$fs" == "nfs3" ]] && return 0
strstr "$fs" "\|nfs4" && return 0 [[ "$fs" == "nfs4" ]] && return 0
done done
return 255 return 255
} }
@@ -62,12 +62,8 @@ install() {
# Rather than copy the passwd file in, just set a user for rpcbind # Rather than copy the passwd file in, just set a user for rpcbind
# We'll save the state and restart the daemon from the root anyway # We'll save the state and restart the daemon from the root anyway
egrep '^nfsnobody:' /etc/passwd >> "$initdir/etc/passwd" egrep '^nfsnobody:|^rpc:|^rpcuser:' /etc/passwd >> "$initdir/etc/passwd"
egrep '^rpc:' /etc/passwd >> "$initdir/etc/passwd" egrep '^nogroup:|^rpc:|^nobody:' /etc/group >> "$initdir/etc/group"
egrep '^rpcuser:' /etc/passwd >> "$initdir/etc/passwd"
#type -P nologin >/dev/null && dracut_install nologin
egrep '^nobody:' /etc/group >> "$initdir/etc/group"
egrep '^rpc:' /etc/group >> "$initdir/etc/group"
# rpc user needs to be able to write to this directory to save the warmstart # rpc user needs to be able to write to this directory to save the warmstart
# file # file
@@ -75,5 +71,6 @@ install() {
egrep -q '^rpc:' /etc/passwd \ egrep -q '^rpc:' /etc/passwd \
&& egrep -q '^rpc:' /etc/group \ && egrep -q '^rpc:' /etc/group \
&& chown rpc.rpc "$initdir/var/lib/rpcbind" && chown rpc.rpc "$initdir/var/lib/rpcbind"
dracut_need_initqueue
} }

View File

@@ -18,6 +18,8 @@ nfs_to_var $root $netif
mount_nfs $root $NEWROOT $netif && { [ -e /dev/root ] || ln -s null /dev/root ; } mount_nfs $root $NEWROOT $netif && { [ -e /dev/root ] || ln -s null /dev/root ; }
[ -f $NEWROOT/etc/fstab ] && cat $NEWROOT/etc/fstab > /dev/null
# inject new exit_if_exists # inject new exit_if_exists
echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/initqueue/nfs.sh echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/initqueue/nfs.sh
# force udevsettle to break # force udevsettle to break

View File

@@ -14,8 +14,13 @@ install() {
} }
done done
inst_hook cmdline 10 "$moddir/parse-resume.sh" if ! dracut_module_included "systemd"; then
inst_hook pre-udev 30 "$moddir/resume-genrules.sh" inst_hook cmdline 10 "$moddir/parse-resume.sh"
inst_hook mount 10 "$moddir/resume.sh" else
inst_script "$moddir/parse-resume.sh" /lib/dracut/parse-resume.sh
inst_hook pre-udev 30 "$moddir/resume-genrules.sh"
fi
inst_script "$moddir/resume.sh" /lib/dracut/resume.sh
} }

View File

@@ -24,3 +24,51 @@ if splash=$(getarg splash=); then
else else
unset splash unset splash
fi fi
case "$splash" in
quiet )
a_splash="-P splash=y"
;;
* )
a_splash="-P splash=n"
;;
esac
if [ -n "$resume" ]; then
{
printf "KERNEL==\"%s\", ACTION==\"add|change\", SYMLINK+=\"/dev/resume\"\n" \
${resume#/dev/};
printf "SYMLINK==\"%s\", ACTION==\"add|change\", SYMLINK+=\"/dev/resume\"\n" \
${resume#/dev/};
} >> /etc/udev/rules.d/99-resume-link.rules
{
if [ -x /usr/sbin/resume ]; then
printf "KERNEL==\"%s\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", RUN+=\"/sbin/initqueue --finished --unique --name 00resume /usr/sbin/resume %s \'%s\'\"\n" \
${resume#/dev/} "$a_splash" "$resume";
printf "SYMLINK==\"%s\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", RUN+=\"/sbin/initqueue --finished --unique --name 00resume /usr/sbin/resume %s \'%s\'\"\n" \
${resume#/dev/} "$a_splash" "$resume";
fi
printf "KERNEL==\"%s\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", RUN+=\"/sbin/initqueue --finished --unique --name 00resume echo %%M:%%m > /sys/power/resume\"\n" \
${resume#/dev/};
printf "SYMLINK==\"%s\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", RUN+=\"/sbin/initqueue --finished --unique --name 00resume echo %%M:%%m > /sys/power/resume\"\n" \
${resume#/dev/};
} >> /etc/udev/rules.d/99-resume.rules
printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm "$job" "%s/initqueue/timeout/resume.sh"; }\n' \
"$resume" "$resume" "$hookdir" >> $hookdir/initqueue/settled/resume.sh
printf 'warn "Cancelling resume operation. Device not found."; cancel_wait_for_dev /dev/resume; rm "$job" "%s/initqueue/settled/resume.sh";' \
"$hookdir" >> $hookdir/initqueue/timeout/resume.sh
wait_for_dev "/dev/resume"
mv /lib/dracut/resume.sh /lib/dracut/hooks/pre-mount/10-resume.sh
elif ! getarg noresume; then
{
if [ -x /usr/sbin/resume ]; then
printf "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", RUN+=\"/sbin/initqueue --finished --unique --name 00resume /usr/sbin/resume %s \$tempnode\"\n" "$a_splash"
fi
echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\"," \
" RUN+=\"/sbin/initqueue --finished --unique --name 00resume echo %M:%m > /sys/power/resume\"";
} >> /etc/udev/rules.d/99-resume.rules
fi

View File

@@ -32,8 +32,8 @@ if [ -n "$resume" ]; then
${resume#/dev/}; ${resume#/dev/};
} >> /etc/udev/rules.d/99-resume.rules } >> /etc/udev/rules.d/99-resume.rules
printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm "$job"; udevadm settle; }\n' \ printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm "$job" "%s/initqueue/timeout/resume.sh"; }\n' \
"$resume" "$resume" >> $hookdir/initqueue/settled/resume.sh "$resume" "$resume" "$hookdir" >> $hookdir/initqueue/settled/resume.sh
printf 'warn "Cancelling resume operation. Device not found."; cancel_wait_for_dev /dev/resume; rm "$job" "%s/initqueue/settled/resume.sh";' \ printf 'warn "Cancelling resume operation. Device not found."; cancel_wait_for_dev /dev/resume; rm "$job" "%s/initqueue/settled/resume.sh";' \
"$hookdir" >> $hookdir/initqueue/timeout/resume.sh "$hookdir" >> $hookdir/initqueue/timeout/resume.sh

View File

@@ -13,22 +13,5 @@ if [ "${root%%:*}" = "block" ]; then
printf '[ -e "%s" ] && { ln -s "%s" /dev/root 2>/dev/null; rm "$job"; }\n' \ printf '[ -e "%s" ] && { ln -s "%s" /dev/root 2>/dev/null; rm "$job"; }\n' \
"${root#block:}" "${root#block:}" > $hookdir/initqueue/settled/blocksymlink.sh "${root#block:}" "${root#block:}" > $hookdir/initqueue/settled/blocksymlink.sh
# if [ -d /lib/systemd/system/ ]; then
# echo "${root#block:} $NEWROOT ${fstype:-auto} ${rflags:-defaults} 1 1" >> /etc/fstab
# {
# echo '[Unit]'
# echo 'Description=New Root File System'
# echo 'DefaultDependencies=no'
# echo 'Before=initrd-switch-root.service'
# echo '[Mount]'
# echo "What=${root#block:}"
# echo "Where=$NEWROOT"
# } >/lib/systemd/system/${NEWROOT#/}.mount
# mkdir -p /lib/systemd/system/initrd-switch-root.target.requires
# ln -s ../${NEWROOT#/}.mount /lib/systemd/system/initrd-switch-root.target.requires/${NEWROOT#/}.mount
# fi
wait_for_dev "${root#block:}" wait_for_dev "${root#block:}"
fi fi

View File

@@ -23,7 +23,6 @@ check() {
echo "root.journaldev=$journaldev" >> "${initdir}/etc/cmdline.d/95root-jurnaldev.conf" echo "root.journaldev=$journaldev" >> "${initdir}/etc/cmdline.d/95root-jurnaldev.conf"
fi fi
return 0 return 0
} }
depends() { depends() {
@@ -32,8 +31,10 @@ depends() {
install() { install() {
dracut_install umount dracut_install umount
inst_hook cmdline 95 "$moddir/parse-block.sh" if ! dracut_module_included "systemd"; then
inst_hook pre-udev 30 "$moddir/block-genrules.sh" inst_hook cmdline 95 "$moddir/parse-block.sh"
inst_hook mount 99 "$moddir/mount-root.sh" inst_hook pre-udev 30 "$moddir/block-genrules.sh"
inst_hook mount 99 "$moddir/mount-root.sh"
fi
} }

View File

@@ -26,9 +26,10 @@ mount_root() {
fi fi
_rflags_ro="$rflags,ro" _rflags_ro="$rflags,ro"
_rflags_ro="${_rflags_ro##,}"
while ! mount -t ${rootfs} -o "$_rflags_ro" "${root#block:}" "$NEWROOT"; do while ! mount -t ${rootfs} -o "$_rflags_ro" "${root#block:}" "$NEWROOT"; do
warn "Failed to mount -t ${rootfs} -o ${_rflags_ro##,} ${root#block:} $NEWROOT" warn "Failed to mount -t ${rootfs} -o $_rflags_ro ${root#block:} $NEWROOT"
fsck_ask_err fsck_ask_err
done done
@@ -67,7 +68,7 @@ mount_root() {
warn "*** Warning -- the system did not shut down cleanly. " warn "*** Warning -- the system did not shut down cleanly. "
warn "*** Dropping you to a shell; the system will continue" warn "*** Dropping you to a shell; the system will continue"
warn "*** when you leave the shell." warn "*** when you leave the shell."
emergency_shell action_on_fail
fi fi
fsckoptions="$AUTOFSCK_OPT $fsckoptions" fsckoptions="$AUTOFSCK_OPT $fsckoptions"
fi fi

View File

@@ -20,3 +20,5 @@ case "$root" in
root="block:${root}" root="block:${root}"
rootok=1 ;; rootok=1 ;;
esac esac
[ "${root%%:*}" = "block" ] && wait_for_dev "${root#block:}"

View File

@@ -6,35 +6,4 @@ ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="ps_end"
KERNEL=="cciss[0-9]*", IMPORT BLKID KERNEL=="cciss[0-9]*", IMPORT BLKID
KERNEL=="nbd[0-9]*", IMPORT BLKID KERNEL=="nbd[0-9]*", IMPORT BLKID
KERNEL!="md[0-9]*|md_d[0-9]*|md/*", KERNEL!="md*", GOTO="md_end"
# partitions have no md/{array_state,metadata_version}
ENV{DEVTYPE}=="partition", GOTO="md_ignore_state"
# container devices have a metadata version of e.g. 'external:ddf' and
# never leave state 'inactive'
ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state"
TEST!="md/array_state", GOTO="md_end"
ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
LABEL="md_ignore_state"
IMPORT{program}="/sbin/mdadm --detail --export $tempnode"
IMPORT BLKID
OPTIONS+="link_priority=100"
OPTIONS+="watch"
LABEL="md_end"
KERNEL!="dm-[0-9]*", GOTO="ps_end"
ACTION=="add", GOTO="ps_end"
IMPORT{program}="/sbin/dmsetup info -c --nameprefixes --unquoted --rows --noheadings -o name,uuid,suspended,readonly,major,minor,open,tables_loaded,names_using_dev -j%M -m%m"
ENV{DM_NAME}!="?*", GOTO="ps_end"
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="ps_end"
ENV{DM_UUID}=="CRYPT-TEMP-?*", GOTO="ps_end"
ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", GOTO="ps_end"
IMPORT BLKID
LABEL="ps_end" LABEL="ps_end"

View File

@@ -11,17 +11,17 @@ install() {
dracut_install udevadm cat uname blkid \ dracut_install udevadm cat uname blkid \
/etc/udev/udev.conf /etc/udev/udev.conf
[ -d ${initdir}/lib/systemd ] || mkdir -p ${initdir}/lib/systemd [ -d ${initdir}/$systemdutildir ] || mkdir -p ${initdir}/$systemdutildir
for _i in ${systemdutildir}/systemd-udevd ${udevdir}/udevd /lib/systemd/systemd-udevd /sbin/udevd; do for _i in ${systemdutildir}/systemd-udevd ${udevdir}/udevd /sbin/udevd; do
[ -x "$_i" ] || continue [ -x "$_i" ] || continue
inst "$_i" inst "$_i"
if ! [[ -f ${initdir}/lib/systemd/systemd-udevd ]]; then if ! [[ -f ${initdir}${systemdutildir}/systemd-udevd ]]; then
ln -fs "$_i" ${initdir}/lib/systemd/systemd-udevd ln -fs "$_i" ${initdir}${systemdutildir}/systemd-udevd
fi fi
break break
done done
if ! [[ -e ${initdir}/lib/systemd/systemd-udevd ]]; then if ! [[ -e ${initdir}${systemdutildir}/systemd-udevd ]]; then
derror "Cannot find [systemd-]udevd binary!" derror "Cannot find [systemd-]udevd binary!"
exit 1 exit 1
fi fi
@@ -31,17 +31,17 @@ install() {
60-pcmcia.rules \ 60-pcmcia.rules \
50-udev.rules 95-late.rules \ 50-udev.rules 95-late.rules \
50-firmware.rules \ 50-firmware.rules \
80-net-name-slot.rules \
"$moddir/59-persistent-storage.rules" \ "$moddir/59-persistent-storage.rules" \
"$moddir/61-persistent-storage.rules" "$moddir/61-persistent-storage.rules"
inst_dir /run/udev prepare_udev_rules 59-persistent-storage.rules 61-persistent-storage.rules
inst_dir /run/udev/rules.d
{ {
for i in cdrom tape dialout floppy; do for i in cdrom tape dialout floppy; do
if ! egrep -q "^$i:" "$initdir/etc/group" 2>/dev/null; then if ! egrep -q "^$i:" "$initdir/etc/group" 2>/dev/null; then
if ! egrep "^$i:" /etc/group 2>/dev/null; then if ! egrep "^$i:" /etc/group 2>/dev/null; then
case $i in case $i in
cdrom) echo "$i:x:11:";; cdrom) echo "$i:x:11:";;
dialout) echo "$i:x:18:";; dialout) echo "$i:x:18:";;
floppy) echo "$i:x:19:";; floppy) echo "$i:x:19:";;
@@ -70,11 +70,12 @@ install() {
${udevdir}/pcmcia-socket-startup \ ${udevdir}/pcmcia-socket-startup \
${udevdir}/pcmcia-check-broken-cis ${udevdir}/pcmcia-check-broken-cis
dracut_install -o /etc/pcmcia/config.opts
[ -f /etc/arch-release ] && \ [ -f /etc/arch-release ] && \
inst_script "$moddir/load-modules.sh" /lib/udev/load-modules.sh inst_script "$moddir/load-modules.sh" /lib/udev/load-modules.sh
inst_libdir_file "libnss_files*" inst_libdir_file "libnss_files*"
inst_hook pre-udev 10 "$moddir/udev-rules-prepare.sh"
} }

View File

@@ -1,27 +0,0 @@
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
[ -z "$UDEVVERSION" ] && export UDEVVERSION=$(udevadm --version)
for f in /etc/udev/rules.d/*-persistent-storage.rules; do
[ -e "$f" ] || continue
while read line; do
if [ "${line%%IMPORT PATH_ID}" != "$line" ]; then
if [ $UDEVVERSION -ge 174 ]; then
printf '%sIMPORT{builtin}="path_id"\n' "${line%%IMPORT PATH_ID}"
else
printf '%sIMPORT{program}="path_id %%p"\n' "${line%%IMPORT PATH_ID}"
fi
elif [ "${line%%IMPORT BLKID}" != "$line" ]; then
if [ $UDEVVERSION -ge 176 ]; then
printf '%sIMPORT{builtin}="blkid"\n' "${line%%IMPORT BLKID}"
else
printf '%sIMPORT{program}="/sbin/blkid -o udev -p $tempnode"\n' "${line%%IMPORT BLKID}"
fi
else
echo "$line"
fi
done < "${f}" > "${f}.new"
mv "${f}.new" "$f"
done

View File

@@ -5,9 +5,9 @@
check() { check() {
[[ $hostonly ]] || [[ $mount_needs ]] && { [[ $hostonly ]] || [[ $mount_needs ]] && {
for fs in ${host_fs_types[@]}; do for fs in ${host_fs_types[@]}; do
strstr "$fs" "\|9p" && return 0 [[ "$fs" == "9p" ]] && return 0
done done
return 1 return 255
} }
if type -P systemd-detect-virt >/dev/null 2>&1; then if type -P systemd-detect-virt >/dev/null 2>&1; then
@@ -32,7 +32,7 @@ depends() {
} }
installkernel() { installkernel() {
instmods 9p 9pnet_virtio instmods 9p 9pnet_virtio virtio_pci
} }
install() { install() {

View File

@@ -1 +0,0 @@
KERNEL=="zfcp_cfdc", RUN+="/sbin/zfcpconf.sh"

Some files were not shown because too many files have changed in this diff Show More