Linux探索之旅 | 第四部分第五課:源碼編譯,安裝便利

1240

-- 簡書作者 謝恩銘 轉載請註明出處

內容簡介


  1. 第四部分第五課:源碼編譯,安裝便利
  2. 第四部分第六課預告:DNS和域名,一探究竟

源碼編譯,安裝便利


上一課 Linux探索之旅 | 第四部分第四課:分析網絡,隔離防火 比較難。

這一課相對輕鬆,畢竟快要跨年(2016-2017)了麼,新年怎麼能讓大家一個頭兩個大呢~ 小編怎麼可能這麼壞呢?小編是這樣的人嗎?(是啊 -_-#)。

之前的課程(Linux探索之旅 | 第二部分第七課:軟件安裝,如虎添翼)中,我們已經瞭解過在Ubuntu這個Linux的發行版下安裝軟件是何等方便,用apt-get這個工具可以輕鬆搞定。這種方式可以讓我們下載並安裝大部分的軟件。

其他Linux發行版也類似,一通百通。

但是,有些軟件並沒有包含在軟件倉庫中,那麼我們只能手動來安裝了,也就是隻能下載軟件的源代碼,編譯以生成可執行文件。

這個方式有時候會比較複雜。我們需要首先下載源代碼,下載下來的源碼通常是一個壓縮包,解壓壓縮包,然後配置,再編譯,再安裝。

希望這一課能讓大家把之前學的一些知識應用到實踐中,我們一步步來探究軟件的編譯。

首先嚐試找deb安裝包


首先,我們得聲明:
這一部分涉及到的軟件包安裝等知識點是基於Debian一族的Linux發行版,包括Ubuntu。

其他不是Debian一族的Linux發行版,例如Fedora,Redhat,CentOS,等等。其實安裝軟件的方式大同小異,就是每個Linux發行版之間所用的命令不一樣,軟件包的名稱有點區別罷了。

大部分Ubuntu下的軟件都可以在軟件倉庫中找到,你只要用apt-get命令就可以安裝它們。但是,有少部分比較新的或者還在開發中的或者還不是很有名的軟件,就沒有被收錄到軟件倉庫中,那你就不能用apt-get來獲取到了。

在這種情況下,事情會變得複雜一些。在Windows下面,要安裝某個軟件,我們很習慣於先去軟件的官網,然後下載.exe結尾的安裝文件。

然而,那些爲Linux系統編寫軟件的程序員卻一般不創建類似Windows下的那些安裝文件。爲什麼呢?難道是因爲Linux的程序員很懶惰嗎?

是的,Linux程序員是很懶惰。開玩笑啦。
其實是因爲Linux存在極爲多樣的發行版(比如Ubuntu,Fedora,CentOS,SUSE,等等),每個發行版又有不同版本號。而且又有不同的處理器種類(32位的和64位的CPU,ARM架構,Intel架構,等等)要適配,不像Windows因爲是微軟自己定義,沒有太多變數。
因此,要爲每種Linux創建一個安裝文件幾乎成了不可能的事。

當我們要找的軟件不在Ubuntu的軟件倉庫中時,我們可以試試去軟件的官方網站找後綴是.deb(deb是Debian的縮寫)的安裝包。.deb的安裝包只能用於Debian一族的操作系統,包括Ubuntu。而Redhat一族(包括Fedora)用的則是後綴爲.rpm(rpm是Redhat Package Manager的縮寫)的安裝包。

有個軟件可以幫忙將rpm安裝包轉換爲deb安裝包。這個軟件是alien(就是“外星人”的意思,哈哈):

# alien默認沒有安裝,所以首先要安裝它。
sudo apt-get install alien
# 將rpm轉換爲deb,完成後會生成一個同名的xxxx.deb。
sudo alien xxxx.rpm
# 安裝deb安裝包。注意,用alien轉換的deb包並不能保證100%順利安裝,所以可以找到deb最好直接用deb。
sudo dpkg -i xxxx.deb

如果你有幸直接在網上找到了軟件的deb安裝包,那麼下載下來,雙擊安裝包(或者用上面的命令行的形式:sudo dpkg -i xxxx.deb)來安裝即可。

然後一個窗口會彈出,問你是否確定安裝,選擇“安裝”。

如果安裝過程沒出錯,那很好。如果有錯誤,一般可能是因爲:

  • 也許你下載的deb安裝包不符合你的電腦環境。可能位數搞錯了,32位和64位有區別的。

  • 也許你沒有安裝那些依賴軟件。因爲apt-get工具會幫我們自動下載各種依賴軟件,所以不需要我們親自動手。但現在你需要自己動手安裝缺失的依賴軟件,可以根據提示信息,缺什麼就裝什麼。

假如實在找不到deb安裝包,那麼只能:獲取軟件的源代碼,然後“自行了斷”(哦,不是,是自行編譯)。

那下面我們就來看看如何從源代碼出發直到編譯安裝完成咯。

實在沒有其他方法,選擇編譯安裝


如果你要安裝的軟件既不在軟件倉庫裏,你在網上又找不到相應的deb安裝包的話,你就只能回到“石器時代”,用編譯源代碼的方式來安裝了。

什麼是編譯?


簡單來說,編譯就是將程序的源代碼轉換成可執行文件的過程。就好比我們做糕點,用到的原料(如雞蛋,麪粉等)等就是源代碼,而最終制成的蛋糕就是可執行文件。在這個比喻中,編譯就是製作蛋糕的過程。

假如複雜地說就說不完了。

大多數Linux的程序都是開放源碼的,我們可以比較輕易地獲取它們的源代碼,然後將其編譯成適合我們的電腦和操作系統屬性的可執行文件。

編譯安裝軟件的步驟根據軟件的不同有所區別。有些軟件的編譯安裝非常複雜,可能會讓你抓狂(特別是一些非標準,非主流的軟件),需要很多準備工作。

小編以前在自學嵌入式的過程中對此深有體會。

不過一般安裝手冊(一般是下載下來源代碼時附帶的README文本文件,read是英語“閱讀”的意思,me是英語“我”的賓語形式。所以read me就是“閱讀我”的意思)都會說明詳細的安裝步驟。

即使如此,有時還是會讓你比較頭大,只能解決一個個遇到的小錯誤。

沒辦法,誰讓程序員愛折騰呢,不折騰的人生有什麼意義,木啊哈哈。

一步步編譯程序


在編譯之前,你需要安裝編譯的工具。在Ubuntu下有一個方法可以一次性安裝跟編譯有關的工具,就是build-essential(build是“構建”或“編譯”的意思,essential是“必要的”的意思,顧名思義就是“進行構建/編譯所需的必要工具”),運行如下命令安裝:

sudo apt-get install build-essential

一句命令搞定,Linux之威武帥氣展露無遺。

Windows君基本已經哭暈在廁所~ (日常黑Windows任務又完成了,哈哈)。

安裝完編譯需要的基本工具,我們就可以開工了。

我們就用一個小軟件作爲例子來講解吧。這個軟件是htop。之前我們學過top命令,它可以查看電腦中運行的各種進程狀態,佔用多少內存,cpu用量等等,有點類似Windows中的任務管理器。htop就是類似於top的一個小軟件。

雖然htop這個軟件從apt-get中也可以安裝。但是我們爲了演示編譯安裝的過程,就拿它來“開刀”啦(可憐的htop)。

1240

之前寫這篇文章是htop最新版還是1.0.3版,今天(2016年12月17日)去官網看的時候最新版已經是2.0.2了,不過安裝過程是類似的。

點擊菜單中的 [Downloads],目前這個軟件的開發源代碼託管在Github上,Github的相關頁面:https://github.com/hishamhm/htop (可以上去看看,熟悉一下全球聞名的Github)

也可以閱讀我的以下三篇文章,順便學習一下Git和Github兩大超級厲害的生產力工具的使用:

雖然htop的源碼託管在Github上,但其穩定的發佈版本不是放在Github上,而是以tar.gz的壓縮包格式存放在:

http://hisham.hm/htop/releases

http://hisham.hm/htop/releases/1.0.3/

  • 下載以下文件
htop-1.0.3.tar.gz
tar zxvf htop-1.0.3.tar.gz

解壓後生成了htop-1.0.3這個目錄。

  • 然後進入目錄中:
cd htop-1.0.3

假如用ls命令來列出文件,你會發現有好多,不要怕。我們並不需要在意這些細節...

在衆多文件中,我們對一個文件比較感興趣:

configure

configure是英語“配置”的意思,顧名思義就是爲軟件的編譯做一些配置和準備工作。

  • 我們運行它:
./configure

configure這個程序會分析你的電腦,確認是否編譯所必須的所有工具都安裝了。它的執行需要些時間,因爲要做不少檢測。

結果檢測出現了錯誤:

1240

錯誤是:

沒有找到 -lncursesw

提示信息是:

error: You may want to use --disable-unicode or install libncursesw

意思是:“出錯啦:你也許想要用 --disable-unicode 參數 或者 安裝libncursesw”。

  • 首先小編到網上去找了安裝libncursesw的方法,都不行。所以爲了快速起見,就不折騰了。直接用第一個建議:用 --disable-unicode 參數。

  • 重新運行configure(加上 --disable-unicode 參數):

./configure --disable-unicode

這會沒錯誤了。

  • 然後我們就可以開始編譯了。用make命令:
make

也沒錯誤,編譯完成。

  • 最後一步用make install命令來安裝 (需要加上sudo以用root權限來安裝軟件):
sudo make install
  • 沒有問題。安裝完成。然後運行htop軟件試試:
htop
1240
  • 大功告成,收工~

下一課會比較難,內容也會很多。我們來好好探究一下IP地址,域名和DNS域名解析系統的來龍去脈。

總結


  1. 大多數Linux發行版的軟件都可以用包管理工具apt-get來安裝(對於Debian一族)。

  2. 有些軟件不能通過apt-get來安裝,因爲沒有被收錄到Ubuntu的軟件倉庫中。在這種情況下,我們可以試着在網上找軟件的deb安裝包。

  3. 假如前兩種方法都不行,我們只能選擇從源代碼編譯安裝的方法。一般通用的步驟如下:

    1 從網上下載程序的源代碼(通常被打包壓縮爲 .tar.gz 的格式)。

    2 解壓壓縮包(tar zxvf xxx.tar.gz)。

    3 運行解壓之後的文件夾裏的configure文件: ./configure。

    4 運行make來編譯。

    5 運行sudo make install完成安裝。

第四部分第六課預告


今天的課就到這裏,一起加油吧!

下一課我們學習:DNS和域名,一探究竟


我是謝恩銘,在法國巴黎奮鬥的嵌入式軟件工程師。
目前工作是Android嵌入式和app開發。
熱愛生活, 喜歡游泳,略懂烹飪。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章