]> git.proxmox.com Git - mirror_spl-debian.git/commitdiff
Stabilize the hostid for RPM installations.
authorDarik Horn <dajhorn@vanadac.com>
Fri, 24 Jun 2011 03:10:27 +0000 (22:10 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 24 Jun 2011 16:58:08 +0000 (09:58 -0700)
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

index e02d6c25565e8073889f7744fd7844fbcb451e10..ddeb2609d73e0c025c53f56d1f456f09fb587cea 100644 (file)
@@ -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