Sziasztok!
FreeBSD szerverről szeretnék bebootolni netboot-tal (PXE) egy Raspberry PI-t, amin szintén FreeBSD futna.
A következőket csináltam:
1. Bootloader frissítés
A "Raspberry Pi Imager"-rel kiírtam a network boot-os bootloadert egy sd kártyára, és feltettem a raspberry pi-re.
2. Router konfigurálás
Egy Mikrotik routerem van, és ott a DHCP beállításoknál megadtam az adott klienshez a 66-os, és 67-es opciót, ami elvileg kell a netboot-hoz:
66 s'192.168.4.200'
67 s'bootcode.bin'
És a networks-nél beállítottam a next-server-t a 192.168.4.200-ra. (megj.: ha a next-server-t nem állítom be, akkor később a routerről akarja letölteni a fájlokat, miután az uboot elindult (de nem tudom, hogy miért))
3. Elindítottam a TFTP-t a FreeBSD szerveren
/etc/inetd.conf:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
(a sorból kiszedtem a commentezést)
Létrehoztam egy /tftpboot könyvtárat:
mkdir /tftpboot
az inetd-t bekapcsoltam:
/etc/rc.conf:
inetd_enable="YES"
inetd szolgáltatás elindítása:
service start inetd
4. Letöltöttem a Raspberry PI image-et, és kicsomagoltam
cd ~
wget https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-arm64-aarch64-RPI.img.xz
xz -d FreeBSD-14.2-RELEASE-arm64-aarch64-RPI.img.xz
A boot particiót bemásoltam a /tftpboot könyvtárba:
mdconfig -a -t vnode -f FreeBSD-14.2-RELEASE-arm64-aarch64-RPI.img
mount -tmsdosfs /dev/md1s1 /mnt
cp -a /mnt/* /tftpboot/
umount /mnt
A root particiót bemásoltam a /tftpboot/rootfs könyvtárba:
mkdir /tftpboot/rootfs
mount /dev/md1s2a /mnt
cp -a /mnt/* /tftpboot/rootfs/
umount /mnt
mdconfig -d -u md1
5. NFS bekonfigolása:
/etc/rc.conf:
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_enable="YES"
rpcbind_enable="YES"
/etc/exports:
/tftpboot/rootfs -maproot=root -alldirs
NFS elindítása:
service start rcpbind
service start nfsd
service start mountd
6. Tesztelés, hogy eddig működik-e:
A root fájlrendszert (/tftpboot/rootfs) NFS-sel a gépemen (egy Fedora desktop) fel tudom mountolni. Tudok írni a fájlrendszerbe. - szerintem ez működik.
A TFTP működik, a Raspberry PI elkezdi letölteni a U-Boot-ot, ami szépen elindul a Raspberry PI-n.
tcpdump-pal megnézve, hogy mi történik:
# tcpdump -i re0 port 69
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on re0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:31:13.684042 IP 192.168.4.15.53678 > 192.168.4.200.tftp: TFTP, length 49, RRQ "d84f375f/start4.elf" octet tsize 0 blksize 1468
14:31:13.687051 IP 192.168.4.15.53679 > 192.168.4.200.tftp: TFTP, length 48, RRQ "d84f375f/start.elf" octet tsize 0 blksize 1468
14:31:13.689934 IP 192.168.4.15.53680 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:13.693358 IP 192.168.4.15.53681 > 192.168.4.200.tftp: TFTP, length 39, RRQ "vl805.sig" octet tsize 0 blksize 1468
14:31:13.695819 IP 192.168.4.15.53682 > 192.168.4.200.tftp: TFTP, length 42, RRQ "pieeprom.sig" octet tsize 0 blksize 1468
14:31:13.698766 IP 192.168.4.15.53683 > 192.168.4.200.tftp: TFTP, length 42, RRQ "recover4.elf" octet tsize 0 blksize 1468
14:31:13.701738 IP 192.168.4.15.53684 > 192.168.4.200.tftp: TFTP, length 42, RRQ "recovery.elf" octet tsize 0 blksize 1468
14:31:13.704156 IP 192.168.4.15.53685 > 192.168.4.200.tftp: TFTP, length 40, RRQ "start4.elf" octet tsize 0 blksize 1468
14:31:14.482638 IP 192.168.4.15.53686 > 192.168.4.200.tftp: TFTP, length 40, RRQ "fixup4.dat" octet tsize 0 blksize 1468
14:31:14.712457 IP 192.168.4.15.49153 > 192.168.4.200.tftp: TFTP, length 42, RRQ "recovery.elf" octet tsize 0 blksize 1468
14:31:14.714849 IP 192.168.4.15.49154 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:14.717775 IP 192.168.4.15.49155 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:14.720940 IP 192.168.4.15.49156 > 192.168.4.200.tftp: TFTP, length 41, RRQ "dt-blob.bin" octet tsize 0 blksize 1468
14:31:14.777910 IP 192.168.4.15.49157 > 192.168.4.200.tftp: TFTP, length 42, RRQ "recovery.elf" octet tsize 0 blksize 1468
14:31:14.780326 IP 192.168.4.15.49158 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:14.783019 IP 192.168.4.15.49159 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:15.237028 IP 192.168.4.15.49160 > 192.168.4.200.tftp: TFTP, length 41, RRQ "bootcfg.txt" octet tsize 0 blksize 1468
14:31:15.290138 IP 192.168.4.15.49161 > 192.168.4.200.tftp: TFTP, length 40, RRQ "u-boot.bin" octet tsize 0 blksize 1468
14:31:15.292956 IP 192.168.4.15.49162 > 192.168.4.200.tftp: TFTP, length 40, RRQ "u-boot.bin" octet tsize 0 blksize 1468
14:31:15.300129 IP 192.168.4.15.49163 > 192.168.4.200.tftp: TFTP, length 49, RRQ "bcm2711-rpi-4-b.dtb" octet tsize 0 blksize 1468
14:31:15.303253 IP 192.168.4.15.49164 > 192.168.4.200.tftp: TFTP, length 49, RRQ "bcm2711-rpi-4-b.dtb" octet tsize 0 blksize 1468
14:31:15.325274 IP 192.168.4.15.49165 > 192.168.4.200.tftp: TFTP, length 54, RRQ "overlays/overlay_map.dtb" octet tsize 0 blksize 1468
14:31:15.403776 IP 192.168.4.15.49166 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:15.406407 IP 192.168.4.15.49167 > 192.168.4.200.tftp: TFTP, length 40, RRQ "config.txt" octet tsize 0 blksize 1468
14:31:15.430249 IP 192.168.4.15.49168 > 192.168.4.200.tftp: TFTP, length 47, RRQ "overlays/mmc.dtbo" octet tsize 0 blksize 1468
14:31:15.433207 IP 192.168.4.15.49169 > 192.168.4.200.tftp: TFTP, length 47, RRQ "overlays/mmc.dtbo" octet tsize 0 blksize 1468
14:31:15.495247 IP 192.168.4.15.49170 > 192.168.4.200.tftp: TFTP, length 54, RRQ "overlays/disable-bt.dtbo" octet tsize 0 blksize 1468
14:31:15.497989 IP 192.168.4.15.49171 > 192.168.4.200.tftp: TFTP, length 54, RRQ "overlays/disable-bt.dtbo" octet tsize 0 blksize 1468
14:31:15.639655 IP 192.168.4.15.49172 > 192.168.4.200.tftp: TFTP, length 41, RRQ "cmdline.txt" octet tsize 0 blksize 1468
14:31:15.642530 IP 192.168.4.15.49173 > 192.168.4.200.tftp: TFTP, length 41, RRQ "cmdline.txt" octet tsize 0 blksize 1468
14:31:15.916083 IP 192.168.4.15.49174 > 192.168.4.200.tftp: TFTP, length 46, RRQ "armstub8-gic.bin" octet tsize 0 blksize 1468
14:31:15.919120 IP 192.168.4.15.49175 > 192.168.4.200.tftp: TFTP, length 46, RRQ "armstub8-gic.bin" octet tsize 0 blksize 1468
14:31:15.922126 IP 192.168.4.15.49176 > 192.168.4.200.tftp: TFTP, length 46, RRQ "armstub8-gic.bin" octet tsize 0 blksize 1468
14:31:15.925035 IP 192.168.4.15.49177 > 192.168.4.200.tftp: TFTP, length 46, RRQ "armstub8-gic.bin" octet tsize 0 blksize 1468
14:31:15.928720 IP 192.168.4.15.49178 > 192.168.4.200.tftp: TFTP, length 40, RRQ "u-boot.bin" octet tsize 0 blksize 1468
14:31:15.932184 IP 192.168.4.15.49179 > 192.168.4.200.tftp: TFTP, length 40, RRQ "u-boot.bin" octet tsize 0 blksize 1468
14:31:36.970228 IP 192.168.4.15.3526 > 192.168.4.200.tftp: TFTP, length 73, RRQ "pxelinux.cfg/01-dc-a6-32-11-d3-13" octet timeout 5 tsize 0 blksize 1468
14:31:36.993175 IP 192.168.4.15.3549 > 192.168.4.200.tftp: TFTP, length 61, RRQ "pxelinux.cfg/C0A8040F" octet timeout 5 tsize 0 blksize 1468
14:31:37.015680 IP 192.168.4.15.3571 > 192.168.4.200.tftp: TFTP, length 60, RRQ "pxelinux.cfg/C0A8040" octet timeout 5 tsize 0 blksize 1468
14:31:37.038105 IP 192.168.4.15.3594 > 192.168.4.200.tftp: TFTP, length 59, RRQ "pxelinux.cfg/C0A804" octet timeout 5 tsize 0 blksize 1468
14:31:37.060190 IP 192.168.4.15.3616 > 192.168.4.200.tftp: TFTP, length 58, RRQ "pxelinux.cfg/C0A80" octet timeout 5 tsize 0 blksize 1468
14:31:37.083776 IP 192.168.4.15.3640 > 192.168.4.200.tftp: TFTP, length 57, RRQ "pxelinux.cfg/C0A8" octet timeout 5 tsize 0 blksize 1468
14:31:37.105659 IP 192.168.4.15.3662 > 192.168.4.200.tftp: TFTP, length 56, RRQ "pxelinux.cfg/C0A" octet timeout 5 tsize 0 blksize 1468
14:31:37.127351 IP 192.168.4.15.3683 > 192.168.4.200.tftp: TFTP, length 55, RRQ "pxelinux.cfg/C0" octet timeout 5 tsize 0 blksize 1468
14:31:37.148962 IP 192.168.4.15.3705 > 192.168.4.200.tftp: TFTP, length 54, RRQ "pxelinux.cfg/C" octet timeout 5 tsize 0 blksize 1468
14:31:37.174139 IP 192.168.4.15.3730 > 192.168.4.200.tftp: TFTP, length 76, RRQ "pxelinux.cfg/default-arm-bcm283x-rpi" octet timeout 5 tsize 0 blksize 1468
14:31:37.200294 IP 192.168.4.15.3756 > 192.168.4.200.tftp: TFTP, length 72, RRQ "pxelinux.cfg/default-arm-bcm283x" octet timeout 5 tsize 0 blksize 1468
14:31:37.223482 IP 192.168.4.15.3779 > 192.168.4.200.tftp: TFTP, length 64, RRQ "pxelinux.cfg/default-arm" octet timeout 5 tsize 0 blksize 1468
14:31:37.245857 IP 192.168.4.15.3802 > 192.168.4.200.tftp: TFTP, length 60, RRQ "pxelinux.cfg/default" octet timeout 5 tsize 0 blksize 1468
14:31:37.275392 IP 192.168.4.15.3831 > 192.168.4.200.tftp: TFTP, length 52, RRQ "C0A8040F.img" octet timeout 5 tsize 0 blksize 1468
Tehát látszik, hogy a pxeconfig.cfg könyvtárból már nem tud semmit letölteni, és a C0A8040F.img-t sem. - De ez még rendben van ezen a ponton, azt most kell létrehoznom:
Kérdések:
És itt vagyok elakadva, sok mindent kipróbáltam, de nem találok egy jó leírást.
Létrehozom a pxelinux.cfg-ben a default-ot:
/tftpboot/pxelinux.cfg/default:
DEFAULT FreeBSD
LABEL FreeBSD
KERNEL rootfs/boot/kernel/kernel.bin
APPEND -dhcp -v vfs.root.mountfrom="nfs:192.168.4.200:/tftpboot/rootfs" rootfs/boot/loader.conf
Az APPEND sorban már tuti hülyeség van, de sok mindent kipróbáltam.
A /tftpboot/cmdline.txt-be felvettem ezt:
vfs.root.mountfrom=nfs:192.168.4.200/tftpboot/rootfs
Ezt a sort /tftpboot/rootfs/boot/loader.conf-ba is felvettem:
vfs.root.mountfrom=nfs:192.168.4.200/tftpboot/rootfs
Tehát a teljes fájl tartalma:
# Configure USB OTG; see usb_template(4).
hw.usb.template=3
umodem_load="YES"
# Multiple console (serial+efi gop) enabled.
boot_multicons="YES"
boot_serial="YES"
# Disable the beastie menu and color
beastie_disable="YES"
loader_color="NO"
vfs.root.mountfrom=nfs:192.168.4.200/tftpboot/rootfs
Így most látszik a tcpdump kimenetében, hogy lölti a kernel.bin-t:
...
14:36:55.505766 IP 192.168.4.15.3801 > 192.168.4.200.tftp: TFTP, length 60, RRQ "pxelinux.cfg/default" octet timeout 5 tsize 0 blksize 1468
14:36:55.543131 IP 192.168.4.15.3839 > 192.168.4.200.tftp: TFTP, length 69, RRQ "rootfs/boot/kernel/kernel.bin" octet timeout 5 tsize 0 blksize 1468
Látszik a raspberry pi HDMI kimenetével, hogy el is indítja a kernel-t (Startint kernel... üzenet jelenik meg), majd teljesen sötét képernyőre vált, és minden kifagy.
A loader.conf-ot semmi nem tölti le (TFTP-vel).
Itt a vége fele már teljesen el vagyok veszve, mit hogyan kellene, nem igazán találok teljesen jó leírást, ami RPI alatt is működik, és FreeBSD-n van a PXE környezet.
Csinált esetleg valaki ilyet már FreeBSD-vel, és Raspberry PI-vel?
Látszik, hogy a pxelinux.cfg/default-ba írok elérést, azt TFTP-n akarja elérni. Pontosan hova kellene tenni a tftpboot/rootfs/boot könyvtárat?
Ezt TFTP-vel fogja elérni a boot, vagy NFS-sel?
A cmdline.txt fájl tartalma mi legyen?
Köszönöm előre is.
Hozzászólások
Ha a bootfile-nak a routerben az EFI/BOOT/bootaa64.efi-t adom meg, akkor bejön a freebsd-s menü, de a kernelt nem tudja betölteni. (persze ez már csak próbálkozás volt, nincs már ötletem)
Annak nincs értelme, hogy a boot könyvtár a tftpboot/rootfs könyvtáron belül van, ezt kimásoltam.
a cmdline.txt-ben, és a pxelinux.cfg/default-ban a paraméter rész szerintem nincs jól megadva.
Ezt végignyálaztad már? (Igen látom, hogy ez RaspiOS-t tölt és nem FreeBSD-t.)
https://forums.freebsd.org/threads/howto-setup-diskless-booting-of-rasp…
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
Köszi szépen! Igen, ezt néztem már, de holnap végignézem megint. Kipróbálom ezt a ZFS-es NFS megosztást is.
Érdekes amúgy, hogy itt a pxelinux.cfg könyvtárról egy szó sincs.
Szerintem nekem az okozza a problémát, hogy nem jól adom meg, hogy az nfs fájlrendszert csatolja fel + lehet, hogy nem a megfelelő binárist akarom elindítani. Leírások pxeboot bootfájlt is emlegetnek, nekem olyan nincs is.