以 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目录下。
如图所示:
![](https://img.haomeiwen.com/i7304940/205c39b322447928.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
网友评论