diff --git a/0005.patch b/0005.patch index 7d01e2c..9e131e9 100644 --- a/0005.patch +++ b/0005.patch @@ -21,3 +21,4 @@ index 001225b4..88bca1d4 100644 kmod_module_unref(mod); continue; } + diff --git a/0006.patch b/0006.patch new file mode 100644 index 0000000..5149e18 --- /dev/null +++ b/0006.patch @@ -0,0 +1,70 @@ +From a0eadcdc644d571da58f718d73dacb4f68bef56b Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 5 Dec 2013 09:29:28 +0100 +Subject: [PATCH] 00warpclock: Set correct timezone + +Add module for setting correct timezone. + +References: bnc#830060 + +For now, this module will not be included automatically due to different +expectations (see e.g. https://bugzilla.redhat.com/show_bug.cgi?id=981617) + +Signed-off-by: Hannes Reinecke +Signed-off-by: Daniel Molkentin +--- + modules.d/00warpclock/module-setup.sh | 29 +++++++++++++++++++++++++++++ + modules.d/00warpclock/warpclock.sh | 9 +++++++++ + 2 files changed, 38 insertions(+) + +diff --git a/modules.d/00warpclock/module-setup.sh b/modules.d/00warpclock/module-setup.sh +new file mode 100644 +index 00000000..ea1348ed +--- /dev/null ++++ b/modules.d/00warpclock/module-setup.sh +@@ -0,0 +1,29 @@ ++#!/bin/bash ++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- ++# ex: ts=8 sw=4 sts=4 et filetype=sh ++ ++# called by dracut ++check() { ++ # hwclock does not exist on S390(x), bail out silently then ++ local _arch=$(uname -m) ++ [ "$_arch" = "s390" -o "$_arch" = "s390x" ] && return 1 ++ ++ [ -e /etc/localtime -a -e /etc/adjtime ] || return 1 ++ require_binaries /sbin/hwclock || return 1 ++ ++ return 255 ++} ++ ++# called by dracut ++depends() { ++ return 0 ++} ++ ++# called by dracut ++install() { ++ inst /usr/share/zoneinfo/UTC ++ inst /etc/localtime ++ inst /etc/adjtime ++ inst_hook pre-trigger 00 "$moddir/warpclock.sh" ++ inst /sbin/hwclock ++} +diff --git a/modules.d/00warpclock/warpclock.sh b/modules.d/00warpclock/warpclock.sh +new file mode 100644 +index 00000000..f64818c6 +--- /dev/null ++++ b/modules.d/00warpclock/warpclock.sh +@@ -0,0 +1,9 @@ ++#!/bin/sh ++ ++if test -e /etc/adjtime ; then ++ while read line ; do ++ if test "$line" = LOCAL ; then ++ hwclock --systz ++ fi ++ done < /etc/adjtime ++fi + diff --git a/0007.patch b/0007.patch new file mode 100644 index 0000000..a5cb8df --- /dev/null +++ b/0007.patch @@ -0,0 +1,20 @@ +From aac3a0652adc2b200d5b8fedfbce99cfde88b525 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 26 Jul 2018 09:54:13 +0200 +Subject: [PATCH] NEWS: forgot to update the latest version + +--- + NEWS | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/NEWS b/NEWS +index 2de38ad7..60b430aa 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,4 +1,4 @@ +-dracut-047 ++dracut-048 + ========== + + dracut.sh: + diff --git a/0008.patch b/0008.patch new file mode 100644 index 0000000..41df023 --- /dev/null +++ b/0008.patch @@ -0,0 +1,49 @@ +From f81c864eede2a11bfeb849cb2a2634be034ed7fb Mon Sep 17 00:00:00 2001 +From: Kairui Song +Date: Wed, 25 Jul 2018 16:34:08 +0800 +Subject: [PATCH] lsinitrd: allow to only unpack certain files + +Before this patch, "--unpack" will always unpack the whole image. +Make "--unpack" be able to unpack only certain files, it will be +easier to retrieve files from initramfs image. + +Signed-off-by: Kairui Song +--- + lsinitrd.sh | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/lsinitrd.sh b/lsinitrd.sh +index 80fbf922..1b9a93b6 100755 +--- a/lsinitrd.sh ++++ b/lsinitrd.sh +@@ -159,8 +159,15 @@ list_files() + + unpack_files() + { +- $CAT "$image" 2>/dev/null | cpio -id --quiet $verbose +- ((ret+=$?)) ++ if (( ${#filenames[@]} > 0 )); then ++ for f in "${!filenames[@]}"; do ++ $CAT "$image" 2>/dev/null | cpio -id --quiet $verbose $f ++ ((ret+=$?)) ++ done ++ else ++ $CAT "$image" 2>/dev/null | cpio -id --quiet $verbose ++ ((ret+=$?)) ++ fi + } + + +@@ -175,7 +182,10 @@ case $bin in + CAT="cat --" + is_early=$(cpio --extract --verbose --quiet --to-stdout -- 'early_cpio' < "$image" 2>/dev/null) + if [[ "$is_early" ]]; then +- if [[ -n "$unpackearly" ]]; then ++ if [[ -n "$unpack" ]]; then ++ # should use --unpackearly for early CPIO ++ : ++ elif [[ -n "$unpackearly" ]]; then + unpack_files + elif (( ${#filenames[@]} > 0 )); then + extract_files + diff --git a/0009.patch b/0009.patch new file mode 100644 index 0000000..e1fcd0b --- /dev/null +++ b/0009.patch @@ -0,0 +1,58 @@ +From 986b12d391b8de6c820da1af9bfdb4153c340370 Mon Sep 17 00:00:00 2001 +From: Kairui Song +Date: Wed, 25 Jul 2018 16:47:37 +0800 +Subject: [PATCH] lsinitrd: optimize performance when handling multiple files + +Currently, when trying to unpack or print the content of multiple +files, lsinitrd will decompress the image and pipe the decompressed +content to cpio to retrive each file if the image is compressed. +Which mean if we want to extract 10 files the image will be decompressed +10 times, which is a waste of time. + +This patch will let lsinitrd decompress the image file to a temp file +first if multiple file names are given, then cpio will read from the +decompressed temp file, which will speed up a lot. + +Time consumption test for command: +`lsinitrd initramfs-4.16.15-300.fc28.x86_64.img \ + usr/lib/dracut/build-parameter.txt \ + usr/lib/dracut/modules.txt \ + etc/machine-id \ + etc/hostname \ + usr/lib/udev/rules.d/99-systemd.rules` + +Before the patch: +2.37user 0.33system 0:02.12elapsed + +After the patch: +0.50user 0.42system 0:00.72elapsed + +There would be a more significant time difference if we try to +extract more files. +--- + lsinitrd.sh | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/lsinitrd.sh b/lsinitrd.sh +index 1b9a93b6..0cb89e9c 100755 +--- a/lsinitrd.sh ++++ b/lsinitrd.sh +@@ -251,6 +251,17 @@ if [[ $SKIP ]]; then + CAT=skipcpio + fi + ++if (( ${#filenames[@]} > 1 )); then ++ TMPFILE="$(mktemp -t --suffix=.cpio lsinitrd.XXXXXX)" ++ $CAT "$image" 2>/dev/null > $TMPFILE ++ trap "rm -f '$TMPFILE'" EXIT ++ pre_decompress() ++ { ++ cat $TMPFILE ++ } ++ CAT=pre_decompress ++fi ++ + ret=0 + + if [[ -n "$unpack" ]]; then + diff --git a/0010.patch b/0010.patch new file mode 100644 index 0000000..018a9a4 --- /dev/null +++ b/0010.patch @@ -0,0 +1,49 @@ +From 143420bc05079ffa040a63decbb2585c59e44011 Mon Sep 17 00:00:00 2001 +From: Kairui Song +Date: Wed, 25 Jul 2018 23:50:47 +0800 +Subject: [PATCH] lsinitrd: update help message and man page + +Signed-off-by: Kairui Song +--- + lsinitrd.1.asc | 6 ++++++ + lsinitrd.sh | 3 +++ + 2 files changed, 9 insertions(+) + +diff --git a/lsinitrd.1.asc b/lsinitrd.1.asc +index b6a704c2..193a4471 100644 +--- a/lsinitrd.1.asc ++++ b/lsinitrd.1.asc +@@ -34,11 +34,17 @@ OPTIONS + **-k, --kver** __:: + inspect the initramfs of . + ++**-m, --mod**:: ++ list dracut modules included of the initramfs image. ++ + **--unpack**:: + unpack the initramfs to the current directory, instead of displaying the contents. ++ If optional filenames are given, will only unpack specified files, else the whole image will be unpacked. ++ Won't unpack anything from early cpio part. + + **--unpackearly**:: + unpack the early microcode initramfs to the current directory, instead of displaying the contents. ++ Same as --unpack, but only unpack files from early cpio part. + + **-v, --verbose**:: + unpack verbosely +diff --git a/lsinitrd.sh b/lsinitrd.sh +index 0cb89e9c..a2fa4d7a 100755 +--- a/lsinitrd.sh ++++ b/lsinitrd.sh +@@ -28,7 +28,10 @@ usage() + echo "-m, --mod list modules." + echo "-f, --file print the contents of ." + echo "--unpack unpack the initramfs, instead of displaying the contents." ++ echo " If optional filenames are given, will only unpack specified files," ++ echo " else the whole image will be unpacked. Won't unpack anything from early cpio part." + echo "--unpackearly unpack the early microcode part of the initramfs." ++ echo " Same as --unpack, but only unpack files from early cpio part." + echo "-v, --verbose unpack verbosely." + echo "-k, --kver inspect the initramfs of ." + echo + diff --git a/0011.patch b/0011.patch new file mode 100644 index 0000000..3b0f9c6 --- /dev/null +++ b/0011.patch @@ -0,0 +1,110 @@ +From 819ea3865161d440353b2f961f3dfeaabeed333d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 26 Jul 2018 12:49:45 +0200 +Subject: [PATCH] Bring back 51-dracut-rescue-postinst.sh + +can only be obsoleted after F30 +--- + 51-dracut-rescue-postinst.sh | 68 ++++++++++++++++++++++++++++++++++++++++++++ + dracut.spec | 6 ++++ + 2 files changed, 74 insertions(+) + +diff --git a/51-dracut-rescue-postinst.sh b/51-dracut-rescue-postinst.sh +new file mode 100755 +index 00000000..67f5b717 +--- /dev/null ++++ b/51-dracut-rescue-postinst.sh +@@ -0,0 +1,68 @@ ++#!/bin/bash ++ ++export LANG=C ++ ++KERNEL_VERSION="$1" ++KERNEL_IMAGE="$2" ++ ++[[ -f /etc/os-release ]] && . /etc/os-release ++ ++if [[ ! -f /etc/machine-id ]] || [[ ! -s /etc/machine-id ]]; then ++ systemd-machine-id-setup ++fi ++ ++[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id ++ ++[[ $MACHINE_ID ]] || exit 1 ++[[ -f $KERNEL_IMAGE ]] || exit 1 ++ ++INITRDFILE="/boot/initramfs-0-rescue-${MACHINE_ID}.img" ++NEW_KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-0-rescue-${MACHINE_ID}" ++ ++[[ -f $INITRDFILE ]] && [[ -f $NEW_KERNEL_IMAGE ]] && exit 0 ++ ++dropindirs_sort() ++{ ++ suffix=$1; shift ++ args=("$@") ++ files=$( ++ while (( $# > 0 )); do ++ for i in ${1}/*${suffix}; do ++ [[ -f $i ]] && echo ${i##*/} ++ done ++ shift ++ done | sort -Vu ++ ) ++ ++ for f in $files; do ++ for d in "${args[@]}"; do ++ if [[ -f "$d/$f" ]]; then ++ echo "$d/$f" ++ continue 2 ++ fi ++ done ++ done ++} ++ ++# source our config dir ++for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do ++ [[ -e $f ]] && . "$f" ++done ++ ++[[ $dracut_rescue_image != "yes" ]] && exit 0 ++ ++if [[ ! -f $INITRDFILE ]]; then ++ dracut --no-hostonly -a "rescue" "$INITRDFILE" "$KERNEL_VERSION" ++ ((ret+=$?)) ++fi ++ ++if [[ ! -f $NEW_KERNEL_IMAGE ]]; then ++ cp --reflink=auto "$KERNEL_IMAGE" "$NEW_KERNEL_IMAGE" ++ ((ret+=$?)) ++fi ++ ++new-kernel-pkg --install "$KERNEL_VERSION" --kernel-image "$NEW_KERNEL_IMAGE" --initrdfile "$INITRDFILE" --banner "$NAME $VERSION_ID Rescue $MACHINE_ID" ++ ++((ret+=$?)) ++ ++exit $ret +diff --git a/dracut.spec b/dracut.spec +index c218b63d..10cd7839 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -259,6 +259,10 @@ rm -f -- $RPM_BUILD_ROOT%{_bindir}/lsinitrd + %if 0%{?fedora} || 0%{?rhel} + echo 'hostonly="no"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-generic-image.conf + echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-rescue.conf ++ ++# FIXME: remove after F30 ++mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d ++install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh + %endif + + %files +@@ -452,6 +456,8 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ + %{dracutlibdir}/dracut.conf.d/02-rescue.conf + %if 0%{?fedora} || 0%{?rhel} + %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install ++# FIXME: remove after F30 ++%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh + %endif + + %changelog + diff --git a/0012.patch b/0012.patch new file mode 100644 index 0000000..4d98cd6 --- /dev/null +++ b/0012.patch @@ -0,0 +1,22 @@ +From 25111d717eab662bd104295f034ed7d2d6cc606b Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 26 Jul 2018 13:00:24 +0200 +Subject: [PATCH] dracut.spec: add 00warpclock dracut module + +--- + dracut.spec | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dracut.spec b/dracut.spec +index 10cd7839..754ed3c9 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -317,6 +317,7 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne + %endif + %{dracutlibdir}/modules.d/00bash + %{dracutlibdir}/modules.d/00systemd ++%{dracutlibdir}/modules.d/00warpclock + %{dracutlibdir}/modules.d/01systemd-initrd + %{dracutlibdir}/modules.d/03modsign + %{dracutlibdir}/modules.d/03rescue + diff --git a/0013.patch b/0013.patch new file mode 100644 index 0000000..129d24c --- /dev/null +++ b/0013.patch @@ -0,0 +1,60 @@ +From 55a12055c511979be0a471d0d7c24c040b830887 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 26 Jul 2018 13:04:20 +0200 +Subject: [PATCH] dracut.spec: Remove needless use of %defattr + +--- + dracut.spec | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/dracut.spec b/dracut.spec +index 754ed3c9..9b9d497a 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -266,7 +266,6 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne + %endif + + %files +-%defattr(-,root,root,0755) + %if %{with doc} + %doc README HACKING TODO AUTHORS NEWS dracut.html dracut.png dracut.svg + %endif +@@ -407,7 +406,6 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne + %endif + + %files network +-%defattr(-,root,root,0755) + %{dracutlibdir}/modules.d/02systemd-networkd + %{dracutlibdir}/modules.d/40network + %{dracutlibdir}/modules.d/45ifcfg +@@ -426,18 +424,15 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne + %{dracutlibdir}/modules.d/99uefi-lib + + %files caps +-%defattr(-,root,root,0755) + %{dracutlibdir}/modules.d/02caps + + %files live +-%defattr(-,root,root,0755) + %{dracutlibdir}/modules.d/99img-lib + %{dracutlibdir}/modules.d/90dmsquash-live + %{dracutlibdir}/modules.d/90dmsquash-live-ntfs + %{dracutlibdir}/modules.d/90livenet + + %files tools +-%defattr(-,root,root,0755) + + %if %{with doc} + %doc %{_mandir}/man8/dracut-catimages.8* +@@ -449,11 +444,9 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne + %dir /var/lib/dracut/overlay + + %files config-generic +-%defattr(-,root,root,0755) + %{dracutlibdir}/dracut.conf.d/02-generic-image.conf + + %files config-rescue +-%defattr(-,root,root,0755) + %{dracutlibdir}/dracut.conf.d/02-rescue.conf + %if 0%{?fedora} || 0%{?rhel} + %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install diff --git a/dracut.spec b/dracut.spec index e9417b8..53ca5c7 100644 --- a/dracut.spec +++ b/dracut.spec @@ -5,11 +5,11 @@ # strip the automatically generated dep here and instead co-own the # directory. %global __requires_exclude pkg-config -%define dist_free_release 6.git20180718 +%define dist_free_release 14.git20180726 Name: dracut Version: 048 -Release: %{dist_free_release}%{?dist}.1 +Release: %{dist_free_release}%{?dist} Summary: Initramfs generator using udev %if 0%{?fedora} || 0%{?rhel} @@ -33,6 +33,14 @@ Patch2: 0002.patch Patch3: 0003.patch Patch4: 0004.patch Patch5: 0005.patch +Patch6: 0006.patch +Patch7: 0007.patch +Patch8: 0008.patch +Patch9: 0009.patch +Patch10: 0010.patch +Patch11: 0011.patch +Patch12: 0012.patch +Patch13: 0013.patch Source1: https://www.gnu.org/licenses/lgpl-2.1.txt @@ -265,6 +273,10 @@ rm -f -- $RPM_BUILD_ROOT%{_bindir}/lsinitrd %if 0%{?fedora} || 0%{?rhel} echo 'hostonly="no"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-generic-image.conf echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-rescue.conf + +# FIXME: remove after F30 +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d +install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh %endif %files @@ -318,6 +330,7 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ %endif %{dracutlibdir}/modules.d/00bash %{dracutlibdir}/modules.d/00systemd +%{dracutlibdir}/modules.d/00warpclock %{dracutlibdir}/modules.d/01systemd-initrd %{dracutlibdir}/modules.d/03modsign %{dracutlibdir}/modules.d/03rescue @@ -451,9 +464,14 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ %{dracutlibdir}/dracut.conf.d/02-rescue.conf %if 0%{?fedora} || 0%{?rhel} %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install +# FIXME: remove after F30 +%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh %endif %changelog +* Thu Jul 26 2018 Harald Hoyer - 048-14.git20180726 +- bring back 51-dracut-rescue-postinst.sh + * Wed Jul 18 2018 Harald Hoyer - 048-6.git20180718 - git snapshot