From 55891eb212c60251265da9619c306e8c3ec3dfff Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 19 Oct 2011 15:30:00 +0200 Subject: [PATCH] update to latest git --- ...-the-output-of-dracut-profile-for-pr.patch | 75 ++++ 0005-add-TEST-16-DMSQUASH.patch | 391 ++++++++++++++++++ ...-s-emergency-shutdown-shutdown-emerg.patch | 22 + 0007-dracut-unset-LD_LIBRARY_PATH.patch | 23 ++ 0008-build-initramfs-prelink-undo-sbin.patch | 25 ++ 0009-dracut-functions-speed-up-inst_dir.patch | 41 ++ ...ypt-ask_for_password-pings-plymouthd.patch | 24 ++ 0011-99base-whitespace-fix.patch | 24 ++ ...-new-function-inst_any-d-dest-f1-f2-.patch | 49 +++ ...o-account-other-ca-bundle-paths-use-.patch | 25 ++ 0014-luks-key-on-ext-dev-wait-for-luks.patch | 95 +++++ ...dline-arg-name-from-rd.luks.tout-to-.patch | 23 ++ 0016-luks-key-on-ext-dev-wait-for-luks.patch | 39 ++ ...s-fix-inst_dir-for-non-absolute-dirs.patch | 22 + ...ncremental-imsm.rules-incremental-ru.patch | 26 ++ ...pec-fixed-rhel-fedora-version-checks.patch | 111 +++++ ...lymouth.enable-kernel-command-line-o.patch | 46 +++ ...-poll-cdroms-if-the-kernel-does-supp.patch | 63 +++ ...nitramfs-unclear-_mpargs-in-instmods.patch | 43 ++ ...ypt.sh-also-accept-the-beginning-of-.patch | 25 ++ ...-and-restore-environment-given-from-.patch | 32 ++ ...-switch_root-breakpoint-to-a-later-p.patch | 30 ++ ...-hmac-checksum-files-can-be-symlinks.patch | 32 ++ 0027-95udev-rules-add-input_id.patch | 21 + ...imple-inst_dir-make-fast-case-faster.patch | 50 +++ ...dules-is-a-specialized-filter_kernel.patch | 52 +++ ...l_kmod_with_fw-make-fast-case-faster.patch | 30 ++ ...lenames-from-stdin-if-no-args-use-it.patch | 239 +++++++++++ 0032-instmods-sanity-for-_mpargs.patch | 38 ++ ...out-egrep-of-FATAL-Module-.-not-foun.patch | 67 +++ ...ot-fail-when-importing-the-original-.patch | 23 ++ 0035-dracut-cp-with-sparse.patch | 36 ++ ...nit-removed-cdrom-polling-reset-code.patch | 29 ++ ...ot-use-blkid-to-determine-fstype-of-.patch | 27 ++ ...ot-load-filesystem-modules-before-mo.patch | 31 ++ ...uash-live-do-not-symlink-to-dev-live.patch | 27 ++ ...-init-remove-dev-root-helper-symlink.patch | 24 ++ ...-use-run-udev-rules.d-for-udev-rules.patch | 54 +++ ...t-securityfs-with-source-securityfs-.patch | 23 ++ ...curityfs-in-a-seperate-dracut-module.patch | 81 ++++ ...curityfs-in-a-seperate-dracut-module.patch | 21 + ...mdraid-adjust-stock-mdadm-udev-rules.patch | 37 ++ ...90mdraid-containers-are-not-runnable.patch | 91 ++++ 0047-90mdraid-fix-adjust-mdraid-cleanup.patch | 66 +++ ...90mdraid-fix-adjust-force-run-script.patch | 136 ++++++ ...0-md-dm-raid-recognize-ddf-container.patch | 140 +++++++ ...just-65-md-rules-and-related-scripts.patch | 200 +++++++++ ...xed-check-on-ext3-filesystem-options.patch | 58 +++ ....sh-fsck-btrfs-via-mounting-like-xfs.patch | 61 +++ ...-inst_rules-do-not-check-std-dirs-fo.patch | 37 ++ 0054-str_replace-fix.patch | 33 ++ ...il-out-early-if-we-don-t-have-to-log.patch | 37 ++ ...t-create-dev-besides-proc-sys-and-so.patch | 24 ++ ...b-export-FSTAB_FILE-before-fsck-call.patch | 26 ++ ...cut-functions-inst_rules-add-missing.patch | 22 + ...ck-precisely-for-supported-contaiers.patch | 46 +++ ...-more-thorough-64-md-raid.rules-edit.patch | 25 ++ 0061-90mdraid-adjust-dev-md-loops.patch | 53 +++ ...ameter-expansion-occurs-before-comma.patch | 38 ++ ...parallelize-block_module-filter-and-.patch | 100 +++++ ...der-mdadm-and-lvm-timeout-operations.patch | 36 ++ ...mdraid_start.sh-fix-path-to-md-sysfs.patch | 22 + ...-module-setup.sh-fixed-sed-arguments.patch | 22 + ...ule-setup.sh-also-search-in-lib-udev.patch | 41 ++ ...pdate-the-documentation-of-no-prefix.patch | 48 +++ 0069-dracut-check-mktemp-return-value.patch | 29 ++ 0070-convert_abs_rel-fixups.patch | 54 +++ 0071-dracut.8-add-missing-lvmconf-info.patch | 44 ++ ...lib-add-ability-to-choose-fsck-tools.patch | 155 +++++++ ...info-about-fs-lib-fsck-configuration.patch | 82 ++++ ...ons-conv-normalize-minor-corrections.patch | 63 +++ ...-dracut.-.xml-s-exisiting-existing-g.patch | 36 ++ ...ule-setup.s-fixed-symlink-for-udevd-.patch | 25 ++ 0077-dracut.conf.5.xml-tag-mismatch-fix.patch | 30 ++ 0078-bash3-compat-patch.patch | 169 ++++++++ 0079-explicitly-verify-bash-version.patch | 30 ++ 0080-dracut-remove-duplicate-options.patch | 26 ++ ...h-fix-dropped-backslashes-in-CMDLINE.patch | 31 ++ ...-fix-log-message-about-root-liveroot.patch | 22 + ...check-root-candidates-more-carefully.patch | 61 +++ ...-netroot-do-not-die-if-arping-failed.patch | 22 + Makefile.git | 6 - dracut.spec | 233 ++++++++++- 83 files changed, 4658 insertions(+), 18 deletions(-) create mode 100644 0004-profile.py-parse-the-output-of-dracut-profile-for-pr.patch create mode 100644 0005-add-TEST-16-DMSQUASH.patch create mode 100644 0006-dracut-functions-s-emergency-shutdown-shutdown-emerg.patch create mode 100644 0007-dracut-unset-LD_LIBRARY_PATH.patch create mode 100644 0008-build-initramfs-prelink-undo-sbin.patch create mode 100644 0009-dracut-functions-speed-up-inst_dir.patch create mode 100644 0010-90crypt-ask_for_password-pings-plymouthd.patch create mode 100644 0011-99base-whitespace-fix.patch create mode 100644 0012-dracut-functions-new-function-inst_any-d-dest-f1-f2-.patch create mode 100644 0013-livenet-take-into-account-other-ca-bundle-paths-use-.patch create mode 100644 0014-luks-key-on-ext-dev-wait-for-luks.patch create mode 100644 0015-crypt-changed-cmdline-arg-name-from-rd.luks.tout-to-.patch create mode 100644 0016-luks-key-on-ext-dev-wait-for-luks.patch create mode 100644 0017-dracut-functions-fix-inst_dir-for-non-absolute-dirs.patch create mode 100644 0018-90mdraid-65-md-incremental-imsm.rules-incremental-ru.patch create mode 100644 0019-dracut.spec-fixed-rhel-fedora-version-checks.patch create mode 100644 0020-50plymouth-add-plymouth.enable-kernel-command-line-o.patch create mode 100644 0021-99base-init-only-poll-cdroms-if-the-kernel-does-supp.patch create mode 100644 0022-build-initramfs-unclear-_mpargs-in-instmods.patch create mode 100644 0023-90crypt-parse-crypt.sh-also-accept-the-beginning-of-.patch create mode 100644 0024-99base-init-save-and-restore-environment-given-from-.patch create mode 100644 0025-99base-init-move-switch_root-breakpoint-to-a-later-p.patch create mode 100644 0026-dracut-functions-hmac-checksum-files-can-be-symlinks.patch create mode 100644 0027-95udev-rules-add-input_id.patch create mode 100644 0028-inst_simple-inst_dir-make-fast-case-faster.patch create mode 100644 0029-filter_kernel_modules-is-a-specialized-filter_kernel.patch create mode 100644 0030-install_kmod_with_fw-make-fast-case-faster.patch create mode 100644 0031-instmods-get-filenames-from-stdin-if-no-args-use-it.patch create mode 100644 0032-instmods-sanity-for-_mpargs.patch create mode 100644 0033-instmods-factor-out-egrep-of-FATAL-Module-.-not-foun.patch create mode 100644 0034-99base-init-do-not-fail-when-importing-the-original-.patch create mode 100644 0035-dracut-cp-with-sparse.patch create mode 100644 0036-99base-init-removed-cdrom-polling-reset-code.patch create mode 100644 0037-dmsquash-live-root-use-blkid-to-determine-fstype-of-.patch create mode 100644 0038-dmsquash-live-root-load-filesystem-modules-before-mo.patch create mode 100644 0039-90dmsquash-live-do-not-symlink-to-dev-live.patch create mode 100644 0040-99base-init-remove-dev-root-helper-symlink.patch create mode 100644 0041-Do-not-use-run-udev-rules.d-for-udev-rules.patch create mode 100644 0042-99base-init-mount-securityfs-with-source-securityfs-.patch create mode 100644 0043-mount-securityfs-in-a-seperate-dracut-module.patch create mode 100644 0044-mount-securityfs-in-a-seperate-dracut-module.patch create mode 100644 0045-90mdraid-adjust-stock-mdadm-udev-rules.patch create mode 100644 0046-90mdraid-containers-are-not-runnable.patch create mode 100644 0047-90mdraid-fix-adjust-mdraid-cleanup.patch create mode 100644 0048-90mdraid-fix-adjust-force-run-script.patch create mode 100644 0049-90-md-dm-raid-recognize-ddf-container.patch create mode 100644 0050-90mdraid-fix-adjust-65-md-rules-and-related-scripts.patch create mode 100644 0051-TEST-40-NBD-relaxed-check-on-ext3-filesystem-options.patch create mode 100644 0052-99fs-lib-fs-lib.sh-fsck-btrfs-via-mounting-like-xfs.patch create mode 100644 0053-dracut-functions-inst_rules-do-not-check-std-dirs-fo.patch create mode 100644 0054-str_replace-fix.patch create mode 100644 0055-dracut-logger-bail-out-early-if-we-don-t-have-to-log.patch create mode 100644 0056-dracut-create-dev-besides-proc-sys-and-so.patch create mode 100644 0057-99fs-lib-export-FSTAB_FILE-before-fsck-call.patch create mode 100644 0058-dracut-functions-inst_rules-add-missing.patch create mode 100644 0059-90mdraid-check-precisely-for-supported-contaiers.patch create mode 100644 0060-90mdraid-more-thorough-64-md-raid.rules-edit.patch create mode 100644 0061-90mdraid-adjust-dev-md-loops.patch create mode 100644 0062-dracut-PATCH-Parameter-expansion-occurs-before-comma.patch create mode 100644 0063-dracut-PATCH-es-parallelize-block_module-filter-and-.patch create mode 100644 0064-order-mdadm-and-lvm-timeout-operations.patch create mode 100644 0065-90mdraid-mdraid_start.sh-fix-path-to-md-sysfs.patch create mode 100644 0066-90mdraid-module-setup.sh-fixed-sed-arguments.patch create mode 100644 0067-95udev-rules-module-setup.sh-also-search-in-lib-udev.patch create mode 100644 0068-update-the-documentation-of-no-prefix.patch create mode 100644 0069-dracut-check-mktemp-return-value.patch create mode 100644 0070-convert_abs_rel-fixups.patch create mode 100644 0071-dracut.8-add-missing-lvmconf-info.patch create mode 100644 0072-fs-lib-add-ability-to-choose-fsck-tools.patch create mode 100644 0073-manuals-add-info-about-fs-lib-fsck-configuration.patch create mode 100644 0074-dracut-functions-conv-normalize-minor-corrections.patch create mode 100644 0075-dracut.-.xml-s-exisiting-existing-g.patch create mode 100644 0076-95udev-rules-module-setup.s-fixed-symlink-for-udevd-.patch create mode 100644 0077-dracut.conf.5.xml-tag-mismatch-fix.patch create mode 100644 0078-bash3-compat-patch.patch create mode 100644 0079-explicitly-verify-bash-version.patch create mode 100644 0080-dracut-remove-duplicate-options.patch create mode 100644 0081-dracut-lib.sh-fix-dropped-backslashes-in-CMDLINE.patch create mode 100644 0082-dmsquash-live-fix-log-message-about-root-liveroot.patch create mode 100644 0083-check-root-candidates-more-carefully.patch create mode 100644 0084-netroot-do-not-die-if-arping-failed.patch delete mode 100644 Makefile.git diff --git a/0004-profile.py-parse-the-output-of-dracut-profile-for-pr.patch b/0004-profile.py-parse-the-output-of-dracut-profile-for-pr.patch new file mode 100644 index 0000000..8971e8d --- /dev/null +++ b/0004-profile.py-parse-the-output-of-dracut-profile-for-pr.patch @@ -0,0 +1,75 @@ +From e7b8fe03e8b76ec4aa4797759cd849fcf792b33c Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 17 Aug 2011 10:08:23 +0200 +Subject: [PATCH] profile.py: parse the output of "dracut --profile" for + profiling + +--- + profile.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 58 insertions(+), 0 deletions(-) + create mode 100644 profile.py + +diff --git a/profile.py b/profile.py +new file mode 100644 +index 0000000..e1d0cab +--- /dev/null ++++ b/profile.py +@@ -0,0 +1,58 @@ ++# ++# parse the output of "dracut --profile" and produce profiling information ++# ++# Copyright 2011 Harald Hoyer ++# Copyright 2011 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 . ++# ++ ++import sys ++import operator ++import re ++loglines = sys.stdin ++ ++logpats = r'[+]+[ \t]+([^ \t]+)[ \t]+([^ \t:]+):[ ]+.*' ++ ++logpat = re.compile(logpats) ++ ++groups = (logpat.match(line) for line in loglines) ++tuples = (g.groups() for g in groups if g) ++ ++def gen_times(t): ++ oldx=None ++ for x in t: ++ fx=float(x[0]) ++ if oldx: ++ #print fx - float(oldx[0]), x[0], x[1], oldx[0], oldx[1] ++ yield (fx - float(oldx[0]), oldx[1]) ++ ++ oldx = x ++ ++colnames = ('time','line') ++ ++log = (dict(zip(colnames,t)) for t in gen_times(tuples)) ++ ++if __name__ == '__main__': ++ e={} ++ for x in log: ++ if not x['line'] in e: ++ e[x['line']] = x['time'] ++ else: ++ e[x['line']] += x['time'] ++ ++ sorted_x = sorted(e.iteritems(), key=operator.itemgetter(1), reverse=True) ++ for x in sorted_x: ++ print x[0], x[1] ++ diff --git a/0005-add-TEST-16-DMSQUASH.patch b/0005-add-TEST-16-DMSQUASH.patch new file mode 100644 index 0000000..f3ec4f3 --- /dev/null +++ b/0005-add-TEST-16-DMSQUASH.patch @@ -0,0 +1,391 @@ +From ea8e543bb86660dd6ccc3048ae9916358b58a6b3 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 17 Aug 2011 13:42:16 +0200 +Subject: [PATCH] add TEST-16-DMSQUASH + +This is a test for Fedora LiveCDs created via livecd-tools +--- + test/TEST-16-DMSQUASH/99-idesymlinks.rules | 8 + + test/TEST-16-DMSQUASH/Makefile | 10 ++ + test/TEST-16-DMSQUASH/create.py | 186 ++++++++++++++++++++++++ + test/TEST-16-DMSQUASH/cryptroot-ask | 6 + + test/TEST-16-DMSQUASH/hard-off.sh | 3 + + test/TEST-16-DMSQUASH/livecd-fedora-minimal.ks | 22 +++ + test/TEST-16-DMSQUASH/test-init | 17 ++ + test/TEST-16-DMSQUASH/test.sh | 66 +++++++++ + 8 files changed, 318 insertions(+), 0 deletions(-) + create mode 100644 test/TEST-16-DMSQUASH/99-idesymlinks.rules + create mode 100644 test/TEST-16-DMSQUASH/Makefile + create mode 100644 test/TEST-16-DMSQUASH/create.py + create mode 100755 test/TEST-16-DMSQUASH/cryptroot-ask + create mode 100755 test/TEST-16-DMSQUASH/hard-off.sh + create mode 100644 test/TEST-16-DMSQUASH/livecd-fedora-minimal.ks + create mode 100755 test/TEST-16-DMSQUASH/test-init + create mode 100755 test/TEST-16-DMSQUASH/test.sh + +diff --git a/test/TEST-16-DMSQUASH/99-idesymlinks.rules b/test/TEST-16-DMSQUASH/99-idesymlinks.rules +new file mode 100644 +index 0000000..d557790 +--- /dev/null ++++ b/test/TEST-16-DMSQUASH/99-idesymlinks.rules +@@ -0,0 +1,8 @@ ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd" ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}" +diff --git a/test/TEST-16-DMSQUASH/Makefile b/test/TEST-16-DMSQUASH/Makefile +new file mode 100644 +index 0000000..bc0ddb6 +--- /dev/null ++++ b/test/TEST-16-DMSQUASH/Makefile +@@ -0,0 +1,10 @@ ++all: ++ @make -s --no-print-directory -C ../.. all ++ @basedir=../.. testdir=../ ./test.sh --all ++setup: ++ @make --no-print-directory -C ../.. all ++ @basedir=../.. testdir=../ ./test.sh --setup ++clean: ++ @basedir=../.. testdir=../ ./test.sh --clean ++run: ++ @basedir=../.. testdir=../ ./test.sh --run +diff --git a/test/TEST-16-DMSQUASH/create.py b/test/TEST-16-DMSQUASH/create.py +new file mode 100644 +index 0000000..15d29ff +--- /dev/null ++++ b/test/TEST-16-DMSQUASH/create.py +@@ -0,0 +1,186 @@ ++#!/usr/bin/python -tt ++# ++# livecd-creator : Creates Live CD based for Fedora. ++# ++# Copyright 2007, Red Hat Inc. ++# ++# 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; version 2 of the License. ++# ++# 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 Library General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++import os ++import os.path ++import sys ++import time ++import optparse ++import logging ++import shutil ++from distutils.dir_util import copy_tree ++ ++import imgcreate ++from imgcreate.fs import makedirs ++ ++class myLiveImageCreator(imgcreate.x86LiveImageCreator): ++ def install(self, repo_urls = {}): ++ copy_tree("root-source", self._instroot) ++ ++ def configure(self): ++ self._create_bootconfig() ++ ++ def _get_kernel_versions(self): ++ ret = {} ++ version=os.uname() ++ version=version[2] ++ ret["kernel-" + version] = [version] ++ return ret ++ ++ def __sanity_check(self): ++ pass ++ ++class Usage(Exception): ++ def __init__(self, msg = None, no_error = False): ++ Exception.__init__(self, msg, no_error) ++ ++def parse_options(args): ++ parser = optparse.OptionParser() ++ ++ imgopt = optparse.OptionGroup(parser, "Image options", ++ "These options define the created image.") ++ imgopt.add_option("-c", "--config", type="string", dest="kscfg", ++ help="Path or url to kickstart config file") ++ imgopt.add_option("-b", "--base-on", type="string", dest="base_on", ++ help="Add packages to an existing live CD iso9660 image.") ++ imgopt.add_option("-f", "--fslabel", type="string", dest="fslabel", ++ help="File system label (default based on config name)") ++ # Provided for img-create compatibility ++ imgopt.add_option("-n", "--name", type="string", dest="fslabel", ++ help=optparse.SUPPRESS_HELP) ++ imgopt.add_option("", "--image-type", type="string", dest="image_type", ++ help=optparse.SUPPRESS_HELP) ++ imgopt.add_option("", "--compression-type", type="string", dest="compress_type", ++ help="Compression type recognized by mksquashfs " ++ "(default xz needs a 2.6.38+ kernel, gzip works " ++ "with all kernels, lzo needs a 2.6.36+ kernel, lzma " ++ "needs custom kernel.) Set to 'None' to force read " ++ "from base_on.", ++ default="xz") ++ imgopt.add_option("", "--releasever", type="string", dest="releasever", ++ default=None, ++ help="Value to substitute for $releasever in kickstart repo urls") ++ parser.add_option_group(imgopt) ++ ++ # options related to the config of your system ++ sysopt = optparse.OptionGroup(parser, "System directory options", ++ "These options define directories used on your system for creating the live image") ++ sysopt.add_option("-t", "--tmpdir", type="string", ++ dest="tmpdir", default="/var/tmp", ++ help="Temporary directory to use (default: /var/tmp)") ++ sysopt.add_option("", "--cache", type="string", ++ dest="cachedir", default=None, ++ help="Cache directory to use (default: private cache") ++ parser.add_option_group(sysopt) ++ ++ imgcreate.setup_logging(parser) ++ ++ # debug options not recommended for "production" images ++ # Start a shell in the chroot for post-configuration. ++ parser.add_option("-l", "--shell", action="store_true", dest="give_shell", ++ help=optparse.SUPPRESS_HELP) ++ # Don't compress the image. ++ parser.add_option("-s", "--skip-compression", action="store_true", dest="skip_compression", ++ help=optparse.SUPPRESS_HELP) ++ parser.add_option("", "--skip-minimize", action="store_true", dest="skip_minimize", ++ help=optparse.SUPPRESS_HELP) ++ ++ (options, args) = parser.parse_args() ++ ++ # Pretend to be a image-creator if called with that name ++ options.image_type = 'livecd' ++ if options.image_type not in ('livecd', 'image'): ++ raise Usage("'%s' is a recognized image type" % options.image_type) ++ ++ # image-create compatibility: Last argument is kickstart file ++ if len(args) == 1: ++ options.kscfg = args.pop() ++ if len(args): ++ raise Usage("Extra arguments given") ++ ++ if options.base_on and not os.path.isfile(options.base_on): ++ raise Usage("Image file '%s' does not exist" %(options.base_on,)) ++ if options.image_type == 'livecd': ++ if options.fslabel and len(options.fslabel) > imgcreate.FSLABEL_MAXLEN: ++ raise Usage("CD labels are limited to 32 characters") ++ if options.fslabel and options.fslabel.find(" ") != -1: ++ raise Usage("CD labels cannot contain spaces.") ++ ++ return options ++ ++def main(): ++ try: ++ options = parse_options(sys.argv[1:]) ++ except Usage, (msg, no_error): ++ if no_error: ++ out = sys.stdout ++ ret = 0 ++ else: ++ out = sys.stderr ++ ret = 2 ++ if msg: ++ print >> out, msg ++ return ret ++ ++ if os.geteuid () != 0: ++ print >> sys.stderr, "You must run %s as root" % sys.argv[0] ++ return 1 ++ ++ if options.fslabel: ++ fslabel = options.fslabel ++ name = fslabel ++ else: ++ name = "livecd" ++ ++ fslabel = "LiveCD" ++ logging.info("Using label '%s' and name '%s'" % (fslabel, name)) ++ ++ ks = imgcreate.read_kickstart(options.kscfg) ++ ++ creator = myLiveImageCreator(ks, name, ++ fslabel=fslabel, ++ releasever=options.releasever, ++ tmpdir=os.path.abspath(options.tmpdir)) ++ ++ creator.compress_type = options.compress_type ++ creator.skip_compression = options.skip_compression ++ creator.skip_minimize = options.skip_minimize ++ if options.cachedir: ++ options.cachedir = os.path.abspath(options.cachedir) ++ ++ try: ++ creator.mount(options.base_on, options.cachedir) ++ creator.install() ++ creator.configure() ++ if options.give_shell: ++ print "Launching shell. Exit to continue." ++ print "----------------------------------" ++ creator.launch_shell() ++ creator.unmount() ++ creator.package() ++ except imgcreate.CreatorError, e: ++ logging.error(u"Error creating Live CD : %s" % e) ++ return 1 ++ finally: ++ creator.cleanup() ++ ++ return 0 ++ ++if __name__ == "__main__": ++ sys.exit(main()) +diff --git a/test/TEST-16-DMSQUASH/cryptroot-ask b/test/TEST-16-DMSQUASH/cryptroot-ask +new file mode 100755 +index 0000000..db27c5b +--- /dev/null ++++ b/test/TEST-16-DMSQUASH/cryptroot-ask +@@ -0,0 +1,6 @@ ++#!/bin/sh ++ ++[ -b /dev/mapper/$2 ] && exit 0 ++echo -n test >/keyfile ++/sbin/cryptsetup luksOpen $1 $2 /dev/console 2>&1 ++echo "dracut-root-block-success" >/dev/sda ++export TERM=linux ++export PS1='initramfs-test:\w\$ ' ++[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab ++[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab ++stty sane ++echo "made it to the rootfs!" ++strstr "$CMDLINE" "rd.shell" && sh -i ++echo "Powering down." ++mount -n -o remount,ro / ++poweroff -f +diff --git a/test/TEST-16-DMSQUASH/test.sh b/test/TEST-16-DMSQUASH/test.sh +new file mode 100755 +index 0000000..5d8075c +--- /dev/null ++++ b/test/TEST-16-DMSQUASH/test.sh +@@ -0,0 +1,66 @@ ++#!/bin/bash ++TEST_DESCRIPTION="root filesystem on a LiveCD dmsquash filesystem" ++ ++KVERSION=${KVERSION-$(uname -r)} ++ ++# Uncomment this to debug failures ++#DEBUGFAIL="rd.shell rd.break" ++ ++test_run() { ++ $testdir/run-qemu -boot order=d -cdrom livecd.iso -hda root.img -m 256M -nographic \ ++ -net none -kernel /boot/vmlinuz-$KVERSION \ ++ -append "root=live:CDLABEL=LiveCD live rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \ ++ -initrd initramfs.testing ++ grep -m 1 -q dracut-root-block-success root.img || return 1 ++} ++ ++test_setup() { ++ mkdir -p overlay ++ ( ++ initdir=overlay ++ . $basedir/dracut-functions ++ dracut_install poweroff shutdown ++ inst_hook emergency 000 ./hard-off.sh ++ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules ++ ) ++ ++ dd if=/dev/null of=root.img seek=100 ++ ++ sudo $basedir/dracut -l -i overlay / \ ++ -a "debug" \ ++ -d "piix ide-gd_mod ata_piix ext3 sd_mod" \ ++ -f initramfs.testing $KVERSION || return 1 ++ ++ mkdir -p root-source ++ kernel=$KVERSION ++ # Create what will eventually be our root filesystem onto an overlay ++ ( ++ initdir=root-source ++ . $basedir/dracut-functions ++ dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \ ++ /lib/terminfo/l/linux mount dmesg ifconfig dhclient mkdir cp ping dhclient \ ++ umount strace less ++ inst "$basedir/modules.d/40network/dhclient-script" "/sbin/dhclient-script" ++ inst "$basedir/modules.d/40network/ifup" "/sbin/ifup" ++ dracut_install grep syslinux isohybrid ++ for f in /usr/share/syslinux/*; do ++ inst_simple "$f" ++ done ++ inst ./test-init /sbin/init ++ inst ./initramfs.testing "/boot/initramfs-$KVERSION.img" ++ inst /boot/vmlinuz-$KVERSION ++ find_binary plymouth >/dev/null && dracut_install plymouth ++ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp ) ++ cp -a /etc/ld.so.conf* $initdir/etc ++ sudo ldconfig -r "$initdir" ++ ) ++ python create.py -d -c livecd-fedora-minimal.ks ++ exit 0 ++} ++ ++test_cleanup() { ++ rm -fr overlay root-source ++ rm -f root.img initramfs.makeroot initramfs.testing livecd.iso ++} ++ ++. $testdir/test-functions diff --git a/0006-dracut-functions-s-emergency-shutdown-shutdown-emerg.patch b/0006-dracut-functions-s-emergency-shutdown-shutdown-emerg.patch new file mode 100644 index 0000000..9031e67 --- /dev/null +++ b/0006-dracut-functions-s-emergency-shutdown-shutdown-emerg.patch @@ -0,0 +1,22 @@ +From d670e21998f8b13c6b266e29bcc80db55d19f8c8 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 17 Aug 2011 17:40:59 +0200 +Subject: [PATCH] dracut-functions: s/emergency-shutdown/shutdown-emergency/g + +--- + dracut-functions | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 936d3c3..241d89a 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -518,7 +518,7 @@ inst() { + + [[ $hookdirs ]] || { + hookdirs="cmdline pre-udev pre-trigger netroot initqueue pre-mount" +- hookdirs+=" pre-pivot mount emergency emergency-shutdown shutdown" ++ hookdirs+=" pre-pivot mount emergency shutdown-emergency shutdown" + export hookdirs + } + diff --git a/0007-dracut-unset-LD_LIBRARY_PATH.patch b/0007-dracut-unset-LD_LIBRARY_PATH.patch new file mode 100644 index 0000000..642f415 --- /dev/null +++ b/0007-dracut-unset-LD_LIBRARY_PATH.patch @@ -0,0 +1,23 @@ +From d619fb5e1c07f15eb6b9156a389fad85e2924e57 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 19 Aug 2011 08:08:18 +0200 +Subject: [PATCH] dracut: unset LD_LIBRARY_PATH + +LD_LIBRARY_PATH is not set in the initramfs, so it should not be set +while finding our libraries. +--- + dracut | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/dracut b/dracut +index cf27b23..dfa71a1 100755 +--- a/dracut ++++ b/dracut +@@ -265,6 +265,7 @@ fi + + PATH=/sbin:/bin:/usr/sbin:/usr/bin + export PATH ++unset LD_LIBRARY_PATH + + [[ $debug ]] && { + export PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): '; diff --git a/0008-build-initramfs-prelink-undo-sbin.patch b/0008-build-initramfs-prelink-undo-sbin.patch new file mode 100644 index 0000000..a4e6247 --- /dev/null +++ b/0008-build-initramfs-prelink-undo-sbin.patch @@ -0,0 +1,25 @@ +From bc313467bdb49605aaddfec67823cab72396c29b Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Thu, 18 Aug 2011 20:55:35 -0700 +Subject: [PATCH] build initramfs: prelink --undo /sbin/* + +Fix a typo (omitting the 's' in "sbin") which caused +"prelink --undo" twice on /bin/*, and +"prelink --undo" omitted for /sbin/*. +--- + dracut | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut b/dracut +index dfa71a1..fd36805 100755 +--- a/dracut ++++ b/dracut +@@ -643,7 +643,7 @@ type hardlink &>/dev/null && { + + if strstr "$modules_loaded" " fips " && command -v prelink >/dev/null; then + for i in $initdir/bin/* \ +- $initdir/bin/* \ ++ $initdir/sbin/* \ + $initdir/usr/bin/* \ + $initdir/usr/sbin/*; do + [ -x $i ] && prelink -u $i &>/dev/null diff --git a/0009-dracut-functions-speed-up-inst_dir.patch b/0009-dracut-functions-speed-up-inst_dir.patch new file mode 100644 index 0000000..4105200 --- /dev/null +++ b/0009-dracut-functions-speed-up-inst_dir.patch @@ -0,0 +1,41 @@ +From a76dc2780143a4b04eb33a6699ec2ca7a7898b65 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 19 Aug 2011 10:24:49 +0200 +Subject: [PATCH] dracut-functions: speed up inst_dir() + +--- + dracut-functions | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 241d89a..d7f2e5f 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -274,18 +274,18 @@ inst_dir() { + local _oldifs="$IFS" + local _part + local _dir="$1" +- IFS="/" +- set -- $_dir +- IFS=$_oldifs +- _dir="$@" ++ ++ # fast out + [[ -e ${initdir}$_dir ]] && return 0 + +- # iterate over parent directories +- for _part in $_dir; do +- [[ $_part ]] || continue +- _file="$_file/$_part" +- [[ -e ${initdir}$_file ]] && continue ++ _part=${_dir%/*} ++ while ! [[ -e "${initdir}${_part}" ]]; do ++ _dir="$_part $_dir" ++ _part=${_part%/*} ++ done + ++ # iterate over parent directories ++ for _file in $_dir; do + if [[ -L $_file ]]; then + # create link as the original + local target=$(readlink -f "$_file") diff --git a/0010-90crypt-ask_for_password-pings-plymouthd.patch b/0010-90crypt-ask_for_password-pings-plymouthd.patch new file mode 100644 index 0000000..83bc6f2 --- /dev/null +++ b/0010-90crypt-ask_for_password-pings-plymouthd.patch @@ -0,0 +1,24 @@ +From 581dd40e73fb93002202e15186a9e65e0b449eb2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20=C5=BBo=C5=82nowski?= +Date: Thu, 18 Aug 2011 15:55:57 +0200 +Subject: [PATCH] 90crypt: ask_for_password pings plymouthd + +If plymouthd is not started, ask_for_password shouldn't try to prompt +for password with GUI and should use text prompt instead. +--- + modules.d/90crypt/crypt-lib.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90crypt/crypt-lib.sh b/modules.d/90crypt/crypt-lib.sh +index 2797a7a..69f14d0 100755 +--- a/modules.d/90crypt/crypt-lib.sh ++++ b/modules.d/90crypt/crypt-lib.sh +@@ -47,7 +47,7 @@ ask_for_password() { + + { flock -s 9; + # Prompt for password with plymouth, if installed and running. +- if [ -x /bin/plymouth ]; then ++ if [ -x /bin/plymouth ] && /bin/plymouth --ping; then + /bin/plymouth ask-for-password \ + --prompt "$ply_prompt" --number-of-tries=$ply_tries \ + --command="$ply_cmd" diff --git a/0011-99base-whitespace-fix.patch b/0011-99base-whitespace-fix.patch new file mode 100644 index 0000000..c5d70e3 --- /dev/null +++ b/0011-99base-whitespace-fix.patch @@ -0,0 +1,24 @@ +From 641d84a4ec742feb7f2851bdebe6f376e15a68b6 Mon Sep 17 00:00:00 2001 +From: Leho Kraav +Date: Mon, 22 Aug 2011 11:54:47 +0300 +Subject: [PATCH] 99base: whitespace fix + +--- + modules.d/99base/initqueue | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/99base/initqueue b/modules.d/99base/initqueue +index 21b1c61..2c06a0b 100755 +--- a/modules.d/99base/initqueue ++++ b/modules.d/99base/initqueue +@@ -19,8 +19,8 @@ while [ $# -gt 0 ]; do + qname="/settled";; + --finished) + qname="/finished";; +- --timeout) +- qname="/timeout";; ++ --timeout) ++ qname="/timeout";; + --unique) + unique="yes";; + --name) diff --git a/0012-dracut-functions-new-function-inst_any-d-dest-f1-f2-.patch b/0012-dracut-functions-new-function-inst_any-d-dest-f1-f2-.patch new file mode 100644 index 0000000..a9558a5 --- /dev/null +++ b/0012-dracut-functions-new-function-inst_any-d-dest-f1-f2-.patch @@ -0,0 +1,49 @@ +From 3378a54f15016c86e4c8c2ecafcaa45f0119fc00 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20=C5=BBo=C5=82nowski?= +Date: Sun, 21 Aug 2011 12:47:13 +0200 +Subject: [PATCH] dracut-functions: new function: inst_any [-d dest] f1 [f2 + [f3 ...]] + +--- + dracut-functions | 28 ++++++++++++++++++++++++++++ + 1 files changed, 28 insertions(+), 0 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index d7f2e5f..43a6843 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -537,6 +537,34 @@ inst_hook() { + inst_simple "$3" "/lib/dracut/hooks/${1}/${2}${3##*/}" + } + ++# install any of listed files ++# ++# If first argument is '-d' and second some destination path, first accessible ++# source is installed into this path, otherwise it will installed in the same ++# path as source. If none of listed files was installed, function return 1. ++# On first successful installation it returns with 0 status. ++# ++# Example: ++# ++# inst_any -d /bin/foo /bin/bar /bin/baz ++# ++# Lets assume that /bin/baz exists, so it will be installed as /bin/foo in ++# initramfs. ++inst_any() { ++ local to f ++ ++ [[ $1 = '-d' ]] && to="$2" && shift 2 ++ ++ for f in "$@"; do ++ if [[ -e $f ]]; then ++ [[ $to ]] && inst "$f" "$to" && return 0 ++ inst "$f" && return 0 ++ fi ++ done ++ ++ return 1 ++} ++ + dracut_install() { + local _optional=no + if [[ $1 = '-o' ]]; then diff --git a/0013-livenet-take-into-account-other-ca-bundle-paths-use-.patch b/0013-livenet-take-into-account-other-ca-bundle-paths-use-.patch new file mode 100644 index 0000000..1f7adbe --- /dev/null +++ b/0013-livenet-take-into-account-other-ca-bundle-paths-use-.patch @@ -0,0 +1,25 @@ +From 07aeaae356cf001ebe527a5e106e04b5df6aca4c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20=C5=BBo=C5=82nowski?= +Date: Sun, 21 Aug 2011 12:47:14 +0200 +Subject: [PATCH] livenet: take into account other ca-bundle paths; use + inst_any for that + +--- + modules.d/90livenet/module-setup.sh | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90livenet/module-setup.sh b/modules.d/90livenet/module-setup.sh +index 3ae72de..b166859 100755 +--- a/modules.d/90livenet/module-setup.sh ++++ b/modules.d/90livenet/module-setup.sh +@@ -15,7 +15,9 @@ depends() { + install() { + dracut_install wget + mkdir -m 0755 -p "$initdir/etc/ssl/certs" +- if ! inst_simple /etc/ssl/certs/ca-bundle.crt; then ++ if ! inst_any -t /etc/ssl/certs/ca-bundle.crt \ ++ /etc/ssl/certs/ca-bundle.crt \ ++ /etc/ssl/certs/ca-certificates.crt; then + dwarn "Couldn't find SSL CA cert bundle; HTTPS won't work." + fi + diff --git a/0014-luks-key-on-ext-dev-wait-for-luks.patch b/0014-luks-key-on-ext-dev-wait-for-luks.patch new file mode 100644 index 0000000..9979326 --- /dev/null +++ b/0014-luks-key-on-ext-dev-wait-for-luks.patch @@ -0,0 +1,95 @@ +From c70f6415f8df27565540a1ec1b3a65c09ce3253b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Przemys=C5=82aw=20Rudy?= +Date: Tue, 7 Jun 2011 20:22:51 +0200 +Subject: [PATCH] luks key on ext dev - wait for luks + +This asks for the luks passphrase if key is not found for defined time (if defined with rd.luks.tout cmd line): + + modules.d/90crypt/cryptroot-ask.sh | 21 ++++++++++++++++++--- + modules.d/90crypt/parse-crypt.sh | 5 +++-- + 2 files changed, 21 insertions(+), 5 deletions(-) +--- + modules.d/90crypt/cryptroot-ask.sh | 21 ++++++++++++++++++--- + modules.d/90crypt/parse-crypt.sh | 5 +++-- + 2 files changed, 21 insertions(+), 5 deletions(-) + +diff --git a/modules.d/90crypt/cryptroot-ask.sh b/modules.d/90crypt/cryptroot-ask.sh +index f8e1bd8..9b8f8c2 100755 +--- a/modules.d/90crypt/cryptroot-ask.sh ++++ b/modules.d/90crypt/cryptroot-ask.sh +@@ -22,6 +22,9 @@ NEWROOT=${NEWROOT:-"/sysroot"} + # default luksname - luks-UUID + luksname=$2 + ++# fallback to passphrase ++ask_passphrase=1 ++ + # if device name is /dev/dm-X, convert to /dev/mapper/name + if [ "${1##/dev/dm-}" != "$1" ]; then + device="/dev/mapper/$(dmsetup info -c --noheadings -o name "$1")" +@@ -63,12 +66,21 @@ fi + + info "luksOpen $device $luksname" + +-if [ -n "$(getarg rd.luks.key)" ]; then ++while [ -n "$(getarg rd.luks.key)" ]; do + if tmp=$(getkey /tmp/luks.keys $device); then + keydev="${tmp%%:*}" + keypath="${tmp#*:}" + else +- info "No key found for $device. Will try later." ++ if [ $# -eq 3 ]; then ++ if [ $3 -eq 0 ]; then ++ info "No key found for $device. Fallback to passphrase mode." ++ break ++ fi ++ info "No key found for $device. Will try $3 time(s) more later." ++ set -- "$1" "$2" "$(($3 - 1))" ++ else ++ info "No key found for $device. Will try later." ++ fi + initqueue --unique --onetime --settled \ + --name cryptroot-ask-$luksname \ + $(command -v cryptroot-ask) "$@" +@@ -80,7 +92,10 @@ if [ -n "$(getarg rd.luks.key)" ]; then + readkey "$keypath" "$keydev" "$device" \ + | cryptsetup -d - luksOpen "$device" "$luksname" + unset keypath keydev +-else ++ ask_passphrase=0 ++ break ++done ++if [ $ask_passphrase -ne 0 ]; then + luks_open="$(command -v cryptsetup) luksOpen" + ask_for_password --ply-tries 5 \ + --ply-cmd "$luks_open -T1 $device $luksname" \ +diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh +index 7ec232a..c76fb23 100755 +--- a/modules.d/90crypt/parse-crypt.sh ++++ b/modules.d/90crypt/parse-crypt.sh +@@ -11,6 +11,7 @@ else + } > /etc/udev/rules.d/70-luks.rules.new + + LUKS=$(getargs rd.luks.uuid rd_LUKS_UUID) ++ tout=$(getarg rd.luks.tout) + + if [ -n "$LUKS" ]; then + for luksid in $LUKS; do +@@ -20,7 +21,7 @@ else + printf -- 'ENV{ID_FS_UUID}=="*%s*", ' $luksid + printf -- 'RUN+="%s --unique --onetime ' $(command -v initqueue) + printf -- '--name cryptroot-ask-%%k %s ' $(command -v cryptroot-ask) +- printf -- '$env{DEVNAME} luks-$env{ID_FS_UUID}"\n' ++ printf -- '$env{DEVNAME} luks-$env{ID_FS_UUID} %s"\n' $tout + } >> /etc/udev/rules.d/70-luks.rules.new + + printf -- '[ -e /dev/disk/by-uuid/*%s* ]\n' $luksid \ +@@ -34,7 +35,7 @@ else + { + printf -- 'ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="%s ' $(command -v initqueue) + printf -- '--unique --onetime --name cryptroot-ask-%%k ' +- printf -- '%s $env{DEVNAME} luks-$env{ID_FS_UUID}"\n' $(command -v cryptroot-ask) ++ printf -- '%s $env{DEVNAME} luks-$env{ID_FS_UUID} %s"\n' $(command -v cryptroot-ask) $tout + } >> /etc/udev/rules.d/70-luks.rules.new + fi + diff --git a/0015-crypt-changed-cmdline-arg-name-from-rd.luks.tout-to-.patch b/0015-crypt-changed-cmdline-arg-name-from-rd.luks.tout-to-.patch new file mode 100644 index 0000000..12b5bf9 --- /dev/null +++ b/0015-crypt-changed-cmdline-arg-name-from-rd.luks.tout-to-.patch @@ -0,0 +1,23 @@ +From 1f735f82cc55273d6d84ae129c482dc180c0e944 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20=C5=BBo=C5=82nowski?= +Date: Sun, 21 Aug 2011 10:26:40 +0200 +Subject: [PATCH] crypt: changed cmdline arg name from rd.luks.tout to + rd.luks.key.tout + +--- + modules.d/90crypt/parse-crypt.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh +index c76fb23..ff86700 100755 +--- a/modules.d/90crypt/parse-crypt.sh ++++ b/modules.d/90crypt/parse-crypt.sh +@@ -11,7 +11,7 @@ else + } > /etc/udev/rules.d/70-luks.rules.new + + LUKS=$(getargs rd.luks.uuid rd_LUKS_UUID) +- tout=$(getarg rd.luks.tout) ++ tout=$(getarg rd.luks.key.tout) + + if [ -n "$LUKS" ]; then + for luksid in $LUKS; do diff --git a/0016-luks-key-on-ext-dev-wait-for-luks.patch b/0016-luks-key-on-ext-dev-wait-for-luks.patch new file mode 100644 index 0000000..d118335 --- /dev/null +++ b/0016-luks-key-on-ext-dev-wait-for-luks.patch @@ -0,0 +1,39 @@ +From 2e0c003435bbc0751cdf7466c0faebe7bfc7445b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Przemys=C5=82aw=20Rudy?= +Date: Mon, 22 Aug 2011 11:27:00 +0200 +Subject: [PATCH] luks key on ext dev - wait for luks + +This really waits for the luks mapper device, so luksOpen can do it job +--- + modules.d/90crypt/parse-crypt.sh | 18 ++++++++++++++++-- + 1 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh +index ff86700..1e78aa9 100755 +--- a/modules.d/90crypt/parse-crypt.sh ++++ b/modules.d/90crypt/parse-crypt.sh +@@ -24,8 +24,22 @@ else + printf -- '$env{DEVNAME} luks-$env{ID_FS_UUID} %s"\n' $tout + } >> /etc/udev/rules.d/70-luks.rules.new + +- printf -- '[ -e /dev/disk/by-uuid/*%s* ]\n' $luksid \ +- >> $hookdir/initqueue/finished/90-crypt.sh ++ ++ [ -e $hookdir/initqueue/finished/90-crypt.sh ] || \ ++ { ++ printf -- 'UUIDS=:\n' ++ printf -- 'for dm in /dev/dm-*; do\n' ++ printf -- '[ -e "$dm" ] || exit 1\n' ++ printf -- 'dmid=`/sbin/dmsetup info -c -o uuid --noheadings "$dm"`\n' ++ printf -- 'uuid=${dmid#CRYPT-LUKS*-}\n' ++ printf -- '[ "x$uuid" = "x$dmid" ] && continue\n' ++ printf -- 'UUIDS="${UUIDS}${uuid%%%%-*}:"\n' ++ printf -- 'done\n' ++ } > $hookdir/initqueue/finished/90-crypt.sh ++ uuid=$luksid ++ while [ "$uuid" != "${uuid#*-}" ]; do uuid=${uuid%%-*}${uuid#*-}; done ++ printf -- '[ "x${UUIDS#*:%s:}" != "x$UUIDS" ] || exit 1\n' $uuid >> $hookdir/initqueue/finished/90-crypt.sh ++ + { + printf -- '[ -e /dev/disk/by-uuid/*%s* ] || ' $luksid + printf -- 'warn "crypto LUKS UUID "%s" not found"\n' $luksid diff --git a/0017-dracut-functions-fix-inst_dir-for-non-absolute-dirs.patch b/0017-dracut-functions-fix-inst_dir-for-non-absolute-dirs.patch new file mode 100644 index 0000000..5c8fabc --- /dev/null +++ b/0017-dracut-functions-fix-inst_dir-for-non-absolute-dirs.patch @@ -0,0 +1,22 @@ +From 8cf621ffd98984f44e2861969d9ed58be7233d4e Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 23 Aug 2011 12:50:03 +0200 +Subject: [PATCH] dracut-functions: fix inst_dir() for non-absolute dirs + +--- + dracut-functions | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 43a6843..a3340e4 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -279,7 +279,7 @@ inst_dir() { + [[ -e ${initdir}$_dir ]] && return 0 + + _part=${_dir%/*} +- while ! [[ -e "${initdir}${_part}" ]]; do ++ while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}${_part}" ]]; do + _dir="$_part $_dir" + _part=${_part%/*} + done diff --git a/0018-90mdraid-65-md-incremental-imsm.rules-incremental-ru.patch b/0018-90mdraid-65-md-incremental-imsm.rules-incremental-ru.patch new file mode 100644 index 0000000..66d1aa3 --- /dev/null +++ b/0018-90mdraid-65-md-incremental-imsm.rules-incremental-ru.patch @@ -0,0 +1,26 @@ +From 1073b9f93acb76993b4cc41b896325d1041841d1 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 24 Aug 2011 16:35:33 +0200 +Subject: [PATCH] 90mdraid/65-md-incremental-imsm.rules: incremental run to + settled + +move incremental run to settled queue again + +https://bugzilla.redhat.com/show_bug.cgi?id=732967 +--- + modules.d/90mdraid/65-md-incremental-imsm.rules | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index 4fc8428..7c1d503 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -29,7 +29,7 @@ LABEL="do_md_inc" + ENV{rd_MDADMCONF}!="?*", GOTO="md_auto_end" + + RUN+="/sbin/initqueue --finished --unique --name md_finished /sbin/md_finished.sh" +-RUN+="/sbin/initqueue --timeout --onetime --unique /sbin/mdadm_auto" ++RUN+="/sbin/initqueue --settled --onetime --unique /sbin/mdadm_auto" + + GOTO="md_inc_end" + diff --git a/0019-dracut.spec-fixed-rhel-fedora-version-checks.patch b/0019-dracut.spec-fixed-rhel-fedora-version-checks.patch new file mode 100644 index 0000000..be60fc6 --- /dev/null +++ b/0019-dracut.spec-fixed-rhel-fedora-version-checks.patch @@ -0,0 +1,111 @@ +From 82dfee9960e6285bd2811c406f4b9347dcf4e733 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 29 Aug 2011 13:11:49 +0200 +Subject: [PATCH] dracut.spec: fixed rhel/fedora version checks + +--- + dracut.spec | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/dracut.spec b/dracut.spec +index 4a71942..76f4fe1 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -11,7 +11,7 @@ Version: xxx + Release: xxx + + Summary: Initramfs generator using udev +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + Group: System Environment/Base + %endif + %if 0%{?suse_version} +@@ -25,14 +25,14 @@ Source0: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar + + BuildArch: noarch + BuildRequires: dash bash +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + %endif + %if 0%{?suse_version} + BuildRoot: %{_tmppath}/%{name}-%{version}-build + %endif + +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + BuildRequires: docbook-style-xsl docbook-dtds libxslt + %endif + +@@ -73,7 +73,7 @@ Requires: sed + Requires: tar + Requires: udev + +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + Requires: util-linux >= 2.16 + Requires: initscripts >= 8.63-1 + Requires: plymouth >= 0.8.0-0.2009.29.09.19.1 +@@ -101,7 +101,7 @@ Requires: nbd + Requires: iproute + Requires: bridge-utils + +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + Requires: iscsi-initiator-utils + Requires: nfs-utils + Requires: dhclient +@@ -119,7 +119,7 @@ Provides: dracut-generic = %{version}-%{release} + This package requires everything which is needed to build a generic + all purpose initramfs with network support with dracut. + +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + %package fips + Summary: Dracut modules to build a dracut initramfs with an integrity check + Requires: %{name} = %{version}-%{release} +@@ -160,7 +160,7 @@ This package contains tools to assemble the local initrd and host configuration. + make + + %install +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + rm -rf $RPM_BUILD_ROOT + %endif + make install DESTDIR=$RPM_BUILD_ROOT sbindir=/sbin \ +@@ -168,7 +168,7 @@ make install DESTDIR=$RPM_BUILD_ROOT sbindir=/sbin \ + + echo %{name}-%{version}-%{release} > $RPM_BUILD_ROOT/%{_datadir}/dracut/modules.d/10rpmversion/dracut-version + +-%if 0%{?fedora} == 0 ++%if 0%{?fedora} == 0 && 0%{?rhel} == 0 + rm -fr $RPM_BUILD_ROOT/%{_datadir}/dracut/modules.d/01fips + %endif + +@@ -181,7 +181,7 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log + touch $RPM_BUILD_ROOT%{_localstatedir}/log/dracut.log + mkdir -p $RPM_BUILD_ROOT%{_sharedstatedir}/initramfs + +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + 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/fips.conf.example $RPM_BUILD_ROOT/etc/dracut.conf.d/40-fips.conf + %endif +@@ -214,7 +214,7 @@ rm -rf $RPM_BUILD_ROOT + %{_datadir}/dracut/dracut-functions + %{_datadir}/dracut/dracut-logger + %config(noreplace) /etc/dracut.conf +-%if 0%{?fedora} || 0%{?suse_version} ++%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} > 6 + %config /etc/dracut.conf.d/01-dist.conf + %endif + %dir /etc/dracut.conf.d +@@ -271,7 +271,7 @@ rm -rf $RPM_BUILD_ROOT + %{_datadir}/dracut/modules.d/45ifcfg + %{_datadir}/dracut/modules.d/95znet + +-%if 0%{?fedora} ++%if 0%{?fedora} || 0%{?rhel} > 6 + %files fips + %defattr(-,root,root,0755) + %{_datadir}/dracut/modules.d/01fips diff --git a/0020-50plymouth-add-plymouth.enable-kernel-command-line-o.patch b/0020-50plymouth-add-plymouth.enable-kernel-command-line-o.patch new file mode 100644 index 0000000..f6042b3 --- /dev/null +++ b/0020-50plymouth-add-plymouth.enable-kernel-command-line-o.patch @@ -0,0 +1,46 @@ +From a3381af1dedf5325197dba00fb24ca36376f4c23 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 29 Aug 2011 18:30:26 +0200 +Subject: [PATCH] 50plymouth: add plymouth.enable kernel command line option + +--- + dracut.kernel.7.xml | 8 +++++++- + modules.d/50plymouth/plymouth-pretrigger.sh | 2 +- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/dracut.kernel.7.xml b/dracut.kernel.7.xml +index 894b640..b6e59e6 100644 +--- a/dracut.kernel.7.xml ++++ b/dracut.kernel.7.xml +@@ -696,11 +696,17 @@ rd.znet=ctc,0.0.0600,0.0.0601,0.0.0602,protocol=bar + Plymouth Boot Splash + + +- rd.plymouth=0 ++ plymouth.enable=0 + + disable the plymouth bootsplash. + + ++ ++ rd.plymouth=0 ++ ++ disable the plymouth bootsplash only for the initramfs. ++ ++ + + + +diff --git a/modules.d/50plymouth/plymouth-pretrigger.sh b/modules.d/50plymouth/plymouth-pretrigger.sh +index 25ed06f..534948e 100755 +--- a/modules.d/50plymouth/plymouth-pretrigger.sh ++++ b/modules.d/50plymouth/plymouth-pretrigger.sh +@@ -2,7 +2,7 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + +-if getargbool 1 rd.plymouth -n rd_NO_PLYMOUTH; then ++if getargbool 1 plymouth.enable && getargbool 1 rd.plymouth -n rd_NO_PLYMOUTH; then + [ -c /dev/null ] || mknod -m 0666 /dev/null c 1 3 + # first trigger graphics subsystem + udevadm trigger --action=add --attr-match=class=0x030000 >/dev/null 2>&1 diff --git a/0021-99base-init-only-poll-cdroms-if-the-kernel-does-supp.patch b/0021-99base-init-only-poll-cdroms-if-the-kernel-does-supp.patch new file mode 100644 index 0000000..b93201c --- /dev/null +++ b/0021-99base-init-only-poll-cdroms-if-the-kernel-does-supp.patch @@ -0,0 +1,63 @@ +From ab55a117e20d0af861e78e1e0b492775f306280d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 29 Aug 2011 19:12:12 +0200 +Subject: [PATCH] 99base/init: only poll cdroms, if the kernel does support + autopolling + +--- + modules.d/99base/init | 34 +++++++++++++++------------------- + 1 files changed, 15 insertions(+), 19 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index 90128c7..0328903 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -205,7 +205,8 @@ getarg 'rd.break=pre-trigger' 'rdbreak=pre-trigger' && emergency_shell -n pre-tr + source_hook pre-trigger + + # then the rest +-udevadm trigger --action=add $udevtriggeropts >/dev/null 2>&1 ++udevadm trigger --type=subsystems --action=add >/dev/null 2>&1 ++udevadm trigger --type=devices --action=add >/dev/null 2>&1 + + getarg 'rd.break=initqueue' 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue" + +@@ -246,25 +247,20 @@ while :; do + # no more udev jobs and queues empty. + sleep 0.5 + +- # dirty hack for some cdrom drives, +- # which report no medium for quiet +- # some time. +- for cdrom in /sys/block/sr*; do +- [ -e "$cdrom" ] || continue +- # skip, if cdrom medium was already found +- strstr "$(udevadm info --query=env --path=${cdrom##/sys})" \ +- ID_CDROM_MEDIA && continue +- +- if [ -e "$cdrom"/events_poll_msecs -a ! -e "/tmp/.poll_${cdrom##*/}" ]; then +- msecs=$(while read a; do echo $a;done < "$cdrom"/events_poll_msecs) +- if [ "$msecs" = "-1" ]; then +- echo 250 > "$cdrom"/events_poll_msecs +- > "/tmp/.poll_${cdrom##*/}" +- fi +- else ++ if [ ! -e /sys/module/block/parameters/uevent ]; then ++ # if the kernel does not support autopolling ++ # then we have to do a ++ # dirty hack for some cdrom drives, ++ # which report no medium for quiet ++ # some time. ++ for cdrom in /sys/block/sr*; do ++ [ -e "$cdrom" ] || continue ++ # skip, if cdrom medium was already found ++ strstr "$(udevadm info --query=env --path=${cdrom##/sys})" \ ++ ID_CDROM_MEDIA && continue + echo change > "$cdrom/uevent" +- fi +- done ++ done ++ fi + + if [ $main_loop -gt $(($RDRETRY/2)) ]; then + for job in $hookdir/initqueue/timeout/*.sh; do diff --git a/0022-build-initramfs-unclear-_mpargs-in-instmods.patch b/0022-build-initramfs-unclear-_mpargs-in-instmods.patch new file mode 100644 index 0000000..b8fe96b --- /dev/null +++ b/0022-build-initramfs-unclear-_mpargs-in-instmods.patch @@ -0,0 +1,43 @@ +From f4ca564ba67d5821b756727689664604e76d1cdf Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Mon, 29 Aug 2011 14:42:15 -0700 +Subject: [PATCH] build initramfs: unclear _mpargs in instmods() + +The local variable _mpargs in function instmods() in file dracut-functions +looks peculiar. The documentation is non-existent, but still ... + +First, $_mpargs is not passed to modprobe via for_each_kmod_dep. +This is strange because my guess is that "_mpargs" means +"extra arguments for modprobe". + +Second, the leading "--" will be lopped when a leading pathname +is stripped via + _mod=${_mod##*/} +It seems to me that a leading "--" should inhibit modification. + +Here's the corresponding patch to current HEAD (from dracut-013.) +--- + dracut-functions | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index a3340e4..c28766e 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -919,7 +919,6 @@ instmods() { + fi + ;; + --*) +- _mod=${_mod##*/} + _mpargs+=" $_mod";; + i2o_scsi) shift; continue;; # Do not load this diagnostic-only module + *) _mod=${_mod##*/} +@@ -942,7 +941,7 @@ instmods() { + # ok, load the module, all its dependencies, and any firmware + # it may require + for_each_kmod_dep install_kmod_with_fw $_mod \ +- --set-version $kernel ${_moddirname} ++ --set-version $kernel ${_moddirname} $_mpargs + ((_ret+=$?)) + ;; + esac diff --git a/0023-90crypt-parse-crypt.sh-also-accept-the-beginning-of-.patch b/0023-90crypt-parse-crypt.sh-also-accept-the-beginning-of-.patch new file mode 100644 index 0000000..172b72b --- /dev/null +++ b/0023-90crypt-parse-crypt.sh-also-accept-the-beginning-of-.patch @@ -0,0 +1,25 @@ +From 2c0b5281f558276a6bd31d7acd104196139dbc16 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 30 Aug 2011 14:43:57 +0200 +Subject: [PATCH] 90crypt/parse-crypt.sh: also accept the beginning of the + LUKS UUID + +2e0c003435bbc0751cdf7466c0faebe7bfc7445b introduced a too strict test +for LUKS UUIDs +--- + modules.d/90crypt/parse-crypt.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh +index 1e78aa9..2ab3a9f 100755 +--- a/modules.d/90crypt/parse-crypt.sh ++++ b/modules.d/90crypt/parse-crypt.sh +@@ -38,7 +38,7 @@ else + } > $hookdir/initqueue/finished/90-crypt.sh + uuid=$luksid + while [ "$uuid" != "${uuid#*-}" ]; do uuid=${uuid%%-*}${uuid#*-}; done +- printf -- '[ "x${UUIDS#*:%s:}" != "x$UUIDS" ] || exit 1\n' $uuid >> $hookdir/initqueue/finished/90-crypt.sh ++ printf -- '[ "x${UUIDS#*:%s*:}" != "x$UUIDS" ] || exit 1\n' $uuid >> $hookdir/initqueue/finished/90-crypt.sh + + { + printf -- '[ -e /dev/disk/by-uuid/*%s* ] || ' $luksid diff --git a/0024-99base-init-save-and-restore-environment-given-from-.patch b/0024-99base-init-save-and-restore-environment-given-from-.patch new file mode 100644 index 0000000..e47973f --- /dev/null +++ b/0024-99base-init-save-and-restore-environment-given-from-.patch @@ -0,0 +1,32 @@ +From ed42e64cfc2c3d36436ef0d0634332219dcce1a2 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 30 Aug 2011 16:22:46 +0200 +Subject: [PATCH] 99base/init: save and restore environment given from the + kernel + +--- + modules.d/99base/init | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index 0328903..21b9468 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -8,6 +8,8 @@ + # Harald Hoyer + # Jeremy Katz + ++export -p > /tmp/export.orig ++ + wait_for_loginit() + { + set +x +@@ -391,6 +393,8 @@ for i in $(export -p); do + unset "$i";; + esac + done ++. /tmp/export.orig ++rm -f /tmp/export.orig + + initargs="" + read CLINE +Date: Tue, 30 Aug 2011 16:23:17 +0200 +Subject: [PATCH] 99base/init: move switch_root breakpoint to a later point in + the script + +--- + modules.d/99base/init | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index 21b9468..b666d3e 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -359,7 +359,6 @@ done + emergency_shell + } + +-getarg rd.break rdbreak && emergency_shell -n switch_root "Break before switch_root" + + if [ $UDEVVERSION -lt 168 ]; then + # stop udev queue before killing it +@@ -443,6 +442,7 @@ fi + + wait_for_loginit + ++getarg rd.break rdbreak && emergency_shell -n switch_root "Break before switch_root" + info "Switching root" + + unset PS4 diff --git a/0026-dracut-functions-hmac-checksum-files-can-be-symlinks.patch b/0026-dracut-functions-hmac-checksum-files-can-be-symlinks.patch new file mode 100644 index 0000000..e510641 --- /dev/null +++ b/0026-dracut-functions-hmac-checksum-files-can-be-symlinks.patch @@ -0,0 +1,32 @@ +From 5f06f0c36701a3e3eb1c6e92ec173285dca3c922 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 31 Aug 2011 15:22:09 +0200 +Subject: [PATCH] dracut-functions: hmac checksum files can be symlinks, too + +use inst() instead of inst_simple() to install the hmac files +--- + dracut-functions | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index c28766e..3edd4c7 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -320,7 +320,7 @@ inst_simple() { + fi + # install checksum files also + if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then +- inst_simple "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac" ++ inst "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac" + fi + ddebug "Installing $_src" + cp -pfL "$_src" "${initdir}$target" +@@ -360,7 +360,7 @@ inst_library() { + if [[ -L $_src ]]; then + # install checksum files also + if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then +- inst_simple "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac" ++ inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac" + fi + _reallib=$(readlink -f "$_src") + inst_simple "$_reallib" "$_reallib" diff --git a/0027-95udev-rules-add-input_id.patch b/0027-95udev-rules-add-input_id.patch new file mode 100644 index 0000000..6dd28d9 --- /dev/null +++ b/0027-95udev-rules-add-input_id.patch @@ -0,0 +1,21 @@ +From f063d0e89fdededa1cf0a0f5ab62e05dfb00b2a7 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 31 Aug 2011 16:48:20 +0200 +Subject: [PATCH] 95udev-rules: add input_id + +--- + modules.d/95udev-rules/module-setup.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh +index 5bd5d59..876f7a3 100755 +--- a/modules.d/95udev-rules/module-setup.sh ++++ b/modules.d/95udev-rules/module-setup.sh +@@ -49,6 +49,7 @@ install() { + fw_unit_symlinks.sh \ + hid2hci \ + path_id \ ++ input_id \ + scsi_id \ + usb_id \ + vol_id \ diff --git a/0028-inst_simple-inst_dir-make-fast-case-faster.patch b/0028-inst_simple-inst_dir-make-fast-case-faster.patch new file mode 100644 index 0000000..c111f84 --- /dev/null +++ b/0028-inst_simple-inst_dir-make-fast-case-faster.patch @@ -0,0 +1,50 @@ +From 3f590c7840bb0897154f66a277be6bfaa63677bd Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Fri, 26 Aug 2011 13:01:33 -0700 +Subject: [PATCH] inst_simple, inst_dir: make fast case faster + +This small stuff saves 1.7% per dropped statement during "dracut --profile". +Fixing the comment about /lib -> lib64 is REQUIRED! +--- + dracut-functions | 16 +++++----------- + 1 files changed, 5 insertions(+), 11 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 3edd4c7..f41fc7d 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -266,19 +266,13 @@ check_vol_slaves() { + } + + # Install a directory, keeping symlinks as on the original system. +-# Example: if /lib64 points to /lib on the host, "inst_dir /lib/file" ++# Example: if /lib points to /lib64 on the host, "inst_dir /lib/file" + # will create ${initdir}/lib64, ${initdir}/lib64/file, + # and a symlink ${initdir}/lib -> lib64. + inst_dir() { +- local _file="" +- local _oldifs="$IFS" +- local _part +- local _dir="$1" ++ [[ -e ${initdir}"$1" ]] && return 0 # already there + +- # fast out +- [[ -e ${initdir}$_dir ]] && return 0 +- +- _part=${_dir%/*} ++ local _dir="$1" _part=${_dir%/*} _file + while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}${_part}" ]]; do + _dir="$_part $_dir" + _part=${_part%/*} +@@ -310,9 +304,9 @@ inst_dir() { + # Location of the image dir is assumed to be $initdir + # We never overwrite the target if it exists. + inst_simple() { +- local _src target + [[ -f $1 ]] || return 1 +- _src=$1 target="${2:-$1}" ++ ++ local _src=$1 target="${2:-$1}" + if ! [[ -d ${initdir}$target ]]; then + [[ -e ${initdir}$target ]] && return 0 + [[ -h ${initdir}$target ]] && return 0 diff --git a/0029-filter_kernel_modules-is-a-specialized-filter_kernel.patch b/0029-filter_kernel_modules-is-a-specialized-filter_kernel.patch new file mode 100644 index 0000000..2816110 --- /dev/null +++ b/0029-filter_kernel_modules-is-a-specialized-filter_kernel.patch @@ -0,0 +1,52 @@ +From ceebd9ac769dcb869529d57fdb155cf7199251f8 Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Sat, 27 Aug 2011 14:43:49 -0700 +Subject: [PATCH] filter_kernel_modules is a specialized + filter_kernel_modules_by_path + +--- + dracut-functions | 31 +++---------------------------- + 1 files changed, 3 insertions(+), 28 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index f41fc7d..a72aa53 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -863,34 +863,9 @@ filter_kernel_modules_by_path () ( + done + ) + +-# filter kernel modules to install certain modules that meet specific +-# requirements. +-# $1 = function to call with module name to filter. +-# This function will be passed the full path to the module to test. +-# The behaviour of this function can vary depending on whether $hostonly is set. +-# If it is, we will only look at modules that are already in memory. +-# If it is not, we will look at all kernel modules +-# This function returns the full filenames of modules that match $1 +-filter_kernel_modules () ( +- local _modname _filtercmd +- if ! [[ $hostonly ]]; then +- _filtercmd='find "$srcmods/kernel/drivers" "$srcmods/extra"' +- _filtercmd+=' "$srcmods/weak-updates" -name "*.ko" -o -name "*.ko.gz"' +- _filtercmd+=' 2>/dev/null' +- else +- _filtercmd='cut -d " " -f 1 $initdir/$$.ko +- $1 $initdir/$$.ko && echo "$_modname" +- rm -f $initdir/$$.ko +- ;; +- esac +- done +-) ++filter_kernel_modules () { ++ filter_kernel_modules_by_path drivers "$1" ++} + + # install kernel modules along with all their dependencies. + instmods() { diff --git a/0030-install_kmod_with_fw-make-fast-case-faster.patch b/0030-install_kmod_with_fw-make-fast-case-faster.patch new file mode 100644 index 0000000..892bf70 --- /dev/null +++ b/0030-install_kmod_with_fw-make-fast-case-faster.patch @@ -0,0 +1,30 @@ +From e6024e0030bcf35b0f0c97cdc6f259711536459b Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Sun, 28 Aug 2011 13:24:58 -0700 +Subject: [PATCH] install_kmod_with_fw: make fast case faster + +--- + dracut-functions | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index a72aa53..4d3317c 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -782,13 +782,14 @@ check_module_dir() { + # Install a single kernel module along with any firmware it may require. + # $1 = full path to kernel module to install + install_kmod_with_fw() { +- local _modname=${1##*/} _fwdir _found _fw +- _modname=${_modname%.ko*} + # no need to go further if the module is already installed + [[ -e "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ]] \ + && return 0 + inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" \ + || return $? ++ ++ local _modname=${1##*/} _fwdir _found _fw ++ _modname=${_modname%.ko*} + for _fw in $(modinfo -k $kernel -F firmware $1 2>/dev/null); do + _found='' + for _fwdir in $fw_dir; do diff --git a/0031-instmods-get-filenames-from-stdin-if-no-args-use-it.patch b/0031-instmods-get-filenames-from-stdin-if-no-args-use-it.patch new file mode 100644 index 0000000..c3781e6 --- /dev/null +++ b/0031-instmods-get-filenames-from-stdin-if-no-args-use-it.patch @@ -0,0 +1,239 @@ +From 881eda695ed552474b9d1e5befe084d7bfab3d50 Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Mon, 29 Aug 2011 13:40:21 -0700 +Subject: [PATCH] instmods: get filenames from stdin if no args; use it + +Use bash "[[ string =~ pattern ]]" instead of "egrep -q". +Replace control-dominated serial fondling + for var in $(proc1); do proc2 var; done +with data-dominated parallel pipeline + proc1 | while read var; do proc2 var; done +Together this is a large savings. + +[harald@redhat.com: fixed network kernel module filter] +--- + dracut-functions | 57 ++++++++++++++++++++-------- + modules.d/40network/module-setup.sh | 19 +++++++-- + modules.d/90kernel-modules/module-setup.sh | 11 +++++- + modules.d/90multipath/module-setup.sh | 15 +++++-- + modules.d/95iscsi/module-setup.sh | 12 ++++- + 5 files changed, 84 insertions(+), 30 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 4d3317c..556d309 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -863,49 +863,63 @@ filter_kernel_modules_by_path () ( + esac + done + ) ++find_kernel_modules_by_path () ( ++ if ! [[ $hostonly ]]; then ++ find "$srcmods/kernel/$1" "$srcmods/extra" "$srcmods/weak-updates" \ ++ -name "*.ko" -o -name "*.ko.gz" 2>/dev/null ++ else ++ cut -d " " -f 1 /dev/null ++ fi ++) + + filter_kernel_modules () { + filter_kernel_modules_by_path drivers "$1" + } + ++find_kernel_modules () { ++ find_kernel_modules_by_path drivers ++} ++ + # install kernel modules along with all their dependencies. + instmods() { + [[ $no_kernel = yes ]] && return +- local _mod _mpargs _moddirname +- local _ret=0 +- while (($# > 0)); do +- _mod=${1%.ko*} ++ ++ function inst1mod() { ++ local _mod="$1" + case $_mod in + =*) + # This introduces 2 incompatible meanings for =* arguments + # to instmods. We need to decide which one to keep. + if [[ $_mod = =ata && -f $srcmods/modules.block ]]; then +- instmods $_mpargs \ +- $(egrep 'ata|ahci' "${srcmods}/modules.block") ++ ( echo -n "$_mpargs"; egrep 'ata|ahci' "${srcmods}/modules.block" ) \ ++ | instmods + elif [ -f $srcmods/modules.${_mod#=} ]; then +- instmods $_mpargs $(cat ${srcmods}/modules.${_mod#=} ) ++ ( echo -n "$_mpargs"; cat "${srcmods}/modules.${_mod#=}" ) \ ++ | instmods + else +- instmods $_mpargs $(find "$srcmods" -path "*/${_mod#=}/*") ++ ( echo -n "$_mpargs"; find "$srcmods" -path "*/${_mod#=}/*" ) \ ++ | instmods + fi + ;; +- --*) +- _mpargs+=" $_mod";; +- i2o_scsi) shift; continue;; # Do not load this diagnostic-only module ++ --*) _mpargs+="${_mod##*/}"$'\n' ;; # one _mod per line; lops '--' ++ i2o_scsi) return ;; # Do not load this diagnostic-only module + *) _mod=${_mod##*/} ++ + # if we are already installed, skip this module and go on + # to the next one. +- [[ -f $initdir/$1 ]] && { shift; continue; } ++ [[ -f $initdir/$1 ]] && return ++ + # If we are building a host-specific initramfs and this + # module is not already loaded, move on to the next one. + [[ $hostonly ]] && ! grep -qe "\<${_mod//-/_}\>" /proc/modules \ +- && ! echo $add_drivers | grep -qe "\<${_mod}\>" && { +- shift; continue +- } ++ && ! echo $add_drivers | grep -qe "\<${_mod}\>" \ ++ && return + + # We use '-d' option in modprobe only if modules prefix path + # differs from default '/'. This allows us to use Dracut with + # old version of modprobe which doesn't have '-d' option. +- _moddirname=${srcmods%%/lib/modules/*} ++ local _moddirname=${srcmods%%/lib/modules/*} + [[ -n ${_moddirname} ]] && _moddirname="-d ${_moddirname}/" + + # ok, load the module, all its dependencies, and any firmware +@@ -915,6 +929,17 @@ instmods() { + ((_ret+=$?)) + ;; + esac ++ } ++ ++ local _mpargs _ret=0 ++ if (($# == 0)); then # filenames from stdin ++ local _mod ++ while read _mod; do ++ inst1mod "${_mod%.ko*}" ++ done ++ fi ++ while (($# > 0)); do # filenames as args ++ inst1mod ${1%.ko*} + shift + done + return $_ret +diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh +index 39366b6..cb81269 100755 +--- a/modules.d/40network/module-setup.sh ++++ b/modules.d/40network/module-setup.sh +@@ -24,15 +24,24 @@ depends() { + installkernel() { + # Include wired net drivers, excluding wireless + +- net_module_test() { ++ net_module_filter() { + local _net_drivers='eth_type_trans|register_virtio_device' + local _unwanted_drivers='/(wireless|isdn|uwb)/' +- egrep -q $_net_drivers "$1" && \ +- egrep -qv 'iw_handler_get_spy' "$1" && \ +- [[ ! $1 =~ $_unwanted_drivers ]] ++ local _fname ++ while read _fname; do ++ local _fcont ++ case "$_fname" in ++ *.ko) _fcont="$(< $_fname)" ;; ++ *.ko.gz) _fcont="$(gzip -dc $_fname)" ;; ++ esac ++ [[ $_fcont =~ $_net_drivers ++ && ! $_fcont =~ iw_handler_get_spy \ ++ && ! $_fname =~ $_unwanted_drivers ]] \ ++ && echo "$_fname" ++ done + } + +- instmods $(filter_kernel_modules_by_path drivers/net net_module_test) ++ find_kernel_modules_by_path drivers/net | net_module_filter | instmods + + instmods ecb arc4 + # bridge modules +diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh +index 245ec0b..9fc4248 100755 +--- a/modules.d/90kernel-modules/module-setup.sh ++++ b/modules.d/90kernel-modules/module-setup.sh +@@ -9,6 +9,15 @@ installkernel() { + + egrep -q "$blockfuncs" "$1" + } ++ block_module_filter() { ++ local _blockfuncs='ahci_init_controller|ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device' ++ local _f ++ while read _f; do case "$_f" in ++ *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;; ++ *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;; ++ esac ++ done ++ } + hostonly='' instmods sr_mod sd_mod scsi_dh scsi_dh_rdac scsi_dh_emc + hostonly='' instmods pcmcia firewire-ohci + hostonly='' instmods usb_storage sdhci sdhci-pci +@@ -18,7 +27,7 @@ installkernel() { + # install unix socket support + hostonly='' instmods unix + instmods "=drivers/pcmcia" =ide "=drivers/usb/storage" +- instmods $(filter_kernel_modules block_module_test) ++ find_kernel_modules | block_module_filter | instmods + # if not on hostonly mode, install all known filesystems, + # if the required list is not set via the filesystems variable + if ! [[ $hostonly ]]; then +diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh +index e9a47fc..f68b58d 100755 +--- a/modules.d/90multipath/module-setup.sh ++++ b/modules.d/90multipath/module-setup.sh +@@ -33,13 +33,18 @@ depends() { + } + + installkernel() { +- mp_mod_test() { +- local mpfuncs='scsi_register_device_handler|dm_dirty_log_type_register|dm_register_path_selector|dm_register_target' +- egrep -q "$mpfuncs" "$1" ++ mp_mod_filter() { ++ local _mpfuncs='scsi_register_device_handler|dm_dirty_log_type_register|dm_register_path_selector|dm_register_target' ++ local _f ++ while read _f; do case "$_f" in ++ *.ko) [[ $(< $_f) =~ $_mpfuncs ]] && echo "$_f" ;; ++ *.ko.gz) [[ $(gzip -dc <$_f) =~ $_mpfuncs ]] && echo "$_f" ;; ++ esac ++ done + } + +- instmods $(filter_kernel_modules_by_path drivers/scsi mp_mod_test) +- instmods $(filter_kernel_modules_by_path drivers/md mp_mod_test) ++ ( find_kernel_modules_by_path drivers/scsi; ++ find_kernel_modules_by_path drivers/md ) | mp_mod_filter | instmods + } + + install() { +diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh +index 3db40ea..b7771ab 100755 +--- a/modules.d/95iscsi/module-setup.sh ++++ b/modules.d/95iscsi/module-setup.sh +@@ -42,11 +42,17 @@ depends() { + + installkernel() { + instmods iscsi_tcp iscsi_ibft crc32c +- iscsi_module_test() { ++ iscsi_module_filter() { + local _iscsifuncs='iscsi_register_transport' +- fgrep -q "$_iscsifuncs" "$1" ++ local _f ++ while read _f; do case "$_f" in ++ *.ko) [[ $(< $_f) =~ $_iscsifuncs ]] && echo "$_f" ;; ++ *.ko.gz) [[ $(gzip -dc <$_f) =~ $_iscsifuncs ]] && echo "$_f" ;; ++ esac ++ done + } +- instmods $(filter_kernel_modules_by_path drivers/scsi iscsi_module_test) ++ find_kernel_modules_by_path drivers/scsi \ ++ | iscsi_module_filter | instmods + } + + install() { diff --git a/0032-instmods-sanity-for-_mpargs.patch b/0032-instmods-sanity-for-_mpargs.patch new file mode 100644 index 0000000..cda1227 --- /dev/null +++ b/0032-instmods-sanity-for-_mpargs.patch @@ -0,0 +1,38 @@ +From 0024702fe7551e0de8180a5b514b31f57b4fc213 Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Mon, 29 Aug 2011 14:46:25 -0700 +Subject: [PATCH] instmods: sanity for _mpargs + +--- + dracut-functions | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 556d309..6c16cae 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -892,17 +892,20 @@ instmods() { + # This introduces 2 incompatible meanings for =* arguments + # to instmods. We need to decide which one to keep. + if [[ $_mod = =ata && -f $srcmods/modules.block ]]; then +- ( echo -n "$_mpargs"; egrep 'ata|ahci' "${srcmods}/modules.block" ) \ ++ ( [[ "$_mpargs" ]] && echo $_mpargs ++ egrep 'ata|ahci' "${srcmods}/modules.block" ) \ + | instmods + elif [ -f $srcmods/modules.${_mod#=} ]; then +- ( echo -n "$_mpargs"; cat "${srcmods}/modules.${_mod#=}" ) \ ++ ( [[ "$_mpargs" ]] && echo $_mpargs ++ cat "${srcmods}/modules.${_mod#=}" ) \ + | instmods + else +- ( echo -n "$_mpargs"; find "$srcmods" -path "*/${_mod#=}/*" ) \ ++ ( [[ "$_mpargs" ]] && echo $_mpargs ++ find "$srcmods" -path "*/${_mod#=}/*" ) \ + | instmods + fi + ;; +- --*) _mpargs+="${_mod##*/}"$'\n' ;; # one _mod per line; lops '--' ++ --*) _mpargs+=" $_mod" ;; + i2o_scsi) return ;; # Do not load this diagnostic-only module + *) _mod=${_mod##*/} + diff --git a/0033-instmods-factor-out-egrep-of-FATAL-Module-.-not-foun.patch b/0033-instmods-factor-out-egrep-of-FATAL-Module-.-not-foun.patch new file mode 100644 index 0000000..647c8e4 --- /dev/null +++ b/0033-instmods-factor-out-egrep-of-FATAL-Module-.-not-foun.patch @@ -0,0 +1,67 @@ +From f9708da22345aa11bfa0d5514eefef11f542526b Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Mon, 29 Aug 2011 16:03:35 -0700 +Subject: [PATCH] instmods: factor out egrep of "FATAL: Module .* not found" + +--- + dracut-functions | 34 +++++++++++++++++++--------------- + 1 files changed, 19 insertions(+), 15 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 6c16cae..507f0c3 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -820,7 +820,7 @@ install_kmod_with_fw() { + for_each_kmod_dep() { + local _func=$1 _kmod=$2 _cmd _modpath _options _found=0 + shift 2 +- modprobe "$@" --ignore-install --show-depends $_kmod 2>"$initdir/modprobe.err" | ( ++ modprobe "$@" --ignore-install --show-depends $_kmod 2>&$modprobe_stderr | ( + while read _cmd _modpath _options; do + [[ $_cmd = insmod ]] || continue + $_func ${_modpath} || exit $? +@@ -829,9 +829,6 @@ for_each_kmod_dep() { + [[ $_found -eq 0 ]] && exit 1 + exit 0 + ) +- egrep -v 'FATAL: Module .* not found.' "$initdir/modprobe.err" | derror +- rm -f "$initdir/modprobe.err" +- return $? + } + + # filter kernel modules to install certain modules that meet specific +@@ -934,16 +931,23 @@ instmods() { + esac + } + +- local _mpargs _ret=0 +- if (($# == 0)); then # filenames from stdin +- local _mod +- while read _mod; do +- inst1mod "${_mod%.ko*}" ++ function instmods_1() { ++ local _ret=0 _mod _mpargs ++ if (($# == 0)); then # filenames from stdin ++ while read _mod; do ++ inst1mod "${_mod%.ko*}" ++ done ++ fi ++ while (($# > 0)); do # filenames as arguments ++ inst1mod ${1%.ko*} ++ shift + done +- fi +- while (($# > 0)); do # filenames as args +- inst1mod ${1%.ko*} +- shift +- done +- return $_ret ++ return $_ret ++ } ++ ++ # Capture all stderr from modprobe onto a new fd $modprobe_stderr, ++ # and pipe it into egrep. See REDIRECTION in bash manpage. ++ ( instmods_1 "$@" ) {modprobe_stderr}>&1 \ ++ | egrep -v 'FATAL: Module .* not found.' | derror ++ return $? + } diff --git a/0034-99base-init-do-not-fail-when-importing-the-original-.patch b/0034-99base-init-do-not-fail-when-importing-the-original-.patch new file mode 100644 index 0000000..a070768 --- /dev/null +++ b/0034-99base-init-do-not-fail-when-importing-the-original-.patch @@ -0,0 +1,23 @@ +From dffb93feaf6c179dbe4f854f1266fbe8529dbea9 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 1 Sep 2011 16:01:21 +0200 +Subject: [PATCH] 99base/init: do not fail, when importing the original kernel + environment + +--- + modules.d/99base/init | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index b666d3e..4cbe342 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -392,7 +392,7 @@ for i in $(export -p); do + unset "$i";; + esac + done +-. /tmp/export.orig ++. /tmp/export.orig 2>/dev/null || : + rm -f /tmp/export.orig + + initargs="" diff --git a/0035-dracut-cp-with-sparse.patch b/0035-dracut-cp-with-sparse.patch new file mode 100644 index 0000000..022a6df --- /dev/null +++ b/0035-dracut-cp-with-sparse.patch @@ -0,0 +1,36 @@ +From 59f288ce631a7793755d16ee26fef0355098d33a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 2 Sep 2011 09:01:47 +0200 +Subject: [PATCH] dracut: cp with sparse + +--- + dracut | 2 +- + dracut-functions | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dracut b/dracut +index fd36805..0e930c7 100755 +--- a/dracut ++++ b/dracut +@@ -650,7 +650,7 @@ if strstr "$modules_loaded" " fips " && command -v prelink >/dev/null; then + done + fi + +-if ! ( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet | \ ++if ! ( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet| \ + $compress > "$outfile"; ); then + dfatal "dracut: creation of $outfile failed" + exit 1 +diff --git a/dracut-functions b/dracut-functions +index 507f0c3..b11e37c 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -317,7 +317,7 @@ inst_simple() { + inst "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac" + fi + ddebug "Installing $_src" +- cp -pfL "$_src" "${initdir}$target" ++ cp --sparse=always -pfL "$_src" "${initdir}$target" + } + + # find symlinks linked to given library file diff --git a/0036-99base-init-removed-cdrom-polling-reset-code.patch b/0036-99base-init-removed-cdrom-polling-reset-code.patch new file mode 100644 index 0000000..d31034b --- /dev/null +++ b/0036-99base-init-removed-cdrom-polling-reset-code.patch @@ -0,0 +1,29 @@ +From 86880b8ff70993d9a2357892b4ad5f8345b5f798 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 2 Sep 2011 09:01:05 +0200 +Subject: [PATCH] 99base/init: removed cdrom polling reset code + +This is done globally now. +--- + modules.d/99base/init | 8 -------- + 1 files changed, 0 insertions(+), 8 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index 4cbe342..fe7694a 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -281,14 +281,6 @@ unset queuetriggered + unset main_loop + unset RDRETRY + +-# reset cdrom polling +-for cdrom in /sys/block/sr*; do +- [ -e "$cdrom" ] || continue +- if [ -e "$cdrom"/events_poll_msecs ]; then +- echo -1 > "$cdrom"/events_poll_msecs +- fi +-done +- + # pre-mount happens before we try to mount the root filesystem, + # and happens once. + getarg 'rd.break=pre-mount' 'rdbreak=pre-mount' && emergency_shell -n pre-mount "Break pre-mount" diff --git a/0037-dmsquash-live-root-use-blkid-to-determine-fstype-of-.patch b/0037-dmsquash-live-root-use-blkid-to-determine-fstype-of-.patch new file mode 100644 index 0000000..7a69a99 --- /dev/null +++ b/0037-dmsquash-live-root-use-blkid-to-determine-fstype-of-.patch @@ -0,0 +1,27 @@ +From 380b8b516e719e32f766ad78c88009bc589126ec Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 2 Sep 2011 19:01:16 +0200 +Subject: [PATCH] dmsquash-live-root: use blkid to determine fstype of images + +prevents: +dracut: FATAL: cannot mount live image (unknown filesystem type) +https://bugzilla.redhat.com/show_bug.cgi?id=735199 +--- + modules.d/90dmsquash-live/dmsquash-live-root | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root b/modules.d/90dmsquash-live/dmsquash-live-root +index 90e633c..2b6c0e2 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root ++++ b/modules.d/90dmsquash-live/dmsquash-live-root +@@ -45,9 +45,7 @@ fi + + # determine filesystem type for a filesystem image + det_img_fs() { +- local _img="$1" _loop=$(losetup -f) _fs +- losetup $_loop $_img; _fs=$(det_fs $_loop); losetup -d $_loop +- echo $_fs ++ blkid -s TYPE -u noraid -o value "$1" + } + + for arg in $CMDLINE; do case $arg in ro|rw) liverw=$arg ;; esac; done diff --git a/0038-dmsquash-live-root-load-filesystem-modules-before-mo.patch b/0038-dmsquash-live-root-load-filesystem-modules-before-mo.patch new file mode 100644 index 0000000..89c3541 --- /dev/null +++ b/0038-dmsquash-live-root-load-filesystem-modules-before-mo.patch @@ -0,0 +1,31 @@ +From baa5c1136310b47ca2ca91eb377fa058dd2793c7 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 2 Sep 2011 19:16:17 +0200 +Subject: [PATCH] dmsquash-live-root: load filesystem modules before mounting + loop images + +might prevent https://bugzilla.redhat.com/show_bug.cgi?id=735199 +--- + modules.d/90dmsquash-live/dmsquash-live-root | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root b/modules.d/90dmsquash-live/dmsquash-live-root +index 2b6c0e2..b704139 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root ++++ b/modules.d/90dmsquash-live/dmsquash-live-root +@@ -54,11 +54,13 @@ mkdir -m 0755 -p /run/initramfs/live + if [ -f $livedev ]; then + # no mount needed - we've already got the LiveOS image in initramfs + # check filesystem type and handle accordingly +- case `det_img_fs $livedev` in +- squashfs) SQUASHED=$livedev ;; ++ fstype=$(det_img_fs $livedev) ++ case $fstype in ++ squashfs) SQUASHED=$livedev;; + auto) die "cannot mount live image (unknown filesystem type)" ;; + *) FSIMG=$livedev ;; + esac ++ [ -e /sys/fs/$fstype ] || modprobe $fstype + else + mount -n -t $fstype -o ${liverw:-ro} $livedev /run/initramfs/live + if [ "$?" != "0" ]; then diff --git a/0039-90dmsquash-live-do-not-symlink-to-dev-live.patch b/0039-90dmsquash-live-do-not-symlink-to-dev-live.patch new file mode 100644 index 0000000..29dd0c0 --- /dev/null +++ b/0039-90dmsquash-live-do-not-symlink-to-dev-live.patch @@ -0,0 +1,27 @@ +From e41e5b78c6ff62797e1da5655d6acd101ddf2ab3 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 19 Sep 2011 12:20:11 +0200 +Subject: [PATCH] 90dmsquash-live: do not symlink to /dev/live + +/dev/live should not be used anyway +--- + .../90dmsquash-live/dmsquash-live-genrules.sh | 6 ------ + 1 files changed, 0 insertions(+), 6 deletions(-) + +diff --git a/modules.d/90dmsquash-live/dmsquash-live-genrules.sh b/modules.d/90dmsquash-live/dmsquash-live-genrules.sh +index ce1ca82..d6d0aa3 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-genrules.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-genrules.sh +@@ -4,12 +4,6 @@ + case "$root" in + live:/dev/*) + { +- printf 'KERNEL=="%s", SYMLINK+="live"\n' \ +- ${root#live:/dev/} +- printf 'SYMLINK=="%s", SYMLINK+="live"\n' \ +- ${root#live:/dev/} +- } >> $UDEVRULESD/99-live-mount.rules +- { + printf 'KERNEL=="%s", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \ + ${root#live:/dev/} + printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \ diff --git a/0040-99base-init-remove-dev-root-helper-symlink.patch b/0040-99base-init-remove-dev-root-helper-symlink.patch new file mode 100644 index 0000000..e182fde --- /dev/null +++ b/0040-99base-init-remove-dev-root-helper-symlink.patch @@ -0,0 +1,24 @@ +From 6d82a0470e7e340eb0353ecc3c524ded2e286e18 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 19 Sep 2011 12:20:55 +0200 +Subject: [PATCH] 99base/init: remove /dev/root helper symlink + +Any tool relying on /dev/root has to be fixed. +--- + modules.d/99base/init | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index fe7694a..4f59818 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -434,6 +434,9 @@ fi + + wait_for_loginit + ++# remove helper symlink ++[ -h /dev/root ] && rm -f /dev/root ++ + getarg rd.break rdbreak && emergency_shell -n switch_root "Break before switch_root" + info "Switching root" + diff --git a/0041-Do-not-use-run-udev-rules.d-for-udev-rules.patch b/0041-Do-not-use-run-udev-rules.d-for-udev-rules.patch new file mode 100644 index 0000000..e975b5a --- /dev/null +++ b/0041-Do-not-use-run-udev-rules.d-for-udev-rules.patch @@ -0,0 +1,54 @@ +From ca8d4e8933e6124c2a0cf0e37f0296b80976ab33 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 19 Sep 2011 12:21:51 +0200 +Subject: [PATCH] Do not use /run/udev/rules.d for udev rules + +for rules, which should not be called in the real root. + +Stale rules can cause this: +https://bugzilla.redhat.com/show_bug.cgi?id=734096 +--- + .../90dmsquash-live/dmsquash-live-genrules.sh | 2 +- + modules.d/95resume/resume-genrules.sh | 2 +- + modules.d/95rootfs-block/block-genrules.sh | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/modules.d/90dmsquash-live/dmsquash-live-genrules.sh b/modules.d/90dmsquash-live/dmsquash-live-genrules.sh +index d6d0aa3..aa0654b 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-genrules.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-genrules.sh +@@ -8,7 +8,7 @@ case "$root" in + ${root#live:/dev/} + printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \ + ${root#live:/dev/} +- } >> $UDEVRULESD/99-live-squash.rules ++ } >> /etc/udev/rules.d/99-live-squash.rules + echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/dmsquash.sh + ;; + live:*) +diff --git a/modules.d/95resume/resume-genrules.sh b/modules.d/95resume/resume-genrules.sh +index 06b9544..e1afc26 100755 +--- a/modules.d/95resume/resume-genrules.sh ++++ b/modules.d/95resume/resume-genrules.sh +@@ -17,7 +17,7 @@ if [ -n "$resume" ]; then + ${resume#/dev/}; + printf "SYMLINK==\"%s\", ACTION==\"add|change\", SYMLINK+=\"/dev/resume\"\n" \ + ${resume#/dev/}; +- } >> $UDEVRULESD/99-resume-link.rules ++ } >> /etc/udev/rules.d/99-resume-link.rules + + { + if [ -x /usr/sbin/resume ]; then +diff --git a/modules.d/95rootfs-block/block-genrules.sh b/modules.d/95rootfs-block/block-genrules.sh +index 4a50aac..a2310a0 100755 +--- a/modules.d/95rootfs-block/block-genrules.sh ++++ b/modules.d/95rootfs-block/block-genrules.sh +@@ -8,7 +8,7 @@ if [ "${root%%:*}" = "block" ]; then + ${root#block:/dev/} + printf 'SYMLINK=="%s", SYMLINK+="root"\n' \ + ${root#block:/dev/} +- } >> $UDEVRULESD/99-root.rules ++ } >> /etc/udev/rules.d/99-root.rules + + printf '[ -e "%s" ] && { ln -s "%s" /dev/root 2>/dev/null; rm "$job"; }\n' \ + "${root#block:}" "${root#block:}" > $hookdir/initqueue/settled/blocksymlink.sh diff --git a/0042-99base-init-mount-securityfs-with-source-securityfs-.patch b/0042-99base-init-mount-securityfs-with-source-securityfs-.patch new file mode 100644 index 0000000..6b2d9a8 --- /dev/null +++ b/0042-99base-init-mount-securityfs-with-source-securityfs-.patch @@ -0,0 +1,23 @@ +From d63fdc1198cd13ed68e7f08acd7ca164c9f35262 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 20 Sep 2011 10:10:29 +0200 +Subject: [PATCH] 99base/init: mount securityfs with source "securityfs" + instead of dest + +--- + modules.d/99base/init | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index 4f59818..fa808ca 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -89,7 +89,7 @@ RD_DEBUG="" + SECURITYFSDIR="/sys/kernel/security" + export SECURITYFSDIR + if ! ismounted "${SECURITYFSDIR}"; then +- mount -t securityfs -o nosuid,noexec,nodev ${SECURITYFSDIR} ${SECURITYFSDIR} >/dev/null 2>&1 ++ mount -t securityfs -o nosuid,noexec,nodev securityfs ${SECURITYFSDIR} >/dev/null 2>&1 + fi + + if [ -x /lib/systemd/systemd-timestamp ]; then diff --git a/0043-mount-securityfs-in-a-seperate-dracut-module.patch b/0043-mount-securityfs-in-a-seperate-dracut-module.patch new file mode 100644 index 0000000..7e5bd72 --- /dev/null +++ b/0043-mount-securityfs-in-a-seperate-dracut-module.patch @@ -0,0 +1,81 @@ +From 16457c869d3fac6a94e204f1edac1ad9fffae55a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 20 Sep 2011 11:16:53 +0200 +Subject: [PATCH] mount securityfs in a seperate dracut module + +--- + modules.d/96securityfs/module-setup.sh | 15 +++++++++++++++ + modules.d/96securityfs/securityfs.sh | 10 ++++++++++ + modules.d/98integrity/module-setup.sh | 2 +- + modules.d/99base/init | 6 ------ + 4 files changed, 26 insertions(+), 7 deletions(-) + create mode 100755 modules.d/96securityfs/module-setup.sh + create mode 100755 modules.d/96securityfs/securityfs.sh + +diff --git a/modules.d/96securityfs/module-setup.sh b/modules.d/96securityfs/module-setup.sh +new file mode 100755 +index 0000000..fbe3aa3 +--- /dev/null ++++ b/modules.d/96securityfs/module-setup.sh +@@ -0,0 +1,15 @@ ++#!/bin/bash ++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- ++# ex: ts=8 sw=4 sts=4 et filetype=sh ++ ++check() { ++ return 255 ++} ++ ++depends() { ++ return 0 ++} ++ ++install() { ++ inst_hook cmdline 60 "$moddir/securityfs.sh" ++} +diff --git a/modules.d/96securityfs/securityfs.sh b/modules.d/96securityfs/securityfs.sh +new file mode 100755 +index 0000000..03ee4dd +--- /dev/null ++++ b/modules.d/96securityfs/securityfs.sh +@@ -0,0 +1,10 @@ ++#!/bin/sh ++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- ++# ex: ts=8 sw=4 sts=4 et filetype=sh ++ ++SECURITYFSDIR="/sys/kernel/security" ++export SECURITYFSDIR ++ ++if ! ismounted "${SECURITYFSDIR}"; then ++ mount -t securityfs -o nosuid,noexec,nodev securityfs ${SECURITYFSDIR} >/dev/null 2>&1 ++fi +diff --git a/modules.d/98integrity/module-setup.sh b/modules.d/98integrity/module-setup.sh +index cab9027..7d5771c 100755 +--- a/modules.d/98integrity/module-setup.sh ++++ b/modules.d/98integrity/module-setup.sh +@@ -7,7 +7,7 @@ check() { + } + + depends() { +- echo masterkey ++ echo masterkey securityfs + return 0 + } + +diff --git a/modules.d/99base/init b/modules.d/99base/init +index fa808ca..06d61a8 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -86,12 +86,6 @@ RD_DEBUG="" + [ ! -d /sys/kernel ] && \ + mount -t sysfs -o nosuid,noexec,nodev sysfs /sys >/dev/null 2>&1 + +-SECURITYFSDIR="/sys/kernel/security" +-export SECURITYFSDIR +-if ! ismounted "${SECURITYFSDIR}"; then +- mount -t securityfs -o nosuid,noexec,nodev securityfs ${SECURITYFSDIR} >/dev/null 2>&1 +-fi +- + if [ -x /lib/systemd/systemd-timestamp ]; then + RD_TIMESTAMP=$(/lib/systemd/systemd-timestamp) + else diff --git a/0044-mount-securityfs-in-a-seperate-dracut-module.patch b/0044-mount-securityfs-in-a-seperate-dracut-module.patch new file mode 100644 index 0000000..c029c3c --- /dev/null +++ b/0044-mount-securityfs-in-a-seperate-dracut-module.patch @@ -0,0 +1,21 @@ +From 6d385c7111c81fe730c1823b232d19e8d42f50d4 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 20 Sep 2011 11:16:53 +0200 +Subject: [PATCH] mount securityfs in a seperate dracut module + +--- + dracut.spec | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/dracut.spec b/dracut.spec +index 76f4fe1..f9848ed 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -247,6 +247,7 @@ rm -rf $RPM_BUILD_ROOT + %{_datadir}/dracut/modules.d/95zfcp + %{_datadir}/dracut/modules.d/95terminfo + %{_datadir}/dracut/modules.d/95udev-rules ++%{_datadir}/dracut/modules.d/96securityfs + %{_datadir}/dracut/modules.d/97biosdevname + %{_datadir}/dracut/modules.d/97masterkey + %{_datadir}/dracut/modules.d/98ecryptfs diff --git a/0045-90mdraid-adjust-stock-mdadm-udev-rules.patch b/0045-90mdraid-adjust-stock-mdadm-udev-rules.patch new file mode 100644 index 0000000..e71a173 --- /dev/null +++ b/0045-90mdraid-adjust-stock-mdadm-udev-rules.patch @@ -0,0 +1,37 @@ +From e3e5128cf20660c0789f9b4e2285dbc1f35f6799 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 00:17:23 +0200 +Subject: [PATCH] 90mdraid: adjust stock mdadm udev rules + +Currently shipped mdadm rules incrementally assemble all imsm and native +raids, and do so unconditionally. This causes few issues: + +- fine-grained controls in 65-md* are shadowed - for example, + mdadm.conf's presence tests or uuid checks +- 90dmraid might also conflict with 90mdraid, if user prefers the former + to handle containers +- possibly other subtle issues + +This patch adjusts the behaviour. + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/module-setup.sh | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index de7785d..91a0769 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -50,6 +50,11 @@ install() { + + if [ ! -x /lib/udev/vol_id ]; then + 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 -e '/^ENV{ID_FS_TYPE}==.*ACTION=="add".*RUN+="\/sbin\/mdadm --incremental $env{DEVNAME}"$/d' "${initdir}/lib/udev/rules.d/64-md-raid.rules" + fi + + inst_rules "$moddir/65-md-incremental-imsm.rules" diff --git a/0046-90mdraid-containers-are-not-runnable.patch b/0046-90mdraid-containers-are-not-runnable.patch new file mode 100644 index 0000000..e75e476 --- /dev/null +++ b/0046-90mdraid-containers-are-not-runnable.patch @@ -0,0 +1,91 @@ +From 5f6a71b38af7550d11c790abd5ca0bd0cf7b7f05 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 00:17:25 +0200 +Subject: [PATCH] 90mdraid: containers are not runnable + +Remove whole "start a container logic". + +Containers once assembled, always remain in 'inactive' state. +Any attempt to run a container with mdadm -IR is a no-op, and any +attempt with just mdadm -R ends with an error. + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/65-md-incremental-imsm.rules | 20 -------------------- + modules.d/90mdraid/md_finished.sh | 2 +- + modules.d/90mdraid/mdcontainer_start.sh | 12 ------------ + modules.d/90mdraid/module-setup.sh | 1 - + 4 files changed, 1 insertions(+), 34 deletions(-) + delete mode 100755 modules.d/90mdraid/mdcontainer_start.sh + +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index 7c1d503..5e94a57 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -66,23 +66,3 @@ RUN+="/sbin/initqueue --finished --unique --name md_finished /sbin/md_finished.s + RUN+="/sbin/initqueue --timeout --onetime --unique /sbin/mdraid_start" + + LABEL="end_raidstart" +- +-# +-# Handle container raid arrays +-# +-ACTION=="add|change", \ +- KERNEL=="md[0-9]*|md/*", \ +- ENV{DEVTYPE}!="partition", \ +- ENV{MD_LEVEL}=="container", \ +- ENV{rd_MDADMCONF}!="?*", \ +- ENV{rd_NO_MD}!="?*", \ +- GOTO="do_container" +- +-GOTO="end_container" +- +-LABEL="do_container" +- +-RUN+="/sbin/initqueue --finished --unique --name md_finished /sbin/md_finished.sh" +-RUN+="/sbin/initqueue --timeout --onetime --unique --name mdcontainer_start-%k /sbin/mdcontainer_start $env{DEVNAME}" +- +-LABEL="end_container" +diff --git a/modules.d/90mdraid/md_finished.sh b/modules.d/90mdraid/md_finished.sh +index cde0966..ce355be 100755 +--- a/modules.d/90mdraid/md_finished.sh ++++ b/modules.d/90mdraid/md_finished.sh +@@ -1,7 +1,7 @@ + #!/bin/sh + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh +-for f in $hookdir/initqueue/settled/mdcontainer_start* $hookdir/initqueue/settled/mdraid_start* $hookdir/initqueue/settled/mdadm_auto*; do ++for f in $hookdir/initqueue/settled/mdraid_start* $hookdir/initqueue/settled/mdadm_auto*; do + [ -e $f ] && exit 1 + done + +diff --git a/modules.d/90mdraid/mdcontainer_start.sh b/modules.d/90mdraid/mdcontainer_start.sh +deleted file mode 100755 +index e7dd3ef..0000000 +--- a/modules.d/90mdraid/mdcontainer_start.sh ++++ /dev/null +@@ -1,12 +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 +-type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh +- +-md=$1 +-udevadm control --stop-exec-queue +-# and activate any containers +-mdadm -IR $md 2>&1 | vinfo +-ln -s $(command -v mdraid-cleanup) $hookdir/pre-pivot/30-mdraid-cleanup.sh 2>/dev/null +-ln -s $(command -v mdraid-cleanup) $hookdir/pre-pivot/31-mdraid-cleanup.sh 2>/dev/null +-udevadm control --start-exec-queue +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index 91a0769..2dba8cb 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -77,7 +77,6 @@ install() { + inst_hook pre-udev 30 "$moddir/mdmon-pre-udev.sh" + + inst "$moddir/mdraid_start.sh" /sbin/mdraid_start +- inst "$moddir/mdcontainer_start.sh" /sbin/mdcontainer_start + inst "$moddir/mdadm_auto.sh" /sbin/mdadm_auto + inst "$moddir/md_finished.sh" /sbin/md_finished.sh + inst_hook pre-trigger 30 "$moddir/parse-md.sh" diff --git a/0047-90mdraid-fix-adjust-mdraid-cleanup.patch b/0047-90mdraid-fix-adjust-mdraid-cleanup.patch new file mode 100644 index 0000000..926fcb8 --- /dev/null +++ b/0047-90mdraid-fix-adjust-mdraid-cleanup.patch @@ -0,0 +1,66 @@ +From 9383421c1cfc5fe1bc94cf3d3194bd96ee503628 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 00:17:26 +0200 +Subject: [PATCH] 90mdraid: fix/adjust mdraid-cleanup + +Stop both arrays (first pass) and containers (second pass). +Loop only over /dev/md[0-9]* +Call cleanup script only once, make sure it's after crypt cleanup. + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/mdraid-cleanup.sh | 30 +++++++++++++++++------------- + modules.d/90mdraid/mdraid_start.sh | 1 - + 2 files changed, 17 insertions(+), 14 deletions(-) + +diff --git a/modules.d/90mdraid/mdraid-cleanup.sh b/modules.d/90mdraid/mdraid-cleanup.sh +index add02e0..8fc54e2 100755 +--- a/modules.d/90mdraid/mdraid-cleanup.sh ++++ b/modules.d/90mdraid/mdraid-cleanup.sh +@@ -2,18 +2,22 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + +-# stop everything which is not busy +-for i in /dev/md* /dev/md/*; do +- [ -b $i ] || continue ++type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +- mddetail=$(udevadm info --query=property --name=$i) +- case "$mddetail" in +- *MD_LEVEL=container*) +- ;; +- *DEVTYPE=partition*) +- ;; +- *) +- mdadm --stop $i >/dev/null 2>&1 +- ;; +- esac ++containers="" ++for md in /dev/md[0-9]*; do ++ [ -b "$md" ] || continue ++ udevinfo="$(udevadm info --query=env --name=$md)" ++ strstr "$udevinfo" "DEVTYPE=partition" && continue ++ if strstr "$udevinfo" "MD_LEVEL=container"; then ++ containers="$containers $md" ++ continue ++ fi ++ mdadm -S "$md" >/dev/null 2>&1 + done ++ ++for md in $containers; do ++ mdadm -S "$md" >/dev/null 2>&1 ++done ++ ++unset containers udevinfo +diff --git a/modules.d/90mdraid/mdraid_start.sh b/modules.d/90mdraid/mdraid_start.sh +index 4aa7f82..4c0255e 100755 +--- a/modules.d/90mdraid/mdraid_start.sh ++++ b/modules.d/90mdraid/mdraid_start.sh +@@ -21,6 +21,5 @@ for md in /dev/md[0-9]* /dev/md/*; do + done + unset udevinfo + +-ln -s $(command -v mdraid-cleanup) $hookdir/pre-pivot/30-mdraid-cleanup.sh 2>/dev/null + ln -s $(command -v mdraid-cleanup) $hookdir/pre-pivot/31-mdraid-cleanup.sh 2>/dev/null + udevadm control --start-exec-queue diff --git a/0048-90mdraid-fix-adjust-force-run-script.patch b/0048-90mdraid-fix-adjust-force-run-script.patch new file mode 100644 index 0000000..433ff46 --- /dev/null +++ b/0048-90mdraid-fix-adjust-force-run-script.patch @@ -0,0 +1,136 @@ +From 66426469d024b7760f59051af287e11ec6a94c1f Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 00:17:27 +0200 +Subject: [PATCH] 90mdraid: fix/adjust force-run script + +1) mdadm -As --auto=yes --run 2>&1 | vinfo (removed) + +Currently such auto assembly will not complete or force-run partially +assembled arrays. It might assemble "concurrent" separate array and +force-run it, if possible (though the chances of suddenly showing +missing components in this scenario - a script run after udev timeout - +are pretty thin). See [1] for details. Also see #3 below. + +2) mdadm -Is --run 2>&1 (removed) + +This will only force-run native arrays - arrays in containers will not +be affected. See [1] for details. Also see #3 below. + +3) mdadm -R run loop (implicitly handles #1 & #2) + +This loop does everywthing that #1 & #2 are expected to do. Thus, the +above invocations are simply redundant and this is the most safe and +flexible option. + +Also, it shouldn't be necessary to go under md/ directory, as those are +just symlinks to /dev/md[0-9]*. + +Certain checks were changed to strict ones (array state, degraded state) +instead of relying on env tricks. + +'cat' was added explicitly to installed programs (it has been used +implicitly in shutdown script either way) + +4) mdmon bug + +See [1] for details as well. In short - force-run arrays in containers +will not have mdmon started, so we do that manually. + +5) stop/run queue magic + +Also removed. mdadm -R will only cause change events to the array +itself, and they should not be an issue. + +[1] http://article.gmane.org/gmane.linux.raid/35133 + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/mdraid_start.sh | 51 ++++++++++++++++++++++-------------- + modules.d/90mdraid/module-setup.sh | 2 +- + modules.d/90mdraid/parse-md.sh | 1 + + 3 files changed, 33 insertions(+), 21 deletions(-) + +diff --git a/modules.d/90mdraid/mdraid_start.sh b/modules.d/90mdraid/mdraid_start.sh +index 4c0255e..be5a3ce 100755 +--- a/modules.d/90mdraid/mdraid_start.sh ++++ b/modules.d/90mdraid/mdraid_start.sh +@@ -3,23 +3,34 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh +-# run mdadm if udev has settled +-info "Assembling MD RAID arrays" +-udevadm control --stop-exec-queue +-mdadm -As --auto=yes --run 2>&1 | vinfo +-mdadm -Is --run 2>&1 | vinfo +- +-# there could still be some leftover devices +-# which have had a container added +-for md in /dev/md[0-9]* /dev/md/*; do +- [ -b "$md" ] || continue +- udevinfo="$(udevadm info --query=env --name=$md)" +- strstr "$udevinfo" "MD_UUID=" && continue +- strstr "$udevinfo" "MD_LEVEL=container" && continue +- strstr "$udevinfo" "DEVTYPE=partition" && continue +- mdadm --run "$md" 2>&1 | vinfo +-done +-unset udevinfo +- +-ln -s $(command -v mdraid-cleanup) $hookdir/pre-pivot/31-mdraid-cleanup.sh 2>/dev/null +-udevadm control --start-exec-queue ++_md_force_run() { ++ local _udevinfo ++ local _path_s ++ local _path_d ++ # try to force-run anything not running yet ++ for md in /dev/md[0-9]*; do ++ [ -b "$md" ] || continue ++ _udevinfo="$(udevadm info --query=env --name="$md")" ++ strstr "$_udevinfo" "MD_LEVEL=container" && continue ++ strstr "$_udevinfo" "DEVTYPE=partition" && continue ++ ++ _path_s="$(udevadm info -q path -n "$md")/md/array_state" ++ [ ! -r "$_path_s" ] && continue ++ ++ # inactive ? ++ [ "$(cat "$_path_s")" != "inactive" ] && continue ++ ++ mdadm -R "$md" 2>&1 | vinfo ++ ++ # still inactive ? ++ [ "$(cat "$_path_s")" = "inactive" ] && continue ++ ++ _path_d="${_path_s%/*}/degraded" ++ [ ! -r "$_path_d" ] && continue ++ ++ # workaround for mdmon bug ++ [ "$(cat "$_path_d")" -gt "0" ] && mdmon --takeover "$md" ++ done ++} ++ ++_md_force_run +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index 2dba8cb..cfc2a20 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -37,7 +37,7 @@ installkernel() { + } + + install() { +- dracut_install mdadm partx ++ dracut_install mdadm partx cat + + + # XXX: mdmon really needs to run as non-root? +diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh +index 6d1b615..63f3278 100755 +--- a/modules.d/90mdraid/parse-md.sh ++++ b/modules.d/90mdraid/parse-md.sh +@@ -34,6 +34,7 @@ fi + + if ! getargbool 1 rd.md.conf -n rd_NO_MDADMCONF; then + rm -f /etc/mdadm/mdadm.conf /etc/mdadm.conf ++ ln -s $(command -v mdraid-cleanup) $hookdir/pre-pivot/31-mdraid-cleanup.sh 2>/dev/null + fi + + # noiswmd nodmraid for anaconda / rc.sysinit compatibility diff --git a/0049-90-md-dm-raid-recognize-ddf-container.patch b/0049-90-md-dm-raid-recognize-ddf-container.patch new file mode 100644 index 0000000..a289946 --- /dev/null +++ b/0049-90-md-dm-raid-recognize-ddf-container.patch @@ -0,0 +1,140 @@ +From cf5891424ef026eede69606a918dadf5560095fd Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 00:17:24 +0200 +Subject: [PATCH] 90(md|dm)raid: recognize ddf container + +This patch adds ddf support, consistently with imsm/isw options. + +Signed-off-by: Michal Soltys +--- + dracut.kernel.7.xml | 6 ++++++ + modules.d/90dmraid/61-dmraid-imsm.rules | 1 + + modules.d/90dmraid/parse-dm.sh | 4 ++++ + modules.d/90mdraid/65-md-incremental-imsm.rules | 3 ++- + modules.d/90mdraid/md-noddf.sh | 5 +++++ + modules.d/90mdraid/md-noimsm.sh | 2 +- + modules.d/90mdraid/module-setup.sh | 6 +++++- + modules.d/90mdraid/parse-md.sh | 6 ++++++ + 8 files changed, 30 insertions(+), 3 deletions(-) + create mode 100755 modules.d/90mdraid/md-noddf.sh + +diff --git a/dracut.kernel.7.xml b/dracut.kernel.7.xml +index b6e59e6..8d50d94 100644 +--- a/dracut.kernel.7.xml ++++ b/dracut.kernel.7.xml +@@ -343,6 +343,12 @@ This parameter can be specified multiple times. + + + ++ rd.md.ddf=0 ++ ++ disable MD RAID for SNIA ddf raids, use DM RAID instead ++ ++ ++ + + rd.md.conf=0 + +diff --git a/modules.d/90dmraid/61-dmraid-imsm.rules b/modules.d/90dmraid/61-dmraid-imsm.rules +index d87fce7..73ba58e 100644 +--- a/modules.d/90dmraid/61-dmraid-imsm.rules ++++ b/modules.d/90dmraid/61-dmraid-imsm.rules +@@ -10,6 +10,7 @@ ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="dm_end" + ENV{ID_FS_TYPE}!="*_raid_member", , GOTO="dm_end" + + ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}!="?*", GOTO="dm_end" ++ENV{ID_FS_TYPE}=="ddf_raid_member", ENV{rd_NO_MDDDF}!="?*", GOTO="dm_end" + + ENV{rd_NO_DM}=="?*", GOTO="dm_end" + +diff --git a/modules.d/90dmraid/parse-dm.sh b/modules.d/90dmraid/parse-dm.sh +index 059c396..fe38d35 100755 +--- a/modules.d/90dmraid/parse-dm.sh ++++ b/modules.d/90dmraid/parse-dm.sh +@@ -12,3 +12,7 @@ if ! command -v mdadm >/dev/null || ! getargbool 1 rd.md.imsm -n rd_NO_MDIMSM | + udevproperty rd_NO_MDIMSM=1 + fi + ++if ! command -v mdadm >/dev/null || ! getargbool 1 rd.md.ddf -n rd_NO_MDDDF || getarg noddfmd; then ++ info "rd.md.ddf=0: no MD RAID for SNIA ddf raids" ++ udevproperty rd_NO_MDDDF=1 ++fi +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index 5e94a57..bb030cf 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -4,9 +4,10 @@ + + ACTION!="add|change", GOTO="md_inc_end" + SUBSYSTEM!="block", GOTO="md_inc_end" +-ENV{ID_FS_TYPE}!="linux_raid_member|isw_raid_member", GOTO="md_inc_end" ++ENV{ID_FS_TYPE}!="*_raid_member", GOTO="md_inc_end" + + ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_inc_end" ++ENV{ID_FS_TYPE}=="ddf_raid_member", ENV{rd_NO_MDDDF}=="?*", GOTO="md_inc_end" + + ENV{rd_NO_MD}=="?*", GOTO="md_inc_end" + +diff --git a/modules.d/90mdraid/md-noddf.sh b/modules.d/90mdraid/md-noddf.sh +new file mode 100755 +index 0000000..bc46dd7 +--- /dev/null ++++ b/modules.d/90mdraid/md-noddf.sh +@@ -0,0 +1,5 @@ ++#!/bin/sh ++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- ++# ex: ts=8 sw=4 sts=4 et filetype=sh ++info "rd.md.ddf=0: no MD RAID for SNIA ddf raids" ++udevproperty rd_NO_MDDDF=1 +diff --git a/modules.d/90mdraid/md-noimsm.sh b/modules.d/90mdraid/md-noimsm.sh +index bc9cf7f..8272f86 100755 +--- a/modules.d/90mdraid/md-noimsm.sh ++++ b/modules.d/90mdraid/md-noimsm.sh +@@ -2,4 +2,4 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + info "rd.md.imsm=0: no MD RAID for imsm/isw raids" +-udevproperty rd_NO_MDIMSM=1 +\ No newline at end of file ++udevproperty rd_NO_MDIMSM=1 +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index cfc2a20..5c526a0 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -20,7 +20,7 @@ check() { + check_block_and_slaves is_mdraid "$_rootdev" || return 1 + else + # root is not on a block device, use the shotgun approach +- blkid | egrep -q '(linux|isw)_raid' || return 1 ++ blkid | grep -q '"[^"]*_raid_member"' || return 1 + fi + } + +@@ -59,9 +59,13 @@ install() { + + inst_rules "$moddir/65-md-incremental-imsm.rules" + ++ # guard against pre-3.0 mdadm versions, that can't handle containers + if ! mdadm -Q -e imsm /dev/null &> /dev/null; then + inst_hook pre-trigger 30 "$moddir/md-noimsm.sh" + fi ++ if ! mdadm -Q -e ddf /dev/null &> /dev/null; then ++ inst_hook pre-trigger 30 "$moddir/md-noddf.sh" ++ fi + + if [[ $hostonly ]] || [[ $mdadmconf = "yes" ]]; then + if [ -f /etc/mdadm.conf ]; then +diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh +index 63f3278..33d93dc 100755 +--- a/modules.d/90mdraid/parse-md.sh ++++ b/modules.d/90mdraid/parse-md.sh +@@ -43,3 +43,9 @@ if ! getargbool 1 rd.md.imsm -n rd_NO_MDIMSM || getarg noiswmd || getarg nodmrai + info "no MD RAID for imsm/isw raids" + udevproperty rd_NO_MDIMSM=1 + fi ++ ++# same thing with ddf containers ++if ! getargbool 1 rd.md.ddf -n rd_NO_MDDDF || getarg noddfmd || getarg nodmraid; then ++ info "no MD RAID for SNIA ddf raids" ++ udevproperty rd_NO_MDDDF=1 ++fi diff --git a/0050-90mdraid-fix-adjust-65-md-rules-and-related-scripts.patch b/0050-90mdraid-fix-adjust-65-md-rules-and-related-scripts.patch new file mode 100644 index 0000000..53b6fe6 --- /dev/null +++ b/0050-90mdraid-fix-adjust-65-md-rules-and-related-scripts.patch @@ -0,0 +1,200 @@ +From a025cc17f0d8145492ffbb37735deca208e768bd Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 00:17:28 +0200 +Subject: [PATCH] 90mdraid: fix/adjust 65-md* rules and related scripts + +Reworked the flow of the rules file a bit, removed redundant tests, also +should be easier to follow. It's much shorter now as well, a bit more +similar to 90lvm script - both revolve around same concepts after all. + +There's no reason to treat conf-assembled arrays differently from +incremental ones. Once we hit timeout in init's udev loop, we can use +common script (mdraid_start.sh) to try force inactive arrays +into degraded mode. + +md-finished.sh was kind-of out of place - it didn't really wait for any +particular device(s) to show up, just watched if onetime mdadm scripts +are still in place. Furthermore, after moving mdraid_start to --timeout +initqueue, it didn't really have too much to watch at all, besides +mdadm_auto (and that served no purpose, as we do wait for concrete +devices). + +Either way, with stock 64-md fixes, current version of 65-md*.rules does +the following: + +- limits assembly to certain uuids, if specified +- watch for no ddf/imsm +- if mdadm.conf => setup onetime -As script, without forced --run option +- if !mdadm.conf => incrementally assemble +- for both cases, setup timeout script, run-forcing arrays as a last resort + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/65-md-incremental-imsm.rules | 79 ++++++++--------------- + modules.d/90mdraid/md_finished.sh | 9 --- + modules.d/90mdraid/mdadm_auto.sh | 2 +- + modules.d/90mdraid/module-setup.sh | 1 - + modules.d/90mdraid/parse-md.sh | 8 ++- + 5 files changed, 34 insertions(+), 65 deletions(-) + delete mode 100755 modules.d/90mdraid/md_finished.sh + +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index bb030cf..209b17b 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -2,68 +2,45 @@ + # automatically cause mdadm to be run. + # See udev(8) for syntax + +-ACTION!="add|change", GOTO="md_inc_end" +-SUBSYSTEM!="block", GOTO="md_inc_end" +-ENV{ID_FS_TYPE}!="*_raid_member", GOTO="md_inc_end" +- +-ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_inc_end" +-ENV{ID_FS_TYPE}=="ddf_raid_member", ENV{rd_NO_MDDDF}=="?*", GOTO="md_inc_end" +- +-ENV{rd_NO_MD}=="?*", GOTO="md_inc_end" +- +-PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/md[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ +- GOTO="md_inc_end" ++ACTION!="add|change", GOTO="md_end" ++SUBSYSTEM!="block", GOTO="md_end" ++ENV{rd_NO_MD}=="?*", GOTO="md_end" ++KERNEL=="md*", GOTO="md_end" ++ ++ENV{ID_FS_TYPE}!="*_raid_member", GOTO="md_end" ++ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_end" ++ENV{ID_FS_TYPE}=="ddf_raid_member", ENV{rd_NO_MDDDF}=="?*", GOTO="md_end" ++ ++# already done ? ++PROGRAM="/bin/sh -c 'for i in $sys/$devpath/holders/md[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ ++ GOTO="md_end" ++ ++# for native arrays - array's uuid has to be specified ++# for containers - container's uuid has to be specified ++# TODO : how to get embedded array's uuid having container's component ? ++# ++# UUID CHECK + + ENV{DEVTYPE}!="partition", \ + RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" + +-KERNEL!="md*", IMPORT{program}="/sbin/mdadm --examine --export $tempnode" +- +-# UUID CHECK +- +-LABEL="do_md_inc" ++RUN+="/sbin/initqueue --timeout --onetime --unique /sbin/mdraid_start" + ++# if rd_MDADMCONF is set, do not assemble incrementally; ++# defer conf-based assembly until the udev queue is settled + # +-# if rd_MDADMCONF do not assemble incrementally +-# defer auto assembly until the udev queue is settled +-# +-ENV{rd_MDADMCONF}!="?*", GOTO="md_auto_end" ++ENV{rd_MDADMCONF}!="?*", GOTO="md_incremental" + +-RUN+="/sbin/initqueue --finished --unique --name md_finished /sbin/md_finished.sh" + RUN+="/sbin/initqueue --settled --onetime --unique /sbin/mdadm_auto" + +-GOTO="md_inc_end" +- +-LABEL="md_auto_end" ++GOTO="md_end" + + # +-# Incrementally build the md array ++# Incrementally build the md array; this will automatically assemble ++# any eventual containers as well (imsm, ddf) + # +-RUN+="/sbin/mdadm -I $env{DEVNAME}" +- +-RUN+="/sbin/initqueue --finished --unique --name md_finished /sbin/md_finished.sh" +- +-LABEL="md_inc_end" +- +-# +-# Handle non-container raid arrays +-# +-ACTION=="add|change", \ +- KERNEL=="md[0-9]*|md/*", \ +- ENV{MD_LEVEL}!="container", \ +- ENV{MD_CONTAINER}!="?*", \ +- ENV{rd_MDADMCONF}!="?*", \ +- ENV{rd_NO_MD}!="?*", \ +- GOTO="do_raidstart" ++LABEL="md_incremental" + +-GOTO="end_raidstart" +- +-LABEL="do_raidstart" +- +-# check if array is not inactive anymore +-TEST=="md/array_state", ATTR{md/array_state}!="|inactive", GOTO="end_raidstart" +- +-RUN+="/sbin/initqueue --finished --unique --name md_finished /sbin/md_finished.sh" +-RUN+="/sbin/initqueue --timeout --onetime --unique /sbin/mdraid_start" ++RUN+="/sbin/mdadm -I $env{DEVNAME}" + +-LABEL="end_raidstart" ++LABEL="md_end" +diff --git a/modules.d/90mdraid/md_finished.sh b/modules.d/90mdraid/md_finished.sh +deleted file mode 100755 +index ce355be..0000000 +--- a/modules.d/90mdraid/md_finished.sh ++++ /dev/null +@@ -1,9 +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 +-for f in $hookdir/initqueue/settled/mdraid_start* $hookdir/initqueue/settled/mdadm_auto*; do +- [ -e $f ] && exit 1 +-done +- +-$UDEV_QUEUE_EMPTY >/dev/null 2>&1 || exit 1 +-exit 0 +diff --git a/modules.d/90mdraid/mdadm_auto.sh b/modules.d/90mdraid/mdadm_auto.sh +index 915fb28..9b61bf5 100755 +--- a/modules.d/90mdraid/mdadm_auto.sh ++++ b/modules.d/90mdraid/mdadm_auto.sh +@@ -4,4 +4,4 @@ + type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + + info "Autoassembling MD Raid" +-mdadm -As --auto=yes --run 2>&1 | vinfo ++mdadm -As --auto=yes 2>&1 | vinfo +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index 5c526a0..12e6739 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -82,7 +82,6 @@ install() { + + inst "$moddir/mdraid_start.sh" /sbin/mdraid_start + inst "$moddir/mdadm_auto.sh" /sbin/mdadm_auto +- inst "$moddir/md_finished.sh" /sbin/md_finished.sh + inst_hook pre-trigger 30 "$moddir/parse-md.sh" + inst "$moddir/mdraid-cleanup.sh" /sbin/mdraid-cleanup + inst_hook shutdown 30 "$moddir/md-shutdown.sh" +diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh +index 33d93dc..b85a3a3 100755 +--- a/modules.d/90mdraid/parse-md.sh ++++ b/modules.d/90mdraid/parse-md.sh +@@ -13,12 +13,14 @@ else + [ -e "$f" ] || continue + while read line; do + if [ "${line%%UUID CHECK}" != "$line" ]; then ++ printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n' + for uuid in $MD_UUID; do +- printf 'ENV{MD_UUID}=="%s", GOTO="do_md_inc"\n' $uuid ++ printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid + done; +- printf 'GOTO="md_inc_end"\n'; ++ printf 'GOTO="md_end"\n' ++ printf 'LABEL="md_uuid_ok"\n' + else +- echo $line; ++ echo "$line" + fi + done < "${f}" > "${f}.new" + mv "${f}.new" "$f" diff --git a/0051-TEST-40-NBD-relaxed-check-on-ext3-filesystem-options.patch b/0051-TEST-40-NBD-relaxed-check-on-ext3-filesystem-options.patch new file mode 100644 index 0000000..facc88f --- /dev/null +++ b/0051-TEST-40-NBD-relaxed-check-on-ext3-filesystem-options.patch @@ -0,0 +1,58 @@ +From 75e8f476e7bf33e2759b5a05b9d10f8befc4eedd Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 22 Sep 2011 12:56:31 +0200 +Subject: [PATCH] TEST-40-NBD: relaxed check on ext3 filesystem options + +onerror=continue does not seem to be displayed for new kernels +--- + test/TEST-40-NBD/client-init | 1 + + test/TEST-40-NBD/create-root.sh | 1 + + test/TEST-40-NBD/test.sh | 4 ++-- + 3 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/test/TEST-40-NBD/client-init b/test/TEST-40-NBD/client-init +index 22dacd9..eb65b76 100755 +--- a/test/TEST-40-NBD/client-init ++++ b/test/TEST-40-NBD/client-init +@@ -5,6 +5,7 @@ while read dev fs fstype opts rest; do + [ "$dev" = "rootfs" ] && continue + [ "$fs" != "/" ] && continue + echo "nbd-OK $fstype $opts" >/dev/sda ++ echo "nbd-OK $fstype $opts" + break + done < /proc/mounts + export TERM=linux +diff --git a/test/TEST-40-NBD/create-root.sh b/test/TEST-40-NBD/create-root.sh +index bd866e4..4bef5f1 100755 +--- a/test/TEST-40-NBD/create-root.sh ++++ b/test/TEST-40-NBD/create-root.sh +@@ -14,6 +14,7 @@ lvm vgcreate dracut /dev/mapper/dracut_crypt_test && \ + lvm lvcreate -l 100%FREE -n root dracut && \ + lvm vgchange -ay && \ + mke2fs -j /dev/dracut/root && \ ++/sbin/tune2fs -e continue /dev/dracut/root && \ + mkdir -p /sysroot && \ + mount /dev/dracut/root /sysroot && \ + cp -a -t /sysroot /source/* && \ +diff --git a/test/TEST-40-NBD/test.sh b/test/TEST-40-NBD/test.sh +index 675ffd4..c5603fd 100755 +--- a/test/TEST-40-NBD/test.sh ++++ b/test/TEST-40-NBD/test.sh +@@ -40,7 +40,7 @@ client_test() { + local found opts nbdinfo + + [[ $fstype ]] || fstype=ext3 +- [[ $fsopt ]] || fsopt="errors=continue" ++ [[ $fsopt ]] || fsopt="ro" + + echo "CLIENT TEST START: $test_name" + +@@ -198,7 +198,7 @@ make_encrypted_root() { + ( + initdir=overlay + . $basedir/dracut-functions +- dracut_install mke2fs poweroff cp umount ++ dracut_install mke2fs poweroff cp umount tune2fs + inst_hook initqueue 01 ./create-root.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules + ) diff --git a/0052-99fs-lib-fs-lib.sh-fsck-btrfs-via-mounting-like-xfs.patch b/0052-99fs-lib-fs-lib.sh-fsck-btrfs-via-mounting-like-xfs.patch new file mode 100644 index 0000000..edde8bd --- /dev/null +++ b/0052-99fs-lib-fs-lib.sh-fsck-btrfs-via-mounting-like-xfs.patch @@ -0,0 +1,61 @@ +From 662ed0a13f4b497352fe9b6a1d243f06e45c4f3d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 22 Sep 2011 15:12:14 +0200 +Subject: [PATCH] 99fs-lib/fs-lib.sh: fsck btrfs via mounting like xfs + +btrfsck is only for manual repairing your filesystem +--- + modules.d/99fs-lib/fs-lib.sh | 33 ++++++++++++++++++++++++++++++++- + 1 files changed, 32 insertions(+), 1 deletions(-) + +diff --git a/modules.d/99fs-lib/fs-lib.sh b/modules.d/99fs-lib/fs-lib.sh +index f7b20dd..edb5852 100755 +--- a/modules.d/99fs-lib/fs-lib.sh ++++ b/modules.d/99fs-lib/fs-lib.sh +@@ -59,7 +59,7 @@ fsck_able() { + ;; + btrfs) + type btrfsck >/dev/null 2>&1 && +- _drv="_drv=btrfsck fsck_drv_com" && ++ _drv="_drv=none fsck_drv_btrfs" && + return 0 + ;; + *) +@@ -104,6 +104,37 @@ fsck_drv_xfs() { + return $_ret + } + ++fsck_drv_btrfs() { ++ local _ret ++ ++ # fs must be cleanly mounted (and umounted) first, before attempting any ++ # btrfs tools - if this works, nothing else should be needed ++ # note, that user is always dropped into the shell, if the filesystem is ++ # not mountable or if -f flag is found among _fop ++ mkdir -p /tmp/.btrfs ++ ++ info "trying to mount $_dev" ++ if mount -t btrfs "$_dev" "/tmp/.btrfs" >/dev/null 2>&1; then ++ _ret=0 ++ info "btrfs: $_dev is clean" ++ umount "$_dev" >/dev/null 2>&1 ++ else ++ _ret=4 ++ warn "*** $_dev is unmountable" ++ fi ++ if [ $_ret -gt 0 ] || strstr "$_fop" "-f"; then ++ warn "*** Dropping you to a shell. You have" ++ warn "*** btrfsck available." ++ warn "*** Note that if btrfs didn't mount properly, it's" ++ warn "*** probably pretty serious condition." ++ emergency_shell -n "(Repair filesystem)" ++ fi ++ ++ rm -r /tmp/.btrfs ++ return $_ret ++} ++ ++ + # common code for checkers that follow usual subset of options and return codes + fsck_drv_com() { + local _ret diff --git a/0053-dracut-functions-inst_rules-do-not-check-std-dirs-fo.patch b/0053-dracut-functions-inst_rules-do-not-check-std-dirs-fo.patch new file mode 100644 index 0000000..99488ea --- /dev/null +++ b/0053-dracut-functions-inst_rules-do-not-check-std-dirs-fo.patch @@ -0,0 +1,37 @@ +From 76f5fa549c483a7a38e4757578480096b94615ac Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 22 Sep 2011 15:43:34 +0200 +Subject: [PATCH] dracut-functions: inst_rules() do not check std dirs for abs + path + +if an absolute path is given, we should not check the standard udev rule +directories. +--- + dracut-functions | 14 ++++++++------ + 1 files changed, 8 insertions(+), 6 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index b11e37c..18a2e89 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -474,12 +474,14 @@ inst_rules() { + inst_dir "/lib/udev/rules.d" + inst_dir "$_target" + for _rule in "$@"; do +- for r in /lib/udev/rules.d /etc/udev/rules.d; do +- if [[ -f $r/$_rule ]]; then +- _found="$r/$_rule" +- inst_simple "$_found" +- fi +- done ++ if [ "${rule#/}" = $rule ]; then ++ for r in /lib/udev/rules.d /etc/udev/rules.d; do ++ if [[ -f $r/$_rule ]]; then ++ _found="$r/$_rule" ++ inst_simple "$_found" ++ fi ++ done ++ fi + for r in '' ./ $dracutbasedir/rules.d/; do + if [[ -f ${r}$_rule ]]; then + _found="${r}$_rule" diff --git a/0054-str_replace-fix.patch b/0054-str_replace-fix.patch new file mode 100644 index 0000000..60dfc19 --- /dev/null +++ b/0054-str_replace-fix.patch @@ -0,0 +1,33 @@ +From cb288154050ff5293bc9a0a72953cd2b93782abb Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Thu, 15 Sep 2011 08:45:57 +0200 +Subject: [PATCH] str_replace() fix + +Whitespace removal in: + + out="${out}${chop# }$r" + +will damage certain strings, for example the following call: + + str_replace ' aax aaxaa' x y + +would return 'aayaayaa' instead of ' aay aayaa'. + +Signed-off-by: Michal Soltys +--- + modules.d/99base/dracut-lib.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index 50b1ed2..62c3bf5 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -24,7 +24,7 @@ str_replace() { + + while strstr "${in}" "$s"; do + chop="${in%%$s*}" +- out="${out}${chop# }$r" ++ out="${out}${chop}$r" + in="${in#*$s}" + done + echo "${out}${in}" diff --git a/0055-dracut-logger-bail-out-early-if-we-don-t-have-to-log.patch b/0055-dracut-logger-bail-out-early-if-we-don-t-have-to-log.patch new file mode 100644 index 0000000..a73d63b --- /dev/null +++ b/0055-dracut-logger-bail-out-early-if-we-don-t-have-to-log.patch @@ -0,0 +1,37 @@ +From 69063507d4c553cb5c4e51fb401d29eda7106351 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 22 Sep 2011 15:49:25 +0200 +Subject: [PATCH] dracut-logger: bail out early, if we don't have to log + anything + +--- + dracut-logger | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/dracut-logger b/dracut-logger +index d85cbaf..ce28208 100755 +--- a/dracut-logger ++++ b/dracut-logger +@@ -271,12 +271,8 @@ _dlvl2syslvl() { + # - @c INFO to @c info + # - @c DEBUG and @c TRACE both to @c debug + _do_dlog() { +- [ -z "$maxloglvl" ] && return 0 + local lvl="$1"; shift + local lvlc=$(_lvl2char "$lvl") || return 0 +- +- [ $lvl -le $maxloglvl ] || return 0 +- + local msg="$lvlc: $*" + + [ $lvl -le $stdloglvl ] && echo "$msg" >&2 +@@ -307,6 +303,9 @@ _do_dlog() { + # dwarn "This is a warning" + # echo "This is a warning" | dwarn + dlog() { ++ [ -z "$maxloglvl" ] && return 0 ++ [ $1 -le $maxloglvl ] || return 0 ++ + if [ $# -gt 1 ]; then + _do_dlog "$@" + else diff --git a/0056-dracut-create-dev-besides-proc-sys-and-so.patch b/0056-dracut-create-dev-besides-proc-sys-and-so.patch new file mode 100644 index 0000000..6cfc26e --- /dev/null +++ b/0056-dracut-create-dev-besides-proc-sys-and-so.patch @@ -0,0 +1,24 @@ +From 7c14b3688c83b14c95bafb4989871ffac2092c42 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20=C5=BBo=C5=82nowski?= +Date: Sun, 4 Sep 2011 16:38:35 +0200 +Subject: [PATCH] dracut: create /dev besides /proc, /sys and so + +How it worked without it? The issue only manifests itself with +initramfs integrated into kernel. +--- + dracut | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut b/dracut +index 0e930c7..c9329bd 100755 +--- a/dracut ++++ b/dracut +@@ -510,7 +510,7 @@ if [[ $kernel_only != yes ]]; then + fi + done + +- for d in proc sys sysroot root run run/lock run/initramfs; do ++ for d in dev proc sys sysroot root run run/lock run/initramfs; do + if [ -h "/$d" ]; then + inst "/$d" + else diff --git a/0057-99fs-lib-export-FSTAB_FILE-before-fsck-call.patch b/0057-99fs-lib-export-FSTAB_FILE-before-fsck-call.patch new file mode 100644 index 0000000..b64bbeb --- /dev/null +++ b/0057-99fs-lib-export-FSTAB_FILE-before-fsck-call.patch @@ -0,0 +1,26 @@ +From f07aaccd0600cefd113d1393cb4ca6a7e969a8e1 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Tue, 6 Sep 2011 01:22:15 +0200 +Subject: [PATCH] 99fs-lib: export FSTAB_FILE before fsck call + +Signed-off-by: Michal Soltys +--- + modules.d/99fs-lib/fs-lib.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/99fs-lib/fs-lib.sh b/modules.d/99fs-lib/fs-lib.sh +index edb5852..f36299a 100755 +--- a/modules.d/99fs-lib/fs-lib.sh ++++ b/modules.d/99fs-lib/fs-lib.sh +@@ -210,10 +210,10 @@ fsck_batch() { + info " $_dev" + done + ++ export FSTAB_FILE + _out="$(fsck -M -T "$@" -- -a)" + _ret=$? + +- export FSTAB_FILE + fsck_tail + + return $_ret diff --git a/0058-dracut-functions-inst_rules-add-missing.patch b/0058-dracut-functions-inst_rules-add-missing.patch new file mode 100644 index 0000000..022d6fc --- /dev/null +++ b/0058-dracut-functions-inst_rules-add-missing.patch @@ -0,0 +1,22 @@ +From 08769b7f8a9efc57cd95d1f81e8aaf1a48db0d28 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 22 Sep 2011 16:14:38 +0200 +Subject: [PATCH] dracut-functions: inst_rules() add missing "" + +--- + dracut-functions | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 18a2e89..5508809 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -474,7 +474,7 @@ inst_rules() { + inst_dir "/lib/udev/rules.d" + inst_dir "$_target" + for _rule in "$@"; do +- if [ "${rule#/}" = $rule ]; then ++ if [ "${rule#/}" = "$rule" ]; then + for r in /lib/udev/rules.d /etc/udev/rules.d; do + if [[ -f $r/$_rule ]]; then + _found="$r/$_rule" diff --git a/0059-90mdraid-check-precisely-for-supported-contaiers.patch b/0059-90mdraid-check-precisely-for-supported-contaiers.patch new file mode 100644 index 0000000..3faae26 --- /dev/null +++ b/0059-90mdraid-check-precisely-for-supported-contaiers.patch @@ -0,0 +1,46 @@ +From db9b9f396e8d923591725f648c0a35789286254b Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Thu, 22 Sep 2011 17:09:56 +0200 +Subject: [PATCH] 90mdraid: check precisely for supported contaiers + +ID_FS_TYPE can be much more than just ddf/imsm/linux raid member, so +do the proper checks. + +This reverts certain changes from: +cf5891424ef026eede69606a918dadf5560095fd + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/65-md-incremental-imsm.rules | 5 ++++- + modules.d/90mdraid/module-setup.sh | 2 +- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index 209b17b..ea3a889 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -7,7 +7,10 @@ SUBSYSTEM!="block", GOTO="md_end" + ENV{rd_NO_MD}=="?*", GOTO="md_end" + KERNEL=="md*", GOTO="md_end" + +-ENV{ID_FS_TYPE}!="*_raid_member", GOTO="md_end" ++ENV{ID_FS_TYPE}=="ddf_raid_member|isw_raid_member|linux_raid_member", GOTO="md_try" ++GOTO="md_end" ++ ++LABEL="md_try" + ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_end" + ENV{ID_FS_TYPE}=="ddf_raid_member", ENV{rd_NO_MDDDF}=="?*", GOTO="md_end" + +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index 12e6739..d4a9870 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -20,7 +20,7 @@ check() { + check_block_and_slaves is_mdraid "$_rootdev" || return 1 + else + # root is not on a block device, use the shotgun approach +- blkid | grep -q '"[^"]*_raid_member"' || return 1 ++ blkid | egrep -q '(linux|isw|ddf)_raid' || return 1 + fi + } + diff --git a/0060-90mdraid-more-thorough-64-md-raid.rules-edit.patch b/0060-90mdraid-more-thorough-64-md-raid.rules-edit.patch new file mode 100644 index 0000000..e3e2f15 --- /dev/null +++ b/0060-90mdraid-more-thorough-64-md-raid.rules-edit.patch @@ -0,0 +1,25 @@ +From ae816bb6aa461eb561debc9188e69f726b31d805 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Thu, 22 Sep 2011 17:23:21 +0200 +Subject: [PATCH] 90mdraid: more thorough 64-md-raid.rules edit + +Catch more variations of incremental assembly. + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/module-setup.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index d4a9870..5e819b1 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -54,7 +54,7 @@ install() { + # 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 -e '/^ENV{ID_FS_TYPE}==.*ACTION=="add".*RUN+="\/sbin\/mdadm --incremental $env{DEVNAME}"$/d' "${initdir}/lib/udev/rules.d/64-md-raid.rules" ++ sed -ire '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}/lib/udev/rules.d/64-md-raid.rules" + fi + + inst_rules "$moddir/65-md-incremental-imsm.rules" diff --git a/0061-90mdraid-adjust-dev-md-loops.patch b/0061-90mdraid-adjust-dev-md-loops.patch new file mode 100644 index 0000000..a38299b --- /dev/null +++ b/0061-90mdraid-adjust-dev-md-loops.patch @@ -0,0 +1,53 @@ +From 9fc3f0452023c42c235c3312ad311243e7f900a2 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Thu, 22 Sep 2011 17:16:39 +0200 +Subject: [PATCH] 90mdraid: adjust /dev/md loops + +Include '_' to also handle old partitionable arrays (pre-2.6.28). + +Signed-off-by: Michal Soltys +--- + modules.d/90mdraid/65-md-incremental-imsm.rules | 2 +- + modules.d/90mdraid/mdraid-cleanup.sh | 2 +- + modules.d/90mdraid/mdraid_start.sh | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index ea3a889..2a80700 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -15,7 +15,7 @@ ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_end" + ENV{ID_FS_TYPE}=="ddf_raid_member", ENV{rd_NO_MDDDF}=="?*", GOTO="md_end" + + # already done ? +-PROGRAM="/bin/sh -c 'for i in $sys/$devpath/holders/md[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ ++PROGRAM="/bin/sh -c 'for i in $sys/$devpath/holders/md[0-9_]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ + GOTO="md_end" + + # for native arrays - array's uuid has to be specified +diff --git a/modules.d/90mdraid/mdraid-cleanup.sh b/modules.d/90mdraid/mdraid-cleanup.sh +index 8fc54e2..3ffa2d3 100755 +--- a/modules.d/90mdraid/mdraid-cleanup.sh ++++ b/modules.d/90mdraid/mdraid-cleanup.sh +@@ -5,7 +5,7 @@ + type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + + containers="" +-for md in /dev/md[0-9]*; do ++for md in /dev/md[0-9_]*; do + [ -b "$md" ] || continue + udevinfo="$(udevadm info --query=env --name=$md)" + strstr "$udevinfo" "DEVTYPE=partition" && continue +diff --git a/modules.d/90mdraid/mdraid_start.sh b/modules.d/90mdraid/mdraid_start.sh +index be5a3ce..f79f16e 100755 +--- a/modules.d/90mdraid/mdraid_start.sh ++++ b/modules.d/90mdraid/mdraid_start.sh +@@ -8,7 +8,7 @@ _md_force_run() { + local _path_s + local _path_d + # try to force-run anything not running yet +- for md in /dev/md[0-9]*; do ++ for md in /dev/md[0-9_]*; do + [ -b "$md" ] || continue + _udevinfo="$(udevadm info --query=env --name="$md")" + strstr "$_udevinfo" "MD_LEVEL=container" && continue diff --git a/0062-dracut-PATCH-Parameter-expansion-occurs-before-comma.patch b/0062-dracut-PATCH-Parameter-expansion-occurs-before-comma.patch new file mode 100644 index 0000000..ac62617 --- /dev/null +++ b/0062-dracut-PATCH-Parameter-expansion-occurs-before-comma.patch @@ -0,0 +1,38 @@ +From 9e103df45e4ca2c2392cedf3c9ecb84713962838 Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Fri, 23 Sep 2011 08:02:23 -0700 +Subject: [PATCH] dracut [PATCH] Parameter expansion occurs before command + evaluation. + +Bash shell expands all ${parameter} before evaluating a command. +For multiple declarations and assignments within the same 'local' command, +then new variables or new values that appear towards the left +do not affect parameter expansion towards the right. + +-- +John Reiser, jreiser@BitWagon.com + +>From 507ad6f66fc66f868a9e5fdd3806e012c4022baa Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Fri, 23 Sep 2011 07:37:43 -0700 +Subject: [PATCH] Parameter expansion occurs before command evaluation. + +${parameter} on the right is expanded before evaluating "local var=value" +on the left. +--- + dracut-functions | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 5508809..c4f7f61 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -272,7 +272,7 @@ check_vol_slaves() { + inst_dir() { + [[ -e ${initdir}"$1" ]] && return 0 # already there + +- local _dir="$1" _part=${_dir%/*} _file ++ local _dir="$1" _part="${1%/*}" _file + while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}${_part}" ]]; do + _dir="$_part $_dir" + _part=${_part%/*} diff --git a/0063-dracut-PATCH-es-parallelize-block_module-filter-and-.patch b/0063-dracut-PATCH-es-parallelize-block_module-filter-and-.patch new file mode 100644 index 0000000..87231fc --- /dev/null +++ b/0063-dracut-PATCH-es-parallelize-block_module-filter-and-.patch @@ -0,0 +1,100 @@ +From d23159a69c818274486f1287ba6267b96f3febb7 Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Fri, 23 Sep 2011 09:17:13 -0700 +Subject: [PATCH] dracut [PATCH]es: parallelize block_module filter and + net_module_filter + +Filtering modules requires enough work that instmods() in the +next pipeline stage was rarely busy. Parallelize the two +filters which do the most work. Also fix a filename-vs-contents +mistake in net_module_filter. + +-- +John Reiser, jreiser@BitWagon.com + +>From f4533a2ceca52c443ddebec01eeaa35d51c39c1b Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Tue, 13 Sep 2011 17:41:43 -0700 +Subject: [PATCH 1/3] Parallelize block_module_filter +--- + modules.d/40network/module-setup.sh | 33 +++++++++++++++++---------- + modules.d/90kernel-modules/module-setup.sh | 22 +++++++++++++----- + 2 files changed, 37 insertions(+), 18 deletions(-) + +diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh +index cb81269..03684f1 100755 +--- a/modules.d/40network/module-setup.sh ++++ b/modules.d/40network/module-setup.sh +@@ -27,18 +27,27 @@ installkernel() { + net_module_filter() { + local _net_drivers='eth_type_trans|register_virtio_device' + local _unwanted_drivers='/(wireless|isdn|uwb)/' +- local _fname +- while read _fname; do +- local _fcont +- case "$_fname" in +- *.ko) _fcont="$(< $_fname)" ;; +- *.ko.gz) _fcont="$(gzip -dc $_fname)" ;; +- esac +- [[ $_fcont =~ $_net_drivers +- && ! $_fcont =~ iw_handler_get_spy \ +- && ! $_fname =~ $_unwanted_drivers ]] \ +- && echo "$_fname" +- done ++ function nmf1() { ++ local _fname _fcont ++ while read _fname; do ++ [[ $_fname =~ $_unwanted_drivers ]] && continue ++ case "$_fname" in ++ *.ko) _fcont="$(< $_fname)" ;; ++ *.ko.gz) _fcont="$(gzip -dc $_fname)" ;; ++ esac ++ [[ $_fcont =~ $_net_drivers ++ && ! $_fcont =~ iw_handler_get_spy ]] \ ++ && echo "$_fname" ++ done ++ } ++ # Use two parallel streams to filter alternating modules. ++ local merge side2 ++ ( ( local _f1 _f2 ++ while read _f1; do echo "$_f1" ++ if read _f2; then echo "$_f2" 1>&${side2}; fi ++ done \ ++ | nmf1 1>&${merge} ) {side2}>&1 \ ++ | nmf1 ) {merge}>&1 + } + + find_kernel_modules_by_path drivers/net | net_module_filter | instmods +diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh +index 9fc4248..09bd87e 100755 +--- a/modules.d/90kernel-modules/module-setup.sh ++++ b/modules.d/90kernel-modules/module-setup.sh +@@ -11,12 +11,22 @@ installkernel() { + } + block_module_filter() { + local _blockfuncs='ahci_init_controller|ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device' +- local _f +- while read _f; do case "$_f" in +- *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;; +- *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;; +- esac +- done ++ function bmf1() { ++ local _f ++ while read _f; do case "$_f" in ++ *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;; ++ *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;; ++ esac ++ done ++ } ++ # Use two parallel streams to filter alternating modules. ++ local merge side2 ++ ( ( local _f1 _f2 ++ while read _f1; do echo "$_f1" ++ if read _f2; then echo "$_f2" 1>&${side2}; fi ++ done \ ++ | bmf1 1>&${merge} ) {side2}>&1 \ ++ | bmf1 ) {merge}>&1 + } + hostonly='' instmods sr_mod sd_mod scsi_dh scsi_dh_rdac scsi_dh_emc + hostonly='' instmods pcmcia firewire-ohci diff --git a/0064-order-mdadm-and-lvm-timeout-operations.patch b/0064-order-mdadm-and-lvm-timeout-operations.patch new file mode 100644 index 0000000..6426bfd --- /dev/null +++ b/0064-order-mdadm-and-lvm-timeout-operations.patch @@ -0,0 +1,36 @@ +From 77a57d5eafc3e46d01b196312d5dd4f28e0e8010 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 4 Oct 2011 13:03:45 +0200 +Subject: [PATCH] order mdadm and lvm timeout operations + +--- + modules.d/90lvm/64-lvm.rules | 2 +- + modules.d/90mdraid/65-md-incremental-imsm.rules | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/90lvm/64-lvm.rules b/modules.d/90lvm/64-lvm.rules +index 487d08a..ab827a9 100644 +--- a/modules.d/90lvm/64-lvm.rules ++++ b/modules.d/90lvm/64-lvm.rules +@@ -13,7 +13,7 @@ PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && + GOTO="lvm_end" + + RUN+="/sbin/initqueue --settled --onetime --unique /sbin/lvm_scan" +-RUN+="/sbin/initqueue --timeout --onetime --unique /sbin/lvm_scan --partial" ++RUN+="/sbin/initqueue --timeout --name 51-lvm_scan --onetime --unique /sbin/lvm_scan --partial" + RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k;'" + + LABEL="lvm_end" +diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules +index 2a80700..139a599 100644 +--- a/modules.d/90mdraid/65-md-incremental-imsm.rules ++++ b/modules.d/90mdraid/65-md-incremental-imsm.rules +@@ -27,7 +27,7 @@ PROGRAM="/bin/sh -c 'for i in $sys/$devpath/holders/md[0-9_]*; do [ -e $$i ] && + ENV{DEVTYPE}!="partition", \ + RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" + +-RUN+="/sbin/initqueue --timeout --onetime --unique /sbin/mdraid_start" ++RUN+="/sbin/initqueue --timeout --name 50-mdraid_start --onetime --unique /sbin/mdraid_start" + + # if rd_MDADMCONF is set, do not assemble incrementally; + # defer conf-based assembly until the udev queue is settled diff --git a/0065-90mdraid-mdraid_start.sh-fix-path-to-md-sysfs.patch b/0065-90mdraid-mdraid_start.sh-fix-path-to-md-sysfs.patch new file mode 100644 index 0000000..35a7ec4 --- /dev/null +++ b/0065-90mdraid-mdraid_start.sh-fix-path-to-md-sysfs.patch @@ -0,0 +1,22 @@ +From e0e9221e23f783ce670349df52da46bf6dc05c14 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 4 Oct 2011 13:06:33 +0200 +Subject: [PATCH] 90mdraid/mdraid_start.sh: fix path to md sysfs + +--- + modules.d/90mdraid/mdraid_start.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90mdraid/mdraid_start.sh b/modules.d/90mdraid/mdraid_start.sh +index f79f16e..f4b7ad0 100755 +--- a/modules.d/90mdraid/mdraid_start.sh ++++ b/modules.d/90mdraid/mdraid_start.sh +@@ -14,7 +14,7 @@ _md_force_run() { + strstr "$_udevinfo" "MD_LEVEL=container" && continue + strstr "$_udevinfo" "DEVTYPE=partition" && continue + +- _path_s="$(udevadm info -q path -n "$md")/md/array_state" ++ _path_s="/sys/$(udevadm info -q path -n "$md")/md/array_state" + [ ! -r "$_path_s" ] && continue + + # inactive ? diff --git a/0066-90mdraid-module-setup.sh-fixed-sed-arguments.patch b/0066-90mdraid-module-setup.sh-fixed-sed-arguments.patch new file mode 100644 index 0000000..a3aa8f7 --- /dev/null +++ b/0066-90mdraid-module-setup.sh-fixed-sed-arguments.patch @@ -0,0 +1,22 @@ +From 54ffd5447da0a912f91d21dde22d56b0f5762484 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 4 Oct 2011 13:30:35 +0200 +Subject: [PATCH] 90mdraid/module-setup.sh: fixed sed arguments + +--- + modules.d/90mdraid/module-setup.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index 5e819b1..fe793bb 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -54,7 +54,7 @@ install() { + # 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 -ire '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}/lib/udev/rules.d/64-md-raid.rules" ++ sed -i -r -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode)"/d' "${initdir}/lib/udev/rules.d/64-md-raid.rules" + fi + + inst_rules "$moddir/65-md-incremental-imsm.rules" diff --git a/0067-95udev-rules-module-setup.sh-also-search-in-lib-udev.patch b/0067-95udev-rules-module-setup.sh-also-search-in-lib-udev.patch new file mode 100644 index 0000000..b68bbe4 --- /dev/null +++ b/0067-95udev-rules-module-setup.sh-also-search-in-lib-udev.patch @@ -0,0 +1,41 @@ +From e0f9ecc6a47bb01de04e6b44ade38f347fe057da Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 6 Oct 2011 10:25:08 +0200 +Subject: [PATCH] 95udev-rules/module-setup.sh: also search in /lib/udev and + /usr/lib/udev + +--- + modules.d/95udev-rules/module-setup.sh | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh +index 876f7a3..eddf2b0 100755 +--- a/modules.d/95udev-rules/module-setup.sh ++++ b/modules.d/95udev-rules/module-setup.sh +@@ -7,7 +7,9 @@ install() { + # FIXME: would be nice if we didn't have to know which rules to grab.... + # ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies + # of the rules we want so that we just copy those in would be best +- dracut_install udevd udevadm ++ dracut_install udevadm ++ [ -x /sbin/udevd ] && dracut_install udevd ++ + for i in /etc/udev/udev.conf /etc/group; do + inst_simple $i + done +@@ -55,10 +57,15 @@ install() { + vol_id \ + pcmcia-socket-startup \ + pcmcia-check-broken-cis \ ++ udevd \ + ; do + [ -e /lib/udev/$_i ] && dracut_install /lib/udev/$_i ++ [ -e /usr/lib/udev/$_i ] && dracut_install /usr/lib/udev/$_i + done + ++ [ -x /lib/udev/udevd ] && ln -s ../lib/udev/udevd /sbin/udevd ++ [ -x /usr/lib/udev/udevd ] && ln -s ../usr/lib/udev/udevd /sbin/udevd ++ + [ -f /etc/arch-release ] && \ + inst "$moddir/load-modules.sh" /lib/udev/load-modules.sh + diff --git a/0068-update-the-documentation-of-no-prefix.patch b/0068-update-the-documentation-of-no-prefix.patch new file mode 100644 index 0000000..7c6b15a --- /dev/null +++ b/0068-update-the-documentation-of-no-prefix.patch @@ -0,0 +1,48 @@ +From 0c3a8dea88a7c7f3fdda5000d3e77b61bfbe7f6a Mon Sep 17 00:00:00 2001 +From: WANG Cong +Date: Fri, 7 Oct 2011 15:44:10 +0800 +Subject: [PATCH] update the documentation of '--[no]prefix' + +In + +commit fd786adcf515d9d3ee77eb29fa4c6b60020c7209 +Author: Harald Hoyer +Date: Wed Apr 20 16:47:40 2011 +0200 + + dracut: make prefix configurable + +Harald changed the meaning of --prefix/--noprefix, but +forgot to update their documentation. This patch +fixes that. + +Signed-off-by: WANG Cong +--- + dracut.8.xml | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/dracut.8.xml b/dracut.8.xml +index 11ea8c3..709f1a6 100644 +--- a/dracut.8.xml ++++ b/dracut.8.xml +@@ -245,10 +245,10 @@ include in the generic initramfs. This parameter can be specified multiple times + + + +- ++ + + +- prefix initramfs files with /run/initramfs/ ++ prefix initramfs files with the specified directory + + + +@@ -256,7 +256,7 @@ include in the generic initramfs. This parameter can be specified multiple times + + + +- do not prefix initramfs files with /run/initramfs/ (default) ++ do not prefix initramfs files (default) + + + diff --git a/0069-dracut-check-mktemp-return-value.patch b/0069-dracut-check-mktemp-return-value.patch new file mode 100644 index 0000000..1e2c7eb --- /dev/null +++ b/0069-dracut-check-mktemp-return-value.patch @@ -0,0 +1,29 @@ +From 88b3e00515804f7e6906590ab02534d1fe4ec91f Mon Sep 17 00:00:00 2001 +From: Dave Young +Date: Mon, 10 Oct 2011 11:41:14 +0200 +Subject: [PATCH] dracut: check mktemp return value + +in slackware the default mktemp is not from coreutils. +A simply make in test directory mangled my rootfs due +to initdir is blank + +Also mktemp could failed with other reason like ENOSPC or EPERM +--- + dracut | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/dracut b/dracut +index c9329bd..de13445 100755 +--- a/dracut ++++ b/dracut +@@ -472,6 +472,10 @@ fi + + readonly TMPDIR=/var/tmp + readonly initdir=$(mktemp --tmpdir=/var/tmp/ -d -t initramfs.XXXXXX) ++[ -d "$initdir" ] || { ++ dfatal "mktemp failed." ++ exit 1 ++} + + # clean up after ourselves no matter how we die. + trap 'ret=$?;[[ $keep ]] && echo "Not removing $initdir." >&2 || rm -rf "$initdir";exit $ret;' EXIT diff --git a/0070-convert_abs_rel-fixups.patch b/0070-convert_abs_rel-fixups.patch new file mode 100644 index 0000000..592d9fe --- /dev/null +++ b/0070-convert_abs_rel-fixups.patch @@ -0,0 +1,54 @@ +From c1609dd497bb8f8f083a258ff2f7702385eb940b Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Fri, 7 Oct 2011 22:23:49 +0200 +Subject: [PATCH] convert_abs_rel() fixups + +- IFS was not preserved, and modified value could leak to outside functions + +- the '.' relative path should be returned for arguments such as /x/y/z + /x/y - but not for $1 == $2 ones + +- $1 == $2 is self-looping link, so it returns final component of its + name + +Signed-off-by: Michal Soltys +--- + dracut-functions | 18 +++++++++++------- + 1 files changed, 11 insertions(+), 7 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index c4f7f61..12dfa70 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -91,20 +91,24 @@ normalize_path() { + } + + convert_abs_rel() { +- local __current __absolute __abssize __cursize __i __level __newpath ++ local __current __absolute __abssize __cursize __newpath="" __oldifs ++ local -i __i __level=0 + # PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): '; + +- if [[ "$1" == "$2" ]] +- then +- echo "." +- return +- fi ++ # corner case #1 - self looping link ++ [[ "$1" == "$2" ]] && { echo "${1##*/}"; return; } ++ ++ # corner case #2 - own dir link ++ [[ "${1%/*}" == "$2" ]] && { echo "."; return; } ++ + __current=$(normalize_path "$1") + __absolute=$(normalize_path "$2") +- IFS="/" + ++ __oldifs="$IFS" ++ IFS="/" + __current=($__current) + __absolute=($__absolute) ++ IFS="$__oldifs" + + __abssize=${#__absolute[@]} + __cursize=${#__current[@]} diff --git a/0071-dracut.8-add-missing-lvmconf-info.patch b/0071-dracut.8-add-missing-lvmconf-info.patch new file mode 100644 index 0000000..cbfb561 --- /dev/null +++ b/0071-dracut.8-add-missing-lvmconf-info.patch @@ -0,0 +1,44 @@ +From 77270329ba94b15c03e2f8154b0866d249e2d71f Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Fri, 7 Oct 2011 22:23:50 +0200 +Subject: [PATCH] dracut.8: add missing lvmconf info + +Signed-off-by: Michal Soltys +--- + dracut.8.xml | 17 +++++++++++++++++ + 1 files changed, 17 insertions(+), 0 deletions(-) + +diff --git a/dracut.8.xml b/dracut.8.xml +index 709f1a6..47cc371 100644 +--- a/dracut.8.xml ++++ b/dracut.8.xml +@@ -1,5 +1,6 @@ + + ++ + + + dracut +@@ -229,6 +230,22 @@ include in the generic initramfs. This parameter can be specified multiple times + + + ++ ++ ++ ++ include local /etc/lvm/lvm.conf ++ ++ ++ ++ ++ ++ ++ ++ do not include local /etc/lvm/lvm.conf ++ ++ ++ ++ + + + diff --git a/0072-fs-lib-add-ability-to-choose-fsck-tools.patch b/0072-fs-lib-add-ability-to-choose-fsck-tools.patch new file mode 100644 index 0000000..db3b176 --- /dev/null +++ b/0072-fs-lib-add-ability-to-choose-fsck-tools.patch @@ -0,0 +1,155 @@ +From 25b45979f20e5b6b4dfb5a15b1b8f93bccc60625 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Fri, 7 Oct 2011 22:23:51 +0200 +Subject: [PATCH] fs-lib: add ability to choose fsck tools + +in dracut.conf: + +fscks="" +nofscks="yes" + +and similary on command line: + +--fscks [LIST] (in addition to conf's, if defined there) +--nofscks + +Signed-off-by: Michal Soltys +--- + dracut | 13 ++++++++++++- + dracut.conf | 9 +++++++++ + modules.d/99fs-lib/fs-lib.sh | 6 +++--- + modules.d/99fs-lib/module-setup.sh | 23 ++++++++++++++++------- + 4 files changed, 40 insertions(+), 11 deletions(-) + +diff --git a/dracut b/dracut +index de13445..63d4ea6 100755 +--- a/dracut ++++ b/dracut +@@ -59,6 +59,8 @@ Creates initial ramdisk images for preloading modules + --nomdadmconf Do not include local /etc/mdadm.conf + --lvmconf Include local /etc/lvm/lvm.conf + --nolvmconf Do not include local /etc/lvm/lvm.conf ++ --fscks [LIST] Add a space-separated list of fsck helpers. ++ --nofscks Inhibit installation of any fsck helpers. + -h, --help This message + --debug Output debug information of the build process + --profile Output profile information of the build process +@@ -204,6 +206,8 @@ while (($# > 0)); do + --filesystems) push_arg filesystems_l "$@" || shift;; + -I|--install) push_arg install_items "$@" || shift;; + --fwdir) push_arg fw_dir_l "$@" || shift;; ++ --fscks) push_arg fscks_l "$@" || shift;; ++ --nofscks) nofscks_l="yes";; + -k|--kmoddir) read_arg drivers_dir_l "$@" || shift;; + -c|--conf) read_arg conffile "$@" || shift;; + --confdir) read_arg confdir "$@" || shift;; +@@ -324,6 +328,12 @@ if (( ${#add_drivers_l[@]} )); then + done + fi + ++if (( ${#fscks_l[@]} )); then ++ while pop fscks_l val; do ++ fscks+=" $val " ++ done ++fi ++ + # these options override the stuff in the config file + if (( ${#dracutmodules_l[@]} )); then + dracutmodules='' +@@ -379,6 +389,7 @@ stdloglvl=$((stdloglvl + verbosity_mod_l)) + [[ $do_strip ]] || do_strip=no + [[ $compress_l ]] && compress=$compress_l + [[ $show_modules_l ]] && show_modules=$show_modules_l ++[[ $nofscks_l ]] && nofscks="yes" + # eliminate IFS hackery when messing with fw_dir + fw_dir=${fw_dir//:/ } + +@@ -488,7 +499,7 @@ chmod 755 "$initdir" + export initdir dracutbasedir dracutmodules drivers \ + fw_dir drivers_dir debug no_kernel kernel_only \ + add_drivers mdadmconf lvmconf filesystems \ +- use_fstab libdir usrlibdir \ ++ use_fstab libdir usrlibdir fscks nofscks \ + stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ + debug + +diff --git a/dracut.conf b/dracut.conf +index 8684328..a502066 100644 +--- a/dracut.conf ++++ b/dracut.conf +@@ -29,3 +29,12 @@ mdadmconf="yes" + + # install local /etc/lvm/lvm.conf + lvmconf="yes" ++ ++# 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 ++# xfs_repair e2fsck jfs_fsck reiserfsck btrfsck". The installation is ++# opportunistic, so non-existing tools are just ignored. ++#fscks="" ++ ++# inhibit installation of any fsck tools ++#nofscks="yes" +diff --git a/modules.d/99fs-lib/fs-lib.sh b/modules.d/99fs-lib/fs-lib.sh +index f36299a..772d5c0 100755 +--- a/modules.d/99fs-lib/fs-lib.sh ++++ b/modules.d/99fs-lib/fs-lib.sh +@@ -177,7 +177,7 @@ fsck_drv_std() { + # returns 255 if filesystem wasn't checked at all (e.g. due to lack of + # necessary tools or insufficient options) + fsck_single() { +- local FSTAB_FILE=/etc/fstab.fslib ++ local FSTAB_FILE=/etc/fstab.empty + local _dev="$1" + local _fs="${2:-auto}" + local _fop="$3" +@@ -197,13 +197,13 @@ fsck_single() { + # takes list of filesystems to check in parallel; we don't rely on automatic + # checking based on fstab, so empty one is passed + fsck_batch() { +- local FSTAB_FILE=/etc/fstab.fslib ++ local FSTAB_FILE=/etc/fstab.empty + local _drv=fsck + local _dev + local _ret + local _out + +- [ $# -eq 0 ] && return 255 ++ [ $# -eq 0 ] || ! type fsck >/dev/null 2>&1 && return 255 + + info "Checking filesystems (fsck -M -T -a):" + for _dev in "$@"; do +diff --git a/modules.d/99fs-lib/module-setup.sh b/modules.d/99fs-lib/module-setup.sh +index cbf69a5..68ea9b1 100755 +--- a/modules.d/99fs-lib/module-setup.sh ++++ b/modules.d/99fs-lib/module-setup.sh +@@ -11,13 +11,22 @@ depends() { + } + + install() { +- dracut_install -o umount mount xfs_db xfs_check xfs_repair +- dracut_install -o e2fsck +- dracut_install -o jfs_fsck +- dracut_install -o reiserfsck +- dracut_install -o btrfsck +- dracut_install -o /sbin/fsck* ++ local _helpers + + inst "$moddir/fs-lib.sh" "/lib/fs-lib.sh" +- touch ${initdir}/etc/fstab.fslib ++ touch ${initdir}/etc/fstab.empty ++ ++ [[ "$nofscks" = "yes" ]] && return ++ ++ if [[ "$fscks" = "${fscks#*[^ ]*}" ]]; then ++ _helpers="\ ++ umount mount /sbin/fsck* ++ xfs_db xfs_check xfs_repair ++ e2fsck jfs_fsck reiserfsck btrfsck ++ " ++ else ++ _helpers="$fscks" ++ fi ++ ++ dracut_install -o $_helpers + } diff --git a/0073-manuals-add-info-about-fs-lib-fsck-configuration.patch b/0073-manuals-add-info-about-fs-lib-fsck-configuration.patch new file mode 100644 index 0000000..dba419e --- /dev/null +++ b/0073-manuals-add-info-about-fs-lib-fsck-configuration.patch @@ -0,0 +1,82 @@ +From 4c5da0157fad6bde8318dc653d88871f30cd645a Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Fri, 7 Oct 2011 22:23:52 +0200 +Subject: [PATCH] manuals: add info about fs-lib (fsck) configuration + +in dracut.8.xml & dracut.conf.5.xml + +Signed-off-by: Michal Soltys +--- + dracut.8.xml | 19 +++++++++++++++++++ + dracut.conf.5.xml | 22 ++++++++++++++++++++++ + 2 files changed, 41 insertions(+), 0 deletions(-) + +diff --git a/dracut.8.xml b/dracut.8.xml +index 47cc371..882eac6 100644 +--- a/dracut.8.xml ++++ b/dracut.8.xml +@@ -246,6 +246,25 @@ include in the generic initramfs. This parameter can be specified multiple times + + + ++ ++ ++ ++ add a space-separated list of fsck tools, in addition to ++ dracut.conf's specification; the ++ installation is opportunistic (non-exisiting tools are ignored) ++ ++ ++ ++ ++ ++ ++ ++ ++ inhibit installation of any fsck tools ++ ++ ++ ++ + + + +diff --git a/dracut.conf.5.xml b/dracut.conf.5.xml +index 697e655..dbcdb90 100644 +--- a/dracut.conf.5.xml ++++ b/dracut.conf.5.xml +@@ -1,5 +1,6 @@ + + ++ + + + dracut.conf +@@ -156,6 +157,27 @@ initramfs. + + + ++ fscks=" <fsck tools> " ++ ++ ++ Add a space-separated list of fsck tools. If nothing is ++ specified, the default is: "umount mount ++ /sbin/fsck* xfs_db xfs_check xfs_repair e2fsck jfs_fsck ++ reiserfsck btrfsck" ++ ++ The installation is opportunistic (non-exisiting tools are ignored). ++ ++ ++ ++ ++ nofscks="{yes}" ++ ++ ++ If specified, inhibit installation of any fsck tools. ++ ++ ++ ++ + kernel_only="{yes|no}" + + diff --git a/0074-dracut-functions-conv-normalize-minor-corrections.patch b/0074-dracut-functions-conv-normalize-minor-corrections.patch new file mode 100644 index 0000000..0575b00 --- /dev/null +++ b/0074-dracut-functions-conv-normalize-minor-corrections.patch @@ -0,0 +1,63 @@ +From c44e3cb4e5ace39247c0a6619668add2d1dc92e8 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Sat, 8 Oct 2011 00:20:50 +0200 +Subject: [PATCH] dracut-functions: conv/normalize minor corrections + +mostly with reference to earlier commit: + +- bash doesn't need unsetting locals +- make normalize_path() a bit faster, also make sure we remove all + trailing slashes +- normalize paths before tests + +Signed-off-by: Michal Soltys +--- + dracut-functions | 22 ++++++++++------------ + 1 files changed, 10 insertions(+), 12 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index 12dfa70..ce593c9 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -83,31 +83,29 @@ print_vars() { + } + + normalize_path() { +- p=$1 +- while [[ ${p#*//*} != $p ]]; do +- p=${p/\/\///} +- done +- echo $p ++ shopt -q -s extglob ++ set -- "${1//+(\/)//}" ++ shopt -q -u extglob ++ echo "${1%/}" + } + + convert_abs_rel() { +- local __current __absolute __abssize __cursize __newpath="" __oldifs +- local -i __i __level=0 ++ local __current __absolute __abssize __cursize __newpath __oldifs ++ local -i __i __level + # PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): '; + ++ set -- "$(normalize_path "$1")" "$(normalize_path "$2")" ++ + # corner case #1 - self looping link + [[ "$1" == "$2" ]] && { echo "${1##*/}"; return; } + + # corner case #2 - own dir link + [[ "${1%/*}" == "$2" ]] && { echo "."; return; } + +- __current=$(normalize_path "$1") +- __absolute=$(normalize_path "$2") +- + __oldifs="$IFS" + IFS="/" +- __current=($__current) +- __absolute=($__absolute) ++ __current=($1) ++ __absolute=($2) + IFS="$__oldifs" + + __abssize=${#__absolute[@]} diff --git a/0075-dracut.-.xml-s-exisiting-existing-g.patch b/0075-dracut.-.xml-s-exisiting-existing-g.patch new file mode 100644 index 0000000..9a5cd81 --- /dev/null +++ b/0075-dracut.-.xml-s-exisiting-existing-g.patch @@ -0,0 +1,36 @@ +From ffcfc0e432e7b61159fa7e5d0bb992c2e0704f2c Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 10 Oct 2011 11:55:17 +0200 +Subject: [PATCH] dracut.*.xml: s/exisiting/existing/g + +--- + dracut.8.xml | 2 +- + dracut.conf.5.xml | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dracut.8.xml b/dracut.8.xml +index 882eac6..d4689ee 100644 +--- a/dracut.8.xml ++++ b/dracut.8.xml +@@ -251,7 +251,7 @@ include in the generic initramfs. This parameter can be specified multiple times + + add a space-separated list of fsck tools, in addition to + dracut.conf's specification; the +- installation is opportunistic (non-exisiting tools are ignored) ++ installation is opportunistic (non-existing tools are ignored) + + + +diff --git a/dracut.conf.5.xml b/dracut.conf.5.xml +index dbcdb90..6909a4a 100644 +--- a/dracut.conf.5.xml ++++ b/dracut.conf.5.xml +@@ -165,7 +165,7 @@ initramfs. + /sbin/fsck* xfs_db xfs_check xfs_repair e2fsck jfs_fsck + reiserfsck btrfsck" + +- The installation is opportunistic (non-exisiting tools are ignored). ++ The installation is opportunistic (non-existing tools are ignored). + + + diff --git a/0076-95udev-rules-module-setup.s-fixed-symlink-for-udevd-.patch b/0076-95udev-rules-module-setup.s-fixed-symlink-for-udevd-.patch new file mode 100644 index 0000000..5899170 --- /dev/null +++ b/0076-95udev-rules-module-setup.s-fixed-symlink-for-udevd-.patch @@ -0,0 +1,25 @@ +From 450f5d66944e4a4ae005c75a818c3cccd28836f3 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 10 Oct 2011 20:17:16 +0200 +Subject: [PATCH] 95udev-rules/module-setup.s: fixed symlink for udevd to + initdir + +--- + modules.d/95udev-rules/module-setup.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh +index eddf2b0..915c1fc 100755 +--- a/modules.d/95udev-rules/module-setup.sh ++++ b/modules.d/95udev-rules/module-setup.sh +@@ -63,8 +63,8 @@ install() { + [ -e /usr/lib/udev/$_i ] && dracut_install /usr/lib/udev/$_i + done + +- [ -x /lib/udev/udevd ] && ln -s ../lib/udev/udevd /sbin/udevd +- [ -x /usr/lib/udev/udevd ] && ln -s ../usr/lib/udev/udevd /sbin/udevd ++ [ -x /lib/udev/udevd ] && ln -s ../lib/udev/udevd "$initdir/sbin/udevd" ++ [ -x /usr/lib/udev/udevd ] && ln -s ../usr/lib/udev/udevd "$initdir/sbin/udevd" + + [ -f /etc/arch-release ] && \ + inst "$moddir/load-modules.sh" /lib/udev/load-modules.sh diff --git a/0077-dracut.conf.5.xml-tag-mismatch-fix.patch b/0077-dracut.conf.5.xml-tag-mismatch-fix.patch new file mode 100644 index 0000000..b7cfa29 --- /dev/null +++ b/0077-dracut.conf.5.xml-tag-mismatch-fix.patch @@ -0,0 +1,30 @@ +From 61bc3bbc0e55716e64b78b6709708ce773fbae2d Mon Sep 17 00:00:00 2001 +From: Dave Young +Date: Tue, 11 Oct 2011 11:26:54 +0800 +Subject: [PATCH] dracut.conf.5.xml: tag mismatch fix + +build failed with: +xsltproc -o dracut.conf.5 -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl dracut.conf.5.xml +dracut.conf.5.xml:169: parser error : Opening and ending tag mismatch: para line 168 and listitem + + +Fix it by change to at the end + +Signed-off-by: Dave Young +--- + dracut.conf.5.xml | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dracut.conf.5.xml b/dracut.conf.5.xml +index 6909a4a..169e11b 100644 +--- a/dracut.conf.5.xml ++++ b/dracut.conf.5.xml +@@ -165,7 +165,7 @@ initramfs. + /sbin/fsck* xfs_db xfs_check xfs_repair e2fsck jfs_fsck + reiserfsck btrfsck" + +- The installation is opportunistic (non-existing tools are ignored). ++ The installation is opportunistic (non-existing tools are ignored). + + + diff --git a/0078-bash3-compat-patch.patch b/0078-bash3-compat-patch.patch new file mode 100644 index 0000000..0a41611 --- /dev/null +++ b/0078-bash3-compat-patch.patch @@ -0,0 +1,169 @@ +From c32bda6bb9ae085116dc071087afc0431e51a5fb Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Mon, 10 Oct 2011 23:58:04 +0200 +Subject: [PATCH] bash3 compat patch + +This patch replaces: + +- {var}>... redirections with functionally identical eval construct + + explicit FDs +- ^^ and ,, case modifiers with temporary shopt + +This allows us to lower minimum required bash version +to at least 3.1 (with current code). + +Signed-off-by: Michal Soltys +--- + dracut-functions | 11 +++++++---- + modules.d/10i18n/module-setup.sh | 8 +++++--- + modules.d/40network/module-setup.sh | 19 ++++++++++++------- + modules.d/90kernel-modules/module-setup.sh | 19 ++++++++++++------- + 4 files changed, 36 insertions(+), 21 deletions(-) + +diff --git a/dracut-functions b/dracut-functions +index ce593c9..1ef5269 100755 +--- a/dracut-functions ++++ b/dracut-functions +@@ -821,10 +821,11 @@ install_kmod_with_fw() { + # It will be passed the full path to the found kernel module + # $2 = module to get dependencies for + # rest of args = arguments to modprobe ++# _fderr specifies FD passed from surrounding scope + for_each_kmod_dep() { + local _func=$1 _kmod=$2 _cmd _modpath _options _found=0 + shift 2 +- modprobe "$@" --ignore-install --show-depends $_kmod 2>&$modprobe_stderr | ( ++ modprobe "$@" --ignore-install --show-depends $_kmod 2>&${_fderr} | ( + while read _cmd _modpath _options; do + [[ $_cmd = insmod ]] || continue + $_func ${_modpath} || exit $? +@@ -885,6 +886,8 @@ find_kernel_modules () { + # install kernel modules along with all their dependencies. + instmods() { + [[ $no_kernel = yes ]] && return ++ # called [sub]functions inherit _fderr ++ local _fderr=9 + + function inst1mod() { + local _mod="$1" +@@ -949,9 +952,9 @@ instmods() { + return $_ret + } + +- # Capture all stderr from modprobe onto a new fd $modprobe_stderr, +- # and pipe it into egrep. See REDIRECTION in bash manpage. +- ( instmods_1 "$@" ) {modprobe_stderr}>&1 \ ++ # Capture all stderr from modprobe to _fderr. We could use {var}>... ++ # redirections, but that would make dracut require bash4 at least. ++ eval "( instmods_1 \"\$@\" ) ${_fderr}>&1" \ + | egrep -v 'FATAL: Module .* not found.' | derror + return $? + } +diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh +index 5c09100..6248607 100755 +--- a/modules.d/10i18n/module-setup.sh ++++ b/modules.d/10i18n/module-setup.sh +@@ -150,22 +150,24 @@ install() { + inst_simple ${kbddir}/unimaps/${FONT_UNIMAP}.uni + fi + ++ shopt -q -s nocasematch + if [[ ${UNICODE} ]] + then +- if [[ ${UNICODE^^} = YES || ${UNICODE} = 1 ]] ++ if [[ ${UNICODE} = YES || ${UNICODE} = 1 ]] + then + UNICODE=1 +- elif [[ ${UNICODE^^} = NO || ${UNICODE} = 0 ]] ++ elif [[ ${UNICODE} = NO || ${UNICODE} = 0 ]] + then + UNICODE=0 + else + UNICODE='' + fi + fi +- if [[ ! ${UNICODE} && ${LANG^^} =~ .*\.UTF-?8 ]] ++ if [[ ! ${UNICODE} && ${LANG} =~ .*\.UTF-?8 ]] + then + UNICODE=1 + fi ++ shopt -q -u nocasematch + + mksubdirs ${initdir}${I18N_CONF} + mksubdirs ${initdir}${VCONFIG_CONF} +diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh +index 03684f1..eb7ef9b 100755 +--- a/modules.d/40network/module-setup.sh ++++ b/modules.d/40network/module-setup.sh +@@ -27,6 +27,8 @@ installkernel() { + net_module_filter() { + local _net_drivers='eth_type_trans|register_virtio_device' + local _unwanted_drivers='/(wireless|isdn|uwb)/' ++ # subfunctions inherit following FDs ++ local _merge=8 _side2=9 + function nmf1() { + local _fname _fcont + while read _fname; do +@@ -40,14 +42,17 @@ installkernel() { + && echo "$_fname" + done + } ++ function rotor() { ++ local _f1 _f2 ++ while read _f1; do ++ echo "$_f1" ++ if read _f2; then ++ echo "$_f2" 1>&${_side2} ++ fi ++ done | nmf1 1>&${_merge} ++ } + # Use two parallel streams to filter alternating modules. +- local merge side2 +- ( ( local _f1 _f2 +- while read _f1; do echo "$_f1" +- if read _f2; then echo "$_f2" 1>&${side2}; fi +- done \ +- | nmf1 1>&${merge} ) {side2}>&1 \ +- | nmf1 ) {merge}>&1 ++ eval "( ( rotor ) ${_side2}>&1 | nmf1 ) ${_merge}>&1" + } + + find_kernel_modules_by_path drivers/net | net_module_filter | instmods +diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh +index 09bd87e..6e3a918 100755 +--- a/modules.d/90kernel-modules/module-setup.sh ++++ b/modules.d/90kernel-modules/module-setup.sh +@@ -11,6 +11,8 @@ installkernel() { + } + block_module_filter() { + local _blockfuncs='ahci_init_controller|ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device' ++ # subfunctions inherit following FDs ++ local _merge=8 _side2=9 + function bmf1() { + local _f + while read _f; do case "$_f" in +@@ -19,14 +21,17 @@ installkernel() { + esac + done + } ++ function rotor() { ++ local _f1 _f2 ++ while read _f1; do ++ echo "$_f1" ++ if read _f2; then ++ echo "$_f2" 1>&${_side2} ++ fi ++ done | bmf1 1>&${_merge} ++ } + # Use two parallel streams to filter alternating modules. +- local merge side2 +- ( ( local _f1 _f2 +- while read _f1; do echo "$_f1" +- if read _f2; then echo "$_f2" 1>&${side2}; fi +- done \ +- | bmf1 1>&${merge} ) {side2}>&1 \ +- | bmf1 ) {merge}>&1 ++ eval "( ( rotor ) ${_side2}>&1 | bmf1 ) ${_merge}>&1" + } + hostonly='' instmods sr_mod sd_mod scsi_dh scsi_dh_rdac scsi_dh_emc + hostonly='' instmods pcmcia firewire-ohci diff --git a/0079-explicitly-verify-bash-version.patch b/0079-explicitly-verify-bash-version.patch new file mode 100644 index 0000000..15eafc4 --- /dev/null +++ b/0079-explicitly-verify-bash-version.patch @@ -0,0 +1,30 @@ +From d239b550ce9e6a80342965974c4503cfde736fbe Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Mon, 10 Oct 2011 23:58:05 +0200 +Subject: [PATCH] explicitly verify bash version + +A simple check in main dracut script. + +Signed-off-by: Michal Soltys +--- + dracut | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/dracut b/dracut +index 63d4ea6..205f5d1 100755 +--- a/dracut ++++ b/dracut +@@ -418,6 +418,13 @@ else + exit 1 + fi + ++# Verify bash version, curret minimum is 3.1 ++if (( ${BASH_VERSINFO[0]} < 3 || ++ ( ${BASH_VERSINFO[0]} == 3 && ${BASH_VERSINFO[1]} < 1 ) )); then ++ dfatal 'You need at least Bash 3.1 to use dracut, sorry.' ++ exit 1 ++fi ++ + dracutfunctions=$dracutbasedir/dracut-functions + export dracutfunctions + diff --git a/0080-dracut-remove-duplicate-options.patch b/0080-dracut-remove-duplicate-options.patch new file mode 100644 index 0000000..025e5fa --- /dev/null +++ b/0080-dracut-remove-duplicate-options.patch @@ -0,0 +1,26 @@ +From 7e8228cf5aa43722d2e6a71b5593ed1478938a31 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Mon, 17 Oct 2011 23:01:49 +0200 +Subject: [PATCH] dracut: remove duplicate options + +'-I' and '--fwdir' were both read_arg and push_arg, and the latter has +priority. + +Signed-off-by: Michal Soltys +--- + dracut | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +diff --git a/dracut b/dracut +index 205f5d1..4bc0db3 100755 +--- a/dracut ++++ b/dracut +@@ -212,8 +212,6 @@ while (($# > 0)); do + -c|--conf) read_arg conffile "$@" || shift;; + --confdir) read_arg confdir "$@" || shift;; + -L|--stdlog) read_arg stdloglvl_l "$@" || shift;; +- -I|--install) read_arg install_items "$@" || shift;; +- --fwdir) read_arg fw_dir_l "$@" || shift;; + --compress) read_arg compress_l "$@" || shift;; + --prefix) read_arg prefix_l "$@" || shift;; + -f|--force) force=yes;; diff --git a/0081-dracut-lib.sh-fix-dropped-backslashes-in-CMDLINE.patch b/0081-dracut-lib.sh-fix-dropped-backslashes-in-CMDLINE.patch new file mode 100644 index 0000000..7a69bcd --- /dev/null +++ b/0081-dracut-lib.sh-fix-dropped-backslashes-in-CMDLINE.patch @@ -0,0 +1,31 @@ +From 2cd4a8065ac2bb6bf3708d681de56bbe1984c3ce Mon Sep 17 00:00:00 2001 +From: Will Woods +Date: Wed, 12 Oct 2011 22:48:08 -0400 +Subject: [PATCH] dracut-lib.sh: fix dropped backslashes in CMDLINE + +The "read" shell builtin consumes backslashes, which is a problem if +your root device is something like "LABEL=Fedora\x2016". + +Using "read -r" tells the shell to leave backslashes alone. +--- + modules.d/99base/dracut-lib.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index 62c3bf5..bc4d7c9 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -35,11 +35,11 @@ _getcmdline() { + unset _line + if [ -z "$CMDLINE" ]; then + if [ -e /etc/cmdline ]; then +- while read _line; do ++ while read -r _line; do + CMDLINE_ETC="$CMDLINE_ETC $_line"; + done +Date: Wed, 12 Oct 2011 22:49:35 -0400 +Subject: [PATCH] dmsquash-live: fix log message about root/liveroot + +--- + modules.d/90dmsquash-live/parse-dmsquash-live.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/90dmsquash-live/parse-dmsquash-live.sh b/modules.d/90dmsquash-live/parse-dmsquash-live.sh +index 6e0db29..5cbcd2c 100755 +--- a/modules.d/90dmsquash-live/parse-dmsquash-live.sh ++++ b/modules.d/90dmsquash-live/parse-dmsquash-live.sh +@@ -41,7 +41,7 @@ case "$liveroot" in + live:/*.[Ii][Mm][Gg]|/*.[Ii][Mm][Gg]) + [ -f "${root#live:}" ] && rootok=1 ;; + esac +-info "root was $root, liveroot is now $liveroot" ++info "liveroot was $liveroot, is now $root" + + # make sure that init doesn't complain + [ -z "$root" ] && root="live" diff --git a/0083-check-root-candidates-more-carefully.patch b/0083-check-root-candidates-more-carefully.patch new file mode 100644 index 0000000..f1e36e9 --- /dev/null +++ b/0083-check-root-candidates-more-carefully.patch @@ -0,0 +1,61 @@ +From f8342dd5f2235979db7b5fc0d54df408538921e6 Mon Sep 17 00:00:00 2001 +From: Michal Soltys +Date: Mon, 17 Oct 2011 23:36:33 +0200 +Subject: [PATCH] check root candidates more carefully + +This is from the following thread: + +http://thread.gmane.org/gmane.linux.raid/35753/focus=35795 + +Additional tests + more specific info. + +Signed-off-by: Michal Soltys + +[harald@redhat.com: usable_root(): relaxed check for root] +--- + modules.d/99base/dracut-lib.sh | 9 +++++++++ + modules.d/99base/init | 12 ++++++++++-- + 2 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index bc4d7c9..2cfaf93 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -544,3 +544,12 @@ foreach_uuid_until() ( + + return 1 + ) ++ ++usable_root() { ++ local _d ++ [ -d $1 ] || return 1 ++ for _d in proc sys dev; do ++ [ -e "$1"/$_d ] || return 1 ++ done ++ return 0 ++} +diff --git a/modules.d/99base/init b/modules.d/99base/init +index 06d61a8..556ac68 100755 +--- a/modules.d/99base/init ++++ b/modules.d/99base/init +@@ -286,10 +286,18 @@ getarg 'rd.break=mount' 'rdbreak=mount' && emergency_shell -n mount "Break mount + # be sourced any number of times. As soon as one suceeds, no more are sourced. + i=0 + while :; do +- [ -d "$NEWROOT/proc" ] && break; ++ if ismounted "$NEWROOT"; then ++ usable_root "$NEWROOT" && break; ++ umount "$NEWROOT" ++ fi + for f in $hookdir/mount/*.sh; do + [ -f "$f" ] && . "$f" +- [ -d "$NEWROOT/proc" ] && break; ++ if ismounted "$NEWROOT"; then ++ usable_root "$NEWROOT" && break; ++ warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook" ++ umount "$NEWROOT" ++ rm -f "$f" ++ fi + done + + i=$(($i+1)) diff --git a/0084-netroot-do-not-die-if-arping-failed.patch b/0084-netroot-do-not-die-if-arping-failed.patch new file mode 100644 index 0000000..42b29c4 --- /dev/null +++ b/0084-netroot-do-not-die-if-arping-failed.patch @@ -0,0 +1,22 @@ +From d3be5a89e5714f43a6c288878e4b2746aa781159 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 19 Oct 2011 14:24:07 +0200 +Subject: [PATCH] netroot: do not die, if arping failed + +--- + modules.d/40network/netroot | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/modules.d/40network/netroot b/modules.d/40network/netroot +index 462da51..9d996cc 100755 +--- a/modules.d/40network/netroot ++++ b/modules.d/40network/netroot +@@ -119,7 +119,7 @@ if [ -n "$netroot_ip" ]; then + fi + fi + if [ -n "$dest" ] && ! arping -q -f -w 60 -I $netif $dest ; then +- die "Resolving $dest via ARP on $netif failed" ++ dinfo "Resolving $dest via ARP on $netif failed" + fi + + # Source netroot hooks before we start the handler diff --git a/Makefile.git b/Makefile.git deleted file mode 100644 index 6160a04..0000000 --- a/Makefile.git +++ /dev/null @@ -1,6 +0,0 @@ -Patch: - @for i in 00*.patch; do n=$$[$$(echo $$i|cut -f 1 -d '-'|sed -e 's#^0*##')]; echo "Patch$$n: $$i";done - -patch: - @for i in 00*.patch; do n=$$[$$(echo $$i|cut -f 1 -d '-'|sed -e 's#^0*##')]; echo "%patch$$n -p1";done - diff --git a/dracut.spec b/dracut.spec index 5056a5f..52efc1e 100644 --- a/dracut.spec +++ b/dracut.spec @@ -8,10 +8,10 @@ Name: dracut Version: 013 -Release: 4%{?dist} +Release: 85.git20111019%{?dist} Summary: Initramfs generator using udev -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 Group: System Environment/Base %endif %if 0%{?suse_version} @@ -24,17 +24,99 @@ URL: https://dracut.wiki.kernel.org/ Source0: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar.bz2 Patch1: 0002-90dmsquash-live-dmsquash-live-root-include-fs_lib.sh.patch Patch2: 0003-fix-live-crash-with-livenet-installed.patch +Patch3: 0004-profile.py-parse-the-output-of-dracut-profile-for-pr.patch +Patch4: 0005-add-TEST-16-DMSQUASH.patch +Patch5: 0006-dracut-functions-s-emergency-shutdown-shutdown-emerg.patch +Patch6: 0007-dracut-unset-LD_LIBRARY_PATH.patch +Patch7: 0008-build-initramfs-prelink-undo-sbin.patch +Patch8: 0009-dracut-functions-speed-up-inst_dir.patch +Patch9: 0010-90crypt-ask_for_password-pings-plymouthd.patch +Patch10: 0011-99base-whitespace-fix.patch +Patch11: 0012-dracut-functions-new-function-inst_any-d-dest-f1-f2-.patch +Patch12: 0013-livenet-take-into-account-other-ca-bundle-paths-use-.patch +Patch13: 0014-luks-key-on-ext-dev-wait-for-luks.patch +Patch14: 0015-crypt-changed-cmdline-arg-name-from-rd.luks.tout-to-.patch +Patch15: 0016-luks-key-on-ext-dev-wait-for-luks.patch +Patch16: 0017-dracut-functions-fix-inst_dir-for-non-absolute-dirs.patch +Patch17: 0018-90mdraid-65-md-incremental-imsm.rules-incremental-ru.patch +Patch18: 0019-dracut.spec-fixed-rhel-fedora-version-checks.patch +Patch19: 0020-50plymouth-add-plymouth.enable-kernel-command-line-o.patch +Patch20: 0021-99base-init-only-poll-cdroms-if-the-kernel-does-supp.patch +Patch21: 0022-build-initramfs-unclear-_mpargs-in-instmods.patch +Patch22: 0023-90crypt-parse-crypt.sh-also-accept-the-beginning-of-.patch +Patch23: 0024-99base-init-save-and-restore-environment-given-from-.patch +Patch24: 0025-99base-init-move-switch_root-breakpoint-to-a-later-p.patch +Patch25: 0026-dracut-functions-hmac-checksum-files-can-be-symlinks.patch +Patch26: 0027-95udev-rules-add-input_id.patch +Patch27: 0028-inst_simple-inst_dir-make-fast-case-faster.patch +Patch28: 0029-filter_kernel_modules-is-a-specialized-filter_kernel.patch +Patch29: 0030-install_kmod_with_fw-make-fast-case-faster.patch +Patch30: 0031-instmods-get-filenames-from-stdin-if-no-args-use-it.patch +Patch31: 0032-instmods-sanity-for-_mpargs.patch +Patch32: 0033-instmods-factor-out-egrep-of-FATAL-Module-.-not-foun.patch +Patch33: 0034-99base-init-do-not-fail-when-importing-the-original-.patch +Patch34: 0035-dracut-cp-with-sparse.patch +Patch35: 0036-99base-init-removed-cdrom-polling-reset-code.patch +Patch36: 0037-dmsquash-live-root-use-blkid-to-determine-fstype-of-.patch +Patch37: 0038-dmsquash-live-root-load-filesystem-modules-before-mo.patch +Patch38: 0039-90dmsquash-live-do-not-symlink-to-dev-live.patch +Patch39: 0040-99base-init-remove-dev-root-helper-symlink.patch +Patch40: 0041-Do-not-use-run-udev-rules.d-for-udev-rules.patch +Patch41: 0042-99base-init-mount-securityfs-with-source-securityfs-.patch +Patch42: 0043-mount-securityfs-in-a-seperate-dracut-module.patch +Patch43: 0044-mount-securityfs-in-a-seperate-dracut-module.patch +Patch44: 0045-90mdraid-adjust-stock-mdadm-udev-rules.patch +Patch45: 0046-90mdraid-containers-are-not-runnable.patch +Patch46: 0047-90mdraid-fix-adjust-mdraid-cleanup.patch +Patch47: 0048-90mdraid-fix-adjust-force-run-script.patch +Patch48: 0049-90-md-dm-raid-recognize-ddf-container.patch +Patch49: 0050-90mdraid-fix-adjust-65-md-rules-and-related-scripts.patch +Patch50: 0051-TEST-40-NBD-relaxed-check-on-ext3-filesystem-options.patch +Patch51: 0052-99fs-lib-fs-lib.sh-fsck-btrfs-via-mounting-like-xfs.patch +Patch52: 0053-dracut-functions-inst_rules-do-not-check-std-dirs-fo.patch +Patch53: 0054-str_replace-fix.patch +Patch54: 0055-dracut-logger-bail-out-early-if-we-don-t-have-to-log.patch +Patch55: 0056-dracut-create-dev-besides-proc-sys-and-so.patch +Patch56: 0057-99fs-lib-export-FSTAB_FILE-before-fsck-call.patch +Patch57: 0058-dracut-functions-inst_rules-add-missing.patch +Patch58: 0059-90mdraid-check-precisely-for-supported-contaiers.patch +Patch59: 0060-90mdraid-more-thorough-64-md-raid.rules-edit.patch +Patch60: 0061-90mdraid-adjust-dev-md-loops.patch +Patch61: 0062-dracut-PATCH-Parameter-expansion-occurs-before-comma.patch +Patch62: 0063-dracut-PATCH-es-parallelize-block_module-filter-and-.patch +Patch63: 0064-order-mdadm-and-lvm-timeout-operations.patch +Patch64: 0065-90mdraid-mdraid_start.sh-fix-path-to-md-sysfs.patch +Patch65: 0066-90mdraid-module-setup.sh-fixed-sed-arguments.patch +Patch66: 0067-95udev-rules-module-setup.sh-also-search-in-lib-udev.patch +Patch67: 0068-update-the-documentation-of-no-prefix.patch +Patch68: 0069-dracut-check-mktemp-return-value.patch +Patch69: 0070-convert_abs_rel-fixups.patch +Patch70: 0071-dracut.8-add-missing-lvmconf-info.patch +Patch71: 0072-fs-lib-add-ability-to-choose-fsck-tools.patch +Patch72: 0073-manuals-add-info-about-fs-lib-fsck-configuration.patch +Patch73: 0074-dracut-functions-conv-normalize-minor-corrections.patch +Patch74: 0075-dracut.-.xml-s-exisiting-existing-g.patch +Patch75: 0076-95udev-rules-module-setup.s-fixed-symlink-for-udevd-.patch +Patch76: 0077-dracut.conf.5.xml-tag-mismatch-fix.patch +Patch77: 0078-bash3-compat-patch.patch +Patch78: 0079-explicitly-verify-bash-version.patch +Patch79: 0080-dracut-remove-duplicate-options.patch +Patch80: 0081-dracut-lib.sh-fix-dropped-backslashes-in-CMDLINE.patch +Patch81: 0082-dmsquash-live-fix-log-message-about-root-liveroot.patch +Patch82: 0083-check-root-candidates-more-carefully.patch +Patch83: 0084-netroot-do-not-die-if-arping-failed.patch + BuildArch: noarch BuildRequires: dash bash -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %endif %if 0%{?suse_version} BuildRoot: %{_tmppath}/%{name}-%{version}-build %endif -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 BuildRequires: docbook-style-xsl docbook-dtds libxslt %endif @@ -75,7 +157,7 @@ Requires: sed Requires: tar Requires: udev -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 Requires: util-linux >= 2.16 Requires: initscripts >= 8.63-1 Requires: plymouth >= 0.8.0-0.2009.29.09.19.1 @@ -103,7 +185,7 @@ Requires: nbd Requires: iproute Requires: bridge-utils -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 Requires: iscsi-initiator-utils Requires: nfs-utils Requires: dhclient @@ -121,7 +203,7 @@ Provides: dracut-generic = %{version}-%{release} This package requires everything which is needed to build a generic all purpose initramfs with network support with dracut. -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 %package fips Summary: Dracut modules to build a dracut initramfs with an integrity check Requires: %{name} = %{version}-%{release} @@ -159,12 +241,94 @@ This package contains tools to assemble the local initrd and host configuration. %setup -q -n %{name}-%{version} %patch1 -p1 %patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 +%patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +%patch59 -p1 +%patch60 -p1 +%patch61 -p1 +%patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +%patch70 -p1 +%patch71 -p1 +%patch72 -p1 +%patch73 -p1 +%patch74 -p1 +%patch75 -p1 +%patch76 -p1 +%patch77 -p1 +%patch78 -p1 +%patch79 -p1 +%patch80 -p1 +%patch81 -p1 +%patch82 -p1 +%patch83 -p1 + %build make %install -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 rm -rf $RPM_BUILD_ROOT %endif make install DESTDIR=$RPM_BUILD_ROOT sbindir=/sbin \ @@ -172,7 +336,7 @@ make install DESTDIR=$RPM_BUILD_ROOT sbindir=/sbin \ echo %{name}-%{version}-%{release} > $RPM_BUILD_ROOT/%{_datadir}/dracut/modules.d/10rpmversion/dracut-version -%if 0%{?fedora} == 0 +%if 0%{?fedora} == 0 && 0%{?rhel} == 0 rm -fr $RPM_BUILD_ROOT/%{_datadir}/dracut/modules.d/01fips %endif @@ -185,7 +349,7 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log touch $RPM_BUILD_ROOT%{_localstatedir}/log/dracut.log mkdir -p $RPM_BUILD_ROOT%{_sharedstatedir}/initramfs -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 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/fips.conf.example $RPM_BUILD_ROOT/etc/dracut.conf.d/40-fips.conf %endif @@ -218,7 +382,7 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/dracut/dracut-functions %{_datadir}/dracut/dracut-logger %config(noreplace) /etc/dracut.conf -%if 0%{?fedora} || 0%{?suse_version} +%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} > 6 %config /etc/dracut.conf.d/01-dist.conf %endif %dir /etc/dracut.conf.d @@ -251,6 +415,7 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/dracut/modules.d/95zfcp %{_datadir}/dracut/modules.d/95terminfo %{_datadir}/dracut/modules.d/95udev-rules +%{_datadir}/dracut/modules.d/96securityfs %{_datadir}/dracut/modules.d/97biosdevname %{_datadir}/dracut/modules.d/97masterkey %{_datadir}/dracut/modules.d/98ecryptfs @@ -275,7 +440,7 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/dracut/modules.d/45ifcfg %{_datadir}/dracut/modules.d/95znet -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 6 %files fips %defattr(-,root,root,0755) %{_datadir}/dracut/modules.d/01fips @@ -297,6 +462,50 @@ rm -rf $RPM_BUILD_ROOT %dir /var/lib/dracut/overlay %changelog +* Wed Oct 19 2011 Harald Hoyer 013-85.git20111019 +- update to latest git + +* Tue Oct 04 2011 Harald Hoyer 013-15 +- fixed mdraid container handling +Resolves: rhbz#743240 + +* Thu Sep 22 2011 Harald Hoyer 013-13 +- fixed mdraid issues +- fixed btrfsck +Resolves: rhbz#735602 + +* Wed Sep 21 2011 Harald Hoyer 013-12 +- removed patch backup files +- reintroduced /dev/live + +* Tue Sep 20 2011 Harald Hoyer 013-11 +- move mounting of securitfs to a seperate module +Resolves: rhbz#737140 + +* Tue Sep 20 2011 Harald Hoyer 013-10 +- mount securitfs with the correct source +Resolves: rhbz#737140 + +* Tue Sep 20 2011 Harald Hoyer 013-9 +- do not carry over initramfs udev rules +Resolves: rhbz#734096 + +* Fri Sep 02 2011 Harald Hoyer 013-8 +- hopefully fixed one part of a loop/udev and loop/mount race +Resolves: rhbz#735199 + +* Wed Aug 31 2011 Harald Hoyer 013-7 +- add /lib/udev/input_id to the initramfs +- fix hmac install + +* Tue Aug 30 2011 Harald Hoyer 013-6 +- fixed environment passing to real init +Resolves: rhbz#733674 +- fixed lvm on md + +* Mon Aug 29 2011 Harald Hoyer 013-5 +- fixed rhel/fedora version checks + * Wed Aug 17 2011 Harald Hoyer 013-4 - fixed crash with livenet installed