树莓派安装ubuntu18.04的aarch64架构版本

最近收拾东西,发现了桌子上落灰的树莓派,思考了下,准备把它拿来做项目的测试系统之一

把官方的系统raspbian下载下来并用Win32 Disk Imager烧到 tf 卡中,启动并配置完成,运行 go 命令的时候发现了问题,这官方的 raspbian 系统是 32 位的系统,需要使用go1.x.linux-armv6l.tar.gz这类名字的二进制,而不能用go1.x.linux-arm64.tar.gz,安装完成 go 后对项目进行 test,发现了其无法对 cgo 的部分代码完成支持,提示我类型不支持,address space 不够,看起来就是 32 位系统无法很好的支持 c 中一部分 64 位寻址的操作而导致的问题

所以我就走上了寻找 64 位支持树莓派系统的道路。

支持树莓派 64 位的镜像

其实这个镜像并不难找,搜索一下就能看到一些

其中Ubuntu64-rpi是国人的项目(看 Github 描述还是个高中生= =,19 年接下来要高考,祝他高考顺利!),其中也提供了预编译完成的镜像进行下载,start 数量也很多,所以我就选它了。

安装 Ubuntu64-rpi

首先下载镜像及安装工具,github 的文档中给出了详细的介绍。

我这里使用的是 windows 系统进行下载安装的,操作主要就是:

  • 去百度网盘下载镜像压缩包cxcore-ubuntu-18.04-arm64+raspi3-final.img.xz,提取密码18cy
  • 然后用 7zip 解压 xz 文件
  • 随后使用Win32 Disk Imager烧录到 tf 卡
  • tf 卡放入树莓派,接入电源,等待启动(首次启动会自动扩容)然后重启后进入命令行界面(此镜像不带图形界面,需要自己 apt 安装),注意连接有线网络进行安装,在安装过程中有一步在检查网络连通性,不连接网络的话会读秒很久
  • 使用用户名ubuntu,密码ubuntu就可以登录啦!
  • 最后uname -a 可以看到架构和版本信息
    ubuntu64-rpi-uname-msg

后续配置

现在我们拥有了一个 aarch64 版本的 Ubuntu18.04 系统,时区、Ubuntu 软件源也都设置成国内的状态(+8:00, 清华软件源)
也可以跟随教程配上树莓派的软件源(PS: 有一定风险)

由于我使用了 rocksdb 做存储,需要编译 aarch64 版本的 rocksdb 依赖,编译时发现内存不够,机器会卡死,原来是默认配置中没有添加 swap(swap 对于低内存机器的稳定运行有着很好的帮助)

添加 swap 文件并开机自动生效

我们这里增加了/var/swapfile 这个文件,并将这个文件作为 swap 分区

1
2
3
4
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048  # 写入1MB * 2048 = 2G大小的0到/var/swapfile文件中
sudo chmod 600 /var/swapfile # 修改该文件权限为600,为了后续步骤不提示权限警告
sudo mkswap /var/swapfile # 把该文件改为swap的格式
sudo swapon /var/swapfile # 把该文件配置为swap

这时你就可以free -m 观察 swap 分区的大小
swapfile

其中 2047 就表示了约 2G(2048M)的 swap 总量

注意此时仅是临时生效,若想要重启后也生效,需要在/etc/fstab 文件中加入以下一行sudo vi /etc/fstab

1
/var/swapfile none swap sw 0 0

保存文件后重启依然可以维持 2G 的 swap 空间

安装 golang

现在的系统是 aarch64 即 arm64 位的系统,可以使用类似 go1.12.linux-arm64.tar.gz 格式的二进制分发格式进行下载安装。

1
2
3
4
5
6
7
cd ~  # cd到home目录中
wget https://dl.google.com/go/go1.12.linux-arm64.tar.gz # 下载go1.12的arm64二进制压缩包
tar zxf go1.12.linux-arm64.tar.gz # 别使用zxvf,显示解压的内容对树莓派来说压力太大,超卡的= =
mv ~/go ~/golang # 为了和默认的GOPATH分开,防止后面使用go命令下载的内容和源码混在一起
echo "export PATH=$HOME/golang/bin:$PATH" >> ~/.bashrc # 将golang的bin目录添加到 PATH环境变量中
source ~/.bashrc # 加载刚才设置的PATH环境变量
go env # 检验go指令是否成功安装

安装完成后,我在项目中运行 go test 完美通过~ 开心!

最后和你的树莓派好好玩耍吧

一瓶肥仔快乐水