首发于KCORES

树莓派的 100 种玩法 1 - 树莓派4 安装 Ubuntu Server

本文介绍如何给树莓派 4B 安装 Ubuntu Server 20.04.1.

顺便, 本文还介绍了在树莓派没办法连接显示器和键盘的情况下, 如何确定树莓派的 IP 地址并登陆进去等一些实用小技巧. 聪明的你还可以用这些学到的新技巧去扫描你的网络, 发现未知.


准备

  • 树莓派 4B
  • 树莓派的电源 (USB-C 接口的充电器即可)
  • MicroSD 卡 (容量至少 4G, 因为这个 MicroSD 卡还会作为系统盘运行, 建议选择一个 32G, 并且速度快的 MicroSD 卡)
  • 读卡器
  • 可供接入的 Wifi 或有线网络

或许你还需要

  • Micro HDMI 转 HDMI 线
  • 有 HDMI 接口的显示器
  • 键盘
  • 一些硬币


首先

把硬币放树莓派 SoC 上, 免得它过热关机. 当然, 如果你有风扇更好.

当然, 这里只是娱乐一下, 提醒各位树莓派4B由于性能很强因此发热量也巨大. 请注意散热问题. 按照树莓派的官方 Manual, 树莓派 4B 的工作温度是 0 - 50℃, 最高不超过 85℃. 经过测试11块5的硬币散热器可以让树莓派稳定在55℃度 (室温27℃). 足够进行完毕初始设置了 (手动滑稽).


烧录 Micro SD 卡

重要的事情: 记得把卡中的数据备份, 接下来的操作会清除 MicroSD 卡中的所有数据.

把你准备好的 MicroSD 卡插到电脑上.

根据你的系统类型, 下载 Raspberry Pi Imager 烧录器:

然后建议直接手动下载 Ubuntu Server 镜像. 下载地址为:

ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz

下载完毕后, 界面是这样的:

最左面的是选择镜像, 我们点击之后拉到最下面, 选择 Use custom, 然后选择上面我们刚下载完毕的 ubuntu 镜像. (当然这里也可以选择下载器提供的选项, 让下载器去下载).

选择完毕后, 按中间的 CHOOSE SD... 来选择要写入的SD卡. 注意这里一定要看清楚目标SD卡, 尤其是你的机器上可能插了多个SD卡或U盘的情况. 另外一定记得备份数据.

最后点击右侧的 WRITE 就开始烧录了. (嗯, 很简单. 我觉得我在这里就是截了几个图然后把官网翻译了一下...)

烧录完毕.

配置网络


有线

有线很简单, 找根网线把树莓派连接到交换机上就行了.


无线

无线会复杂一些, 首先把 SD 卡仍然插回你的电脑, 然后在 SD 卡的 "system-boot" 分区有个配置文件叫 "network-config". 然后将下面的配置放到文件末尾:


wifis:
    wlan0:
    dhcp4: true
    optional: true
    access-points:
    "你的无线SSID":
        password: "你的无线密码"

将 "你的无线SSID" 和 "你的无线密码" 替换成你连接 WiFi 的 SSID 和密码. 注意, 这个配置文件是 yaml, 因此你需要注意缩进. 否则可能会配置不生效. 配置完毕后, 将 SD 卡插入树莓派, 第一次启动后配置还没有生效, 需要重启一遍, 第二次应该就能自动连接 WiFi 了. 如果还是不生效, 那么请看后面的 "无线配置 Debug" 部分, 可以进一步配置.

确定树莓派的 IP 地址


方法 1

如果你有屏幕和 Micro HDMI 线, 可以直接连接到树莓派上运行 ip a 命令来查看树莓派的 IP 地址.


root@ubuntu:/home/ubuntu# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether dc:a6:32:c5:f6:cc brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether dc:a6:32:c5:f6:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 brd 192.168.1.255 scope global dynamic wlan0
       valid_lft 2927sec preferred_lft 2927sec
    inet6 2408:8207:7834:6f10:dea6:32ff:fec5:f6cd/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 259174sec preferred_lft 172774sec
    inet6 fe80::dea6:32ff:fec5:f6cd/64 scope link 
       valid_lft forever preferred_lft forever

上面的 wlan0 里面的 192.168.1.201 就是了.

如果你没办法将树莓派连接到显示器, 那么可以登陆到你的路由器, 看看 DHCP 服务器新分配的地址, 或者 ARP 列表里新出现的IP地址. 如果这些都做不到, 你既没办法给树莓派接显示器, 也没办法登陆到路由器, 那么可以在你的电脑上运行 nmap, 然后用命令 nmap -sP 内网范围/子网掩码 扫描内网, 看看有没有新增的 IP 地址. 例如, 你的内网是 192.168.1.0 段, 子网掩码是 255.255.255.0 那么要扫描的地址范围就是 192.168.1.0/24:


root@ubuntu:/home/ubuntu# nmap -sP 192.168.1.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-15 03:25 UTC
Nmap scan report for bogon (192.168.1.1)
Host is up (0.0076s latency).
MAC Address: ??:??:??:??:??:?? (Huawei Technologies)
Nmap scan report for bogon (192.168.1.9)
Host is up (0.0044s latency).
MAC Address: ??:??:??:??:??:?? (Apple)
Nmap scan report for bogon (192.168.1.221)
Host is up (0.063s latency).
MAC Address: ??:??:??:??:??:?? (Nintendo)
Nmap scan report for bogon (192.168.1.226)
Host is up (0.019s latency).
MAC Address: ??:??:??:??:??:?? (Ubiquiti Networks)
Nmap scan report for bogon (192.168.1.201)
Host is up.
Nmap done: 256 IP addresses (12 hosts up) scanned in 1.66 seconds

这里的 192.168.1.201 是我不认识的新出现的 IP. 然后扫描下这个可能是树莓派的IP地址, 看看 22 端口开着没.


root@ubuntu:/home/ubuntu# nmap -sS 192.168.1.201
Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-15 03:33 UTC
Nmap scan report for bogon (192.168.1.201)
Host is up (0.000022s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

确认找到了就可以登陆了.


方法 2

官网介绍了利用 ARP 命令根据树莓派的网络适配器供应商的申请的 MAC 地址区间 (MAC 地址以 "b8:27:eb" 或 "dc:a6:32" 开头) 来识别哪个 IP 地址是树莓派, 同样奏效. 方法如下:

Windows 运行 arp -a | findstr b8-27-ebarp -a | findstr dc-a6-32
MacOS, Linux 运行 arp -na | grep -i "b8:27:eb"arp -na | grep -i "dc:a6:32"

返回大概是这样的:


C:\Users\karminski>arp -a | findstr dc-a6-32
  192.168.1.201            dc-a6-32-c5-f6-cd     动态

C:\Users\karminski>

前面的 192.168.1.201 就是 IP 地址了.

如果你有多个树莓派同时在配置. 那么就要费一番功夫去插拔测试了, 或者还是准备好键盘和显示器, 连接到树莓派配置一下.


启动

把 SD 卡插入树莓派, 然后给树莓派插上USB-C供电, 确认红灯亮起 (供电正常), 然后绿灯开始闪烁 (机器运行). 树莓派就开始正常工作了.

用你的 SSH 客户端去连接刚才确定的树莓派的 IP 地址, 就可以连接上树莓派了.

默认的用户名和密码都是 "ubuntu", 第一次登陆后系统会要求你修改密码. 安全起见, 一定要修改密码.


无线配置 Debug

如果错过了在第一次启动前配置 WiFi, 或者配置的无线有问题, 那么可以按照如下方法 Debug:

首先看一下无线网卡的名称:


root@ubuntu:/home/ubuntu# ls /sys/class/net
eth0  lo  wlan0

一般情况有线网卡都叫 "eth", 无线网卡都叫 "wlan" (不过也有很多特例...)

我们可以看到 无线网卡叫 "wlan0".

然后编辑 /etc/netplan/50-cloud-init.yaml 文件. 会退出 vi/vim 的同学可以用 vi 或 vim. (如果你真的无法退出vim了, 信我的, 肯定是你的树莓派坏掉了... 开玩笑, 还请搜索如何退出 vim)

不会 vim 的同学请用 GNU nano编辑, 方法如下:


sudo nano /etc/netplan/50-cloud-init.yaml

然后将之前的 WiFi 配置添加到配置文件最后:


# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            dhcp4: true
            optional: true
            access-points:
                "你的无线SSID":
                    password: "你的无线密码"

同样注意, 这个文件是 yaml 文件, 一定要注意缩进.

然后运行:


sudo netplan generate

sudo netplan apply

按道理这样就应该能让WiFi正常连接了. 仍然可以用 ip a 命令查看 wlan0 是不是自动获得了 IP 地址. 获得了 IP 地址即代表连接到了目标网络并且 DHCP 服务器工作正常, 给你自动分配了地址.


如果出现问题...

  • 问题1, Failed to start netplan-wpa-wlan0.service: Unit netplan-wpa-wlan0.service not found.

情况大概如下:


Failed to start netplan-wpa-wlan0.service: Unit netplan-wpa-wlan0.service not found.
Traceback (most recent call last):
  File "/usr/sbin/netplan", line 23, in <module>
    netplan.main()
  File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 179, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 46, in run
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 179, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 173, in command_apply
    utils.systemctl_networkd('start', sync=sync, extra_services=netplan_wpa)
  File "/usr/share/netplan/netplan/cli/utils.py", line 86, in systemctl_networkd
    subprocess.check_call(command)
  File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'start', '--no-block', 'systemd-networkd.service', 'netplan-wpa-wlan0.service']' returned non-zero exit status 5.

这个问题一般是 wpa_supplicant 没有启动, 运行如下命令即可:


sudo systemctl enable wpa_supplicant
sudo systemctl start wpa_supplicant
sudo netplan generate
sudo systemctl daemon-reload
sudo netplan apply

然后看看 wlan0. 如果不行, 运行 sudo netplan --debug apply 看看具体问题是什么, 或者重启试试.


安装桌面

首先需要更新和升级软件包, 运行:


sudo apt update
sudo apt upgrade

这里有两个轻量化桌面选项, xubuntu 和 lubuntu.

或者, 也可以直接安装 Gnome.

xubuntu:


sudo apt install xubuntu-desktop

lubuntu:


sudo apt install lubuntu-desktop

Gnome:


sudo apt install desktop

最后, 输入 reboot 重启. 本教程到这里就结束了.


To Be Continued

本篇是 "树莓派的 100 种玩法" 的第一篇, 未来 KCORES - 氪金核心 专栏会为大家带来最有趣的树莓派新玩法, 液冷树莓派! 树莓派集群! 树莓派原子钟! 你想不到的玩法应有尽有! 包教包会, 不满意报销网费! (手动滑稽)


要想树莓派4B 8G版本安装 ESXi 多开虚拟机? 给树莓派安装盖格计数器测量辐射? 点这里:


Reference


想要阅读更多有趣内容, 请看 :

KCORES - 氪金核心kcores.com


欢迎加入垃圾佬交流群:

编辑于 10-31

文章被以下专栏收录