3、边缘操作系统与环境搭建:Ubuntu Server、Debian、Yocto Project的安装与基础配置、网络与SSH设置
好,咱们进入实战环节。这一章聊的是边缘操作系统的选择与搭建。说实话,很多初学者一上来就纠结「用哪个系统好」。我的建议是:先别纠结,把每个都跑一遍,你自然就懂了。
边缘计算网关不像你的台式机,它资源有限,环境苛刻。选操作系统,说白了就是选「底子」。底子选对了,后面AI功能集成才顺溜。我这些年经手过的项目,从智能路灯到工业PLC网关,系统选型几乎都在这三个里面打转:Ubuntu Server、Debian、Yocto Project。今天咱们一个一个捋清楚。
3.1 为什么是这三个?
先说说我的理解。
- Ubuntu Server:生态最全,社区最活跃。你随便搜个AI库,官方文档第一个例子多半是Ubuntu。适合快速原型验证。
- Debian:稳,非常稳。我在一个无人值守的油田监测项目里用过Debian,设备扔野外两年没重启过。适合对稳定性要求高的场景。
- Yocto Project:定制化之王。你可以从内核开始裁剪,把系统做到几十兆。适合量产产品,但学习曲线陡峭。
你想想看,如果只是做个Demo,Ubuntu Server最省心。如果要上产线、跑三年不宕机,Debian更靠谱。如果对成本敏感、硬件资源抠到极致,那就得啃Yocto。
3.2 Ubuntu Server 安装与基础配置
我个人习惯用Ubuntu Server 22.04 LTS。LTS版本五年支持,省心。
3.2.1 安装要点
下载镜像后,用Rufus或者balenaEtcher写进U盘。这里有个坑:写盘工具别用错。我曾经用UltraISO写了一次,结果引导报错,折腾了半天才发现是写盘方式不对。
3.2.2 基础配置
装完系统第一件事,更新源:
sudo apt update && sudo apt upgrade -y
然后安装常用工具:
sudo apt install -y net-tools openssh-server vim htop
嗯,这里要注意。很多边缘网关默认不装SSH Server。如果你是通过网络远程安装的,记得提前勾选「Install OpenSSH server」选项。否则装完发现连不上,那就尴尬了。
3.2.3 网络设置
边缘网关的网络环境通常比较复杂。有线、Wi-Fi、4G/5G模组混着用。我建议用Netplan来管理网络。
Ubuntu Server默认用Netplan。配置文件在 /etc/netplan/ 下。举个例子,设置静态IP:
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
改完执行 sudo netplan apply 生效。注意:如果你是通过SSH连的,改完网络配置可能会断连。我建议先在本地控制台操作,或者配好备用网络接口。
3.2.4 SSH安全设置
SSH是边缘网关的命门。默认的22端口、密码登录,在公网上就是靶子。我建议至少做三件事:
- 改端口:把22改成10022或者别的。
- 禁用root登录:
PermitRootLogin no - 使用密钥登录:生成密钥对,把公钥丢到
~/.ssh/authorized_keys
ssh-keygen -t ed25519,比RSA更安全,性能也更好。我所有边缘设备都用ED25519密钥。
配置完重启SSH服务:
sudo systemctl restart sshd
3.3 Debian 安装与基础配置
Debian给我的感觉就是「老派工程师的浪漫」。它不像Ubuntu那样花哨,但每个包都经过严格测试。
3.3.1 安装差异
Debian安装时有个细节:默认不包含non-free固件。如果你的网卡需要闭源驱动(比如某些Realtek芯片),装完可能没网。解决办法是下载包含non-free固件的ISO镜像,或者提前准备好驱动包。
我记得有一次给一个工控机装Debian,装完发现Wi-Fi模组不识别。折腾了两小时,最后发现是firmware-iwlwifi没装。从那以后,我装Debian都会先确认硬件兼容性。
3.3.2 基础配置
Debian的包管理是apt,和Ubuntu一样。但要注意:Debian的软件包版本通常比Ubuntu旧。这不是缺点,是稳定性考量。
配置网络时,Debian用 /etc/network/interfaces 文件。示例如下:
# /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
改完重启网络:sudo systemctl restart networking
3.3.3 SSH配置
Debian默认不安装SSH Server。需要手动装:
sudo apt install openssh-server
配置文件和Ubuntu一样,在 /etc/ssh/sshd_config。我习惯把 ClientAliveInterval 设为60秒,防止SSH连接因为长时间无操作而断开。这在远程调试时特别有用。
3.4 Yocto Project 环境搭建
Yocto是个大话题。这里我只讲怎么搭环境,不深入讲怎么构建镜像。那得单独开一章。
3.4.1 为什么用Yocto?
说白了,Yocto让你能「从零造一个Linux」。你可以决定内核里有什么驱动、文件系统里有什么库、甚至用什么init系统。对于量产边缘网关,这能省下不少硬件成本。
我曾经给一个智能摄像头网关做Yocto镜像,把系统从Ubuntu的2GB裁剪到128MB。嗯,代价是花了整整两周调试。
3.4.2 主机环境准备
构建Yocto需要一台性能不错的Linux主机。我建议至少4核CPU、16GB内存、200GB磁盘空间。Ubuntu 22.04是推荐的主机系统。
安装依赖:
sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm python3-subunit mesa-common-dev zstd liblz4-tool
注意:不同Yocto版本对主机系统的要求不同。我建议用Yocto的长期支持版本,比如Kirkstone(4.0)或更近的版本。
3.4.3 获取源码与初始化
git clone git://git.yoctoproject.org/poky -b kirkstone
cd poky
source oe-init-build-env
执行完 source 命令后,会自动进入build目录。这里有个小坑:每次打开新终端都要重新source。我习惯在 .bashrc 里加个alias:
alias yocto-setup='cd ~/poky && source oe-init-build-env build'
3.4.4 基础配置
Yocto的配置文件在 conf/local.conf。核心参数就几个:
| 参数 | 说明 | 示例值 |
|---|---|---|
| MACHINE | 目标硬件平台 | qemux86-64 或 raspberrypi4 |
| DISTRO | 发行版类型 | poky |
| PACKAGE_CLASSES | 包格式 | package_rpm |
| DL_DIR | 下载缓存目录 | /home/user/yocto/downloads |
3.4.5 网络与SSH在Yocto镜像中的配置
Yocto构建的镜像默认可能没有SSH Server。需要在 local.conf 中添加:
IMAGE_INSTALL_append = " openssh openssh-keygen"
网络配置则取决于你用的init系统。如果是systemd,可以用systemd-networkd。如果是sysvinit,那就得手动写 /etc/network/interfaces。
我个人建议在Yocto镜像中默认开启SSH,并预设一个调试用的密钥。这样设备第一次上电就能远程登录,省得接显示器。
3.5 三个系统的对比与选择
最后,我整理了一个对比表,方便你决策:
| 特性 | Ubuntu Server | Debian | Yocto Project |
|---|---|---|---|
| 上手难度 | 低 | 中 | 高 |
| 系统大小 | ~2GB | ~1GB | 可裁剪至几十MB |
| 软件包数量 | 极多 | 多 | 按需定制 |
| 稳定性 | 高 | 极高 | 取决于配置 |
| 适合场景 | 原型验证、快速开发 | 长期稳定运行 | 量产产品、资源受限 |
嗯,这一章内容不少。你先把Ubuntu Server装起来,配好SSH,能远程登录了,咱们再往下走。下一章会讲Docker容器化部署,那才是AI功能集成的重头戏。