尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

树莓派5无外设安装Ubuntu系统:从烧录到SSH远程管理的完整指南

树莓派5无外设安装Ubuntu系统:从烧录到SSH远程管理的完整指南 做嵌入式或者玩单板机的朋友应该都遇到过这种场面树莓派5拿到了电源和网线都在手边显示器、键盘、鼠标却一个都找不到。要么是在机房部署要么是出差只背了台笔记本外设不是被借走就是压根没带。以前遇到这种情况只能干等但现在不一样。树莓派5配合Ubuntu官方镜像完全可以做到无外设安装系统SD卡烧录完毕插电开机剩下的所有操作都通过SSH远程搞定。这次我完整走了一遍这个流程实际体验下来整个过程并不需要USB转HDMI采集卡也不需要串口调试线只要一台能上网的电脑、一张TF卡、一个读卡器有WiFi环境就更方便有线网口也行就能把Ubuntu 24.04 LTS装进树莓派5并完成首次开机的各项初始化配置。这篇内容既适合刚接触树莓派的新手照着操作也适合想搞明白“远程装系统”背后原理的朋友。树莓派4B、CM4这些同样靠SD卡启动的板子也可以参考同一套思路只是固件细节略有差别我会在对应位置标注清楚。1. 先搞清楚无外设安装为什么能成立1.1 树莓派5的启动链路与Headless思路树莓派5用的是博通BCM2712处理器四核Cortex-A76主频可以跑到2.4GHz性能相比树莓派4B提升明显。它上电后的启动流程大概是SoC片内BootROM先接管读取板载EEPROM里的引导程序然后按顺序尝试从SD卡、USB、网络等介质寻找启动固件。一旦从SD卡的FAT分区读到了bootloader和内核再挂载ext4根文件系统最后交给systemd拉起整个用户态服务。关键点在于整条链路里没有任何一步需要“显示器确认”。有没有屏幕板子本身是不知道的。显示器、键盘、鼠标只是用户侧的人机交互设备并不是系统启动的必要条件。SSH服务在系统起来之后提供了一个远程shell本质上就是把你的笔记本当成键盘和显示器来用。理解了这层关系就会明白“无外设安装”在架构上完全可行真正的难点只是如何在第一次上电之前把“允许SSH、设置好用户名密码、配置好网络”这些初始化动作提前做掉。树莓派官方给的方案是在SD卡里预置配置。Ubuntu官方树莓派镜像的引导分区FAT32Windows下通常显示为system-boot盘里放着两个关键文件分别是network-config和user-data。network-config是netplan格式的网络配置user-data则负责定义用户、密码、SSH开关等信息。Raspberry Pi Imager在烧录时如果勾选了高级配置选项也会生成并写入这些配置。所以整套无外设安装的思路可以浓缩成一句话让SD卡在第一次上电之前就把一切准备好开机即入网入网即SSH。1.2 三种无外设方案怎么选既然要无外设装系统摆在我面前的大致有三条路方案A读卡器写卡加预置配置把系统镜像烧进SD卡同时把用户、密码、SSH、无线网络全部写进配置插电后直接用SSH连接。这是本次采用的方式。方案BUSB转TTL串口调试线连接树莓派的GPIO引脚通过串口控制台手动配置网络和用户再开启SSH。这种方法需要额外买模块但对网络配置错误的场景特别有用。方案C网络启动Network Boot需要树莓派5的EEPROM引导固件更新到支持网络启动的版本并且在局域网内配置好DHCP与TFTP服务。适合无SD卡的批量部署但门槛最高。三者的对比可以参考下面这个表方案额外硬件依赖条件核心优势适合场景A 读卡器预置配置读卡器一台电脑、SD卡操作最简单成功率最高个人单机、小批量部署B 串口调试线USB转TTL模块电脑有USB口不依赖网络配置能看到启动日志网络配置失败、系统救援C 网络启动无需服务器DHCP/TFTP服务、EEPROM固件无需SD卡适合大批量无人值守规模化生产、持续集成这次我选方案A理由很直接本机不需要额外硬件不需要动EEPROM更不需要搭建局域网基础设施。代价仅仅是一张TF卡和一个读卡器。方案B我会在第4章里当作兜底手段详细讲因为它确实在很多关键时刻救过我的设备。方案C对绝大多数个人用户来说有些重这次先不展开。1.3 硬件与软件准备清单在动手之前先把东西备齐。我在这个环节吃过亏所以清单列得细一点树莓派5主板一块尽量装上散热片或者风扇。Pi 5发热量不小没有外设时如果因为过热降频或重启排查起来非常难受。TF卡至少16GB建议选U3、A2评级以上的卡。杂牌卡顺序写入速度低长时间烧录容易失败就算侥幸装好系统后期稳定性也是个大问题。USB读卡器一个最好支持UHS-I速度太慢的读卡器烧录时间会成倍增加。树莓派5原装27W USB-C电源适配器。注意Pi 5的供电需求从4B的5V/3A提高到了5V/5A普通手机充电头大多不够用。后面会细说这个坑。一台电脑系统不限能装Raspberry Pi Imager就行。Windows、macOS、Linux都可以。网络环境。有线网口最省心插上就有网如果要用WiFi提前准备好一个2.4GHz或5GHz的SSID和密码。Raspberry Pi Imager软件建议下载1.8.4以上版本老版本对树莓派5的支持不完整。这里特别提醒一下电源问题。树莓派5的供电策略和4B不太一样它对瞬时电流和电压跌落更敏感。如果用了电流输出能力不足的电源典型症状是插电后绿灯长时间闪烁或者不规律闪动系统反复重启USB外设时好时坏。无外设场景下这个问题尤其隐蔽因为你看不到画面只能通过指示灯和网络通断来猜。2. 烧录镜像90%的成败都在这一步2.1 用Raspberry Pi Imager选择Ubuntu镜像第一步当然是下载并安装Raspberry Pi Imager。打开软件后界面非常简洁只有三个下拉框和一个烧录按钮。第一个下拉框选择设备类型这里选Raspberry Pi 5第二个下拉框选择操作系统这里需要正经找一下。在“Operating System”菜单里默认展示的是Raspberry Pi OS系列但Ubuntu的官方镜像并不在这个列表里。需要点进“Other general-purpose OS”找到Ubuntu分类里面会有针对树莓派优化的Ubuntu镜像。我这次选的是Ubuntu 24.04.1 LTS (64-bit) server版也就是Noble Numbat的树莓派版本。如果你想跑桌面环境也可以选Desktop版但后面我会解释为什么无外设场景下Server版体验更好。第三个下拉框选择你的SD卡确认没选错盘符之后点“Next”按钮。Imager会弹出一个对话框问你是否应用自定义设置。真正关键的操作都在这里不要直接跳过。如果不做任何预配置这张卡烧进去之后你依然需要一个显示器和键盘来登录系统做初始化那就完全违背无外设的初衷了。这里也多说一句为什么推荐用Imager而不是直接用dd写镜像。Imager在烧录前会做两项额外工作一是针对目标设备比如树莓派5写入合适的bootloader兼容层配置二是在烧录完成后自动向引导分区注入用户自定义的cloud-init配置。这两个操作对手动dd来说都需要自己处理容易遗漏。2.2 关键一步Imager的预配置设置点击Imager右下角的齿轮图标或者按快捷键CtrlShiftX会打开高级选项面板。这个地方填得好不好直接决定了你后续能不能顺利连上SSH。首先是“Set hostname”我习惯填成pi5-ubuntu这种格式。设置好之后只要局域网内支持mDNS后续就能直接用pi5-ubuntu.local访问不需要每次查IP非常方便。然后是“Enable SSH”必须勾选。这里有两个认证选项使用密码认证或者仅允许公钥认证。为了方便我第一次用的是密码认证用户名和密码单独设置。但生产环境或者长期部署的机器我强烈建议在Imager这一步直接把SSH公钥粘贴进去然后禁用密码登录。多花三十秒后面能省掉很多安全层面的麻烦。接下来是“Configure wireless LAN”填WiFi的SSID和密码地区按实际情况选择。这里有个我踩过的坑SSID不要用中文、不要带特殊符号比如引号、空格、之类。cloud-init解析network-config时用的是YAML格式特殊字符一旦没有正确转义整个配置文件就会失效导致设备开机后连不上网络。到头来你扫描半天也找不到设备IP还以为是系统没启动实际上就是WiFi配置解析失败。最后是“Set locale settings”键盘布局和语言在无外设场景下意义不大但顺手设置一下也没坏处。全部填完之后返回主界面点“Write”开始烧录。Imager会先下载镜像再写入SD卡最后做校验。整个过程根据网速和SD卡速度可能需要几分钟到十几分钟不等耐心等它跑完。2.3 手动改user-data与network-config的兜底方案如果你用的是从Ubuntu官网单独下载的树莓派镜像或者直接用dd方式写入又或者Imager注入的配置没有预期生效那就需要手动检查并修改FAT引导分区里的文件了。烧录完成后把SD卡重新插回读卡器电脑上会出现一个名为system-boot的分区。打开这个分区正常情况下能看到一堆引导文件其中就有network-config和user-data两个文件。network-config是netplan格式里面定义了有线网口和无线网口的连接方式。一个最常见的示例是version: 2 ethernets: eth0: dhcp4: true optional: true wifis: wlan0: dhcp4: true optional: true access-points: 你的WiFi名称: password: 你的WiFi密码注意YAML缩进access-points下面的SSID必须用半角引号包裹否则密码里的特殊字符一旦裸奔整个配置就会炸掉。user-data则是cloud-init的配置文件最精简的形式长这样#cloud-config hostname: pi5-ubuntu users: - name: ubuntu sudo: ALL(ALL) NOPASSWD:ALL groups: users, admin home: /home/ubuntu shell: /bin/bash lock_passwd: false plain_text_passwd: 你的密码 ssh_pwauth: true chpasswd: expire: true list: | ubuntu:你的密码这里有个很重要的细节chpasswd里的expire字段如果为true首次登录时必须改密码这对一般用户是安全的但对完全无外设的自动化部署来说会卡住后续脚本。我的建议是如果只是自己用就把expire改成false同时设置一个足够强的手动密码如果是批量部署干脆用SSH公钥登录密码字段都不需要留。修改完这两个文件安全弹出SD卡。注意不要直接拔卡缓冲没写完导致配置文件截断代价就是重新烧录一整遍。3. 首次启动与远程连接全流程3.1 点亮树莓派5正确的开机顺序SD卡准备好之后接下来是物理安装环节。先把TF卡插进树莓派5背面的卡槽听到咔哒一声才算到位。如果使用有线网络顺手把网线插上。最后再接通USB-C电源。树莓派5板载了一枚实体电源按键位置在板子边缘但首次插电时板子会直接上电开机不需要额外按电源键。开机之后留意一下板上的指示灯。红灯常亮表示供电正常绿色ACT灯在系统读取SD卡时会闪烁或者不规则闪动。如果红灯熄灭或者忽明忽暗基本可以断定是供电问题。如果绿灯完全静止先怀疑卡没插好再怀疑镜像没有正常引导。第一次启动会比后续启动慢不少。cloud-init在首次引导时要处理用户创建、网络配置、主机名设置等一系列任务根据TF卡的性能不同总体耗时大概在90秒到3分钟之间。这里我特别想提醒一句不要因为扫描不到设备就反复断电重启。我已经见过太多人在这一步把卡写坏了。给树莓派几分钟时间让它把该干的事干完。3.2 局域网里如何快速找到设备IP系统起来之后下一步就是找到它的IP地址然后才能连SSH。有几种方法从省事到折腾排序如果设置了主机名并且你的电脑支持mDNS直接在终端里执行ping pi5-ubuntu.local能ping通就说明设备在线。登录路由器后台查看DHCP客户端列表。树莓派作为新设备会出现在列表里通常厂商一栏能看出是树莓派。用ARP扫描或者端口扫描工具比如在电脑上执行nmap -sn 192.168.1.0/24扫一遍局域网所有存活主机再逐个试22端口。Windows命令行下可以用arp -a查看ARP缓存表不过这个只记录了最近通信过的设备不够全面。我个人最推荐的是结合前两种方法。先在电脑上ping一下hostname.local如果没有响应就去路由器后台看。路由器后台的好处是还能顺便给树莓派绑定一个固定IP避免以后每次重启IP都变。这里可以顺便分享一个经验如果你是在公司或者校内网络管理员可能开启了AP隔离同一WiFi下的设备互访会被禁止。这种情况下无论如何扫描都是扫不到的要么换有线网口要么找管理员开放权限。3.3 SSH登录与首次开机必做配置拿到IP之后在终端里执行ssh 用户名树莓派IP如果你是用Imager配置的用户和密码直接输入即可。如果你用的是Ubuntu官方树莓派镜像默认设置用户名是ubuntu初始密码也是ubuntu。这种情况下首次SSH登录后系统会强制要求修改密码按提示操作就行。登录成功之后我习惯先跑几条基础命令确认系统状态没问题再往下走sudo apt update sudo apt full-upgrade -y sudo timedatectl set-timezone Asia/Shanghai df -hdf -h主要看根分区是否已经自动扩展到整张SD卡。Ubuntu官方树莓派镜像默认会自动扩容正常情况下应该看到根分区大小接近TF卡总容量。如果还是镜像默认的4GB说明cloud-init在扩容步骤出了问题需要检查user-data里的相关配置。再说一遍Server版和Desktop版的取舍。无外设远程管理的场景下Server版镜像更合适。它的体积小、没有图形界面带来的额外内存占用而且默认就预装了OpenSSH Server。Desktop版虽然也能开启SSH并远程连接但第一启动时间更长后续如果要通过VNC操作桌面还需要额外处理GNOME和VNC之间的兼容性问题。如果你明确需要图形界面建议看完第4章再决定。4. 无外设日常维护的实用技巧4.1 固定IP与mDNS解析无外设设备最怕什么最怕IP地址每次开机都变。今天连的是192.168.1.100明天可能就变成192.168.1.150了找设备的过程非常浪费时间。解决方法有两种。第一种是在路由器后台做DHCP静态绑定把树莓派的MAC地址和固定IP绑定起来。这种方式最稳妥因为树莓派本身不需要改任何配置适合不想动系统文件的用户。第二种是在netplan里直接写静态IP。修改/etc/netplan/下的配置文件把dhcp4改成false然后指定addresses、routes和nameservers。下面是一个有线网口的例子network: version: 2 ethernets: eth0: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.1改完之后执行sudo netplan apply生效。这里有个小提示如果这台树莓派会经常换网络环境比如今天在公司明天在家里静态IP会让它在陌生网络里彻底失联。相比之下mDNS主机名是更通用的方案。只要路由器允许局域网内mDNS广播即使IP变了通过hostname.local也能找到。4.2 无显示器搞定远程桌面VNC大部分管理操作通过SSH就能完成但偶尔总有几个场景需要图形界面比如配置某些桌面应用、调试Qt界面、或者给客户演示。这时候远程桌面就派上用场了。如果你装的是Ubuntu Server可以安装xrdp协议服务sudo apt install xrdp sudo systemctl enable xrdp然后在电脑上用自带的“远程桌面连接”工具连到树莓派的3389端口。xrdp的好处是Windows下不需要装任何客户端体验最接近本机桌面。不过要注意xrdp在Ubuntu的原生GNOME桌面上有时候会黑屏这在24.04版本里依然偶有发生。我的建议是如果碰上黑屏就改用TightVNC或者x11vnc配置稍微复杂一点但稳定性好很多。防火墙如果有开启的话记得放行远程桌面端口。只允许内网段访问是底线sudo ufw allow from 192.168.1.0/24 to any port 3389这个规则只允许192.168.1.0/24网段访问3389其他来源一概拒绝。不要图省事直接allow 3389毕竟无外设设备的端口暴露在网络上谁也不能保证路由器不会被人攻破。4.3 串口控制台作为最后一道保险前面说的所有方法前提都是系统能正常启动、网络配置没问题。如果哪一天cloud-init写坏了网络配置或者SSH服务启动失败又或者你因为手滑把防火墙规则写错导致SSH端口被禁了远程手段就全废了。这个时候一条USB转TTL串口线就是最后的保险。树莓派5的GPIO引脚里GPIO14是TXDGPIO15是RXD。接线方式很简单USB转TTL模块的TXD接树莓派的RXD模块的RXD接树莓派的TXDGND接GND。一定不要接反也不要接到3.3V或5V引脚上去TTL模块支持3.3V电平才行。连接好后在电脑上使用串口终端工具连接波特率115200。Linux下可以用screen也可以用minicom。连接成功后能看到完整的系统启动日志并且可以像操作本地终端一样登录系统。这个串口控制台独立于网络不依赖DHCP不依赖SSH服务是排查无外设设备问题最可靠的入口。树莓派5的Ubuntu镜像要启用串口控制台通常需要修改config.txt或者cmdline.txt在Ubuntu里这个分区挂载在/boot/firmware下。具体来说在cmdline.txt中追加consoleserial0,115200并在config.txt中确认enable_uart1。注意这些操作需要在系统内完成或者事先在电脑上手动改好SD卡里的对应文件所以串口方案更适合作为“已经配置过一次后续救急”的手段。5. 常见问题与排查实录5.1 扫不到设备IP这是无外设安装里最让人崩溃的问题没有之一。设备插电了指示灯也正常但电脑上怎么都找不到它。先确认物理链接。如果用有线看网口的LED是否亮起如果用WiFi确认树莓派和电脑是不是真的在同一个局域网里。有些公司网络或者公共WiFi开了AP隔离同一无线下的设备无法互相访问这种情况有线网口反而更可靠。再检查配置文件。重新拔出SD卡插到电脑上打开system-boot分区里的network-config。核对三件事SSID有没有拼错密码有没有写错YAML缩进是否正确。很多时候都是密码里多了一个空格或者特殊字符没加引号导致的。最后考虑是不是启动过程还没完成。第一次启动时间可能长达两三分钟尤其是在Desktop版镜像上。先等足时间再去路由器后台刷新DHCP客户端列表。如果网线插着却始终没有出现在客户端列表里那就可能是系统启动阶段就失败了需要看指示灯状态来进一步判断。5.2 SSH连接超时或密码错误Ping能通但SSH连不上或者提示密码错误这个问题也相当常见。如果你设置的是自定义用户名和密码确认密码没有大小写锁定的问题。如果用的是Ubuntu默认账号ubuntu初始密码是ubuntu首次登录时系统会强制改密。如果你之前已经登录过一次并改了密码后来又忘了那就只能重刷或者用串口控制台恢复了。另一种情况是SSH端口被改了或者没启用。Ubuntu Server默认预装OpenSSH Server但Desktop版不一定。如果你选的是Desktop镜像但在Imager里没有勾选Enable SSH系统起来后根本没有SSH进程在监听这时候只能要么重新烧录要么用串口控制台手动安装openssh-server。连接超时还可能与防火墙有关。如果树莓派开了UFW但没有放行22端口来自局域网外的连接请求会被直接丢弃。由于无外设设备看不到日志排查起来很费劲。我的习惯是一开始就不开UFW或者从一开始就允许内网网段访问22端口。5.3 开机指示灯异常树莓派5的指示灯信息量很大学会看它很多问题不用猜。红灯PWR常亮表示供电正常如果红灯熄灭或者有规律地闪烁先换电源和线缆。树莓派5对供电质量很敏感有些第三方电源标称5V/5A实际负载一上去电压就跌了红灯会直接给脸色看。绿灯ACT灯是SD卡活动指示灯。正常启动时会高频闪烁系统稳定后依然会因磁盘读写时不时亮一下。如果绿灯完全静止说明系统没有从SD卡引导成功。先断电重新插拔SD卡换一个读卡器重新烧录试试。如果绿灯闪烁规律异常比如连续闪几次再停顿这通常和bootloader的错误状态有关需要查询官方对应文档中关于启动LED状态的说明。我之前遇到过一张SD卡在电脑上怎么读都正常但在树莓派5上绿灯就是不亮。后来换了一张A2评级的卡一切恢复正常。SD卡和树莓派之间的兼容性问题确实存在不能只看容量和速度。5.4 系统启动后无法联网IP地址能找到说明二层和三层网络基本通了但如果发现apt update一直失败或者ping不通外网那就要分层排查。先看链路层。有线网口看网线指示灯WiFi用nmcli device wifi list确认无线网卡有没有扫描到周围网络。如果扫描不到任何WiFi可能是无线网卡的驱动或者固件没加载优先检查系统是否已经完整更新。再看IP层。执行ip addr确认eth0或wlan0有没有拿到IP地址。如果网口显示没有IP尝试sudo dhclient eth0手动获取一次。如果是WiFi问题检查network-config里的SSID是否写对。最后看DNS。Ubuntu 24.04默认用systemd-resolved处理DNS如果resolv.conf指向了不可达的服务器所有域名解析都会失败。临时测试可以改成公网DNS地址比如1.1.1.1或者8.8.8.8重新解析一下看看通不通。要长期修改的话建议在netplan的nameservers段落里明确指定DNS地址。如果apt update很慢可以考虑根据网络情况更换为速度更快的镜像源。修改之前先备份原有源列表cp /etc/apt/sources.list /etc/apt/sources.list.bak改完再执行apt update验证。5.5 忘记密码或原始用户失效怎么办这属于无外设场景下的终极难题。如果你既忘记了SSH密码又没配SSH公钥且没有串口调试线那处理起来就相当麻烦。最简单的解决办法是重刷系统。如果SD卡上没有需要保留的数据直接重新烧录镜像即可。问题是重刷之后之前所有的配置都会丢失如果这台设备已经运行了一段时间损失还是有点大的。如果不想重刷可以取出SD卡用读卡器挂载到电脑上修改user-data文件在里面重新指定一个用户和密码。但注意cloud-init只在系统首次启动时执行如果已经初始化过了直接改user-data不会生效。一种可行的方法是把SD卡上的系统分区挂载到另一台Linux电脑上chroot进去用passwd命令重置用户密码。这个操作需要你熟悉Linux系统的目录结构而且挂载分区时要注意正确对应rootfs和boot分区。对于大多数场景尤其是数据不重要的设备直接重刷反而更省时间。这里分享一个坚持至今的习惯树莓派上所有需要远程维护的设备我都会在第一次登录后就配置好SSH公钥登录并关闭密码认证。因为公钥认证天然不依赖记忆改了密码也不会失效。只要你电脑上的私钥没丢设备就永远有一条可靠的管理通道。我自己的体会是无外设安装最大的敌人其实不是技术难度而是“看不见”。SSH一断、绿灯不对心里就开始发虚。所以这套流程里我最看重的反而不是烧录那一下而是预置配置的可靠性以及出了问题之后有没有兜底手段。把Imager的预配置用好、烧完确认一眼network-config、包里常备一条USB转TTL串口线做到这三件事树莓派5的无外设安装基本不会再出什么岔子。如果你只是临时装一次系统按前三章的步骤走完全够用如果是要批量部署建议把固定IP和公钥登录做成标准模板后面维护起来会轻松很多。
返回列表