在 Rocky Linux 9 上编译和安装 Apache Cloudberry
本文适用于希望探索并可能为 Apache Cloudberry 做出贡献的开发人员。文中描述的构建环境仅适用于开发和测试。
若想了解如何在 Rocky Linux 8 和 Ubuntu 上编译和安装 Apache Cloudberry,请参考 在 Rocky Linux 8 和 Ubuntu 上编译。
1. 目标受众
- 想为 Apache Cloudberry 贡献代码的开发人员。
- 想探索 Cloudberry 扩展功能的 PostgreSQL 开发人员。
- 对分布式查询处理感兴趣的数据库爱好者。
- 考虑加入 Apache Cloudberry 社区的人员。
通过本文描述的构建过程,你可以:
- 调试和测试新功能。
- 使用开发工具深入了解代码库。
- 运行测试套件和验证检查。
- 修改代码并进行测试。
如果你是 Apache Cloudberry 或 PostgreSQL 开发的新手:
- 建议先构建 PostgreSQL,熟悉基本工作流程。
- 加入项目邮件列表,与其他开发人员交流。
- 查看项目议题跟踪器,了解当前的开发重点。
- 探索代码库时,要做好应对较长构建时间和多次迭代测试的准备。
2. 构建 Apache Cloudberry 的过程
Apache Cloudberry(孵化中)的构建过程和 PostgreSQL 基本一致。如果你之前搭建过 PostgreSQL 的开发环境,那么构建 Cloudberry 会让你有种似曾相识的感觉。
对于 Cloudberry 或 PostgreSQL 的新手,我建议先从构建 PostgreSQL 开始。PostgreSQL 开发社区提供了丰富的文档和工具,能帮你顺利走完整个流程。熟悉了 PostgreSQL 的构建过程后,再转向 Cloudberry 就会容易很多。
3. Cloudberry 与 PostgreSQL 的主要区别
虽然整体流程差不多,但因为 Cloudberry 是分布式架构,所以在使用时会有一些额外的注意事项:
- 额外依赖:需要一些特定的库和工具,比如用于 Orca 查询优化器的
xerces-c
。 - 分布式特性:Cloudberry 在 PostgreSQL 的基础上增加了大规模并行处理功能,这会带来一些额外的配置步骤。
熟悉 PostgreSQL 后,设置 Cloudberry 就会变得轻而易举。接下来的章节会一步步指导你完成 Cloudberry 的构建和运行时设置。
4. 准备工作
4.1 配置 Rocky Linux 9 虚拟机
-
你可以使用任何平台来创建虚拟机或容器:
-
AWS EC2:这些步骤已在 Rocky-9-EC2-Base-9.5-20241118.0.x86_64 AMI 上验证过,但应该适用于任何 Rocky Linux 9 的版本。
-
VirtualBox:可以使用官方的 Rocky Linux 9 ISO 或 Vagrant 镜像。
-
Docker:这些步骤已在
rockylinux/rockylinux:9
镜像上验证过,但应该适用于任何基于 Rocky Linux 9 的容器。docker run -it --shm-size=2gb -h cdw rockylinux/rockylinux:9
这里的主机名 "cdw"(协调数据仓库)只是我们在测试时给容器起的一个示例名字。
为了确保测试套件能够顺利运行,你可能需要通过
--shm-size=2gb
参数来增加容器的共享内存。如果 Cloudberry 集群没有足够的共享内存资源,测试可能会失败。 -
其他云平台:使用等效的 Rocky Linux 9 镜像。
-
-
确保虚拟机或容器具备以下条件:
- 能够连接互联网,以便安装软件包。
- 可以通过 SSH 或控制台进行用户交互。
- 有足够的资源(CPU、内存和存储空间),以满足开发环境的需求。
:::说明
由于不同平台的环境配置步骤各不相同,本指南没有涵盖具体步骤。本指南假设你 已经成功创建了虚拟机或容器,并且能够以默认用户身份登录(例如,在 AWS 上的 Rocky Linux 使用 rocky
用户)。
:::
4.2 系统要求
开发环境的最低要求如下:
- CPU:建议 4 核(最低 2 核)
- 内存:建议 8GB(最低 4GB)
- 存储:建议有 20GB 的可用空间
- 网络:需要宽带互联网连接,用于下载软件包
4.3 安装 sudo
(如果尚未安装)
如果系统中尚未安装 sudo
,请运行以下命令进行安装:
dnf install -y sudo
:::说明
在 Docker 等环境中,安装 sudo
后,root
用户可以在无需密码提示的情况下使用 sudo
。
:::
4.4 安装所需软件包
本步骤将安装构建 Apache Cloudberry 所需的基本开发工具、库和依赖项。
4.4.1 安装基本系统软件包
以下命令将安装 Cloudberry 开发所需的主要软件包:
sudo dnf install -y apr-devel autoconf bison bzip2 bzip2-devel cmake3 createrepo_c ed flex gcc gcc-c++ git glibc-langpack-en initscripts iproute java-11-openjdk java-11-openjdk-devel krb5-devel less libcurl-devel libevent-devel libuuid-devel libxml2-devel libzstd-devel lz4 lz4-devel m4 nc net-tools openldap-devel openssh-clients openssh-server openssl-devel pam-devel passwd perl perl-Env perl-ExtUtils-Embed perl-Test-Simple perl-core pinentry python3-devel python3-lxml python3-psutil python3-pytest python3-pyyaml readline-devel rpm-build rpm-sign rpmdevtools rsync tar unzip util-linux-ng wget which zlib-devel
4.4.2 安装 CodeReady Builder (CRB) 软件包
CRB 仓库提供了额外的开发工具和库。在 Rocky Linux 上,该仓库默认处于禁用状态,需要手动启用。
sudo dnf install -y --enablerepo=crb libuv-devel libyaml-devel perl-IPC-Run
在红帽企业版 Linux (RHEL) 中,此仓库被称为 "PowerTools"。
4.5 创建并配置 gpadmin
用户
为了准备 Apache Cloudberry(孵化中)的开发环境,我们需要创建并配置一个专用的 gpadmin
用户。
-
创建一个名为
gpadmin
的用户,同时创建同名用户组、主目录,并设置 bash 为默认 shell:sudo useradd -U -m -s /bin/bash gpadmin
-
授予
gpadmin
用户无需密码的 sudo 访问权限:echo 'gpadmin ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/90-gpadmin
-
验证
gpadmin
用户的设置:sudo -u gpadmin sudo whoami
如果输出为
root
,则表明配置正确。
4.5.1 设置 gpadmin
用户环境
可选步骤:通过配置 Vim、Tmux 和 Oh My Bash 来增强 gpadmin
的开发环境
sudo dnf install -y vim tmux
sudo -u gpadmin bash <<'EOF'
# 设置 Vim 配置
wget -nv -q https://gist.githubusercontent.com/simonista/8703722/raw/d08f2b4dc10452b97d3ca15386e9eed457a53c61/.vimrc -O /home/gpadmin/.vimrc
# 设置 Tmux 配置
wget -nv -q https://raw.githubusercontent.com/tony/tmux-config/master/.tmux.conf -O /home/gpadmin/.tmux.conf
# 安装 Oh My Bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh )" --unattended
EOF
4.5.2 必要的配置
该脚本以 gpadmin
用户身份执行三项主要任务:
- 更新
.bashrc
,引入 Cloudberry 环境变量。 - 设置 SSH 密钥对,实现免密登录(如果尚未存在)。
- 配置 SSH 目录的正确权限,确保安全。
脚本通过 heredoc(EOF)块在 gpadmin
用户上下文中执行多个命令。在这些说明中会多次用到这种方法。
sudo -u gpadmin bash <<'EOF'
# 将 Cloudberry 环境设置添加到 .bashrc
echo -e '\n
# 添加 Cloudberry 条目
if [ -f /usr/local/cloudberry-db/greenplum_path.sh ]; then
source /usr/local/cloudberry-db/greenplum_path.sh
fi
# 使用 UTF-8 编码的美式英语
export LANG=en_US.UTF-8
' >> /home/gpadmin/.bashrc
# 设置 SSH 以实现免密访问
mkdir -p /home/gpadmin/.ssh
if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then
ssh-keygen -t rsa -b 2048 -C 'apache-cloudberry-dev' -f /home/gpadmin/.ssh/id_rsa -N ""
fi
cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys
# 设置 SSH 目录的正确权限
chmod 700 /home/gpadmin/.ssh
chmod 600 /home/gpadmin/.ssh/authorized_keys
chmod 644 /home/gpadmin/.ssh/id_rsa.pub
EOF
4.6 配置系统设置
像 Apache Cloudberry 这样的数据库系统需要特定的系统资源限制才能高效运行。这些限制应针对运行数据库进程的 gpadmin
用户进行配置。
-
创建资源限制配置
创建用户限制配置文件:
sudo tee /etc/security/limits.d/90-db-limits.conf << 'EOF'
# 为 gpadmin 设置核心转储文件大小限制
gpadmin soft core unlimited
gpadmin hard core unlimited
# 为 gpadmin 设置打开文件限制
gpadmin soft nofile 524288
gpadmin hard nofile 524288
# 为 gpadmin 设置进程限制
gpadmin soft nproc 131072
gpadmin hard nproc 131072
EOF -
了解以下这些限制。
配置设置了以下类型的资源限制:
-
核心转储 (
core
):- 设置为
unlimited
,启用完整的内核转储。 - 对调试和故障排除至关重要。
- 软限制和硬限制均不受限制。
- 设置为
-
打开文件 (
nofile
):- 设置为
524288
(512K)个文件。 - 用于处理大量的并发数据库连接。
- 设置为
-