十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Neon 的 compute_ctl 怎么交叉编译出 Linux x86_64 可执行文件

Neon 的 compute_ctl 怎么交叉编译出 Linux x86_64 可执行文件 Neon 的 compute_ctl 怎么交叉编译出 Linux x86_64 可执行文件【免费下载链接】neonNeon: Serverless Postgres. We separated storage and compute to offer autoscaling, code-like database branching, and scale to zero.项目地址: https://gitcode.com/GitHub_Trending/ne/neonNeon 仓库中的 compute_tools 目录负责构建compute_ctl——Neon 的 Postgres 包装程序它作为 Docker 入口点或systemd的ExecStart运行负责 compute 节点初始化时的各项 Neon 专属逻辑接收集群 spec、同步 safekeeper 获取 commit LSN、从 pageserver 拉取 basebackup、启动并监控 Postgres 等。当你在 macOSx86上开发compute_tools却需要产出一个 Linux GNURust 术语中为x86_64-unknown-linux-gnu平台的可执行文件时compute_tools/README.md给出了两条交叉编译路径用一次性 Docker 容器编译或在宿主机上安装 Linux 交叉工具链后由cargo build直接交叉编译。准备工作进入正确的构建目录无论走哪条路径构建都发生在compute_tools目录下文档中的命令以$(pwd)挂载当前目录、-w /compute_tools设定工作目录隐含了这一前提。先在仓库中进入该目录cd compute_toolscompute_tools的构建是标准 Cargo 构建README 的 Tests 一节即使用cargo build/cargo test体系因此只需要 Rust 工具链或 Docker不需要额外安装系统依赖。路径一用 Docker 容器编译macOS x86 场景compute_tools/README.md推荐的做法是运行一个一次性throw-away的 Docker 容器使用 rustlang/rust 镜像在容器内完成cargo build宿主机不需要安装任何 Linux 交叉工具链。完整写法docker run --rm \ -v $(pwd):/compute_tools \ -w /compute_tools \ -t rustlang/rust:nightly cargo build --release --targetx86_64-unknown-linux-gnu或者单行写法注意这里镜像改为rust:latestdocker run --rm -v $(pwd):/compute_tools -w /compute_tools -t rust:latest cargo build --release --targetx86_64-unknown-linux-gnu参数说明--rm容器退出后自动删除一次性容器-v $(pwd):/compute_tools把当前目录即compute_tools源码目录挂载进容器-w /compute_tools容器内的工作目录--releaserelease 模式构建--targetx86_64-unknown-linux-gnu指定交叉编译目标平台为 Linux GNU x86_64。构建完成后可执行文件位于compute_tools目录下的target/x86_64-unknown-linux-gnu/release/中Cargo 按 target 三元组组织产物目录。路径二用 Rust 原生交叉编译如果你不想依赖 Docker可以在宿主机上直接添加目标并安装交叉工具链。文档给出的完整步骤如下。第一步给当前 Rust 工具链添加目标平台rustup target add x86_64-unknown-linux-gnu第二步安装 macOS 交叉编译工具链文档使用 Homebrew 的SergioBenitez/osxcttap因此该步骤面向 macOS 宿主brew tap SergioBenitez/osxct brew install x86_64-unknown-linux-gnu第三步设置 Linux 交叉链接器环境变量后执行构建CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKERx86_64-unknown-linux-gnu-gcc cargo build --targetx86_64-unknown-linux-gnu --release其中CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER环境变量指定链接阶段使用的交叉编译器x86_64-unknown-linux-gnu-gcc即上一步 brew 安装的工具链提供的 gcc。构建产物同样在target/x86_64-unknown-linux-gnu/release/下。验证产物以 compute_ctl 的用法确认构建成功compute_tools/README.md开头给出了compute_ctl的标准用法示例。交叉编译出的二进制即为这一命令所对应的程序compute_ctl -D /var/db/postgres/compute \ -C postgresql://cloud_adminlocalhost/postgres \ -S /var/db/postgres/specs/current.json \ -b /usr/local/bin/postgres-D指定数据目录-S指定集群 spec 的 JSON 文件-C指定连接串-B/-b指定 postgres 可执行文件路径。把交叉编译出的compute_ctl放进 Linux 环境后可将其作为 Docker 入口点或systemd的ExecStart启动按其初始化流程写入配置到PGDATA、同步 safekeeper、拉取 basebackup、启动 Postgres 并等待就绪观察是否正常走完即可验证构建产物在目标平台上可运行。已知前提与限制文档中交叉编译的场景设定是在 macOSx86上想要 Linux GNU x86_64 可执行文件两条路径都围绕这一场景描述其中原生交叉编译的 brew 步骤只适用于 macOS。Docker 路径的两种写法使用了不同镜像标签rustlang/rust:nightly与rust:latest这是文档原文如此选择哪个取决于你希望容器内使用 nightly 还是最新 stable 工具链。除交叉编译外的常规开发验证README 还给出了cargo fmt、cargo test和 clippy 命令可按需使用。【免费下载链接】neonNeon: Serverless Postgres. We separated storage and compute to offer autoscaling, code-like database branching, and scale to zero.项目地址: https://gitcode.com/GitHub_Trending/ne/neon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表