美文网首页
ceph 源码编译以及制作RPM包

ceph 源码编译以及制作RPM包

作者: wayyyy | 来源:发表于2023-04-30 16:11 被阅读0次

以 centos7.9 为例:

编译
  • yum 源配置好国内镜像源

  • 配置 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 下的二进制文件

  • 下载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 "$@" ..
    
  • 如果遇到:"fatal error: Killed signal terminated program cc1 plus"
    说明编译时遇到内存不足,最好的办法当然是升级内存,或者分配虚拟内存:

    # mkdir -p /swap
    # dd if=/dev/zero of=/swap/swapfile bs=1M count=16384
    # mkswap /swap/swapfile  # 格式化swap
    # swapon /swap/swapfile  # 挂载swap
    
  • 第三方库编译加速
    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-build等工具。

# yum install -y rpm-build rpmdevtools 

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

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

1、将解压出来的源码中的ceph.spec 文件拷贝到SPECS目录下。
2、然后将源码压缩包和放置到拷贝到SOURCES目录下。
如图所示:

image.png

开始制作rpm包

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

如果上面rpmbuild这一步报依赖包错误,则根据报错信息,使用yum安装对应的包就可以了。

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


参考资料
1、https://blog.csdn.net/Moolight_shadow/article/details/121568605
2、https://www.jianshu.com/p/f64320d9093e
3、https://www.ctyun.cn/developer/article/475043072647237
4、https://avmedia.0voice.com/?id=45973

相关文章

网友评论

      本文标题:ceph 源码编译以及制作RPM包

      本文链接:https://www.haomeiwen.com/subject/lpynjdtx.html