From f97365c3db73af501523e3c262d98453a63dbe92 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Thu, 26 Jul 2018 13:06:11 +0200 Subject: [PATCH] dracut-048-14.git20180726 - bring back 51-dracut-rescue-postinst.sh --- 0005.patch | 1 + 0006.patch | 70 +++++++++++++++++++++++++++++++++ 0007.patch | 20 ++++++++++ 0008.patch | 49 +++++++++++++++++++++++ 0009.patch | 58 +++++++++++++++++++++++++++ 0010.patch | 49 +++++++++++++++++++++++ 0011.patch | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 0012.patch | 22 +++++++++++ 0013.patch | 60 ++++++++++++++++++++++++++++ dracut.spec | 22 ++++++++++- 10 files changed, 459 insertions(+), 2 deletions(-) create mode 100644 0006.patch create mode 100644 0007.patch create mode 100644 0008.patch create mode 100644 0009.patch create mode 100644 0010.patch create mode 100644 0011.patch create mode 100644 0012.patch create mode 100644 0013.patch 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