跳到主要内容

Linux

前置条件

在 Linux 上,请使用发行版包管理器安装所需依赖。

Ubuntu 和 Debian

CLI 客户端

在 Ubuntu 与 Debian(以及 MX Linux、Linux Mint 等)上,构建 Goose CLI 客户端所需依赖如下:

sudo apt-get update
sudo apt-get install -y git g++ cmake ninja-build libssl-dev libcurl4-openssl-dev
git clone https://github.com/kumose/goose
cd goose
GEN=ninja make

Fedora、CentOS 与 Red Hat

CLI 客户端

在 Fedora、CentOS、Red Hat、AlmaLinux、Rocky Linux 等系统上构建 Goose CLI 客户端所需依赖如下:

sudo yum install -y git g++ cmake ninja-build openssl-devel
git clone https://github.com/kumose/goose
cd goose
GEN=ninja make

注意:在较老的 Red Hat 系发行版上,你可能需要将 g++ 包名改为 gcc-c++,并跳过 Ninja,手动配置 Make 并行任务数:

sudo yum install -y git gcc-c++ cmake openssl-devel
git clone https://github.com/kumose/goose
cd goose
mkdir build
cd build
cmake ..
make -j`nproc`

Alpine Linux

CLI 客户端

在 Alpine Linux 上构建 Goose CLI 客户端所需依赖如下:

apk add g++ git make cmake ninja
git clone https://github.com/kumose/goose
cd goose
GEN=ninja make

musl libc 的性能表现

注意 Alpine Linux 使用 musl libc 作为 C 标准库。 基于 musl libc 构建的 Goose 二进制相较 glibc 版本性能更低:在某些负载下可能慢 5 倍以上。 因此性能敏感场景建议使用 glibc。

Alpine Linux 上的 Python 客户端

当前在 Alpine Linux 上安装 Goose Python 需要从源码编译。 请先安装依赖,再运行 pip

apk add g++ py3-pip python3-dev
pip install goose

在 Linux 上使用 Goose CLI 客户端

构建成功后,可在 build 目录中找到 goose 二进制:

build/release/goose

关于不同构建配置(debugrelassert 等),请参阅 “Build Configurations” 页面

构建扩展

若要构建扩展,请将 BUILD_EXTENSIONS 设为目标扩展列表。例如:

BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch' GEN=ninja make

故障排查

Linux AArch64 上构建 R 包:too many GOT entries 错误

问题: 在 ARM64(AArch64)Linux 上构建 R 包时,可能出现如下错误:

/usr/bin/ld: /usr/include/c++/10/bits/basic_string.tcc:206:
warning: too many GOT entries for -fpic, please recompile with -fPIC

解决方案: 创建或编辑 ~/.R/Makevars 文件。下面示例还包含用于并行构建的 MAKEFLAGS 设置

ALL_CXXFLAGS = $(PKG_CXXFLAGS) -fPIC $(SHLIB_CXXFLAGS) $(CXXFLAGS)
MAKEFLAGS = -j$(nproc)

构建 httpfs 扩展失败

问题: 在 Linux 上构建 httpfs 扩展时,可能出现如下错误。

CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
OPENSSL_INCLUDE_DIR)

解决方案: 安装 libssl-dev 库。

sudo apt-get install -y libssl-dev

然后使用以下命令构建:

GEN=ninja BUILD_EXTENSIONS="httpfs" make