天天看點

源碼包與RPM包的差別

這篇文章都以apache的安裝為例

一、差別

    1、安裝前:概念上不同。

        1.1、rpm包是二進制包,源碼包其實就是我們能認識的c語言檔案。

    2、安裝後:安裝位置的不同

        1.1、rpm包安裝位置是安裝在多個位置,這不是由安裝人決定的,而是由rpm包的作者決定的。

    3、其他

        3.1、rpm包安裝後通路效率較低,源碼包通路效率高。是以安裝通路量大的服務的時候建議使用源碼包安裝,apache就強烈建議使用源碼包安裝。

        3.2、rpm雖然也可以指定位置,但是不建議指定位置安裝rpm包,因為安裝之後系統找不到指令,就不可以用rpm的指令來啟動和關閉了。

二、啟動與停止

1、rpm

啟動服務:  1、使用絕對路徑方式啟動:/etc/rc.d/init.d/httpd start  (linux标準啟動方法)

                2、service httpd start  (redhat系列專有指令)

停止服務:service httpd stop

2、源碼包

    2.1、啟動服務:  /usr/local/apache2/bin/apachectl start

    2.2、怎麼知道這個啟動指令的?

            進入源碼包目錄,在這個目錄下有一個install檔案,打開檔案可以發現安裝和啟動方法。

三、源碼包安裝位置

    1、預設安裝位置:/usr/local/軟體名/

    2、啟動方法:/usr/local/apache2/bin/apachectl start

    3、源碼包儲存位置:/usr/local/src/

四、安裝

    1、./configure 軟體配置與檢查(進入解壓縮目錄後都會有configure這個指令)

        1.1、定義需要的功能選項

        1.2、檢測系統環境是否符合安裝要求

        1.3、把定義好的功能選項和檢測環境系統資訊都寫入makefile檔案,用于後續的編輯

        說明:a、每個源碼包都會有configure指令,就算極個别沒有這個指令也會用其他的指令取代

                 b、執行過./configure之後,會生成makefile檔案,make和make install都是依賴這個檔案進行編譯安裝的,

        此處安裝假設: ./configure --prefix=/usr/local/apache2/

    2、make:編譯

        2.1、将源碼包翻譯成機器能識别的語言

        2.2、一旦編譯出錯,可使用make clean,清除之前的編譯。

        說明:這一步執行時間一般是最長的。

    3、make install

        3.1、真正進行安裝

        3.2、一旦這一步報錯,那要執行兩步:

                1、make clean

                2、直接删除/usr/local/apache2/這個目錄即可。

五、解除安裝

        1、源碼包解除安裝:直接删除安裝目錄即可,不會殘留任何垃圾。

        2、rpm包解除安裝:rpm -e 軟體名

僅供參考。

這篇文章是考慮是最簡單的情況,部落客講的很清晰。網上的文章褒貶不一。

 建議在安裝線上的生産伺服器軟體包時都用源碼安裝,這是因為源碼安裝可以自行調整編譯參數,最大化地定制安裝結果。這裡以mysql 5線上環境的編譯安裝來說明之,其編譯參數如下所示:

./configure -prefix=/usr/local/mysql -without-debug  

-without-bench -enable-thread-safe-client -enable-assembler -enable-profiling 

-with-mysqld-ldflags=-all-static -with-client-ldflags=-all-static 

-with-charset=latin1 -with-extra-charset=utf8,gbk -with-innodb -with-csv-storage-engine 

-with-federated-storage-engine -with-mysqld-user=mysql-without-embedded-server 

-with-server-suffix=-community -with-unix-socket-path=/usr/local/mysql/sock/mysql.sock 

&& make && make install

在安裝mysql時,源碼安裝與rpm安裝相較,其特點如下:

我們可以針對自己的硬體平台選用合适的編譯器來優化編譯後的二進制代碼。

根據不同的軟體平台環境調整相關的編譯參數(源碼安裝不僅适用于rhel/centos,其他系統像freebsd、solaris、ubuntu等一樣适用)。

可針對特定的應用場景選擇需要什麼元件或不需要什麼元件。

同一台主機上可以安裝多個mysql(rpm安裝則僅能安裝一個mysql)。

根據需要存儲的資料内容選擇隻安裝需要的字元集。

理論上源碼靜态編譯方式安裝效率會高一點,但到底比rpm方式高多少得看具體情況,一般在5%左右。

某次線上上環境工作,我用yum解除安裝一個軟體包時遇到了極其危險的情況,這裡也跟大家分享一下:當時,yum remove自動解除安裝了許多這個軟體包自身依賴的系統包,導緻系統崩潰了,ssh不能登入,并且scp及rsync也都不能用了,幸虧ftp指令還能用, 是以資料很快被ftp傳到其他伺服器上了,但系統已經徹底崩潰,隻有重裝了。如果是源碼安裝的軟體包就沒有這種危險,需要解除安裝時隻需要删除軟體包安裝的目 錄即可。

綜上所述,源碼安裝的好處如下:

最大的好處就是可以自行調整編譯參數,最大化地定制安裝結果。

源碼安裝可以選擇最新的軟體包,而linux系統(包括freebsd)自帶的軟體包一般都是最穩定的版本,但不能保證是最新的。

相對而言,源碼安裝的性能是最優異的。

源碼包安裝的軟體解除安裝時極為友善和簡單,更重要的是,它比較安全,尤其是對線上的生産環境而言。

遷徙也比較友善,如果不涉及系統庫檔案,複制到另一台機器上也可以使用。

這裡也簡單介紹一下在linux/unix下安裝軟體的源碼三部曲,在後面我們會經常看到它們的身影。

./configure  

make  

make install 

./configure是用來檢查環境變量及配置編譯選項的,make是用來将源代碼編譯成二進制檔案的,而make install則會将make編譯出來的檔案安裝到指定位置(或預設位置)。

在本節中,我們從伺服器的硬體選擇、安裝及核心等方面對單機伺服器的性能進行了優化,不過對于網站和系統來說,單機優化對整體性能提升的作用畢竟有限,整體性能提升主要靠伺服器的高可用和高擴充性來實作,這部分内容在後面的章節中再來說明。

繼續閱讀