diff -Nru initramfs-tools-0.130ubuntu3/debian/changelog initramfs-tools-0.130ubuntu3.6/debian/changelog --- initramfs-tools-0.130ubuntu3/debian/changelog 2018-02-20 21:35:17.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/debian/changelog 2018-12-12 20:41:30.000000000 +0000 @@ -1,3 +1,61 @@ +initramfs-tools (0.130ubuntu3.6) bionic-security; urgency=medium + + * scripts/functions: include a new option to skip enslaved network + devices. (LP: #1802591) + Include the new variable NETWORK_SKIP_ENSLAVED. When set to a + value different than "0", this variable will cause any enslaved + network devices to be skipped from the list of netbootable + devices. This variable can be set via the configuration files + under /etc/initramfs-tools/ or via any configuration file under + the initrd directory /conf/conf.d/ via a hook script. + + -- Marcelo Henrique Cerri Wed, 12 Dec 2018 20:58:27 -0200 + +initramfs-tools (0.130ubuntu3.5) bionic; urgency=medium + + * debian/initramfs-tools.postinst: fix version comparison and + so it will run for any version earlier than 0.130ubuntu3.5. + + -- Tiago Stürmer Daitx Thu, 27 Sep 2018 16:21:37 +0000 + +initramfs-tools (0.130ubuntu3.4) bionic; urgency=medium + + [ Colin Watson ] + * [b4804dd] Only sync the filesystem containing the initramfs + (Closes: #882380) (LP: #1667512) + + [ Tiago Stürmer Daitx ] + * debian/initramfs-tools.postinst: remove orphaned old-dkms initrd files + in /boot. (LP: #1791959) + + -- Tiago Stürmer Daitx Tue, 18 Sep 2018 09:18:47 +0000 + +initramfs-tools (0.130ubuntu3.3) bionic; urgency=medium + + [ Scott Moser ] + * scripts/functions: write netplan config files to /run/netplan for + network devices configured with configure_networking. (LP: #1769682) + + [ Mathieu Trudel-Lapierre ] + * scripts/functions: add 'critical: true' parameter; requires netplan + 0.36.2. (LP: #1769682) + * debian/rules: skip tests on non-x86 architectures, where they then to be + false negatives (extra macaddress matching makes the tests fail to match + expected values). + + [ John Gallagher ] + * Work out the kernel modules required to support ZFS filesystems and add + them as necessary. (LP: #1661629) + + -- Mathieu Trudel-Lapierre Mon, 20 Aug 2018 11:01:52 -0400 + +initramfs-tools (0.130ubuntu3.1) bionic; urgency=medium + + * hooks/resume: don't generate RESUME config pointing to randomly-crypted + swap devices. LP: #1771962. + + -- Steve Langasek Fri, 08 Jun 2018 21:29:19 -0700 + initramfs-tools (0.130ubuntu3) bionic; urgency=medium * Fix resuming a hibernate session from a swapfile (LP: #1644975) diff -Nru initramfs-tools-0.130ubuntu3/debian/control initramfs-tools-0.130ubuntu3.6/debian/control --- initramfs-tools-0.130ubuntu3/debian/control 2018-01-05 12:22:04.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/debian/control 2018-09-27 16:21:37.000000000 +0000 @@ -18,7 +18,7 @@ Suggests: bash-completion Provides: linux-initramfs-tool Conflicts: linux-initramfs-tool, usplash (<< 0.5.50) -Breaks: cryptsetup (<< 2:1.6.6-4~), elilo (<< 3.12-3.1~), lilo (<< 22.8-8.2~), s390-tools (<< 1.8.3-2~), console-setup (<< 1.72), systemd-sysv (<< 186), lvm2 (<< 2.02.111-2.1~), initscripts (<< 2.88dsf-59.3~), e2fsprogs (<< 1.42.13), isc-dhcp-client (<< 4.3.3-5ubuntu14) +Breaks: cryptsetup (<< 2:1.6.6-4~), elilo (<< 3.12-3.1~), lilo (<< 22.8-8.2~), s390-tools (<< 1.8.3-2~), console-setup (<< 1.72), systemd-sysv (<< 186), lvm2 (<< 2.02.111-2.1~), initscripts (<< 2.88dsf-59.3~), e2fsprogs (<< 1.42.13), isc-dhcp-client (<< 4.3.3-5ubuntu14), netplan.io (<< 0.36.2) Description: generic modular initramfs generator (automation) This package builds a bootable initramfs for Linux kernel packages. The initramfs is loaded along with the kernel and is responsible for @@ -27,7 +27,7 @@ Package: initramfs-tools-core Architecture: all Multi-Arch: foreign -Depends: ${busybox:Depends}, initramfs-tools-bin (= ${binary:Version}), klibc-utils (>= 2.0.4-8~), cpio, kmod | module-init-tools, udev, ${misc:Depends} +Depends: ${busybox:Depends}, initramfs-tools-bin (= ${binary:Version}), klibc-utils (>= 2.0.4-8~), cpio, kmod | module-init-tools, udev, coreutils (>= 8.24), ${misc:Depends} Suggests: bash-completion Breaks: initramfs-tools (<< 0.121~), ${busybox:Breaks} Replaces: initramfs-tools (<< 0.121~) diff -Nru initramfs-tools-0.130ubuntu3/debian/initramfs-tools.postinst initramfs-tools-0.130ubuntu3.6/debian/initramfs-tools.postinst --- initramfs-tools-0.130ubuntu3/debian/initramfs-tools.postinst 2018-01-05 12:15:45.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/debian/initramfs-tools.postinst 2018-09-27 16:21:37.000000000 +0000 @@ -44,4 +44,21 @@ DPKG_MAINTSCRIPT_PACKAGE='' update-initramfs -u fi +# Remove all initrd old dkms files for which there is no +# corresponding initram image in /boot (LP: #1791959). +# One shot only: +# - bug only affected users that were upgrading packages +# - new users are not affected +# - LP: #1515513 took care of removing old dkms together with the kernel +if [ "x$1" = xconfigure ] && [ -n "$2" ] && dpkg --compare-versions "$2" lt "0.130ubuntu3.5"; then + for old_dkms_file in /boot/initrd-*.img.old-dkms \ + /boot/initramfs-*.img.old-dkms \ + /boot/initrd.img-*.old-dkms \ + /boot/initrd-*.old-dkms; do + if [ ! -e "${old_dkms_file%%.old-dkms}" ]; then + rm -fv "${old_dkms_file}" + fi + done +fi + #DEBHELPER# diff -Nru initramfs-tools-0.130ubuntu3/debian/rules initramfs-tools-0.130ubuntu3.6/debian/rules --- initramfs-tools-0.130ubuntu3/debian/rules 2018-01-05 12:24:28.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/debian/rules 2018-09-27 16:21:37.000000000 +0000 @@ -30,17 +30,21 @@ DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) CROSS := else CROSS := CC=$(DEB_HOST_GNU_TYPE)-gcc PKG_CONFIG=$(DEB_HOST_GNU_TYPE)-pkg-config endif +TEST_ARCHES="amd64 i386" override_dh_auto_build: make -C src $(CROSS) ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) +ifneq (,$(findstring $(DEB_HOST_ARCH),$(TEST_ARCHES))) ./tests/run-tests endif +endif override_dh_auto_clean: make -C src clean diff -Nru initramfs-tools-0.130ubuntu3/hook-functions initramfs-tools-0.130ubuntu3.6/hook-functions --- initramfs-tools-0.130ubuntu3/hook-functions 2018-01-27 11:51:36.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/hook-functions 2018-09-27 16:21:37.000000000 +0000 @@ -357,6 +357,21 @@ return fi + if [ "${FSTYPE}" = "zfs" ]; then + manual_add_modules "${FSTYPE}" + + # ZFS uses the name of a filesystem instead of a device. Find + # the devices that make up the pool containing the specified + # filesystem, and add the appropriate driver for each device. + local poolname="${dev_node%%/*}" + zpool list -vPL "$poolname" | while read dev ignored; do + # Ignore non-leaf vdevs by skipping anything that doesn't + # look like an absolute path + echo "$dev" | grep -q '^/' && block_dev_mod_add "$dev" + done + return + fi + if [ "$dir" = / ] && [ "${dev_node}" = "/dev/root" ] ; then if [ -b "${dev_node}" ]; then # Match it to the canonical device name by UUID diff -Nru initramfs-tools-0.130ubuntu3/hooks/resume initramfs-tools-0.130ubuntu3.6/hooks/resume --- initramfs-tools-0.130ubuntu3/hooks/resume 2018-01-05 12:15:45.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/hooks/resume 2018-09-27 16:21:37.000000000 +0000 @@ -46,6 +46,16 @@ # Try to autodetect the RESUME partition, using biggest swap? resume_auto=$(grep ^/dev/ /proc/swaps | sort -rnk3 | head -n 1 | cut -d " " -f 1) if [ -n "$resume_auto" ]; then + dm_name="$(dmsetup info -c --noheadings -o name "$resume_auto" 2>/dev/null)" + fi + if [ -n "$dm_name" ] && [ -e /etc/crypttab ]; then + while read cryptdev srcdev keyfile junk; do + if [ "$cryptdev" = "$dm_name" ] && [ "$keyfile" = /dev/urandom ]; then + resume_auto= + fi + done < /etc/crypttab + fi + if [ -n "$resume_auto" ]; then UUID=$(blkid -s UUID -o value "$resume_auto" || true) report_auto "The initramfs will attempt to resume from $resume_auto" if [ -n "$UUID" ]; then diff -Nru initramfs-tools-0.130ubuntu3/init initramfs-tools-0.130ubuntu3.6/init --- initramfs-tools-0.130ubuntu3/init 2018-01-05 13:20:15.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/init 2018-12-12 20:41:10.000000000 +0000 @@ -63,6 +63,7 @@ export forcefsck=n export fsckfix= export recovery= +export NETWORK_SKIP_ENSLAVED= # mdadm needs hostname to be set. This has to be done before the udev rules are called! diff -Nru initramfs-tools-0.130ubuntu3/scripts/functions initramfs-tools-0.130ubuntu3.6/scripts/functions --- initramfs-tools-0.130ubuntu3/scripts/functions 2018-01-05 12:15:42.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/scripts/functions 2018-12-12 20:41:10.000000000 +0000 @@ -238,7 +238,18 @@ continue fi - DEVICE="$DEVICE $(basename $device)" + if [ "${NETWORK_SKIP_ENSLAVED:-0}" = 0 ]; then + DEVICE="$DEVICE $(basename $device)" + else + # Skip enslaved device (has "master" link + # attribute on it) + dev="$(basename $device)" + ip -o link show "$dev" | grep -q -w master + if [ "$?" -eq 0 ]; then + continue + fi + DEVICE="$DEVICE $dev" + fi done echo $DEVICE @@ -321,7 +332,16 @@ ;; ""|on|any) # Bring up device - ipconfig -t ${ROUNDTTT} "${DEVICE}" + # if we don't have a DEVICE specified, try to bring up + # all eligible devices one at a time. + if [ "${NETWORK_SKIP_ENSLAVED:-0}" != 0 ] && [ -z "${DEVICE}" ]; then + DEVICES=$(all_netbootable_devices) + for dev in ${DEVICES} ; do + ipconfig -t ${ROUNDTTT} "${dev}" + done + else + ipconfig -t ${ROUNDTTT} "${DEVICE}" + fi ;; dhcp|bootp|rarp|both) ipconfig -t ${ROUNDTTT} -c ${IP} -d "${DEVICE}" @@ -388,6 +408,8 @@ netinfo_to_resolv_conf /etc/resolv.conf \ /run/net-${DEVICE}.conf /run/net-*.conf /run/net6-*.conf + netinfo_to_netplan /run/netplan \ + /run/net-${DEVICE}.conf /run/net-*.conf /run/net6-*.conf } netinfo_to_resolv_conf() { @@ -398,10 +420,8 @@ ( _in_subshell=1; netinfo_to_resolv_conf "$@" ) return fi - local output="$1" search="" ns="" f="" n="" shift - { for f in "$@"; do [ -f "$f" ] || continue unset IPV4DNS0 IPV4DNS1 IPV6DNS0 IPV6DNS1 @@ -427,13 +447,191 @@ search=${search# } ns=${ns# } done + + local rconf="" CR=" +" for n in ${ns}; do - echo "nameserver $n" + rconf="${rconf}nameserver $n${CR}" done if [ -n "${search}" ]; then - echo "search ${search}" + rconf="${rconf}search ${search}${CR}" + fi + if [ -z "$rconf" ]; then + echo "no search or nameservers found in $*" 1>&2 + fi + if [ "$rconf" = "-" ]; then + echo -n "$rconf" + else + echo -n "$rconf" > "$output" + fi +} + +mask2cidr() { + # https://forum.openwrt.org/viewtopic.php?pid=220781#p220781 + # Assumes there's no "255." after a non-255 byte in the mask + local x=${1##*255.} + set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*} + x=${1%%$3*} + echo $(( $2 + (${#x}/4) )) +} + +_declare_sh_append_var() { + # append_var(name, skip, strings) + # write a declaration of name that will append to any existing + local name="$1" skip="$2" add="" n="" + shift 2 + for n in "$@"; do + [ -n "$n" -a "$n" != "$skip" ] || continue + add="$add $n" + done + add=${add# } + [ -n "$add" ] || return 0 + echo "$name=\"\${${name}:+\${${name}} }${add}\"" +} + +_declare_ip_info() { + # declare_ip_info(version, proto, address, netmask, gateway) + local version="$1" proto="$2" address="$3" netmask="$4" gateway="$5" + local netprefix="" + if [ "$proto" = "dhcp" -o "$proto" = "dhcp4" -o "$proto" = "dhcp6" ]; then + echo "dhcp${version}=true" + elif [ "$proto" = "static" ]; then + if [ -n "$address" ]; then + netprefix=$netmask + if [ "$version" = "4" ]; then + netprefix=$(mask2cidr "$netmask") + fi + _declare_sh_append_var addresses "" "$address/$netprefix" + fi + if [ -n "$gateway" ]; then + echo "gateway${version}=$gateway" + fi + fi +} + +_render_netplan() { + # write a netplan stanza for the given device. + local name="$1" mac="$2" dhcp4="$3" dhcp6="$4" addrs="$5" \ + gateway4="$6" gateway6="$7" ns_addrs="$8" ns_search="$9" + local n found="" + echo "network:" + echo " version: 2" + echo " renderer: networkd" + echo " ethernets:" + echo " $name:" + if [ -n "$mac" ]; then + echo " match:" + echo " macaddress: \"$mac\"" + echo " set-name: $name" + fi + if [ -n "$dhcp4" ]; then + echo " dhcp4: $dhcp4" + echo " dhcp-identifier: mac" + fi + [ -n "$dhcp6" ] && echo " dhcp6: $dhcp6" + ( [ -n "$dhcp4" ] || [ -n "$dhcp6" ] ) && echo " critical: true" + if [ -n "$addrs" ]; then + echo " addresses:" + found="," + for n in $addrs; do + # remove dups + [ "${found#*,$n,}" = "${found}" ] || continue + found="${found}$n," + echo " - \"$n\"" + done fi - } > "$output" + [ -n "$gateway4" ] && echo " gateway4: \"$gateway4\"" + [ -n "$gateway6" ] && echo " gateway6: \"$gateway6\"" + + if [ -n "$ns_addrs" ]; then + local alist="[" slist="" + for n in $ns_addrs; do + # do not put in duplicates + [ "${alist#*\"$n\"}" = "$alist" ] || continue + alist="${alist}\"$n\", "; + done + alist="${alist%, }]" + + if [ -n "$ns_search" ]; then + slist="[" + for n in ${ns_search}; do + # do not put in duplicates + [ "${slist#*\"$n\"}" = "$slist" ] || continue + slist="${slist}\"$n\", "; + done + slist="${slist%, }]" + fi + echo " nameservers:" + echo " addresses: $alist" + [ -n "$slist" ] && echo " search: $slist" + fi +} + +netinfo_to_netplan() { + # read /run/net-* files write netplan config. + if [ "${_in_subshell:-0}" = "0" ]; then + # subshell to avoid modification of variables by '.' + ( _in_subshell=1; netinfo_to_netplan "$@" ) + return + fi + local out_d="$1" tmpd + if command -v mktemp >/dev/null 2>&1; then + tmpd=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX") + else + tmpd="${TMPDIR:-/tmp}/${0##*/}.niinfo.$$" + mkdir -p "$tmpd" || return + fi + + local devices="" pre="" mac="" + # we go through all the files presented and create per-device files in + # a tmpdir that are shell sourceable and closer to the netplan that + # we want to render. Then render those to netplan stanzas. + for f in "$@"; do + [ -f "$f" ] || continue + unset DEVICE DEVICE6 PROTO IPV6PROTO + unset IPV6ADDR IPV6NETMASK IPV6GATEWAY + unset IPV4ADDR IPV4NETMASK IPV4GATEWAY + . "$f" || { echo "WARN: failed '. \"$f\"'" 1>&2; return 1; } + local name="" + name=${DEVICE:-${DEVICE6}} + [ -n "$name" ] || { + echo "WARN: $f did not define DEVICE or DEVICE6" 1>&2; + return 1; + } + case " ${devices} " in + *\ ${name}\ *) :;; + *) devices="${devices} ${name}" + esac + if [ ! -e "$tmpd/$name" -a -r "/sys/class/net/$name/address" ]; then + read mac < /sys/class/net/$name/address && + echo "macaddress=$mac" > "$tmpd/$name" + fi + + { + if [ -n "$DEVICE" ]; then + _declare_ip_info 4 "$PROTO" "$IPV4ADDR" "$IPV4NETMASK" "$IPV4GATEWAY" + elif [ -n "$DEVICE6" ]; then + _declare_ip_info 6 "$IPV6PROTO" "$IPV6ADDR" "$IPV6NETMASK" \ + "$IPV6GATEWAY" + fi + _declare_sh_append_var ns_addresses "0.0.0.0" \ + "${IPV4DNS0}" "${IPV4DNS1}" "${IPV6DNS0}" "${IPV6DNS1}" + _declare_sh_append_var ns_search "" "$DOMAINSEARCH" "$IPV6DOMAINSEARCH" + } >> "$tmpd/$name" + done + + [ -d "$out_d" ] || mkdir -p "$out_d" || + { echo "WARN: failed mkdir $out_d"; return 1; } + + for name in $devices; do + local macaddress="" dhcp4="" dhcp6="" addresses="" + local gateway4="" gateway6="" ns_addresses="" ns_search="" + . "$tmpd/$name" + _render_netplan "$name" "$macaddress" "$dhcp4" "$dhcp6" "$addresses" \ + "$gateway4" "$gateway6" "$ns_addresses" "$ns_search" \ + > "${out_d}/$name.yaml" + done + rm -Rf "$tmpd" } # Wait for queued kernel/udev events diff -Nru initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv4/netplan/eth1.yaml initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv4/netplan/eth1.yaml --- initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv4/netplan/eth1.yaml 1970-01-01 00:00:00.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv4/netplan/eth1.yaml 2018-09-27 16:21:37.000000000 +0000 @@ -0,0 +1,11 @@ +network: + version: 2 + renderer: networkd + ethernets: + eth1: + dhcp4: true + dhcp-identifier: mac + critical: true + nameservers: + addresses: ["192.168.122.1"] + search: ["foo.com"] diff -Nru initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv4and6/netplan/eth0.yaml initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv4and6/netplan/eth0.yaml --- initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv4and6/netplan/eth0.yaml 1970-01-01 00:00:00.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv4and6/netplan/eth0.yaml 2018-09-27 16:21:37.000000000 +0000 @@ -0,0 +1,12 @@ +network: + version: 2 + renderer: networkd + ethernets: + eth0: + dhcp4: true + dhcp-identifier: mac + dhcp6: true + critical: true + nameservers: + addresses: ["192.168.122.1", "2001:67c:1562:8010::2:1"] + search: ["foo.com", "example.com", "ubuntu.com"] diff -Nru initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv4static/netplan/eth1.yaml initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv4static/netplan/eth1.yaml --- initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv4static/netplan/eth1.yaml 1970-01-01 00:00:00.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv4static/netplan/eth1.yaml 2018-09-27 16:21:37.000000000 +0000 @@ -0,0 +1,8 @@ +network: + version: 2 + renderer: networkd + ethernets: + eth1: + addresses: + - "10.0.0.2/24" + gateway4: "10.0.0.1" diff -Nru initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv6/netplan/eno1.yaml initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv6/netplan/eno1.yaml --- initramfs-tools-0.130ubuntu3/tests/test_netinfo.d/ipv6/netplan/eno1.yaml 1970-01-01 00:00:00.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.d/ipv6/netplan/eno1.yaml 2018-09-27 16:21:37.000000000 +0000 @@ -0,0 +1,10 @@ +network: + version: 2 + renderer: networkd + ethernets: + eno1: + dhcp6: true + critical: true + nameservers: + addresses: ["2001:67c:1562:8010::2:1"] + search: ["example.com", "ubuntu.com"] diff -Nru initramfs-tools-0.130ubuntu3/tests/test_netinfo.sh initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.sh --- initramfs-tools-0.130ubuntu3/tests/test_netinfo.sh 2018-01-05 12:15:42.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/tests/test_netinfo.sh 2018-09-27 16:21:37.000000000 +0000 @@ -52,6 +52,18 @@ pass_on_nodiff "$tname" "$expected" "$found" } +run_netinfo_to_netplan() { + local bname="$1" testdir="$2" results_d="$3" + local tname="$bname-netinfo-to-netplan" + shift 3 + local found_d="$results_d/netplan" + local expected_d="$testdir/netplan" + [ -d "$expected_d" ] || return $RET_SKIP + + _run_in_functions "$tname" netinfo_to_netplan "$found_d" "$@" || return + pass_on_nodiff "$tname" "$expected_d" "$found_d" +} + record() { local ret="$1" case "$ret" in @@ -73,6 +85,9 @@ run_resolvconf "$dname" "$testdir" "$results_d" $confs record $? + run_netinfo_to_netplan "$dname" "$testdir" "$results_d" $confs + record $? + rm -Rf "${results_d}" done diff -Nru initramfs-tools-0.130ubuntu3/update-initramfs initramfs-tools-0.130ubuntu3.6/update-initramfs --- initramfs-tools-0.130ubuntu3/update-initramfs 2018-01-05 12:15:45.000000000 +0000 +++ initramfs-tools-0.130ubuntu3.6/update-initramfs 2018-09-27 16:21:37.000000000 +0000 @@ -158,7 +158,7 @@ mv -f "${initramfs}.new" "${initramfs}" set_sha1 # Guard against an unclean shutdown - sync + sync -f "${initramfs}" else mkinitramfs_return="$?" remove_initramfs_bak