树莓派pxe网络启动官方文档(译文)

树莓派网路启动配置方法:

该文档适用于Pi 3 和 Pi 4,需要两台树莓派,一台作为server 另一台作为client只需要一张SD卡,因为client使用网络启动

如果无法成功网络启动,请 关闭网络中的 STP Frames,这样也许有帮助。

Client configuration(For Pi 4):

使用 raspi-config 可以启动Pi 4 的网络启动功能

首先:

sudo raspi-config

​       选择 Advanced Options 之后选择 Boot Order 再之后选择 Network Boot.

​       重启设备,设备会优先使用 bootloader EEPROM 启动。

​       重启后,请确认boot order 是 0xf21

​       使用命令:

vcgencmd bootloader_config

Ethernet Mac address

使用网络启动之前请记录 serial number 和 mac address 这样树莓派才可以被 TFTP/DHCP sever识别

获取Ethernet MAC addres

ethtool -P etho

获取 serial number 

grep Serial /proc/cpuinfo | cut -d ' ' -f 2 | cut -c 8-16

Server configuration

将SD卡插入server 树莓派然后重启,client 需要一个根文件系统用于启动,本次我们使用 server的根文件系统的复制品,放置于/nfs/client1

sudo mkdir -p /nfs/client1
 sudo apt install rsync
sudo rsync -xa --progresss --exclude /nfs / /nfs/client1

​       注: mkdir "-p"代表却表目录名称存在,不存在就创建一个

​       重新生成client 树莓派的SSH host keys,通过 chrooting 连接 client树莓派
​  

cd /nfs/client1

sudo mount --bind /dev dev

sudo mount --bind /sys sys

sudo mount --bing /proc proc

sudo chroot .

rm /etc/ssh/ssh_host_*

dpkg-reconfigure openssh-server

exit

sudo umount dev sys proc

​       找到本地网络的配置参数,你需要照登你的路由器的地址或者(dateway),如下操作。

​      

ip route | awk '/default/ {print $3}'

​       执行

ip -4 addr show dev eth0 | grep inet

​       得到的返回信息类似如下:

​      

inet 10.42.0.211/24 brd 10.42.0.255 scope global eth0

​       第一个地址是你的server树莓派在网络中的IP,"/24"代表网络大小, “brd (boardcast)”  地址也要记录下来。

​       最后记下你的DNS server的地址,改地址与你的gateway地址相同。通过一下命令获取

​      

cat /etc/resolv.conf

​       将server树莓派设置为静态地址,通过 systemd networking,server树莓派将会作为network handler 和 DHCP server工作。

​       为此,你需要创建 10-eth0.netdev

​      

sudo nano /etc/systemd/network/10-eth0.netdev

​       其内容如下:
​      

[Match]

Name = eth0

[Network]

DHCP = no

​       然后创建网络文件

​      

sudo nano /etc/systemd/network/11-eth0.network

​       添加如下内容
​      

 [Match]

Name = eth0

[Network]

Address = 10.42.0.211/24

DNS = 10.42.0.1

[Route]

Gateway = 10.42.0.1

​       目前,你还没有得到一个可以工作的DNS,因此你需要把你之前记录下来的server地址添加到 systemd/resolved.conf 。在本例子中,gateway address 是 10.42.0.1

​      

 sudo nano /etc/systemd/resolved.conf

​       解除DNS那一行的注释,添加 DNS IP Address在该处。

​       另外,如果你有一个fallback DNS server ,那么把它也添加在这里,该处内容类似:
​      

 [Resolve]

DNS = 10.42.0.1

# FallbackDNS =

​       接下来,Enable systemctl-networkd 然后重启设备使得我们之前的改变生效
​      

sudo systemctl enable systemd-networkd

sudo reboot

​       现在启动 tcpdump 这样,你就可以从client树莓派搜索DHCP packets了。
​      

sudo apt install tcpdump dnsmasq

sudo systemctl enable dnsmasq

sudo tcpdump -i eth0 port bootpc

​       将client树莓派连接到你的网络中,启动。在10s左右侯检查LED指示灯,这时你应该可以从client树莓派得到一个packet,类似”DHCP/BOOTP,Request from...“

​      

IP 0.0.0.0.bootpc > 255.255.255.255.bootps : BOOTP/DHCP, Request from b8:27:eb...                 

​       现在你需要去设置dnsmasq configuration 用以enable DHCP来回应设备, 按下 CTRL + C 离开 tcpdump 程序,输入如下内容:
​      

echo | sudo tee /etc/dnsmasq.conf

sudo nano /etc/dnsmasq.conf

​       然后,将dnsmsq.conf中的内容替换为
​      

# Note: comment out port if you want DNS services for systems on teh network

port = 0

dhcp-range = 10.42.0.255,proxy

log-dhcp

enable-tftp

tftp-root = /tftpboot

pxe-service=0,"Raspberry Pi Boot"

​       其中 dhcp-range 那一行表示使用你之前记下的 boardcast address

​       现在,创建 /tftpboot 目录
​      

sudo mkdir /tftpboot

sudo chmod 777 /tftpboot

sudo systemctl enable dnsmasq.service

sudo systemctl restart dnsmasq.service

​       现在,监视 dnsmsq日志(log)

​      

tail -F /var/log/daemon.log

​       你会看到类似这样的内容:

​      

raspberrypi dnsmasq-tftp[1903]: file /tftpboot/bootcode.bin not found

​       接下来你需要把boot folder中的内容拷贝到 /tftpboot 目录中去

​       首先 摁下 CTRL + C 离开监视状态 ,输入如下内容

cp -r /boot/* /tftpboot

​       目前tftp位置已经改变,重启dnsmasq

​      

sudo systemctl restart dnsmasq

Set up NFS root

​       这样做将会允许你的client树莓派尝试启动,当它加载到了服务器端放置的根文件系统(root file system)之后。

​       现在,导出我们之前建立的文件系统 /nfs/client1 和TFTP boot 文件夹
​      

sudo apt install nfs-kernel-server

echo "/nfs/client1 *(rw,sync,no_subtree_check,on_root_squash)"  | sudo tee -a /etc/exports

echo "/tftpboot *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

​       重启 RPC-Bing 和 NFS server 使它们识别新文件
​      

sudo systemctl enable rpcbing

sudo systemctl restart rpcbing

sudo systemctl enable nfs-kernel-server

sudo systemctl restart nfs-kernel-server

​       编辑 /tftpboot/cmdline.txt 然后 从 root= 向前(from root= onwards),将它替换为:

root = /dev/nfs nfsroot=10.42.0.211:/nfs/client1,vers=4.1,proto=tcp rw ip=dhcp rootwait elevator=deadline

​       你需要使用你之前记下的IP地址替换这里的IP地址,同时删除所有以“init=”开头的命令。

​       最后,编辑 /nfs/client1/ect/fstab 同时移除 /dev/mmcblk0p1 和 p2 (只留下 proc).

​       最后,Then, add the boot partition back in:

echo "10.42.0.211:/tftpboot /boot nfs defaults,vers=4.1" | sudo tee -a /nfs/client1/etc/fstab

​       结束了,祝你好运,如果第一次没有成功启动,多试几次,这可能需要花几分钟,耐心一点。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值