]> granicus.if.org Git - zfs/commitdiff
Synchronize initramfs and system hostid
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 30 Sep 2011 17:33:26 +0000 (10:33 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 30 Sep 2011 20:31:00 +0000 (13:31 -0700)
Relying on an /etc/hostid file which is installed in the system
image breaks diskless systems which share an image.  Certain
cluster infrastructure such as MPI relies on all nodes having
a unique hostid.  However, we still must be careful to ensure
the hostid is syncronized between the initramfs and system
images when using zfs root filesystems.

To accompish this the automatically created /etc/hostid file has
been removed from the spl rpm packaging.  The /etc/hostid file
is now dynamically created for your initramfs as part of the
dracut install process.  This avoids the need to install it in
the actual system images.

This change also resolves the spl_hostid parameter handling
for dracut.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #398
Closes #399

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
dracut/90zfs/module-setup.sh.in
dracut/90zfs/parse-zfs.sh.in

index 33f78e51cde7a2e7ec9d1470b0f4ad0be50b5a69..c01915e82eee71667b40e358bb106794edbaab60 100755 (executable)
@@ -33,7 +33,6 @@ install() {
        inst_rules @udevruledir@/60-zvol.rules
        inst @sysconfdir@/zfs/zdev.conf
        inst @sysconfdir@/zfs/zpool.cache
-       inst @sysconfdir@/hostid
        dracut_install @sbindir@/zfs
        dracut_install @sbindir@/zpool
        dracut_install @bindir@/zpool_layout
@@ -43,4 +42,14 @@ install() {
        dracut_install hostid
        inst_hook cmdline 95 "$moddir/parse-zfs.sh"
        inst_hook mount 98 "$moddir/mount-zfs.sh"
+
+       # Synchronize initramfs and system hostid
+       TMP=`mktemp`
+       AA=`hostid | cut -b 1,2`
+       BB=`hostid | cut -b 3,4`
+       CC=`hostid | cut -b 5,6`
+       DD=`hostid | cut -b 7,8`
+       printf "\x$DD\x$CC\x$BB\x$AA" >$TMP
+       inst_simple "$TMP" /etc/hostid
+       rm "$TMP"
 }
index 13697b9453270db3d2301f5965bd4846a64f5840..571d263ce102c59a09cc221ec445461a518a2ac3 100755 (executable)
@@ -6,9 +6,13 @@
 spl_hostid=`getarg spl_hostid=`
 if [ "${spl_hostid}" != "" ] ; then
        info "ZFS: Using hostid from command line: ${spl_hostid}"
-       echo "${spl_hostid}" > /etc/hostid
+       AA=`echo ${spl_hostid} | cut -b 1,2`
+       BB=`echo ${spl_hostid} | cut -b 3,4`
+       CC=`echo ${spl_hostid} | cut -b 5,6`
+       DD=`echo ${spl_hostid} | cut -b 7,8`
+       printf "\x$DD\x$CC\x$BB\x$AA" >/etc/hostid
 elif [ -f /etc/hostid ] ; then
-       info "ZFS: Using hostid from /etc/hostid: `cat /etc/hostid`"
+       info "ZFS: Using hostid from /etc/hostid: `hostid`"
 else
        warn "ZFS: No hostid found on kernel command line or /etc/hostid.  "
        warn "ZFS: Pools may not import correctly."