工作|ARM64架構環(huán)境安裝RPM包常見問題匯總
一 ARM架構安裝RPM包思路
服務器市場X86架構系統(tǒng)一家獨大,很多功能包的RPM包在官網幾乎只有X86架構的,找不到ARM64架構,但你需要在ARM64架構系統(tǒng)用該功能,怎么辦呢?
遇到這種場景,解決的辦法有兩個:
1 下載源碼到ARM64環(huán)境編譯
2 下載現(xiàn)有ARM64架構的RPM包安裝同時解決安裝依賴
讀者可能會疑惑,你不是說官網幾乎沒有ARM64架構的包嗎?我要去哪里尋找呢?
推薦四個找RPM包的網址(前兩個專門做RPM包的收集),絕大部分的RPM包都可以找到:
1 http://rpmfind.net
2 http://rpm.pbone.net/index.php3
3 https://build.opensuse.org/
4 https://mirrors.huaweicloud.com/euler/2.3/os/aarch64/Packages/
5 src.fedoraproject.org
6 https://kojipkgs.fedoraproject.org//packages/包名/
說明,opensuse網站的build頁面里面有很多公開的編譯工程,如果要下載編譯好的包或者源碼包,請讀者務必注冊賬戶。
有了上面三個尋找RPM包的網址,我們接著說在ARM64架構系統(tǒng)安裝RPM包吧。由源碼編譯和解決安裝依賴兩個思路又可以演變出下面四條可能的解決路勁:
第一,源碼+源碼
第二,依賴包+源碼
第三,依賴包+依賴包
第四,源碼+依賴包
下面我來一一解釋上面四條路勁的含義。
第一條,比如你想要安裝的RPM包叫做A,你下載了A包的源碼到centos 7.5 ARM64系統(tǒng)上,編譯時發(fā)現(xiàn)依賴了B包(現(xiàn)實的情況通常是依賴許多包,如果只有一個依賴包,請記得感恩_),這里又要分兩種情況了。
一,源碼來源是github或者官網,且github提供了匹配的spec文件,那么從rpmfind網址找到對應的RPM包來安裝(安裝過程很有可能會依賴C包,如果C包是個基礎包,比如glibc,那就別走這條路了,這是條死路-_-||,趕緊下載源碼去吧,然后重復上面的過程);
二,如果github或者官網只有源碼沒有spec文件,請移步opensuse找對應的spec文件(注意,opensuse里面的spec很大可能與你的源碼包不那么完美的匹配,需要一邊編譯,一邊修改適配)。
說明,當然最完美的情況是你找到了對應版本的src包,即源碼的RPM包。那下載到本地環(huán)境,先安裝再編譯。
rpm -ivh xxxx.src.rpm
cd /root/rpmbuild/SPEC/
rpmbuild -ba b.spec
運氣好的話會編譯通過。
第二,拿rabbitmq這個包來舉例,安裝rabbitmq時只有一個依賴包erlang,看到這個解決我是欣喜的,然而在安裝erlang的過程耗盡了我的欣喜。erlang官網提供的包安裝后存在大量的依賴包,有的可以通過yum安裝,有的需要從網上下載,最后發(fā)現(xiàn)依賴到高版本的glibc了,哎,又是一堵南墻-_-||
下載源碼編譯,編譯報錯太多,最后竟然發(fā)現(xiàn)github的rabbitmq代碼庫自帶了erlang的源碼,下載后編譯,安裝解決。該erlang源碼沒有任何功能,就是解決rabbitmq包依賴用的,可以想象一定是有人踩過的坑,致敬先輩O
第三,第四也是差不多的意思。
總結一下,就是安裝現(xiàn)有包解決依賴和源碼包編譯兩條路交叉靈活應用,千萬不可在南墻躺尸,要記得回頭!
二 常見問題匯總
問題一,github下載源碼后,發(fā)現(xiàn)找不到對應的spec文件。
解決方法:官網有X86架構的RPM包嗎?有的話一定存在spec文件,只是spec文件沒有上傳spec文件而已。那么去opensuse網站搜索RPM包名,比如nginx,搜到非常多工程,找到opensuse等非個人的工程,查看spec文件版本,盡量取版本一致的spec文件到本地。很可能編譯中會有些錯誤,比如nginx編譯時就存在require(pre)依賴的問題,查看其他工程的spec,沒有該依賴,就把require(pre)相關的行注釋,重新編譯即可。
問題二,tesseract源碼下載后,make報錯,一般代碼本身的問題不建議去修改,尤其是開源代碼。
解決方法:換版本,直到找到可用的版本。這種方法雖然好時,但比解決代碼本身問題保險,就怕你改了代碼到時功能不可用。(架構差異導致的代碼編譯問題除外)
問題三,nginx包單獨執(zhí)行./configure沒有報錯,rpmbuild卻在configure時報錯
解決方法:報錯信息是perl工具包版本信息及模塊信息,大意是找不到perl 5.3.6版本,下一句是找不到Embl模塊。嘗試單獨執(zhí)行./configure,沒有錯誤,還是懷疑spec文件。但spec文件中并沒有該依賴。去論壇(CSDN等)找到相同的問題,原來是少了一個RPM包。而報錯信息卻沒有明確指出來到底少了哪個包。這個問題主要需要掌握的能力是混論壇的能力。
問題四,GeIP包是某個包的依賴包,而它依賴的包要求perl的版本與當前環(huán)境不匹配文章來源:http://www.zghlxwxcb.cn/news/detail-732834.html
解決方法:當前的perl版本是5.16.3,所以要找到依賴該版本的perl包的GeIP包,而該包在網上存在近400+個。如何找?耐心和細心在這里就起作用了,二分法按照年月來找,嘗試。總能找到的。文章來源地址http://www.zghlxwxcb.cn/news/detail-732834.html
到了這里,關于ARM64架構環(huán)境安裝RPM包常見問題匯總的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!