APISIX 在 arm 版 ubuntu 构建踩坑日记

本篇文章记录了通过源码构建 APISIX 的踩坑记录,ubuntu 环境使用的是 https://multipass.run/ 中的 Multipass 。

克隆源码

首先根据 官方文档 安装 APISIX 源码仓库。并且进入项目文件。

1
cd apisix-2.11.0

安装项目依赖

  1. 现在我们可以通过脚本一键安装项目所需要的依赖拉,在根目录下运行下面命令:
1
bash utils/install-dependencies.sh

1.png

不出所料,没有成功跑完。通过错误提示我们知道,这里是未能成功安装 OpenResty。原因是默认没有 arm 64 平台的源。

  1. 下面我们手动安装下 OpenResty:参考 https://openresty.org/cn/linux-packages.html#ubuntu
  • 步骤一:安装导入 GPG 公钥时所需的几个依赖包(整个安装过程完成后可以随时删除它们):
1
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates
  • 步骤二:导入我们的 GPG 密钥:
1
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

成功:

2.png

  • 步骤三:添加 OpenResty 官方 APT 仓库。对于 x86_64 或 amd64 系统,可以使用下面的命令:
1
2
echo "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" \
| sudo tee /etc/apt/sources.list.d/openresty.list
  • 而对于 arm64 或 aarch64 系统,则可以使用下面的命令:(我在 M1 上运行的是该命令,上个命令会报错)
1
2
echo "deb http://openresty.org/package/arm64/ubuntu $(lsb_release -sc) main" \
| sudo tee /etc/apt/sources.list.d/openresty.list
  • 步骤四:更新 APT 索引:
1
sudo apt-get update

然后就可以像下面这样安装软件包,比如 OpenResty

1
sudo apt-get -y install openresty
  • 步骤五:(可选)可以通过下面命令删除该包和对应的关联包:
1
sudo apt-get -y install --no-install-recommends software-properties-common

成功安装 OpenResty :

3.png

  1. 重新运行安装依赖脚本 (参考上面 1. )
  2. 接着运行 LUAROCKS_SERVER=https://luarocks.cn 命令安装依赖:

4.png

运行下面命令即可:

1
curl https://raw.githubusercontent.com/apache/apisix/master/utils/linux-install-luarocks.sh -sL | bash -

5.png

又出现错误提示了。。。接着运行下面命令:

1
sudo apt install wget sudo unzip

接着我们重新运行一次:

1
curl https://raw.githubusercontent.com/apache/apisix/master/utils/linux-install-luarocks.sh -sL | bash -

然后我们继续运行安装依赖的命令:LUAROCKS_SERVER=https://luarocks.cn make deps
终于成功了,哭了,坑确实太多了。

6.png

大部分依赖已经成功安装好,但是又有新的错误提示了。
这里看起来是两个仓库未能成功克隆下来,没关系,先往后面运行试试:

  1. 安装 APISIX 命令
1
2
make install
// 如果出现权限不足的提示,用 sudo make install

成功:

7.png

安装 etcd

踩坑 etcd

启动 APISIX 之前需要安装下 etcd,参考 官方文档

(由于该安装教程并不是针对 arm 写的,所以虽然成功安装了 etcd,但是未能成功将 etcd 运行起来,原因是因为默认使用的 x86 的二进制文件启动,所以无法运行。可以跳过该部分直接参考在 「docker 中运行 etcd 服务」部分)

  • 第一步运行:
1
wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
  • 第二部运行:
1
tar -xvf etcd-v3.4.13-linux-amd64.tar.gz && \    cd etcd-v3.4.13-linux-amd64 && \    sudo cp -a etcd etcdctl /usr/bin/

成功:

8.png

  • 第三部启动 etcd 服务
1
nohup etcd &

9.png

然后我在后面运行 APISIX 时发现 etcd 报错了:

10.png

发现在 arm 上的 ubuntu 裸跑 etcd 坑太多了,各种各样的错误,后来决定还是跑 docker 吧~

在 docker 中运行 etcd 服务

  1. 安装 docker
1
sudo apt install docker.io

Tip: docker 常用的命令:(无权限错误在命令前添加 sudo)

  • 查看所有容器列表 docker ps -a
  • 查看正在运行的容器列表 docker ps
  • 查看镜像列表 docker image list
  • 删除所有容器 docker container prune
  • 删除所有镜像 docker image prune -f -a
    更多参考:Docker 入门教程 - 阮一峰的网络日志
  1. 拉取并运行 etcd
1
sudo docker run -d --name etcd -p 2379:2379 -e ETCD_UNSUPPORTED_ARCH=arm64 -e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 gcr.io/etcd-development/etcd:v3.5.1-arm64

注意:该镜像需要开代理。
成功:

11.png

验证是否运行:

1
sudo docker ps -a

12.png

这样,etcd 已经成功启动了。

启动 APISIX

所有的依赖项目已经准备完毕,现在我们可以启动 APISIX 拉~直接参考如何构建 APISIX 官方文档

  • 第一步安装依赖
1
2
make deps
make install
  • 第二部初始化依赖,启动 APISIX
1
2
3
4
5
6
7
apisix init

// start APISIX
apisix start

// stop APISIX
apisix stop

13.png

没有任何错误信息了,完美收工!

总结:

总体来说,有两个大坑是安装 APISIX 依赖部分和 arm 的 etcd 部分,etcd 部分可以直接用 docker 来解决,不过在拉取镜像的时候也会有一些坑,直接换别的镜像尝试就好。如果以后别人再问我用 M1 开发有什么建议吗,那我就建议:珍爱生命,远离 M1 😂 – 引自白泽平同学。