config/dracut/90zfs: handle cases where hostid(1) returns all zeros
On systems with musl libc, hostid(1) always prints "00000000", which will cause improper behavior when the 90zfs module is configured in a dracut initramfs. Work around this by copying the host /etc/hostid if the file exists, and otherwise only write /etc/hostid if hostid(1) returns something meaningful. This avoids zgenhostid creating a random /etc/hostid for the initramfs, which could lead to errors when trying to import the pool if spl_hostid isn't defined in the kernel command line. Furthermore, tag the /etc/hostid file as hostonly, since it is system specific and shouldn't be taken into account when trying to use an initramfs generated in one system to boot into a different system. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Georgy Yakovlev <gyakovlev@gentoo.org> Co-authored-by: Andrew J. Hesford <ajh@sideband.org> Signed-off-by: Érico Rolim <erico.erc@gmail.com> Closes #11174 Closes #11189
This commit is contained in:
parent
c4a5e3b90f
commit
e4257ed76d
|
@ -85,7 +85,13 @@ install() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Synchronize initramfs and system hostid
|
# Synchronize initramfs and system hostid
|
||||||
zgenhostid -o "${initdir}/etc/hostid" "$(hostid)"
|
if [ -f @sysconfdir@/hostid ]; then
|
||||||
|
inst @sysconfdir@/hostid
|
||||||
|
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @sysconfdir@/hostid
|
||||||
|
elif HOSTID="$(hostid 2>/dev/null)" && [ "${HOSTID}" != "00000000" ]; then
|
||||||
|
zgenhostid -o "${initdir}@sysconfdir@/hostid" "${HOSTID}"
|
||||||
|
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @sysconfdir@/hostid
|
||||||
|
fi
|
||||||
|
|
||||||
if dracut_module_included "systemd"; then
|
if dracut_module_included "systemd"; then
|
||||||
mkdir -p "${initdir}/$systemdsystemunitdir/zfs-import.target.wants"
|
mkdir -p "${initdir}/$systemdsystemunitdir/zfs-import.target.wants"
|
||||||
|
|
Loading…
Reference in New Issue