mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-28 20:09:35 +03:00
a5a370227e
Dracut and Systemd updated how they integrate with each other, because of this our current integrations stopped working (around the time 4.1.13 came out). This patch addresses that issue and gets us booting again. Thanks to @Rudd-O for doing the work to get dracut working again and letting me submit this on his behalf. Signed-off-by: Manuel Amador (Rudd-O) <rudd-o@rudd-o.com> Signed-off-by: Matthew Thode <mthode@mthode.org> Closes #3605 Closes #4478
79 lines
2.2 KiB
Bash
Executable File
79 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
check() {
|
|
# We depend on udev-rules being loaded
|
|
[ "${1}" = "-d" ] && return 0
|
|
|
|
# Verify the zfs tool chain
|
|
which zpool >/dev/null 2>&1 || return 1
|
|
which zfs >/dev/null 2>&1 || return 1
|
|
|
|
return 0
|
|
}
|
|
|
|
depends() {
|
|
echo udev-rules
|
|
return 0
|
|
}
|
|
|
|
installkernel() {
|
|
instmods zfs
|
|
instmods zcommon
|
|
instmods znvpair
|
|
instmods zavl
|
|
instmods zunicode
|
|
instmods spl
|
|
instmods zlib_deflate
|
|
instmods zlib_inflate
|
|
}
|
|
|
|
install() {
|
|
inst_rules @udevruledir@/90-zfs.rules
|
|
inst_rules @udevruledir@/69-vdev.rules
|
|
inst_rules @udevruledir@/60-zvol.rules
|
|
dracut_install @sbindir@/zfs
|
|
dracut_install @sbindir@/zpool
|
|
dracut_install @udevdir@/vdev_id
|
|
dracut_install @udevdir@/zvol_id
|
|
dracut_install mount.zfs
|
|
dracut_install hostid
|
|
dracut_install awk
|
|
dracut_install head
|
|
inst_hook cmdline 95 "${moddir}/parse-zfs.sh"
|
|
if [ -n "$systemdutildir" ] ; then
|
|
inst_script "${moddir}/zfs-generator.sh" "$systemdutildir"/system-generators/dracut-zfs-generator
|
|
else
|
|
inst_hook mount 98 "${moddir}/mount-zfs.sh"
|
|
fi
|
|
inst_hook shutdown 30 "${moddir}/export-zfs.sh"
|
|
|
|
inst_simple "${moddir}/zfs-lib.sh" "/lib/dracut-zfs-lib.sh"
|
|
if [ -e @sysconfdir@/zfs/zpool.cache ]; then
|
|
inst @sysconfdir@/zfs/zpool.cache
|
|
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @sysconfdir@/zfs/zpool.cache
|
|
fi
|
|
|
|
if [ -e @sysconfdir@/zfs/vdev_id.conf ]; then
|
|
inst @sysconfdir@/zfs/vdev_id.conf
|
|
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @sysconfdir@/zfs/vdev_id.conf
|
|
fi
|
|
|
|
# Synchronize initramfs and system hostid
|
|
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}" > "${initdir}/etc/hostid"
|
|
|
|
if dracut_module_included "systemd"; then
|
|
mkdir -p "${initdir}/$systemdsystemunitdir/initrd.target.wants"
|
|
for _item in scan cache ; do
|
|
dracut_install @systemdunitdir@/zfs-import-$_item.service
|
|
if ! [ -L "${initdir}/$systemdsystemunitdir/initrd.target.wants"/zfs-import-$_item.service ]; then
|
|
ln -s ../zfs-import-$_item.service "${initdir}/$systemdsystemunitdir/initrd.target.wants"/zfs-import-$_item.service
|
|
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @systemdunitdir@/zfs-import-$_item.service
|
|
fi
|
|
done
|
|
fi
|
|
}
|