Re: rpi4 zfs-on-root boot-to-usb3 [Example sequence that lead to booting zfs-on-root under GPT partitioning]

Mark Millard via freebsd-arm <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On 2021-May-6, at 05:55, Mark Millard <marklmi at yahoo.com> wrote:

> On 2021-May-6, at 04:12, tech-lists <tech-lists at zyxst.net> wrote:
> 
>> How can zfs-on-root boot-to-usb3 on rpi4 be accomplished?
>> 
>> I've tried bsdinstall from a mmcsd-booted rpi4 but there seems to be
>> problems with it that I can't work around. What's really needed is an
>> installer, but these aren't made for arm64.aarch64 rpi4 from what I can
>> see (I'm no expert though, it's entirely feasible i've missed
>> something).
>> 
>> Maybe one way of doing it would be to have a usb key (as ufs2) for the
>> system to boot on, then have /home /usr/obj and other larger dirs on the
>> usb3-zfs disk.
> 
> I used bsdinstall from booting a releng/13.0's release/13.0.0.0
> microsd card in a 8 GiBYte RPi4B to produce the:
> . . .

Various details shown will just be my specific
choices. (The RPi4B's that I have access to have
the 2021-Apr-29 default(/critical) EEPROM image.)

Taking notes as I go (and readjusting as I
progress and figure things out, eliminating
failing attempts as well) . . .

Booting based on a microsd card with releng/13.0 's
release/13.0.0 as its basis. The context has a
working network with internet access.

# uname -apKU
FreeBSD generic 13.0-RELEASE FreeBSD 13.0-RELEASE #0 releng/13.0-n244733-ea31abc261f: Fri Apr  9 06:06:55 UTC 2021     [email protected]:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC  arm64 aarch64 1300139 1300139

Plug in USB3 SSD. Ends up as da0.

# /bin/sh  # Just for my familiarity
# set -o vi

# mkdir -p /usr/freebsd-dist
# cd /usr/freebsd-dist
# fetch http://ftp3.freebsd.org/pub/FreeBSD/releases/arm64/13.0-RELEASE/MANIFEST
MANIFEST                                               782  B 6147 kBps    00s
# cd ~

# bsdinstall

Continue with default keymap : Select

Enter hostname as ZFStest : OK

[*] base-dbg
[*] kernel-dbg
[ ] ports
[ ] src
[*] tests
then: OK

(Note: I use git for src and ports.)

Main Site : OK

Auto (ZFS) : OK

Pool Name : Select

Enter name for zpool ztstp : OK

Swap Size : Select

Enter swap size 24g : OK

Proceed with Installation : Select

Stripe - No Redundancy : OK

[*] da0 : OK

Last Chance for da0 : YES

Downloads . . .
Extracts . . .

New Password: . . .
Retype New Password: . . .

genet0 : OK

configure IPv4 : YES
configure DHCP : YES
configure IPv6 : YES
try SLAAC : YES
Resolver Configuration : OK

time is UTC? : YES

America : OK
United States of America : OK
Pacific : OK
Does PDT look reasonable? : Yes
May 2021 6 : Set Date
11 07 00 : Set Time

[ ] local_unbound
[*] sshd
[ ] moused
[ ] ntpdate
[*] ntpd
[*] powerd
[*] dumpdev
Then : OK

No hardening options enabled : OK

Add uses? : Yes
. . . details omitted . . .
OK ? yes
Add another user? no

Handbook : OK
[*] en : OK

Apply configuration and exit installer : OK
open a shell : No

# shutdown -p now


At this point it still can not boot an RPi4B
for lack of rpi firmware and U-Boot.

I have such available on other machine based
on the latest ports instead of quarterly. There
are RPi4B's in the world that need the more
modern U-Boot compared to the quarterly that
releng/13.0 is tied to by default. But you
likely could install rpi-firmware and
u-boot-rpi-arm64 on the microsd card and
then copy over materials from there.

In my context . . .

# gpart show -p da1
=>       40  468862048    da1  GPT  (224G)
         40     532480  da1p1  efi  (260M)
     532520       2008         - free -  (1.0M)
     534528   50331648  da1p2  freebsd-swap  (24G)
   50866176  417994752  da1p3  freebsd-zfs  (199G)
  468860928       1160         - free -  (580K)

# mount -onoatime -tmsdosfs /dev/da1p1 /mnt
# cp -aRx /usr/local/share/rpi-firmware/* /mnt/
# cp -aRx /mnt/config_arm64.txt /mnt/config.txt 
# cp -aRx /usr/local/share/u-boot/u-boot-rpi-arm64/u-boot.bin /mnt/
# umount /mnt

Back to the RPi4B, no microsd card but plugging in the
USB3 SSD and booting and logging in:

Dec 31 16:00:48 ZFStest login[1351]: ROOT LOGIN (root) ON ttyu0
FreeBSD 13.0-RELEASE (GENERIC) #0 releng/13.0-n244733-ea31abc261f: Fri Apr  9 03:54:53 UTC 2021

# gpart show -p
=>       40  468862048    da0  GPT  (224G)
         40     532480  da0p1  efi  (260M)
     532520       2008         - free -  (1.0M)
     534528   50331648  da0p2  freebsd-swap  (24G)
   50866176  417994752  da0p3  freebsd-zfs  (199G)
  468860928       1160         - free -  (580K)

# uname -apKU
FreeBSD ZFStest 13.0-RELEASE FreeBSD 13.0-RELEASE #0 releng/13.0-n244733-ea31abc261f: Fri Apr  9 03:54:53 UTC 2021     [email protected]:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC  arm64 aarch64 1300139 1300139

I end up adding to /etc/rc.conf:

#
ntpd_sync_on_start="YES"
ntpd_user="root"

The first boot's time will be messed up for
lack of the ntpd_sync_on_start="YES" .

# shutdown -r now

After login:

# ls -Tld /etc/rc.conf
-rw-r--r--  1 root  wheel  279 Dec 31 16:12:37 1969 /etc/rc.conf
# touch /etc/rc.conf

There are other files around with such an odd timestamp.

# zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
ztstp   199G  1.09G   198G        -         -     0%     0%  1.00x    ONLINE  -

# zfs list
NAME                 USED  AVAIL     REFER  MOUNTPOINT
ztstp               1.09G   192G       96K  /ztstp
ztstp/ROOT          1.08G   192G       96K  none
ztstp/ROOT/default  1.08G   192G     1.08G  /
ztstp/tmp             96K   192G       96K  /tmp
ztstp/usr            416K   192G       96K  /usr
ztstp/usr/home       128K   192G      128K  /usr/home
ztstp/usr/ports       96K   192G       96K  /usr/ports
ztstp/usr/src         96K   192G       96K  /usr/src
ztstp/var            680K   192G       96K  /var
ztstp/var/audit       96K   192G       96K  /var/audit
ztstp/var/crash       96K   192G       96K  /var/crash
ztstp/var/log        200K   192G      200K  /var/log
ztstp/var/mail        96K   192G       96K  /var/mail
ztstp/var/tmp         96K   192G       96K  /var/tmp

# more /etc/sysctl.conf 
# $FreeBSD$
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl'' to adjust kernel values.  ``man 5 sysctl.conf'' for details.
#

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0
vfs.zfs.min_auto_ashift=12

I'll note that in:

# more /boot/efi/config.txt 
[all]
arm_64bit=1
dtparam=audio=on,i2c_arm=on,spi=on
dtoverlay=mmc
dtoverlay=disable-bt
device_tree_address=0x4000
kernel=u-boot.bin

[pi4]
hdmi_safe=1
armstub=armstub8-gic.bin

The hdmi)safe=1 line restricts the HDMI display
resolution/scaling. Any of the following
replacements for that line will avoid that but
in some contexts one could end up in a "blind
display" context instead, which is why hdmi_safe
is enabled by default.

hdmi_safe=0
or:
#hdmi_safe=1
or just delete the line.


===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-arm
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.