前言:之前一直做ceph存儲管理平臺開發(fā)蔗彤,最近開始下沉孝扛。項(xiàng)目用的ceph是改造后打成的run包舀锨。那么開源的代碼是如何從源碼開始編譯-安裝-部署的呢蝇更?本文記錄了整個編譯過程沪编,不得不說,對不熟悉的大型開源項(xiàng)目來說年扩,一個干凈的環(huán)境是多么重要蚁廓,都是淚。在一臺物理機(jī)上裝厨幻,疲于解決各種環(huán)境依賴的我纳令,在機(jī)器被征用做壓力測試后挽荠,終于佛了。好在我有一個天賜的老大平绩,這個時候分給我一臺空閑的物理機(jī)圈匆,OMG,立刻馬上裝了一個虛擬機(jī)捏雌,配置了代理跃赚,走起。
1.獲取源碼
首先當(dāng)然是獲取源碼性湿,這里可以選定版本進(jìn)行克隆纬傲,我選的是14.2.9,也就是N版肤频,放置在single目錄下
git clone -b v14.2.9 --single-branch https://github.com/ceph/ceph.git single
2.安裝依賴
社區(qū)很貼心的提供了腳本
sh install-deps.sh
3.CMAKE
因?yàn)楦甙姹綜eph都是采用cmake來管理的叹括,所以do_cmake走起
./do_cmake.sh
哈哈,報錯開始了
看了下報錯信息宵荒,原來是gcc版本太低了汁雷,需要使用gcc 7+,OK报咳,那就升級gcc唄侠讯。通過查閱資料【1】,原來高版本的gcc是通過SCLo庫裝的暑刃,這個SCLo就是比epel更豐富的軟件包集合厢漩。即需要安裝devtoolset,而它和常規(guī)軟件不太一樣岩臣,是裝在opt下面的溜嗜。好嘞,那就開始裝devtoolset工具吧
yum install -y centos-release-scl
yum install -y devtoolset-7
scl enable devtoolset-7 bash
執(zhí)行完scl enable devtoolset-7 bash或source /opt/rh/devtoolset-7/enable再gcc --verion架谎,就可以看到版本使用的已經(jīng)是高版本gcc了炸宵。是的,你想的沒錯狐树,重啟一個session這個gcc版本又恢復(fù)默認(rèn)的低版本了,所以啟動高版本gcc就要每次都enable一下鸿脓。
好啦抑钟,gcc升上去了,繼續(xù)do_cmake吧
./do_cmake.sh
do_cmake完成野哭,我們構(gòu)建了一個帶debug的版本在塔,當(dāng)然因?yàn)槭莿傞_始學(xué)習(xí)嘛,都用默認(rèn)好了拨黔。
4.編譯
上一步執(zhí)行完蛔溃,會生成一個build目錄,我們進(jìn)入build開始make(一大波報錯即將襲來)
cd build/
make
(1)遇到pthread錯誤
/root/single/build/CMakeFiles/CMakeError.log日志中看到,一大波未定義的引用贺待,unbelievable徽曲,why?
難道是因?yàn)橹形绯粤藗€飯麸塞,session重開導(dǎo)致gcc版本用的不對了秃臣?
果不其然,好吧哪工,enable一下奥此,再來
scl enable devtoolset-7 bash
make
(2)遇到has no member named ‘merge’的問題
下一個報錯如約而至...
根據(jù)https://tracker.ceph.com/issues/19271所說,可能是linux內(nèi)核導(dǎo)致
./run-make-check.sh
呦吼雁比,自己開始cmake了稚虎?好的,那重來一次吧
rm -rf build/
./run-make-check.sh
然后發(fā)現(xiàn)偎捎,它編譯了起來蠢终,好的吧,先等等看
(3)缺libasan
https://stackoverflow.com/questions/38176407/cannot-find-lasan-and-libasan-preinit-o
https://bugzilla.redhat.com/show_bug.cgi?id=1303766
根據(jù)上述回答鸭限,看樣子是缺libasan這個庫蜕径,裝裝裝
yum install devtoolset-7-libasan-devel
繼續(xù),編譯走起
cd build
make -j8
libasam已經(jīng)裝了呀,why败京?好吧兜喻,沒有source /opt/rh/devtoolset-7/enable,所以沒找到赡麦,行吧朴皆。
source /opt/rh/devtoolset-7/enable
make
終于make好了,撒花~~
為什么要走一下源碼編譯的流程呢泛粹?readme是這樣寫的:
Note that these instructions are meant for developers who are compiling the code for development and testing. To build binaries suitable for installation we recommend you build deb or rpm packages, or refer to the`ceph.spec.in` or `debian/rules` to see which configuration options arespecified for production builds.
可見編譯步驟走一遍是必要的遂铡,源碼可以玩起來了。
接下去make install就可以安裝了
參考: