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写了一次,结果引导报错,折腾了半天才发现是写盘方式不对。

注意:边缘网关的硬件五花八门,ARM架构的板子(比如树莓派、RK3588)和x86的安装方式不同。ARM版要下载对应的镜像,别下错了。

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端口、密码登录,在公网上就是靶子。我建议至少做三件事:

  1. 改端口:把22改成10022或者别的。
  2. 禁用root登录PermitRootLogin no
  3. 使用密钥登录:生成密钥对,把公钥丢到 ~/.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
关键点:第一次构建Yocto会下载大量源码包。建议把DL_DIR设到一个大磁盘分区,并且不要轻易删除。下次构建时能省下大量时间。

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功能集成的重头戏。

我的建议:如果你是第一次接触边缘计算,先用Ubuntu Server跑通全流程。等有了感觉,再回头折腾Debian和Yocto。别一口吃成胖子。