Raspberry pi 4 上的 Ubuntu Focal 无头设置 - 首次重启前的 cloud init wifi 初始化

Dra*_*osN 8 ubuntu-server cloud-init raspberry-pi4

我在使用云初始化配置为 Raspberry pi 4 上的 Ubuntu Server Focal (ARM) 设置完整的无头安装时遇到了麻烦。这样做的全部目的是在出现故障时简化 SD 卡交换。我正在尝试使用 cloud-init 配置文件为 lan/wlan 应用静态配置,创建新用户,为新用户添加 ssh 授权密钥,安装 docker 等。但是,无论我做什么,似乎都没有应用 Wifi 设置在第一次重启之前。

步骤 1:将映像刻录到 SD 卡上。第二步:用配置文件重写 SD 卡 system-boot/network_config 和 system-boot/user-data

网络配置

version: 2
renderer: networkd
ethernets:
  eth0:
    dhcp4: false
    optional: true
    addresses: [192.168.100.8/24]
    gateway4: 192.168.100.2
    nameservers:
      addresses: [192.168.100.2, 8.8.8.8]
wifis:
  wlan0:
    optional: true
    access-points:
      "AP-NAME":
        password: "AP-Password"
    dhcp4: false
    addresses: [192.168.100.13/24]
    gateway4: 192.168.100.2
    nameservers:
      #search: [mydomain, otherdomain]
      addresses: [192.168.100.2, 8.8.8.8]
Run Code Online (Sandbox Code Playgroud)

用户数据

chpasswd:
  expire: true
  list:
    - ubuntu:ubuntu

# Enable password authentication with the SSH daemon
ssh_pwauth: true
groups:
  - myuser
  - docker
users:
  - default
  - name: myuser
    gecos: My Name
    primary_group: myuser
    groups: sudo
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-rsa AAAA....
    lock_passwd: false
    passwd: $6$rounds=4096$7uRxBCbz9$SPdYdqd...

packages:
  - apt-transport-https
  - ca-certificates
  - curl
  - gnupg-agent
  - software-properties-common
  - git
runcmd:
  - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
  - add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  - apt-get update -y
  - apt-get install -y docker-ce docker-ce-cli containerd.io
  - systemctl start docker
  - systemctl enable docker
## TODO: add git deployment and configure folders
power_state:
  mode: reboot
Run Code Online (Sandbox Code Playgroud)

在第一次启动时,cloud-init 总是应用回退网络配置。

我还尝试按照此处所述为 wifi 应用无头配置。

创建 wpa_supplicant.conf 并将其复制到 SD system-boot 文件夹。

trl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=RO

network={
    ssid="AP-NAME"
    psk="AP-Password"
}
Run Code Online (Sandbox Code Playgroud)

还创建了一个空的 ssh 文件并将其复制到 system-boot

运行命令总是失败,因为在第一次启动时 cloud-init 应用了后备网络配置。重新启动后,应用 lan/wlan 设置,创建用户,添加 ssh 授权密钥。但是我仍然需要通过 ssh 进入 PI 并安装剩余的软件包:docker 等,我想避免这种情况。难道我做错了什么?

小智 5

我不确定您是否找到了解决方法,但我将分享我在研究选项时发现的一些信息。

注意:在第一次启动期间,您的 Raspberry Pi 将尝试连接到该网络。第一次会失败。只需重新启动sudo reboot,它就会工作。

这个 repo 中有一个有趣的解决方法和方法。

  • 它声明它是为 18.04 创建的,但它应该与 20.04 一起使用netplan,因为服务器版本都使用和systemd-networkd.

就个人而言,我走了一条不同的路。

  • 我创建包含我的设置和包的自定义映像,然后刻录到 uSD 或通过 TFTP 服务器共享。我很惊讶这是多么容易。
    • 有一个关于创建自定义图像好的帖子在这里
    • 一些重要的附加信息在这里