Bug#860246: [PATCH] udev.postinst: preserve virtio interfaces names on upgrades, on s390x.

2017-04-13 Thread Michael Biebl
Am 13.04.2017 um 15:46 schrieb Dimitri John Ledkov:
> diff --git a/debian/extra/write_persistent_net_s390x_virtio 
> b/debian/extra/write_persistent_net_s390x_virtio
> new file mode 100755
> index 0..bbeb25085
> --- /dev/null
> +++ b/debian/extra/write_persistent_net_s390x_virtio
> @@ -0,0 +1,40 @@
> +#!/bin/sh
> +set -e
> +
> +#
> +# udevd since 232-20 learned to generate stable interface names for network
> +# interfaces in kvm/qemu. However, existing machines upgrading will be using
> +# the ethX names instead. The most risk-averse action is to encode
> +# "persistent-net-rules" like rules to keep the ethX names on upgrades, since
> +# the interface names (ethX) may be in use not only in 
> /etc/network/interfaces
> +# but in other configurations too (daemons, firewalls, etc).
> +#
> +# This is a one time action, and can be removed after the next stable & LTS
> +# releases. (~ May 2018)
> +#
> +
> +rulesfile=/etc/udev/rules.d/70-persistent-net.rules
> +
> +if [ `uname -m` != 's390x' ]
> +then
> +exit 0
> +fi
> +
> +if [ `systemd-detect-virt` != 'kvm' ]
> +then
> +exit 0
> +fi

Keep in mind, that systemd-detect-virt is provided by the systemd
package and not guaranteed to be installed.

> diff --git a/debian/udev.install b/debian/udev.install
> index b0ab649fb..e5aae4daf 100644
> --- a/debian/udev.install
> +++ b/debian/udev.install
> @@ -22,3 +22,4 @@ usr/share/pkgconfig/udev.pc
>  ../../extra/rules/*.rules lib/udev/rules.d/
>  #../../extra/*.hwdb lib/udev/hwdb.d/
>  ../../extra/fbdev-blacklist.conf lib/modprobe.d/
> +../../extra/write_persistent_net_s390x_virtio usr/share/systemd/

Hm, maybe move that to a path which is udev specific, like /usr/lib/udev


-- 
Why is it that all of the instruments seeking intelligent life in the
universe are pointed away from Earth?



signature.asc
Description: OpenPGP digital signature


Bug#860246: [PATCH] udev.postinst: preserve virtio interfaces names on upgrades, on s390x.

2017-04-13 Thread Michael Biebl
Am 13.04.2017 um 15:46 schrieb Dimitri John Ledkov:
> New udev generates stable interface names on s390x kvm instances, however, 
> upon
> upgrades existing ethX names should be preserved to prevent breaking 
> networking
> and software configurations.

As quickly discussed on IRC, this should not affect users upgrading from
jessie, as those should have a
/etc/udev/rules.d/70-persistent-net.rules file which should ensure that
we keep the eth0 names.

So this only potentially affects s390x users which installed debian9
using a stretch rc2 or older installer. The rc3 installer already ships
a new enough udev.

Regards,
Michael

-- 
Why is it that all of the instruments seeking intelligent life in the
universe are pointed away from Earth?



signature.asc
Description: OpenPGP digital signature


Bug#860246: [PATCH] udev.postinst: preserve virtio interfaces names on upgrades, on s390x.

2017-04-13 Thread Dimitri John Ledkov
New udev generates stable interface names on s390x kvm instances, however, upon
upgrades existing ethX names should be preserved to prevent breaking networking
and software configurations.

Closes: #860246
LP: #1682437
---
 debian/extra/write_persistent_net_s390x_virtio | 40 ++
 debian/udev.install|  1 +
 debian/udev.postinst   |  6 
 3 files changed, 47 insertions(+)
 create mode 100755 debian/extra/write_persistent_net_s390x_virtio

diff --git a/debian/extra/write_persistent_net_s390x_virtio 
b/debian/extra/write_persistent_net_s390x_virtio
new file mode 100755
index 0..bbeb25085
--- /dev/null
+++ b/debian/extra/write_persistent_net_s390x_virtio
@@ -0,0 +1,40 @@
+#!/bin/sh
+set -e
+
+#
+# udevd since 232-20 learned to generate stable interface names for network
+# interfaces in kvm/qemu. However, existing machines upgrading will be using
+# the ethX names instead. The most risk-averse action is to encode
+# "persistent-net-rules" like rules to keep the ethX names on upgrades, since
+# the interface names (ethX) may be in use not only in /etc/network/interfaces
+# but in other configurations too (daemons, firewalls, etc).
+#
+# This is a one time action, and can be removed after the next stable & LTS
+# releases. (~ May 2018)
+#
+
+rulesfile=/etc/udev/rules.d/70-persistent-net.rules
+
+if [ `uname -m` != 's390x' ]
+then
+exit 0
+fi
+
+if [ `systemd-detect-virt` != 'kvm' ]
+then
+exit 0
+fi
+
+if [ -f $rulesfile ]
+then
+exit 0
+fi
+
+for interface in /sys/class/net/eth*
+do
+name=$(basename $interface)
+address=$(cat $interface/address)
+cat <>$rulesfile
+SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="$address", 
KERNEL=="eth*", NAME="$name"
+EOF
+done
diff --git a/debian/udev.install b/debian/udev.install
index b0ab649fb..e5aae4daf 100644
--- a/debian/udev.install
+++ b/debian/udev.install
@@ -22,3 +22,4 @@ usr/share/pkgconfig/udev.pc
 ../../extra/rules/*.rules lib/udev/rules.d/
 #../../extra/*.hwdb lib/udev/hwdb.d/
 ../../extra/fbdev-blacklist.conf lib/modprobe.d/
+../../extra/write_persistent_net_s390x_virtio usr/share/systemd/
diff --git a/debian/udev.postinst b/debian/udev.postinst
index 651727994..8e69e35c2 100644
--- a/debian/udev.postinst
+++ b/debian/udev.postinst
@@ -90,6 +90,12 @@ Driver=virtio_net
 NamePolicy=onboard kernel
 EOF
   fi
+
+  # 232-20 introduced predicable interface names on s390x for virtio
+  # However, we should preserve ethX names on upgrade.
+  if dpkg --compare-versions "$2" lt-nl "232-23~"; then
+  /usr/share/systemd/write_persistent_net_s390x_virtio
+  fi
 }
 
 update_hwdb() {
-- 
2.11.0