ceph 源码编译以及制作RPM包(N 版)

编制ceph N版本

编译
  • 配置 pyhton 国内镜像源
    创建 ~/.pip/pip.conf 文件,并加入内容:(不需要安装pip)

    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple/
    [install]
    trusted-host=mirrors.aliyun.com
    
  • 安装gcc 7+ 的版本

    # yum install -y centos-release-scl
    # yum install -y devtoolset-8
    # scl enable devtoolset-8 bash  # 可以配置在/etc/profile 中
    
  • 安装cmake3

    # yum install -y epel-release
    # yum install -y cmake3
    
  • 下载ceph源码与安装依赖

    # git clone https://github.com/ceph/ceph.git
    # cd ceph  
    # git checkout v14.2.22 
    # git submodule update --init --recursive
    # ./install-deps.sh  # 安装官方依赖
    

    使用 install-dep.sh 安装依赖会遇到一些问题:

    • 问题1:Error: No Package found for python-scipy
      解决方案,执行如下:

      # sed -i -e '/BuildRequires:  python%{_python_buildid}-scipy/d' ceph.spec.in
      
    • 问题2:systemed-sysusers 依赖问题:
      Error: Package: golang-github-prometheus-2.26.1-2.el7.x86_64 (epel) Requires: /usr/bin/systemd-sysusers
      解决方案:编辑 install-dep.sh 文件,如图所示,增加:


      image.png
    • 问题3:python faulthandler 版本依赖问题:
      ERROR: Could not find a version that satisfies the requirement faulthandler; python_version == "2.6" or python_version == "2.7" (from pytest-faulthandler==1.0.1->-r requirements.txt (line 25)) (from versions: none)
      ERROR: No matching distribution found for faulthandler; python_version == "2.6" or python_version == "2.7" (from pytest-faulthandler==1.0.1->-r requirements.txt (line 25))
      解决方案:在 src/pybind/mgr/dashboard/requirements.txt 里删掉第25行:pytest-faulthandler==1.0.1

    当然也可以尝试手动安装:

    yum install -y redhat-lsb-core yum-utils java-devel sharutils checkpolicy selinux-policy-devel python-cherrypy python-werkzeug bc gperf cmake cryptsetup fuse-devel gcc-c++ gdbm gperftools-devel jq leveldb-devel libaio-devel libblkid-devel libcurl-devel libudev-devel libtool libxml2-devel make parted perl pkgconfig python python-devel python-nose python-requests python-virtualenv snappy-devel udev util-linux valgrind-devel which xfsprogs xfsprogs-devel xmlstarlet yasm boost-random btrfs-progs nss-devel keyutils-libs-devel libibverbs-devel openldap-devel openssl-devel Cython python-prettytable python-sphinx python34-devel python34-setuptools python34-Cython lttng-ust-devel libbabeltrace-devel expat-devel redhat-rpm-config junit fcgi-devel selinux-policy-doc rdma-core-devel devtoolset-8-gcc-c++ lz4-devel liboath-devel librabbitmq-devel python2-Cython python36-Cython python36-setuptools python36-devel CUnit-devel librdmacm-devel libcap-ng-devel libnl3-devel librdkafka-devel fuse3-devel python36-sphinx ncurses-devel leveldb-devel
    
  • 编译:

    # ./do_cmake.sh -DBOOST_J=8 -DWITH_MGR_DASHBOARD_FRONTEND=OFF -DWITH_TESTS=OFF  # 这里不编译 DASHBOARD 和 test 
    

    执行编译:

    # cd build && make -j 8
    

    编译产物 build/bin 下的二进制文件

    • 如果遇到:"fatal error: Killed signal terminated program cc1 plus"
      说明编译时遇到内存不足,最好的办法当然是升级内存,或者分配swap分区:

      # mkdir -p /swap
      # dd if=/dev/zero of=/swap/swapfile bs=1M count=16384
      # mkswap /swap/swapfile  # 格式化swap
      # swapon /swap/swapfile  # 挂载swap
      
    • 提前下载boost源码包可编译提速
      在执行make编译的时候,脚本会自动下载 boost_1_72_0.tar.bz2,我们为了节省时间,也可以提前手动下载,下载地址:https://download.ceph.com/qa/boost_1_72_0.tar.bz2,将下载的好的包放在ceph/build/boost/src 即可。

    • 如果需要 debug 编译
      修改do_cmake.sh

      将:
      cmake -DBOOST_J=$(nproc) $ARGS "$@" ..   
      改为:
      cmake -DCMAKE_C_FLAGS="-O0 -g" -DCMAKE_CXX_FLAGS="-O0 -g" -DBOOST_J=$(nproc) $ARGS "$@" ..
      
    • 第三方库编译加速
      Boost,rocks_db库的编译默认是单线程的,我们这个通过增加编译的线程数量。

      # do_cmake.sh -DBOOST_J=64
      
    • 单独编译某个模块

      # make help  # 查看有哪些模块
      # make all   # 编译所有
      # make ceph-osd # 编译ceph-osd
      
    • 查看有哪些编译选项可以配置

      # cd build
      # cmake3 . -LH
      

制作RPM包

只有经过上面编译成功的流程,才能说明我们表明编译环境已经可以了,可以打rpm了。
接下来我们开始制作rpm包,首先安装rpm-build等工具。

# yum install -y rpm-build rpmdevtools 

创建 rpm-ceph 目录,进入该目录。

# mkdir -p /root/ceph/rpm-ceph && cd /root/ceph/rpm-ceph && mkdir rpmbuild
# mkdir rpmbuild/{SOURCES,BUILDROOT,RPMS,SPECS,SRPMS}

1、去这个地方 https://download.ceph.com/tarballs/ 下载对应版本的源码
2、将解压出来的源码中的ceph.spec 文件拷贝到SPECS目录下。
3、然后将源码压缩包和放置到拷贝到SOURCES目录下。
如图所示:

image.png

开始制作rpm包

# rpmbuild -bb --define '_topdir /root/ceph/rpm-ceph/rpmbuild' /root/ceph/rpm-ceph/rpmbuild/SPECS/ceph.spec

上面执行完rpmbuild命令之后,如果没有错误发生,那么就可以在/root/ceph/rpm-ceph/rpmbuild/RPMS/目录下看到制作好的rpm包了。


参考资料
1、https://www.jianshu.com/p/3097fe1e1aa7
2、https://ivanzz1001.github.io/records/post/ceph/2017/07/28/ceph-install
3、https://ivanzz1001.github.io/records/post/ceph/2017/07/28/ceph-install2
4、https://blog.csdn.net/Moolight_shadow/article/details/121568605
5、https://www.jianshu.com/p/f64320d9093e
6、https://www.ctyun.cn/developer/article/475043072647237
7、https://avmedia.0voice.com/?id=45973

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容