]>
Commit | Line | Data |
---|---|---|
fde4ce99 ZB |
1 | #!/bin/sh |
2 | ||
3 | . /lib/dracut-lib.sh | |
4 | ||
5 | # Let the command line override our host id. | |
6 | spl_hostid=`getarg spl_hostid=` | |
e10b0808 | 7 | if [ -n "${spl_hostid}" ] ; then |
1ef5e829 | 8 | info "ZFS: Using hostid from command line: ${spl_hostid}" |
e8753fb4 BB |
9 | AA=`echo ${spl_hostid} | cut -b 1,2` |
10 | BB=`echo ${spl_hostid} | cut -b 3,4` | |
11 | CC=`echo ${spl_hostid} | cut -b 5,6` | |
12 | DD=`echo ${spl_hostid} | cut -b 7,8` | |
e10b0808 AX |
13 | printf "\x${DD}\x${CC}\x${BB}\x${AA}" >/etc/hostid |
14 | elif [ -f "/etc/hostid" ] ; then | |
e8753fb4 | 15 | info "ZFS: Using hostid from /etc/hostid: `hostid`" |
fde4ce99 | 16 | else |
e10b0808 | 17 | warn "ZFS: No hostid found on kernel command line or /etc/hostid." |
7f4afd30 | 18 | warn "ZFS: Pools may not import correctly." |
fde4ce99 ZB |
19 | fi |
20 | ||
ea04106b | 21 | wait_for_zfs=0 |
e10b0808 | 22 | case "${root}" in |
1ef5e829 ZB |
23 | ""|zfs|zfs:) |
24 | # We'll take root unset, root=zfs, or root=zfs: | |
185853d9 JG |
25 | # No root set, so we want to read the bootfs attribute. We |
26 | # can't do that until udev settles so we'll set dummy values | |
27 | # and hope for the best later on. | |
1ef5e829 ZB |
28 | root="zfs:AUTO" |
29 | rootok=1 | |
185853d9 | 30 | wait_for_zfs=1 |
1ef5e829 ZB |
31 | |
32 | info "ZFS: Enabling autodetection of bootfs after udev settles." | |
33 | ;; | |
34 | ||
35 | ZFS\=*|zfs:*|zfs:FILESYSTEM\=*|FILESYSTEM\=*) | |
185853d9 JG |
36 | # root is explicit ZFS root. Parse it now. We can handle |
37 | # a root=... param in any of the following formats: | |
1ef5e829 ZB |
38 | # root=ZFS=rpool/ROOT |
39 | # root=zfs:rpool/ROOT | |
40 | # root=zfs:FILESYSTEM=rpool/ROOT | |
41 | # root=FILESYSTEM=rpool/ROOT | |
42 | ||
43 | # Strip down to just the pool/fs | |
44 | root="${root#zfs:}" | |
45 | root="${root#FILESYSTEM=}" | |
46 | root="zfs:${root#ZFS=}" | |
47 | rootok=1 | |
185853d9 | 48 | wait_for_zfs=1 |
1ef5e829 ZB |
49 | |
50 | info "ZFS: Set ${root} as bootfs." | |
51 | ;; | |
ae26d046 MAR |
52 | esac |
53 | ||
fde4ce99 ZB |
54 | # Make sure Dracut is happy that we have a root and will wait for ZFS |
55 | # modules to settle before mounting. | |
ea04106b | 56 | if [ ${wait_for_zfs} -eq 1 ]; then |
185853d9 | 57 | ln -s /dev/null /dev/root 2>/dev/null |
cae5b340 AX |
58 | initqueuedir="${hookdir}/initqueue/finished" |
59 | test -d "${initqueuedir}" || { | |
60 | initqueuedir="${hookdir}/initqueue-finished" | |
61 | } | |
62 | echo '[ -e /dev/zfs ]' > "${initqueuedir}/zfs.sh" | |
185853d9 | 63 | fi |