APISIX 在 arm 版 ubuntu 构建踩坑日记

Back

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

克隆源码

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

cd apisix-2.11.0

安装项目依赖

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

1.png

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

  1. 下面我们手动安装下 OpenResty:参考 https://openresty.org/cn/linux-packages.html#ubuntu
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

成功:

2.png

echo "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" \
    | sudo tee /etc/apt/sources.list.d/openresty.list
echo "deb http://openresty.org/package/arm64/ubuntu $(lsb_release -sc) main" \
    | sudo tee /etc/apt/sources.list.d/openresty.list
sudo apt-get update

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

sudo apt-get -y install openresty
sudo apt-get -y install --no-install-recommends software-properties-common

成功安装 OpenResty :

3.png

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

4.png

运行下面命令即可:

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

5.png

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

sudo apt install wget sudo unzip

接着我们重新运行一次:

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 命令
make install
// 如果出现权限不足的提示,用 sudo make install

成功:

7.png

安装 etcd

踩坑 etcd

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

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

wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
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

nohup etcd &

9.png

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

10.png

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

在 docker 中运行 etcd 服务

  1. 安装 docker
sudo apt install docker.io

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

  1. 拉取并运行 etcd
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

验证是否运行:

sudo docker ps -a

12.png

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

启动 APISIX

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

make deps
make install
apisix init

// start APISIX
apisix start

// stop APISIX
apisix stop

13.png

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

总结:

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

© Qi Guo.