From: Darik Horn Date: Fri, 24 Jun 2011 03:10:27 +0000 (-0500) Subject: Stabilize the hostid for RPM installations. X-Git-Tag: spl-0.6.0-rc5~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=79593b0dec57ee94c5bb56cdc2770ebde81ecea9;p=spl 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. --- diff --git a/spl-modules.spec.in b/spl-modules.spec.in index e02d6c2..ddeb260 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