From 79593b0dec57ee94c5bb56cdc2770ebde81ecea9 Mon Sep 17 00:00:00 2001 From: Darik Horn Date: Thu, 23 Jun 2011 22:10:27 -0500 Subject: [PATCH] Stabilize the hostid for RPM installations. ZFS requires a stable hostid to recognize foreign pool imports, but the hostid of a Linux system can change if the /etc/hostid file is missing, particularly during DHCP lease updates. Ensure that the system hostid is stable by creating the /etc/hostid file from the output of the /usr/bin/hostid utility. The /sbin/genhostid utility that is provided by the initscripts package is not used because it creates a random hostid, which breaks upgrades on systems that already have the SPL module installed. The external `printf` is used because the dash builtin lacks the byte format. Conveniences like a ${HOSTID:$ii:2} substring range or a `sed` one-liner are similarly avoided. --- spl-modules.spec.in | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spl-modules.spec.in b/spl-modules.spec.in index e02d6c255..ddeb2609d 100644 --- a/spl-modules.spec.in +++ b/spl-modules.spec.in @@ -233,6 +233,17 @@ rm -rf $RPM_BUILD_ROOT %{_prefix}/src/* %post +# The /sbin/genhostid utility writes a random value to the /etc/hostid +# file, which means that using it here will break upgrades on systems +# that already have spl installed. +if [ ! -f /etc/hostid ]; then + HOSTID=$(hostid) + AA=$(echo $HOSTID | cut -b 1,2) + BB=$(echo $HOSTID | cut -b 3,4) + CC=$(echo $HOSTID | cut -b 5,6) + DD=$(echo $HOSTID | cut -b 7,8) + "$(which printf)" "\x$DD\x$CC\x$BB\x$AA" >"/etc/hostid" +fi if [ -f /boot/System.map-%{kver} ]; then depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0 else