| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux下Ceph源码编译和调试--ceph-deploy版本 -> 正文阅读 |
|
[系统运维]Linux下Ceph源码编译和调试--ceph-deploy版本 |
前言调试ceph源码需要提前部署好一个完整的集群,部署集群的方法很多,比如:通过ceph源码自带的vstart脚本部署;通过像ceph-deploy等自动化工具部署;手动输入ceph命令部署。三种部署集群方法在调试源码时的区别如下:
本文采用ceph-deploy方式 第一部分 Ceph源码下载由前言部分阐述可知,需要从官方发布的源码包中获取,为了提高下载速度,本文采用阿里云开源镜像站的ceph镜像地址: https://mirrors.aliyun.com/ceph/debian-nautilus/pool/main/c/ceph/ceph_14.2.22.orig.tar.gz 注:一定不要在windows下解压tar包,因为ceph源码中很多文件名不是windows的合法文件名,这样会导致解压文件失败 第二部分 安装依赖Ceph源码安装依赖很简单,直接执行源码根目录下install-deps.sh脚本,根据经验发现,该脚本存在一些问题,需要稍微修改一下。 2.1 修改launchpad源脚本会安装gcc环境,安装包源url只需要保留一个即可,修改install-deps.sh脚本中的函数ensure_decent_gcc_on_ubuntu
2.2 屏蔽调用安装libboost的部分脚本会安装 libboost 库,编译源码过程会再次下载 boost 源码包,因此脚本中不应该再安装 libboost,屏蔽install-deps.sh以下2个地方
2.3 设置pypi镜像源脚本会安装pypi库,默认url下载很慢,需要设置pypi库镜像源。创建 ~/.pip/pip.conf 文件,并追加以下内容
2.4 安装其他依赖编译源码过程中会遇到很多函数用到zstd库,默认情况下ubuntu18.04只安装了libzstd1,但没有用,需要安装 libzstd1-dev
2.5 执行脚本
? 第三部分 编译Ceph源码3.1 开启debug模式如果想要调试Ceph源码,需要设置编译源码模式为debug模式,默认编译模式为release模式,该模式是不能调试源码。向 ceph/CMakeList 文件的 set(VERSION 14.2.22) 后追加以下内容
3.2 构建build目录直接执行do_cmake脚本,该脚本会进行一系列检测,包括源码是不是完整,依赖是不是都安装了等等。如果出现问题,构建出的build目录是不完整的,最直接的影响是无法生成makefile文件,导致无法编译。
3.3 编译使用make编译必须要到ceph/build目录下执行,ceph源码可以单独编译某一个模块,也可以全部编译。使用make可以指定多线程编译,提高编译速度,但要合理分配线程数,建议使用4线程编译即可。
注:源码编译会生成很多库文件和二进制文件,分别放在ceph/build/lib和ceph/build/bin目录下 第四部分 集群部署集群部署既可以采用离线部署也可以采用在线部署方式。本文建议采用在线部署方式,因为在线部署使用的ceph安装包一定是由官方一同发布的ceph源码包编译生成的。这样就省去了离线部署需要制作deb包的步骤,提高效率。ceph-deploy在线部署ceph集群的详细内容,之前笔者已经发布过该文章,此处仅提供文件链接:Linux下在线部署指定版本的Ceph集群。另外,本文需要调试文件系统方面的功能,因此需要搭建好文件系统, 第五部分 源码调试由前言部分阐述可知,使用ceph-deploy方式调试代码,需要安装dbg包。本文需要调试mds在管理元数据方面的代码,因此需要安装ceph-mds-dbg包。 5.1 安装dbg包
5.2 替换系统安装的bin和lib文件如果已经修改了官方发布的源码,除了安装dbg包外,还需要使用build/bin和/build/lib编译出来的关于mds的文件替系统默认安装的。如果没有更改,无需替换。系统默认把ceph相关的二进制文件安装到/usr/bin,把ceph依赖的动态库安装到/usr/lib中 5.3 查看mds进程号
从结果可以看到mds进程号为 5.4 gdb调试5.4.1 进入gdb模式gdb调试需要以管理员权限,本文默认是root用户,所以直接输入gdb即可进入gdb模式
5.4.2 attach mds进程
5.4.3 设置断点因为需要调试新建目录时,mds对元数据的管理,因此断点设置在Server::handle_client_mkdir起始处
设置完断点后,执行continue
5.4.4 测试在挂载出来的文件系统目录下,新建一个目录,代码会跳到之前设置的断点处
从上面结果可以看到,新建一个目录时,函数停在代码的5932行,现在就可以使用gdb命令进行代码调试,和正常调试代码一样 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 3:36:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |