-- 簡書作者 謝恩銘 轉載請註明出處
內容簡介
- 第四部分第五課:源碼編譯,安裝便利
- 第四部分第六課預告: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)。
- 第一步去軟件的官網:http://hisham.hm/htop/
之前寫這篇文章是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
- 我們進入穩定版:1.0.3版的目錄(你當然可以去2.0.2的目錄http://hisham.hm/htop/releases/2.0.2/ )
http://hisham.hm/htop/releases/1.0.3/
- 下載以下文件
htop-1.0.3.tar.gz
- 下載之後,我們用之前學過(Linux探索之旅 | 第四部分第一課:壓縮文件,解壓無壓力)的解壓方法解壓之:
tar zxvf htop-1.0.3.tar.gz
解壓後生成了htop-1.0.3這個目錄。
- 然後進入目錄中:
cd htop-1.0.3
假如用ls命令來列出文件,你會發現有好多,不要怕。我們並不需要在意這些細節...
在衆多文件中,我們對一個文件比較感興趣:
configure
configure是英語“配置”的意思,顧名思義就是爲軟件的編譯做一些配置和準備工作。
- 我們運行它:
./configure
configure這個程序會分析你的電腦,確認是否編譯所必須的所有工具都安裝了。它的執行需要些時間,因爲要做不少檢測。
結果檢測出現了錯誤:
錯誤是:
沒有找到 -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
- 大功告成,收工~
下一課會比較難,內容也會很多。我們來好好探究一下IP地址,域名和DNS域名解析系統的來龍去脈。
總結
-
大多數Linux發行版的軟件都可以用包管理工具apt-get來安裝(對於Debian一族)。
-
有些軟件不能通過apt-get來安裝,因爲沒有被收錄到Ubuntu的軟件倉庫中。在這種情況下,我們可以試着在網上找軟件的deb安裝包。
-
假如前兩種方法都不行,我們只能選擇從源代碼編譯安裝的方法。一般通用的步驟如下:
1 從網上下載程序的源代碼(通常被打包壓縮爲 .tar.gz 的格式)。
2 解壓壓縮包(tar zxvf xxx.tar.gz)。
3 運行解壓之後的文件夾裏的configure文件: ./configure。
4 運行make來編譯。
5 運行sudo make install完成安裝。
第四部分第六課預告
今天的課就到這裏,一起加油吧!
下一課我們學習:DNS和域名,一探究竟
我是謝恩銘,在法國巴黎奮鬥的嵌入式軟件工程師。
目前工作是Android嵌入式和app開發。
熱愛生活, 喜歡游泳,略懂烹飪。