网络启动树莓派 (Network boot your Raspberry Pi 4)
本文最后更新于 235 天前,其中的信息可能已经有所发展或是发生改变。

耗时一天终于网络启动了树莓派,现整理一下分享给大家,并弥补一下匮乏的中文资料。

适用场景:

网上的博客多是有两台树莓派,一个作为服务器,一个作为客户机。而本篇文章,只有一个树莓派,和一台自己的主机。本文章的教程已在 Ubuntu 24.04Manjaro 操作系统上测试过,均能成功启动。如果在配置过程中遇到了其他问题,欢迎在评论区中指出。

1 参考资料

中文搜索引擎可能不太能解决这样的问题,还得是 Google 靠谱。网上资料资料有些小杂,还有些时代比较久远了。

  1. 树莓派的官方文档,官方的还是非常靠谱,但是适用于有两个树莓派的情况。
  2. 一篇还不错的博客,大方向是正确的。

2 前置准备

硬件设施:

  • 树莓派4B
  • 网线
  • SD 卡(虽说是网络启动,在配置初期还是需要的)
  • SD 读卡器

软件:

  • 主机(也就是你自己的电脑)操作系统 Ubuntu 24.04
  • 树莓派操作系统镜像 Raspberry Pi Lite 64
  • 树莓派的烧录工具 Imager
  • Wireshark(方便自己看传输的数据包)

3 客户机配置

这里的客户机就指你的树莓派。

3.1 操作系统烧录

使用你的烧录工具 Imager,设备选择 树莓派4,操作系统选择 其他树莓派OS -> Raspberry Pi Lite (64-bit),存储选择你的 SD 卡。点击下一步,会让你确定需不需要进行配置,选择编辑配置,设置你的网络连接相关信息(推荐使用手机热点,这样就可以在手机上看到你的树莓派的 IP 地址);最关键的是在第二个卡项中,开启用密码登录的 ssh。退出编辑后,点击是,就开始烧录操作系统了。

3.2 初启操作系统

将烧录好的 SD 卡插入到树莓派,连接电源并且启动。一段时间(1-2分钟)后,使用你的笔记本 ssh 连接树莓派 ssh username@IP

3.3 配置操作系统

🎯 现在在树莓派上配置的操作系统后面就直接是网络启动的操作系统了,可以好好地配置一下。

3.3.1 基础工具

直接给一个我的脚本吧。

# Install tools, self install other tools if needed
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y
sudo apt install -y git curl wget zsh tmux htop tree neofetch fd-find ripgrep fzf autojump ranger neovim
sudo apt install -y trace-cmd
sudo apt install -y build-essential

# Install ohmyzsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Run command below after above finish !!!
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
sed -i 's/plugins=(git)/plugins=(git zsh-syntax-highlighting zsh-autosuggestions tmux colored-man-pages autojump)/g' ~/.zshrc

完成之后,建议重启树莓派一下。

3.3.2 修改启动顺序

树莓派4可以使用命令行修改。以管理员权限运行 raspi-config,依次选择 高级选项 -> 启动顺序 -> 网络启动优先,保存后,立即重启选择否

3.3.3 重置 ssh-server

❗ 这一步很重要。

运行以下命令:

sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server

到这一步,你的客户操作系统就基本完成了!可以关机拔掉 SD 卡。

4 主机配置

这里主机就是你的电脑。

4.1 工具安装

安装一些必要的工具:

sudo apt install rsync dnsmasq nfs-kernel-server

Arch 有 wiki 指导你需要安装什么软件。

4.2 网络配置

主要是需要手动配置主机的有线连接,使你的电脑有固定的 IP 地址。

打开主机系统设置中的网络配置,配置你的有线网卡。设置该有线网络的 IPv4 的配置方式为手动配置,设置网络地址为 192.168.2.101 ,掩码地址为 255.255.255.0,设置网关地址为 192.168.2.1

4.3 dnsmasq 配置

这一步是配置你的 DHCP 服务器以及 PXE 启动。

创建一个网络启动的 boot 文件夹,假设为 /tftpboot

sudo mkdir /tftpboot
sudo chmod 777 /tftpboot

修改 /etc/dnsmasq.conf 文件,使其具有以下内容(确保无误):

port=0
dhcp-range=192.168.2.150,192.168.2.200,12h
enable-tftp
tftp-root=/tftpboot
pxe-service=0,"Raspberry Pi Boot"
log-dhcp

通过以下命令启动 dnsmasq 服务。

sudo systemctl enable dnsmasq.service
sudo systemctl restart dnsmasq.service

4.4 NFS 文件系统配置

创建一个 NFS 文件给树莓派用,例如 /nfs/client

sudo mkdir -p /nfs/client

添加该文件系统和 boot 文件夹到 /etc/exports 中, /etc/exports 文件修改后如下:

/nfs/client *(rw,sync,insecure,no_subtree_check,no_root_squash)
/tftpboot *(rw,sync,insecure,no_subtree_check,no_root_squash)

重启 RPC 和 NFS 服务:

sudo systemctl enable rpcbind
sudo systemctl restart rpcbind
sudo systemctl enable nfs-kernel-server
sudo systemctl restart nfs-kernel-server

❗ 对于 Arch 用户,需要启动的是 nfs-service 而不是 nfsv4-service

4.5 操作系统拷贝

读取 SD 卡,将 SD 卡中的 boot 文件夹拷贝到 /tftpboot 文件夹中,将 SD 卡中的 root 文件夹拷贝到 /nfs/client 文件夹中。下面举一个命令行的示例。

cd
lsblk # Find some entries like sda
mkdir mnt
sudo mount /dev/sda1 mnt/boot
sudo mount /dev/sda2 mnt/root
sudo rsync -xa --progress mnt/root/* /nfs/client
sudo cp -r mnt/boot/* /tftpboot
sudo umount mnt/boot
sudo umount mnt/root

4.6 最后的修改

修改 /tftpboot/cmdline.txt 如下:

console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.2.101:/nfs/client,vers=3 rw ip=dhcp rootwait

删除 /nfs/client/etc/fstab 第2行之后的内容,并添加以下内容:

192.168.2.101:/tftpboot /boot nfs defaults,vers=3 0 0

保存配置,并重启系统。

5 网络启动

到这里,配置工作就已经完成了。用网线连上你的电脑和树莓派(SD 卡拔掉),给树莓派上电吧。过3-4分钟后,你会看到你的手机有新设备连接热点,并且你可以用 ssh 连接你的树莓派!🎉

6 调试指导

6.1 主机无法上网问题

每次启动树莓派后,主机没法上网?🤔

该问题针对 Ubuntu 24.04

原因是在操作系统中的转发表中,有线网络的优先级会比无线网络高。所以,在每次启动树莓派后

sudo ip route del default dev eth0 # You need to change the `eth0` to the name of your ethernet device.
sudo ip route del default dev eth0 # ❗ Execute it double.

确确实实要执行两次!然后就可以上网了,也不影响树莓派的连接使用。

6.2 无法启动

有一个 Wireshark 工具是非常重要的。首先需要确定你的出错阶段。如果迟迟没有抓到 TFTP 包,说明 PXE 阶段就没有成功,你需要再检查一下 4.3 节中所描述的内容;如果有 TFTP 数据包,那么有可能是第二阶段有问题。此时,可以使用 sudo nfsstatus -s 来检查一下 nfs 服务器是否正常工作,如果没有正常工作,请检查 4.4 节中的操作。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇