ramdisk-zfsroot: Remove the module loading magic

It's been determined that it's too magical and it's either the job
of the bootloader or you compile it into the kernel yourself.

This entry works in /boot.cfg:

menu=Boot ZFS Root:load solaris;load zfs;fs /ramdisk-zfsroot.fs;boot
This commit is contained in:
roy 2020-02-25 20:05:10 +00:00
parent 5d361e7c10
commit 7d5fdd89d0
1 changed files with 7 additions and 24 deletions

View File

@ -1,40 +1,24 @@
#/bin/sh #/bin/sh
# #
# $NetBSD: zfsroot.rc,v 1.3 2020/02/23 10:51:12 roy Exp $ # $NetBSD: zfsroot.rc,v 1.4 2020/02/25 20:05:10 roy Exp $
echo "Starting root on ZFS boot strapper" # Assumption - boot.cfg loads this ramdisk.
# Assumption - The needed kernel modules: solaris and zfs; are either on this
# Abort on any error # ramdisk OR loaded by boot.cfg.
set -e # Finding the correct dev node to mount to get them is too magic.
# NetBSD cannot build and distribute a kernel with ZFS builtin.
# Assumption - the root pool is set to legacy mount.
# Configurable - define the ZFS root pool and ROOT. # Configurable - define the ZFS root pool and ROOT.
# XXX Can these be set in boot.cfg? # XXX Can these be set in boot.cfg?
# Assumption - the root pool is set to legacy mount.
rpool=rpool rpool=rpool
rroot=ROOT rroot=ROOT
# Assumption - the boot device is named boot.
# Could use /dev/dk0, /dev/wd0a, etc instead.
# XXX Can be exposed by sysctl kern.boot_device?
bootdev="NAME=boot"
# Setup some stuff incase things go south and we drop to the shell # Setup some stuff incase things go south and we drop to the shell
export HOME=/ export HOME=/
export PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH=/sbin:/bin:/usr/sbin:/usr/bin
umask 022 umask 022
# Avoid having the solaris and zfs modules in ramdisk directly.
# Means we don't need to update the ramdisk with the kernel modules
# or load them from boot.cfg so it's less pain for the user.
#bootdev="$(/sbin/sysctl -n kern.boot_device)"
modpath="$(/sbin/sysctl -n kern.module.path)"
echo "Loading needed kernel modules from $bootdev:$modpath"
/sbin/mount -o ro "$bootdev" /mnt
for m in solaris zfs; do
/sbin/modload "/mnt/$modpath/$m/$m.kmod"
done
/sbin/umount /mnt
# FIXME XXX Sometimes zpool import gets SIGBUS # FIXME XXX Sometimes zpool import gets SIGBUS
# Ensure that we are in a writable directory to try and capture a coredump # Ensure that we are in a writable directory to try and capture a coredump
# Not that we actually get a coredump .... # Not that we actually get a coredump ....
@ -46,5 +30,4 @@ echo "Importing $rpool"
echo "Mounting $rpool/$rroot to /altroot" echo "Mounting $rpool/$rroot to /altroot"
/sbin/mount -t zfs "$rpool/$rroot" /altroot; /sbin/mount -t zfs "$rpool/$rroot" /altroot;
echo "Pivoting to /altroot, welcome to root on ZFS"
/sbin/sysctl -w init.root=/altroot /sbin/sysctl -w init.root=/altroot