| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-24 0:07:33
|
原提問見: http://bbs.chinaunix.net/forum/viewtopic.php?t=608443 題目為: 请问rpm包与tar包到底有何区别??
------------------------------------------
要了解 tarball 與 rpm 的差別, 不妨先從軟件的產生開始談吧.
簡單來說, 現今的電腦, 之所以能運作, 是因為它會處理 0 跟 1 , 但問題卻也是只能處理 0 跟 1 . 因此, 要讓電腦能執行的軟體程式, 必需以 0 跟 1 的二進位(binary)格式出現, 我們稱之為---執行碼(executable). 而且, 不同的 CPU 所執行的格式都不盡相同, 我們稱之為硬件平台(platform). 以個人電腦來說, 最常見的硬件平台多是 Intel 公司設計(或兼容)的 CPU, 常稱為 i386 或 x86 .
然而, 二進位格式卻造成程式設計師撰寫程式的難度太高了! (呵, 別懷疑, 早期的確如此~~) 聰明的人們, 於是選用了別種較為易懂的方式來轉寫, 也就是我們常說的"程式語言"了. 我們稱這些寫用程式語言撰寫的代碼為---源代碼(source code).程式語言很多, 在 Unix/Linux 世界裡, C 語言是最傳統也最常用的程式語言.
在這基礎上, 我們需知道如下事實: 1) 我們可用的程式語言很多種. 2) 可供執行的硬件平台也很多種. 3) 用程式語言寫好的源代碼並不會自動變成二進位格式. 這就是"編譯器(compiler)"上場的時候了. 換句話來說: --- 寫好的源代碼必須針對不同的硬件平台進行編譯才能能產生執行碼. 不同語言的源代碼及不同硬件平台均需要不同的編譯器來執行這項工作. 要是你用 C 來寫源代碼的話, 那最常見的編譯器就是 C Compiler, 簡稱為 cc . 然而 cc 也有很多不同的版本, 功能效能及作業平台或有所不同. Linux 最常見的就是 GNU 的 C Compiler, 簡稱為 gcc .
當你寫好 c code, 同時裝好了 gcc, 那你就可執行 gcc 編譯出執行碼. 然後, 再將編好的執行碼複制到相關路逕, 人們便可在這台機器上執行該程式了. 我這裡暫不介紹如何寫 C 代碼, 也不介紹怎麼跑 gcc, 有待大家自己學習. 事實上, 越複雜的程式, 代碼越長, 也越難設計與為護, 而 gcc 可選用的參數也越多. 我這裡也暫時不介紹函式庫(library)的概念了, 但其實這方面還可大書特書的. 我非常建議讀者搞懂函式庫的概念, 尤其是靜態(static)與動態(dynamic)函式調用方式的差別. 因為這會扯上執行環境的依賴性及程式的移植性, 也就是所謂的---軟件依存關系(dependence). 嗯, 還是先請大家自己琢磨吧, 要是日後有機會的話, 再回來跟大家介紹好了.
到此為止, 相信大家已經知道軟件是怎麼蹦出來的了! 然而, 如下問題, 請大家不妨老實作答: 1) 你會寫源代碼嗎? 2) 你會得執行 gcc 及相關參數嗎? (呵... 坦白講, 我就不很懂了!) 而且, 就算你懂了, 那: 3) 你願意每次安裝軟件都敲上百行的 gcc 命令嗎? (呵... 同樣的, 我也不願意!) 將心比心, 那些普通電腦使用者呢? 他們又作何感想呢? 難道擁抱軟件非要如此折騰不可?
這裡, 請你先記著這句話: --- 軟件之所以進步, 就是因為人們會隨時隨地將存在的問題解決掉! 前面提及的, 從二進位撰寫改為從源代碼撰寫, 就是一個很了不起的進步. 更別提古老的"打孔卡"年代了! 然而, 這進步是不夠的... 人們並不滿足啊~~~ 於是, 就有了 make 這個程式出現了. 簡單而言, make 就是讀入一份預先編寫好的 Makefile, 然後自動的幫我們完成所有的編譯工作. 具體的 Makefile 格式, 我這裡也暫時略過, 還是留給大家自行學習. (我這裡只想講概念) 能理解 Makefile 帶來的進步很重要, 因為後面提到的 rpm spec 也是源於相同的理念. 從此, 我們只需跑幾個簡單的 make 指令, 就能代替過往上百成千行的 gcc 命令了!
what a wonderful thing! okay, 不得不承認 Makefile 曾經為人們帶來過一段時間的滿意.
it's good, but not good enough! 還有啥不滿足呢? 隨著電腦的普及, 軟件的散播速度也大大的提高了. 且, 面臨的各種不同的執行環境差異也越來越廣. 人們慢慢發現: 單一的 Makefile 沒法滿足所有環境的需求!
怎麼辦? 呵.... 回到前面的老話: --- 軟件之所以進步, 就是因為人們會隨時隨地將存在的問題解決掉! 於是, 聰明的人們, 開始撰寫一些環境偵查工具, 大多是一些 script 語言(shell, perl 等等), 讓使用者可以先執行之, 然後按不同的偵查結果自動修改 Makefile. 同時, 用心的作者, 還允許使用者透過各種參數, 來指定特殊的需求.
yeah... perfect?! Nooooooooooooooot yet!! 又怎了? 唉呀, 親愛的朋友啊, 要是我不講, 你怎知道原來還可以這樣玩呢? 更何況那些快快樂樂只想跑應用的普通用戶呢?! 就算我這樣講, 對他們來說, 還是一頭霧水啊~~~
don't worry! --- 軟件之所以進步, 就是因為人們會隨時隨地將存在的問題解決掉! 於是, 作者一不做二不休, 乾脆將所有步驟及可能的環境需求與操作, 寫成文檔, 讓使用者慢慢讀就是了. 這, 就是 README, INSTALL 這類文檔存在的意意了!
呵... 到這裡, 你是否豁然開朗了? 原來, 我們之前常看到人們裝軟件都是如此跑的: 1) less README INSTALL 2) ./configure 3) make 4) make install 只要你能理解前面所講的, 那, 你就能了解為何都是這幾個步驟了... ^_^ 這, 就是人們常說的"源代碼安裝"方式了, 或稱為 tarball . (嗯, tarball 其實還要扯上 tar 與 gzip/gunzip 等程式, 我這裡也暫時不談了.)
然而, 問題真的解決了嗎? 你以為真的從此就天下太平了嗎? 若你認為滿足的話, 那我再來問你幾個問題: 1) 你知道系統一共裝了哪些軟件嗎? 2) 它們是誰提供的? 版本為何? 3) 你知道剛剛裝的軟件裝哪去了? 4) 你知道自從安裝後, 有哪些文件被修改過? 5) 這個軟件要依存哪些其他軟件嗎? 6) 又有哪些軟件依存你這個軟件呢? 7) 你可以放心的移除它或升級它嗎? 8) 你知道其他夥伴又裝了哪些改了哪些嗎? 9) 你知道這每一台機器的軟件狀況嗎? 9) 若你要將職務交接給別人, 你能交代清楚嗎? 10) 要是你從別人接管過來呢? 等等又等等.... 這些一直以來都是軟件管理上必答的問題. 然而, 你的答案又有幾多呢?! 別跟我說, 你可以耍賴不答哦. 要是你自己的系統, 隨便你怎搞都行. 但, 要是你是每月都領別人薪水的話, 這些基本問題答不出來, 你還好意思拿? 你還有臉說要加薪?
嗯???? 你在冒冷汗了嗎? 朋友? 呵... 不用内疚啦, 不只是你, 很多人都碰到同樣的問題啊... --- 軟件之所以進步, 就是因為人們會隨時隨地將存在的問題解決掉! 那, 請問, 接下來, 換作是你的話, 怎麼解決上述那些問題? 1) 用腦記? 2) 用筆寫? 3) 請秘書? 4) 置之不理? 呵... 朋友, 別忘了你是個聰明的 IT 專業人員哦~~~
[1] [2] [3] 下一页
|