ceph 16.2.15(Pacific)编译

news/2025/2/12 8:59:38/文章来源:https://www.cnblogs.com/tongh/p/18706383

目录
  • 获取ceph源码
  • 编译
    • 拉取submodule网络问题
    • 安装依赖
    • do_cmake.sh
    • 编译
    • vstart启动
      • 问题
  • 编译dashboard
    • 安装nodejs
      • 方法一 下载编译好的源码包
      • 方法二 nvm安装node(推荐)
    • 编译nodeenv
  • 其他
    • boost下载慢
  • 总结

以下流程在ubuntu22.04 和 openEuler20.03 都实际操作过

获取ceph源码

从https://docs.ceph.com/en/latest/releases/找到pacific版本对应的tag为16.2.15

git clone https://github.com/ceph/ceph.git# 查看所有tag
git ls-remote --tags origin |grep 16.2.
618f440892089921c3e944a991122ddc44e60516        refs/tags/v16.2.15^{}# 根据git log的commit找到pacifc的release tag为v16.2.15
commit 618f440892089921c3e944a991122ddc44e60516 (HEAD -> ceph-pacific-learning, tag: v16.2.15, tag: ls, origin/ceph-pacific-learning)
Author: Ceph Release Team <ceph-maintainers@ceph.io>
Date:   Mon Feb 26 19:21:09 2024 +000016.2.15Signed-off-by: Ceph Release Team <ceph-maintainers@ceph.io>
# 或者 git show v16.2.15,可以确认即可# 切换到pacific的release tag
git checkout v16.2.15# 这个tag是一个快照,不可修改,所以创建我们自己的分支
git checkout -b ceph-pacific-learning

编译

拉取submodule网络问题

执行命令git submodule update --init --recursive --progress更新子模块

如果子模块拉取失败:

  • 方法一:这个地址会记录最新国内可用的github镜像地址,https://fcp7.com/github-mirror-daily-updates.html,修改ceph顶层目录下的.gitmodule,例如对于[submodule "src/erasure-code/jerasure/gf-complete"],将url = https://github.com/ceph/gf-complete.git部分替换为镜像的地址如下:
[submodule "ceph-object-corpus"]path = ceph-object-corpusurl = https://gitclone.com/ceph/ceph-object-corpus.git
[submodule "src/civetweb"]path = src/civetweburl = https://gitclone.com/ceph/civetweb
[submodule "src/erasure-code/jerasure/jerasure"]path = src/erasure-code/jerasure/jerasureurl = https://gitclone.com/ceph/jerasure.gitbranch = v2-ceph
[submodule "src/erasure-code/jerasure/gf-complete"]path = src/erasure-code/jerasure/gf-completeurl = https://gitclone.com/ceph/gf-complete.gitbranch = v3-ceph
[submodule "src/rocksdb"]path = src/rocksdburl = https://gitclone.com/ceph/rocksdbignore = dirty
[submodule "ceph-erasure-code-corpus"]path = ceph-erasure-code-corpusurl = https://gitclone.com/ceph/ceph-erasure-code-corpus.git

执行git submodule sync --recursive更新git拉取的地址,再次执行git submodule update --init --recursive --progress

  • 方法二:如果方法一中的镜像源没有地址,根据拉取失败的提示fatal: clone of 'https://github.com/spdk/dpdk.git' into submodule path '/data/ceph-learning/src/spdk/dpdk' failed,手动多拉取几次git clone https://github.com/spdk/dpdk.git /data/ceph-learning/src/spdk/dpdk --progress,或者将https换成git执行git clone git://github.com/spdk/dpdk.git /data/ceph-learning/src/spdk/dpdk --progress
  • 方法三:那种方式上网,解决99%的编译问题

安装依赖

./install-deps.sh

如果是openEuler系统

index 7e137d687f1..b22d45f409d 100755
--- a/install-deps.sh
+++ b/install-deps.sh
@@ -410,7 +410,7 @@ else$SUDO env DEBIAN_FRONTEND=noninteractive apt-get -y remove ceph-build-depsif [ "$control" != "debian/control" ] ; then rm $control; fi;;
-    centos|fedora|rhel|ol|virtuozzo)
+    centos|fedora|rhel|ol|virtuozzo|openEuler) # 修改这里builddepcmd="dnf -y builddep --allowerasing"echo "Using dnf to install dependencies"case "$ID" in

do_cmake.sh

  1. cmake -LH可以看到cmake可用参数和描述信息,例如
// ceph-mgr is enabled
WITH_MGR:BOOL=ON// Build the mgr/dashboard frontend using `npm`
WITH_MGR_DASHBOARD_FRONTEND:BOOL=ON// build OCF-compliant cluster resource agent
WITH_OCF:BOOL=OFF

dashboard依赖node、ng的一堆包,系统版本不同依赖问题也不同,编译会很麻烦,如果用不到它可以关掉:

./do_cmake.sh -DWITH_MGR_DASHBOARD_FRONTEND=OFF

如果需要dashboard,直接执行./do_cmake.sh后,到build目录下,按照下面的编译dashboard配置后,再回来执行make

编译

执行./do_cmake.sh后会在ceph源码顶层目录下生成一个build目录

cd build
make -j16

Tips:make过程中也会下载一些软件包,没有那种方式上网可能会导致超时失败,失败后可以继续make -j16增量编译

vstart启动

要使用vstart启动ceph,还需要编译相关环境,在build目录下

make vstart
MON=1 OSD=2 MGR=1 RGW=1 NFS=1 ../src/vstart.sh -d -n -x

问题

  1. 无法访问dashboard,ceph -s输出Module 'dashboard' has failed: No module named 'routes',缺python包pip3 install routes即可
  2. 启动cephfs可能会失败缺包,手动安装
Requirements
------------The following packages are required to enable CephFS and RGW exports with nfs-ganesha:-  ``nfs-ganesha``, ``nfs-ganesha-ceph``, ``nfs-ganesha-rados-grace`` and``nfs-ganesha-rados-urls`` packages (version 3.3 and above)Ganesha Configuration Hierarchy

编译dashboard

如果使用-DWITH_MGR_DASHBOARD_FRONTEND=OFF关了dashboard的话可以忽略这个

安装nodejs

方法一 下载编译好的源码包

wget https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz
xz -d node-v16.14.2-linux-x64.tar.xz
tar -xvf node-v16.14.2-linux-x64.tarmkdir /usr/local/soft
mv node-v16.14.2-linux-x64 /usr/local/softln -s /usr/local/soft/node-v16.14.2-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/soft/node-v16.14.2-linux-x64/bin/npm /usr/local/bin/npmnpm config set registry https://registry.npmmirror.com
npm install -g @angular/cli@16.2.0
ln -s /usr/local/soft/node-v16.14.2-linux-x64/lib/node_modules/@angular/cli/bin/ng.js /usr/local/bin/ng

方法二 nvm安装node(推荐)

# 复制脚本到主机
https://github.com/nvm-sh/nvm/blob/master/install.shbash install.sh
# 重新打开终端
nvm ls-remote --ltsnvm install v16.14.2
npm -g install @angular/cli@16.2.10

编译nodeenv

旧版本的ceph编译dashboard会有nodejs和angular/cli版本冲突的问题

# /data/ceph-learning换成自己的ceph源码顶层目录
cd /data/ceph-learning/src/pybind/mgr/dashboard && vim CMakeLists.txt# 修改 COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=12.18.2
# 为 COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=16.14.2cd /data/ceph-learning/buildroot@yielde:/data/ceph-learning/build# make mgr-dashboard-nodeenvInstalling collected packages: nodeenv
Successfully installed nodeenv-1.9.1* Install prebuilt node (16.14.2) ..... done.* Appending data to /data/ceph-learning/build/src/pybind/mgr/dashboard/node-env/bin/activate* Appending data to /data/ceph-learning/build/src/pybind/mgr/dashboard/node-env/bin/activate.fish
Built target mgr-dashboard-nodeenv

其他

boost下载慢

生成build后,可以先下载好 https://download.ceph.com/qa/boost_1_73_0.tar.bz2,放到/data/ceph-learning/build/boost/src目录下

root@yielde:/data/ceph-learning/build/boost/src# ls -lh
total 105M
drwxr-xr-x 2 root root 4.0K Feb  9 14:38 Boost
-rw-r--r-- 1 root root 105M Feb  9 15:27 boost_1_73_0.tar.bz2
drwxr-xr-x 2 root root 4.0K Feb  9 14:55 Boost-stamp

总结

其实棘手的问题就两个,一是网络方面众所周知的问题访问git和其他一些仓库会超时失败,二是前端相关的nodejs组件等版本问题导致编译失败。要耐心查看报错,修改CmakeList.txt或Makefile、手动下载相关软件包到目录,一步一步解决。

附一个大佬写的vscode+clangd的调试环境配置,我还没尝试:

编译调试 ceph v16.2.10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第四期书生大模型实战营】第2关 L0G2000 Python 基础知识

任务 任务概览任务类型 任务内容 预计耗时闯关任务 Leetcode 383(笔记中提交代码与leetcode提交通过截图) 20mins闯关任务 Vscode连接InternStudio debug笔记 10mins可选任务 pip安装到指定目录 10mins作业总共分为三个任务,两个闯关任务均完成视作闯关成功。 请将作业发布到知…

Redis 持久化策略及其优缺点

原文:Redis 有哪 2 种持久化方式?分别的优缺点是什么?,补充了 Redis 默认的持久化配置Redis 的读写操作都是在内存中,所以 Redis 性能才会高,但是当 Redis 重启后,内存中的数据就会丢失,那为了保证内存中的数据不会丢失,Redis 实现了数据持久化的机制,这个机制会把数…

Innotop:一款MySQL监控工具

在现代数据库管理中,MySQL作为广泛应用的开源关系数据库,已成为各类企业、开发者和数据库管理员(DBA)日常工作中不可或缺的工具。然而,随着数据库规模的增大和查询量的增加,MySQL服务器的性能监控变得尤为重要。为了确保数据库的高效运行和及时排除潜在问题,DBA们需要依…

Windows本地部署deepseek(小白向)

下载Ollama官网下载:ollama.com 点击Download选中Windows版本,点击Download for Windows下载是需要跳转github的,如果无法访问,需要尝试使用github加速器 推荐使用加速器FastGithub(免费,开源) 这里提供国内清华镜像下载 https://cloud.tsinghua.edu.cn/d/df482a15afb64…

SSE、EventSource了解

EventSource接口是web内容和服务器发送事件通信的接口 一个EventSource实例会对HTTP服务器开启一个持久化的连接,以text/event-stream格式发送事件 该连接会一直保持开启直到调用EventSource.close()关闭EventSource是一种Web API,用于建立和服务器之间的【单向持久化】连接 …

基于GD32的简易示波器

基于GD32的简易示波器项目学习 根据立创训练营项目:[简易数字示波器设计(入门版) - 立创开源硬件平台(https://oshwhub.com/course-examples/yi-qi-yi-biao-jian-yi-shu-zi-shi-bo-qi-she-ji-cha-jian-ban) 技术点:原理图绘制,PCB设计,打板,焊接。外部中断,定时器中断,…

DeepSeek本地化部署(Windows)

DeepSeek本地化部署(Windows) 安装 Ollama https://ollama.com/download/windowsCMD部署deepseek模型 https://ollama.com/ 网址中,在网页上方搜索框中输入 Deepseek-r1 1.5b: 需要1.1GB显存 7b: 需要4.7GB显存 8b: 需要4.9GB显存 14b: 需要9.0GB显存 32b: 需要20GB显存 70b…

第三章典型园区网的业务部署

第三章典型园区网的业务部署STP阻塞冗余的链路来避免环路形成,然后当链路故障时,STP可以快速启用被阻塞的链路,恢复连通性。

网站集成微信公众号(订阅号)登录

前一阵子,想着给我的站点集成一个微信登录,因为我之前从未有过微信相关的开发,所以我自己跟着网上的资料,一步一步的慢慢的摸索,过程不免的遇到了许多坑,才把我的网站微信登录集成完成,所以这里分享一下我的摸索的过程。因为我的是订阅号,所以一下的内容均针对订阅号而…

.NET周刊【2月第1期 2025-02-02】

国内文章 dotnet 9 已知问题 默认开启 CET 导致进程崩溃 https://www.cnblogs.com/lindexi/p/18700406 本文记录 dotnet 9 的一个已知且当前已修问题。默认开启 CET 导致一些模块执行时触发崩溃。 dotnet 使用 ColorCode 做代码着色器 https://www.cnblogs.com/lindexi/p/18687…

浅谈操作分块:从 Div.3 F 到 Ynoi

前言 分块是一种常见的处理信息的思想。 序列分块通常以 \(\mathcal O(q\sqrt n)\) 左右的时间复杂度对询问进行处理。观察序列分块的本质,其实是控制无法快速统计的部分较少,以至于可以暴力统计,剩下的部分采取诸如提前维护好每个块的答案再合并的方式快速统计。 而在答案具…

如何使用 DataX 连接 Easysearch

DataX DataX 是阿里开源的一款离线数据同步工具,致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能。 本篇主要介绍 DataX 如何将数据写入到 Easysearch,对于各种数据源的连接不会做深入的探讨,感兴…