Hello community, here is the log from the commit of package ignition-dracut for openSUSE:Factory checked in at 2020-05-11 13:45:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ignition-dracut (Old) and /work/SRC/openSUSE:Factory/.ignition-dracut.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ignition-dracut" Mon May 11 13:45:10 2020 rev:12 rq:802627 version:0.0+git20200504.7ff38d9 Changes: -------- --- /work/SRC/openSUSE:Factory/ignition-dracut/ignition-dracut.changes 2020-03-27 22:02:09.774962562 +0100 +++ /work/SRC/openSUSE:Factory/.ignition-dracut.new.2738/ignition-dracut.changes 2020-05-11 13:45:22.025630461 +0200 @@ -1,0 +2,18 @@ +Mon May 11 08:52:37 UTC 2020 - ifors...@suse.com + +- Update to version 0.0+git20200504.7ff38d9: + * 30ignition: drop hard requirement on qemu_fw_cfg [boo#1167289] + * 99emergency-timeout: improve readability of Ignition failure message + * 99emergency-timeout: also check ignition-fetch.service for failure + * coreos-teardown-initramfs-network: don't run when emergency.target + * dracut: add logging to systemd generator + * coreos-teardown-initramfs-network: also propagate hostname + * coreos-teardown-initramfs-network: support coreos.no_persist_ip karg + * coreos-teardown-initramfs-network: consider ifcfg files in real root for RHCOS + * coreos-teardown-initramfs-network: also skip local loopback interface + * coreos-teardown-initramfs-network: do SELinux relabel on copied files + * coreos-teardown-initramfs-network: order ExecStop after other ignition units + * coreos-teardown-initramfs-network: remove After=ignition-files.service + * Add ignition-virtio-dump-journal.service + +------------------------------------------------------------------- Old: ---- ignition-dracut-0.0+git20200325.ea3bdc9.tar.xz New: ---- ignition-dracut-0.0+git20200504.7ff38d9.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ignition-dracut.spec ++++++ --- /var/tmp/diff_new_pack.hf6cFk/_old 2020-05-11 13:45:22.889632294 +0200 +++ /var/tmp/diff_new_pack.hf6cFk/_new 2020-05-11 13:45:22.893632303 +0200 @@ -17,7 +17,7 @@ Name: ignition-dracut -Version: 0.0+git20200325.ea3bdc9 +Version: 0.0+git20200504.7ff38d9 Release: 0 Summary: Dracut scripts for ignition License: BSD-2-Clause ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.hf6cFk/_old 2020-05-11 13:45:22.973632473 +0200 +++ /var/tmp/diff_new_pack.hf6cFk/_new 2020-05-11 13:45:22.973632473 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/coreos/ignition-dracut.git</param> - <param name="changesrevision">ea3bdc94076326c6c3d62aa7a19b9bd0ae887b3a</param> + <param name="changesrevision">7ff38d9716bf982e3f6495d85c6ce91aab72e88d</param> </service> </servicedata> \ No newline at end of file ++++++ ignition-dracut-0.0+git20200325.ea3bdc9.tar.xz -> ignition-dracut-0.0+git20200504.7ff38d9.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/coreos-teardown-initramfs-network.service new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/coreos-teardown-initramfs-network.service --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/coreos-teardown-initramfs-network.service 2020-03-25 16:43:46.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/coreos-teardown-initramfs-network.service 2020-05-05 01:11:06.000000000 +0200 @@ -5,7 +5,17 @@ [Unit] Description=Tear down initramfs networking DefaultDependencies=false -After=ignition-files.service + +# We want to run the teardown after all other Ignition stages +# have run because some platforms (like Packet) do remote status +# reporting for each Ignition stage. Since we are tearing down +# the networking using an ExecStop we need to make sure we run +# the ExecStop *after* any other ignition*.service unit's ExecStop. +# The only other one right now is ignition-mount that has an ExecStop +# for doing an unmount. Since the ordering for ExecStop is the +# opposite of ExecStart we need to use `Before=ignition-mount.service`. +# https://github.com/coreos/fedora-coreos-tracker/issues/440 +Before=ignition-mount.service Before=ignition-complete.target # Make sure ExecStop= runs before we switch root @@ -16,6 +26,13 @@ OnFailure=emergency.target OnFailureJobMode=isolate +# If we are already heading towards emergency.target +# then don't try to stop this unit because it will fail +# when trying to access files in /sysroot/etc/. The failure +# is mostly harmless but having the extra error messages +# leads us away from the original problem. +IgnoreOnIsolate=true + [Service] Type=oneshot RemainAfterExit=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/coreos-teardown-initramfs-network.sh new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/coreos-teardown-initramfs-network.sh --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/coreos-teardown-initramfs-network.sh 2020-03-25 16:43:46.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/coreos-teardown-initramfs-network.sh 2020-05-05 01:11:06.000000000 +0200 @@ -4,6 +4,34 @@ set -euo pipefail +# Load dracut libraries. Using getargbool() and getargs() from +# dracut-lib and ip_to_var() from net-lib +load_dracut_libs() { + # dracut is not friendly to set -eu + set +euo pipefail + type getargbool &>/dev/null || . /lib/dracut-lib.sh + type ip_to_var &>/dev/null || . /lib/net-lib.sh + set -euo pipefail +} + +dracut_func() { + # dracut is not friendly to set -eu + set +euo pipefail + "$@"; rc=$? + set -euo pipefail + return $rc +} + +selinux_relabel() { + # If we have access to coreos-relabel then let's use that because + # it allows us to set labels on things before switching root + # If not, fallback to tmpfiles. + if command -v coreos-relabel; then + coreos-relabel $1 + else + echo "Z $1 - - -" >> "/run/tmpfiles.d/$(basename $0)-relabel.conf" + fi +} # Propagate initramfs networking if desired. The policy here is: # @@ -16,7 +44,10 @@ # # See https://github.com/coreos/fedora-coreos-tracker/issues/394#issuecomment-599721173 propagate_initramfs_networking() { - if [ -n "$(ls -A /sysroot/etc/NetworkManager/system-connections/)" ]; then + # Check the two locations where a user could have provided network configuration + # On FCOS we only support keyfiles, but on RHCOS we support keyfiles and ifcfg + if [ -n "$(ls -A /sysroot/etc/NetworkManager/system-connections/)" -o \ + -n "$(ls -A /sysroot/etc/sysconfig/network-scripts/)" ]; then echo "info: networking config is defined in the real root" echo "info: will not attempt to propagate initramfs networking" else @@ -24,12 +55,51 @@ if [ -n "$(ls -A /run/NetworkManager/system-connections/)" ]; then echo "info: propagating initramfs networking config to the real root" cp /run/NetworkManager/system-connections/* /sysroot/etc/NetworkManager/system-connections/ + selinux_relabel /etc/NetworkManager/system-connections/ else echo "info: no initramfs networking information to propagate" fi fi } +# Propagate the ip= karg hostname if desired. The policy here is: +# +# - IF a hostname is specified in static networking ip= kargs +# - AND no hostname was set via Ignition (realroot `/etc/hostname`) +# - THEN we make the last hostname specified in an ip= karg apply +# permanently by writing it into `/etc/hostname` +# +# This may no longer be needed when the following bug is fixed: +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/419 +propagate_initramfs_hostname() { + if [ -e '/sysroot/etc/hostname' ]; then + echo "info: hostname is defined in the real root" + echo "info: will not attempt to propagate initramfs hostname" + return 0 + fi + # Detect if any hostname was provided via static ip= kargs + # run in a subshell so we don't pollute our environment + hostnamefile=$(mktemp) + ( + last_nonempty_hostname='' + # Inspired from ifup.sh from the 40network dracut module. Note that + # $hostname from ip_to_var will only be nonempty for static networking. + for iparg in $(dracut_func getargs ip=); do + dracut_func ip_to_var $iparg + [ -n "${hostname:-}" ] && last_nonempty_hostname="$hostname" + done + echo -n "$last_nonempty_hostname" > $hostnamefile + ) + hostname=$(<$hostnamefile); rm $hostnamefile + if [ -n "$hostname" ]; then + echo "info: propagating initramfs hostname (${hostname}) to the real root" + echo $hostname > /sysroot/etc/hostname + selinux_relabel /etc/hostname + else + echo "info: no initramfs hostname information to propagate" + fi +} + down_interface() { echo "info: taking down network device: $1" # On recommendation from the NM team let's try to delete the device @@ -54,14 +124,21 @@ for f in /sys/class/net/*; do interface=$(basename "$f") # The `bonding_masters` entry is not a true interface and thus - # cannot be taken down. - if [ "$interface" == "bonding_masters" ]; then continue; fi + # cannot be taken down. Also skip local loopback + case "$interface" in + "lo" | "bonding_masters") + continue + ;; + esac down_interface $interface done fi } main() { + # Load libraries from dracut + load_dracut_libs + # Take down all interfaces set up in the initramfs down_interfaces @@ -70,8 +147,16 @@ ip route flush table main ip route flush cache - # Propagate initramfs networking if needed - propagate_initramfs_networking + # Hopefully our logic is sound enough that this is never needed, but + # user's can explicitly disable initramfs network/hostname propagation + # with the coreos.no_persist_ip karg. + if dracut_func getargbool 0 'coreos.no_persist_ip'; then + echo "info: coreos.no_persist_ip karg detected" + echo "info: skipping propagating initramfs settings" + else + propagate_initramfs_hostname + propagate_initramfs_networking + fi # Now that the configuration has been propagated (or not) # clean it up so that no information from outside of the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/ignition-generator new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/ignition-generator --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/ignition-generator 2020-03-25 16:43:46.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/ignition-generator 2020-05-05 01:11:06.000000000 +0200 @@ -4,6 +4,10 @@ set -e +# Generators don't have logging right now +# https://github.com/systemd/systemd/issues/15638 +exec 1>/dev/kmsg; exec 2>&1 + UNIT_DIR="${1:-/tmp}" cmdline=( $(</proc/cmdline) ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/module-setup.sh new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/module-setup.sh --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/30ignition/module-setup.sh 2020-03-25 16:43:46.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/30ignition/module-setup.sh 2020-05-05 01:11:06.000000000 +0200 @@ -83,26 +83,3 @@ # needed for openstack config drive support inst_rules 60-cdrom_id.rules } - -has_fw_cfg_module() { - # this is like check_kernel_config() but it specifically checks for `m` and - # also checks the OSTree-specific kernel location - for path in /boot/config-$kernel \ - /usr/lib/modules/$kernel/config \ - /usr/lib/ostree-boot/config-$kernel; do - if test -f $path; then - rc=0 - grep -q CONFIG_FW_CFG_SYSFS=m $path || rc=$? - return $rc - fi - done - return 1 -} - -installkernel() { - # We definitely need this one in the initrd to support Ignition cfgs on qemu - # if available - if has_fw_cfg_module; then - instmods -c qemu_fw_cfg - fi -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/ignition-virtio-dump-journal.service new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/ignition-virtio-dump-journal.service --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/ignition-virtio-dump-journal.service 1970-01-01 01:00:00.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/ignition-virtio-dump-journal.service 2020-05-05 01:11:06.000000000 +0200 @@ -0,0 +1,15 @@ +[Unit] +Description=Ignition (virtio dump) +Documentation=https://github.com/coreos/ignition +ConditionPathExists=/etc/initrd-release +DefaultDependencies=false +ConditionVirtualization=|kvm +ConditionVirtualization=|qemu +After=basic.target + +[Service] +Type=oneshot +RemainAfterExit=yes +EnvironmentFile=/run/ignition.env +ExecStart=/usr/bin/ignition-virtio-dump-journal + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/ignition-virtio-dump-journal.sh new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/ignition-virtio-dump-journal.sh --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/ignition-virtio-dump-journal.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/ignition-virtio-dump-journal.sh 2020-05-05 01:11:06.000000000 +0200 @@ -0,0 +1,11 @@ +#!/bin/bash +set -euo pipefail + +port=/dev/virtio-ports/com.coreos.ignition.journal +if [ -e "${port}" ]; then + journalctl -o json > "${port}" + # And this signals end of stream + echo '{}' > "${port}" +else + echo "Didn't find virtio port ${port}" +fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/module-setup.sh new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/module-setup.sh --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/module-setup.sh 2020-03-25 16:43:46.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/module-setup.sh 2020-05-05 01:11:06.000000000 +0200 @@ -2,10 +2,22 @@ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # ex: ts=8 sw=4 sts=4 et filetype=sh +install_unit_wants() { + local unit="$1"; shift + local target="$1"; shift + local instantiated="${1:-$unit}"; shift + inst_simple "$moddir/$unit" "$systemdsystemunitdir/$unit" + mkdir -p "$initdir/$systemdsystemunitdir/$target.wants" + ln_r "../$unit" "$systemdsystemunitdir/$target.wants/$instantiated" +} + install() { inst_multiple \ cut \ date inst_hook emergency 99 "${moddir}/timeout.sh" + + inst_script "$moddir/ignition-virtio-dump-journal.sh" "/usr/bin/ignition-virtio-dump-journal" + install_unit_wants ignition-virtio-dump-journal.service emergency.target } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/timeout.sh new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/timeout.sh --- old/ignition-dracut-0.0+git20200325.ea3bdc9/dracut/99emergency-timeout/timeout.sh 2020-03-25 16:43:46.000000000 +0100 +++ new/ignition-dracut-0.0+git20200504.7ff38d9/dracut/99emergency-timeout/timeout.sh 2020-05-05 01:11:06.000000000 +0200 @@ -29,7 +29,7 @@ if [[ -e /.emergency-shell-confirmed ]]; then return fi - ignition_units="ignition-disks.service ignition-files.service ignition-mount.service" + ignition_units="ignition-fetch.service ignition-disks.service ignition-files.service ignition-mount.service" if systemctl show $ignition_units | grep -q "^ActiveState=failed$"; then # Ignition has failed, suppress kernel logs so that Ignition logs stay # on the screen @@ -42,13 +42,17 @@ # Print Ignition logs cat <<EOF ------------------------------------------------------------------------------- -Ignition has failed. Please ensure your config is valid. Note that only Ignition spec -v3.0.0+ configs are accepted. -A CLI validation tool to check this called ignition-validate can be downloaded from GitHub: +Ignition has failed. Please ensure your config is valid. Note that only +Ignition spec v3.0.0+ configs are accepted. + +A CLI validation tool to check this called ignition-validate can be +downloaded from GitHub: https://github.com/coreos/ignition/releases + Here are the Ignition logs: EOF journalctl -t ignition --no-pager --no-hostname -o cat + echo fi # Regularly prompt with time remaining. This ensures the prompt doesn't