summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-09-30 10:33:26 -0700
committerBrian Behlendorf <[email protected]>2011-09-30 13:31:00 -0700
commite8753fb4f03aaa371028aaec145449f2610229cf (patch)
tree5fb7cee167d79a3bc494125b3204d49b89868dde
parent6ebd8ef103c3ed4739987f36d77874f6953af89f (diff)
Synchronize initramfs and system hostid
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 <[email protected]> Closes #398 Closes #399 Signed-off-by: Brian Behlendorf <[email protected]>
-rwxr-xr-xdracut/90zfs/module-setup.sh.in11
-rwxr-xr-xdracut/90zfs/parse-zfs.sh.in8
2 files changed, 16 insertions, 3 deletions
diff --git a/dracut/90zfs/module-setup.sh.in b/dracut/90zfs/module-setup.sh.in
index 33f78e51c..c01915e82 100755
--- a/dracut/90zfs/module-setup.sh.in
+++ b/dracut/90zfs/module-setup.sh.in
@@ -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"
}
diff --git a/dracut/90zfs/parse-zfs.sh.in b/dracut/90zfs/parse-zfs.sh.in
index 13697b945..571d263ce 100755
--- a/dracut/90zfs/parse-zfs.sh.in
+++ b/dracut/90zfs/parse-zfs.sh.in
@@ -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."