ceph 16.2.15(Pacific)编译
以下流程在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 +0000
16.2.15
Signed-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-corpus
url = https://gitclone.com/ceph/ceph-object-corpus.git
[submodule "src/civetweb"]
path = src/civetweb
url = https://gitclone.com/ceph/civetweb
[submodule "src/erasure-code/jerasure/jerasure"]
path = src/erasure-code/jerasure/jerasure
url = https://gitclone.com/ceph/jerasure.git
branch = v2-ceph
[submodule "src/erasure-code/jerasure/gf-complete"]
path = src/erasure-code/jerasure/gf-complete
url = https://gitclone.com/ceph/gf-complete.git
branch = v3-ceph
[submodule "src/rocksdb"]
path = src/rocksdb
url = https://gitclone.com/ceph/rocksdb
ignore = dirty
[submodule "ceph-erasure-code-corpus"]
path = ceph-erasure-code-corpus
url = 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-deps
if [ "$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
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
问题
- 无法访问dashboard,
ceph -s输出Module 'dashboard' has failed: No module named 'routes',缺python包pip3 install routes即可 - 启动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.tar
mkdir /usr/local/soft
mv node-v16.14.2-linux-x64 /usr/local/soft
ln -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/npm
npm 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.sh
bash install.sh
# 重新打开终端
nvm ls-remote --lts
nvm 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.2
cd /data/ceph-learning/build
root@yielde:/data/ceph-learning/build# make mgr-dashboard-nodeenv
Installing 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 16.2.15(Pacific)编译的更多相关文章
- [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程
本文转载自:[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...
- 在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1
目录 一 安装前的准备 二 编译并安装OpenCV 4.1.1 注:原创不易,转载请务必注明原作者和出处,感谢支持! OpenCV目前(2019-8-1)的最新版本为4.1.1.本文将介绍如何在Ubu ...
- Deepin 15.4 编译安装 LNMP(PHP 5.6.31 + Nginx 1.12.1 + MySQL 5.6.36)
先查看先前的文章:Ubuntu 14 编译安装 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 笔记 编译 Nginx #安装依赖库 sudo apt-get -y i ...
- 16种C语言编译警告(Warning)类型的解决方法
当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译程序给出的每个警告 ...
- ubuntu 16.04源码编译和配置caffe详细教程 | Install and Configure Caffe on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/b90033a9/,欢迎阅读! Install and Configure Caffe on ubuntu 16.04 Series ...
- Deepin 15.3 编译同步SudaMod 2.0
1.设置hosts,方便访问国外站点 $ wget https://raw.githubusercontent.com/racaljk/hosts/master/hosts -qO /tmp/host ...
- 18.16 gcc-3.4.5编译错误及解决方法集锦
18.16.1 自写BootLoader错误 ERROR : boot.c:: warning: return type of 'main' is not `int' ANSWER : int mai ...
- 流媒体技术学习笔记之(十八)Ubuntu 16.04.3 如何编译 FFmpeg 记录
官方文档:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 一.最简单安装: apt-get install ffmpeg 二.安装最新版本 大 ...
- Ubuntu 16.04 源码编译安装PHP7+swoole
备注: Ubuntu 16.04 Server 版安装过程图文详解 Ubuntu16镜像地址: 链接:https://pan.baidu.com/s/1XTVS6BdwPPmSsF-cYF6B7Q 密 ...
- qgis3.16.6+vs2017再编译(debug+release)
参考 https://www.cnblogs.com/superbi/p/11188145.html 文章以及其它文章,对qggis3.16.6进行了重新编译 一.编译准备 1.Cygwin 1.1安 ...
随机推荐
- 使用 Antlr 开发领域语言
高 尚 (gaoshang1999@163.com), 软件工程师, 中国农业银行软件开发中心 简介: Antlr 是一个基于 Java 开发的功能强大的语言识别工具,Antlr 以其简介的语法和高速 ...
- linux故障排查工具之dmesg
dmesg命令是用来在Unix-like系统中显示内核的相关信息的.dmesg全称是display message (or display driver),即显示信息. 实际上,dmesg命令是从内核 ...
- 2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签。 如果一个正
2024-12-18:正方形中的最多点数.用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签. 如果一个正 ...
- 零售经营“新赛道” ——基于手机银行APP专区调研的客群精细化运营分析报告
随着银行业竞争的不断深入及新客户增量日渐"到顶",各家银行的客群竞争逐渐由"跑马圈地"进入"精耕细作"的新阶段,在客群精准化服务方面不断 ...
- 配置 HTTP/HTTPS 网络代理
使用Docker的过程中,因为网络原因,通常需要使用 HTTP/HTTPS 代理来加速镜像拉取.构建和使用.下面是常见的三种场景. 为 dockerd 设置网络代理 "docker pu ...
- maven:Could not transfer artifact from/to maven-default-http-blocker (http://0.0.0.0/): Blocked m...
今天在拉完项目后拉取包的过程中,maven报错: Could not transfer artifact from/to 对应的包 maven-default-http-blocker (http:/ ...
- nginx如何配置代理转发
Nginx是个厉害的服务器,可以配置多个服务器,一个server就是一个服务器server { listen 80; server_name *.yourdomain ...
- Qt音视频开发32-qmedia内核回调拿图片数据
一.前言 使用qmediaplayer来打开视频并播放,默认首选会采用QVideoWidget控件来展示,优点是不用自己来绘制,一切交给了QVideoWidget控件,这样可以做到极低的CPU占用,缺 ...
- Qt编写跨平台视频监控系统(64通道占用7%CPU/支持win_linux_mac等)
一.前言 视频监控组件经历过数十年的迭代,从最初的只简单播放个rtsp视频流,到现在支持各种音频视频文件格式(mp3.wav.mp4.asf.rm.rmvb.mkv等).支持各种视频流格式(rtp.r ...
- [转]关于c#中遍历从数据库中取出的DataTable集合
作为刚进入c#语言不久的小白,我们需要掌握的基本操作之DataTable集合.首先你需要一个sql语句,这里我就不写了,但是这里要注意,这个sql语句的目的是查出你需要的一张数据表,这个时候才会用到D ...