標籤:

Cent OS6裝gcc-4.8和php-7真很tough嗎?

前幾天看到 @傅立葉 有人這麼吐槽

為什麼老版 Linux 安裝新軟體這麼麻煩?www.zhihu.com圖標

肯定會有些人嘲諷我水平不夠,但是網上一搜,痛苦的人也不在少數,我也不算最差的吧,中位吧。(懷疑我中位的嘲諷的大咖,希望可以裝一個centos6 32位的虛擬機實踐操作一下,搞得出來給我個教程,搞不出來就互相安慰一下吧)

只是想要一個gcc-4.8和php-7,都是很常見的軟體,cent os也是很主流的系統,雖說6.0老了點,可畢竟也還在擴展支持周期中,真像他說的那麼麻煩嗎?我決定動手驗證一下。

Cent OS 6.0的iso是找不到了,各大mirror都是6的最新版6.9,6.X只是在6.0的基礎上做一些bug修復和安全更新,除了firefox這樣極少數幾個軟體有版本更新,其它軟體應該跟6.0沒有版本區別。所以我找來了32位的Cent OS 6.9,下載了CentOS-6.9-i386-minimal.iso,理論上對實驗結果不會有明顯的影響。

我知道可以添加一些第三方的yum倉庫,或者使用scl提供的倉庫,可以用yum一鍵安裝,但是那樣就跟原文作者的方法不同了,對比的意義就比較小了。所以只用默認yum倉庫,官方倉庫里沒有的都自己編譯。

先打開虛擬機安裝了系統,果然很minimal,gcc和wget都沒有,yum裝之

yum install gcc gcc-c++ wgetn

然後下載了一份gcc-4.8.5和php-7.1.13的源碼開始裝起來

先安裝gcc-4.8,configure的時候提示缺少gmp, mpfr和mpc 3個開發包,前兩個yum庫里有,直接yum裝上

yum install gmp-devel mpfr-develn

但是mpc這個包沒有,打開不存在的搜索引擎找到官網,下載編譯安裝,一氣呵成。

然後再配置gcc編譯選項的時候就不報錯了,為了節省時間,只配置了c和c++編譯器,並且禁用了multilib。

./configure --enable-languages=c,c++ --disable-multilibnmake -j2nmake installn

本以為會這樣一氣呵成,半路上報錯了,打開log,發現是找不到libmpc.so.2,ls確認了libmpc.so.2是存在的,用ldconfig -p看了一下果然沒有,懷疑是/usr/local/lib不在ld.so的配置路徑里,加進去之後用ldconfig重新生成了一遍cache,然後就好了。

接下來就是真的一氣呵成的把gcc-4.8給安裝好了。檢查一下版本

gcc -vnUsing built-in specs.nCOLLECT_GCC=gccnCOLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.8.5/lto-wrappernTarget: i686-pc-linux-gnunConfigured with: ./configure --enable-languages=c,c++ --disable-multilibnThread model: posixngcc version 4.8.5 (GCC) n

接下來安裝PHP-7,又報依賴錯誤,來都來了,裝一個咯

yum install libxml2-develn

然後就是一氣呵成的裝上了,一定要做CC和CXX的設置,不然還會調用舊版本gcc編譯。

export CC=gccnexport CXX=g++n./configurenmake -j2nmake installn

檢查一下PHP的版本

php -vnPHP 7.1.13 (cli) (built: Jan 7 2018 22:32:43) ( NTS )nCopyright (c) 1997-2017 The PHP GroupnZend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologiesnnstrings /usr/local/bin/php | grep gccnCOMPILER=gcc-4.8.5n

從找安裝iso開始算,到安裝完成,以及這篇流水帳寫在當前這一行,總共花了小2個小時。


我比較熟悉debian系的Linux,紅帽系的完全不熟,yum和rpm命令每次都是用到的時候現查,如果在Debian或者Ubuntu下編譯安裝,我可以先用build-dep把編譯時依賴的開發庫先裝個八九成,剩下的高版本源碼引入的新依賴,再手動安裝。yum里同樣可以用類似的命令,列出低版本的依賴,節省掉一些configure的時間。

原作者所說的「各種依賴各種error」和「離譜的是gcc安裝依賴gcc」,除了編譯耗時外,block我超過5分鐘的事情,一個都沒有。4個依賴的包,3個在官方yum倉庫里自帶,另一個屬於憑本事送的人頭(零依賴)。

原作者水平算不算中位數,我不知道,沒法衡量,我不知道大家的水平分布,姑且把他看作是裝系統運氣比較差的人,喜歡跟開發環境鬥爭的人。我在工作中遇到過很多個運氣差的人,同樣的路徑做下來,其他同事都好好的,他們就是會報錯,有各種你意想不到的原因。隨手列舉一些出來。

  • GBK編碼
  • BOM頭
  • 使用rn換行
  • 文件名大小寫敏感性
  • 中文文件名,或者帶特殊字元
  • Windows用戶名帶空格
  • 喜歡堅守老系統,且從不更新
  • 喜歡看博客,不看官網文檔
  • 複製粘貼命令,從不理解後做微調
  • ......

正是這一個個壞習慣,讓他們在工作中的運氣變得比一般人更差,經常需要更多的時間跟環境做鬥爭,甚至把一些錯錯得對的錯誤的方法當作經驗和心得,分不清副作用和實際療效。


6.0雖然不再支持,但是從6.0升級到6.9是可以一鍵完成的,yum upgrade會幫你弄好

非要堅持6.0不升級,也不是不行,yum照用,公共mirror是沒有了,但是歸檔還是找得到的,自己搭一個舊版本專用的私有mirror很費勁嗎?

http://vault.centos.org/readme.txtvault.centos.org

就算完全不用yum,mpfr和gmp這種非常輕度的依賴庫,自己編譯一個很花時間嗎,我不覺得有什麼困難。即使照著lfs,從零開始bootstrap起一個系統也不是多困難的事,搞定Cent OS 6.0沒什麼難度吧。


推薦閱讀:

2017 年 Linux 的五大痛點
如何在最短時間內掌握Linux精髓?
我的Linux手冊
做linux kernel相關研究的如何創(zhuan)業(qian)?
Linux運維工程師必備的80個監控工具全集

TAG:Linux | CentOS | PHP |