Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29955140
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-10-01 21:31:06

linux中的tarball

学习时间:2010-10-1

1、 相关背景知识介绍

1.        GPL,是General Public License的缩写,是一份GNU通用公共授权非正式的中文翻译。它并非由自由软件基金会所发表,亦非使用GNU通用公共授权的软件的法定发布条款只有GNU通用公共授权英文原文的版本始具有此等效力。

2.        大多数决意剥夺你的共享和修改软件的自由。对比之下,GNU通用公共许可证力图保证你的共享和修改自由软件的自由。——保证自由软件对所有用户是自由的。GPL适用于大多数自由软件基金会的软件,以及由使用这些软件而承担义务的作者所开发的软件。(自由软件基金会的其他一些软件受GNU库通用许可证的保护)。你也可以将它用到你的程序中。当我们谈到自由软件(free software)时,我们指的是自由而不是价格。

3.        Linux 上面的軟體幾乎都是經過 GPL 的授權,所以每個軟體幾乎均提供原始程式碼, 並且你可以自行修改該程式碼,以符合你個人的需求呢(比如我们可以对Linux内核进行裁剪对mysql修改其内核代码再编译。因为它们都是经GPL授权的是提供源代码并且能够被人们去个性修改)

 

2、   什么是开放源码、编译器与可执行文件

2.1 LINUX上真正能够被执行的是二进制位如/usr/bin/passwd

2.2 检测一个文件是否是二进制文件的方法

[root@localhost ~]# file /bin/bash

/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Lin

ux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

[root@localhost ~]# file /etc/init.d/syslog

/etc/init.d/syslog: Bourne-Again shell script text executable

#如果是binary而且是可执行的话就会显示ELF 32bit LSB之类的提示

#如果是一般的script那就会提示text executables之类的

 

2.3      相关术语

開放源碼:就是程式碼,寫給人類看的程式語言,但機器並不認識,所以無法執行;(.c

編譯器:將程式碼轉譯成為機器看的懂得語言,就類似翻譯者的角色;(gcc)

可執行檔:經過編譯器變成二進位程式後,機器看的懂所以可以執行的檔案。(.o)

3、介绍makeconfigure

當執行 make 時,make 會在當時的目錄下搜尋 Makefile (or makefile) 這個文字檔,而 Makefile 裡面則記錄了原始碼如何編譯的詳細資訊 make 會自動的判別原始碼是否經過變動了,而自動更新執行檔,是軟體工程師相當好用的一個輔助工具呢!

咦!make 是一支程式,會去找 Makefile ,那 Makefile 怎麼寫? 通常軟體開發商都會寫一支偵測程式來偵測使用者的作業環境, 以及該作業環境是否有軟體開發商所需要的其他功能,該偵測程式偵測完畢後,就會主動的建立這個 Makefile 的規則檔案啦!通常這支偵測程式的檔名為 configure 或者是 config

 

由於不同的 Linux distribution 的函式庫檔案所放置的路徑,或者是函式庫的檔名訂定, 或者是預設安裝的編譯器,以及核心的版本都不相同,因此理論上,妳無法在 CentOS 5.x 上面編譯出 binary program 後,還將他拿到 SuSE 上面執行,這個動作通常是不可能成功的! 因為呼叫的目標函式庫位置可能不同 (參考) 核心版本更不可能相同!所以能夠執行的情況是微乎其微!所以同一套軟體要在不同的平台上面執行時, 必須要重複編譯!所以才需要原始碼嘛!瞭解乎!

 

(这个makefile文件的话其实是软件开发厂商们依据不同的环境进行了编译测试好了没有问题了就生成了这么一段文件,所以为什么同一个软件会有不同OS的发行版了。)

 

4、什么是Tarball的软件

         所謂的原始程式碼,其實就是一些寫滿了程式碼的純文字檔案。將這些原始碼透過檔案的打包與壓縮技術來將檔案的數量與容量減小, 不但讓使用者容易下載,軟體開發商的網站頻寬也能夠節省很多很多啊!這就是 Tarball 檔案的由來囉!

个人笔记:Tarball其实就是把这些原始程序文件压缩进来。

所謂的 Tarball 檔案,其實就是將軟體的所有原始碼檔案先以 打包,然後再以壓縮技術來壓縮,通常最常見的就是以 來壓縮了。因為利用了 tar gzip 的功能,所以 tarball 檔案一般的副檔名就會寫成 *.tar.gz 或者是簡寫為 *.tgz 囉!不過,近來由於 的壓縮率較佳,所以 Tarball 漸漸的以 bzip2 的壓縮技術來取代 gzip 囉!因此檔名也會變成 *.tar.bz2 之類的哩。所以說, Tarball 是一個軟體包, 妳將他解壓縮之後,裡面的檔案通常就會有:

·         原始程式碼檔案;

·         偵測程式檔案 (可能是 configure config 等檔名)

·         本軟體的簡易說明與安裝說明 (INSTALL README)

其中最重要的是那個 INSTALL 或者是 README 這兩個檔案,通常你只要能夠參考這兩個檔案, Tarball 軟體的安裝是很簡單的啦!我們在後面的章節會再繼續介紹 Tarball 這個玩意兒。

5Tarball的管理建议

其實 Tarball 的安裝是可以跨平台的,因為C 語言的程式碼在各個平台上面是可以共通的 只是需要的編譯器可能並不相同而已。例如 Linux 上面用 gcc Windows 上面也有相關的 C 編譯器啊~所以呢,同樣的一組原始碼,既可以在 CentOS Linux 上面編譯,也可以在 SuSE Linux 上面編譯,當然,也可以在大部分的 Unix 平台上面編譯成功的!

 

如果萬一沒有編譯成功怎麼辦?很簡單啊,透過修改小部分的程式碼 (通常是因為很小部分的異動而已) 就可以進行跨平台的移植了!也就是說,剛剛我們在 Linux 底下寫的程式『理論上,是可以在 Windows 上面編譯的!』這就是原始碼的好處啦!所以說,如果朋友們想要學習程式語言的話, 鳥哥個人是比較建議學習『具有跨平台能力的程式語言』,例如 C 就是很不錯的一個!

 

PS:你就不要写C#这样的东西了。不跨平台了!

 

6tarball经典安装步骤

  1. ./configure
    這個步驟就是在建立 Makefile 這個檔案囉!通常程式開發者會寫一支 scripts 來檢查你的 Linux 系統、相關的軟體屬性等等,這個步驟相當的重要, 因為未來你的安裝資訊都是這一步驟內完成的!另外,這個步驟的相關資訊應該要參考一下該目錄下的 README INSTALL 相關的檔案!
  2. make clean
    make
    會讀取 Makefile 中關於 clean 的工作。這個步驟不一定會有,但是希望執行一下,因為他可以去除目標檔案!因為誰也不確定原始碼裡面到底有沒有包含上次編譯過的目標檔案 (*.o) 存在,所以當然還是清除一下比較妥當的。 至少等一下新編譯出來的執行檔我們可以確定是使用自己的機器所編譯完成的嘛!
  3. make
    make
    會依據 Makefile 當中的預設工作進行編譯的行為!編譯的工作主要是進行 gcc 來將原始碼編譯成為可以被執行的 object files ,但是這些 object files 通常還需要一些函式庫之類的 link 後,才能產生一個完整的執行檔!使用 make 就是要將原始碼編譯成為可以被執行的可執行檔,而這個可執行檔會放置在目前所在的目錄之下, 尚未被安裝到預定安裝的目錄中;
  4. make install
    通常這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裡面關於 install 的項目,將上一個步驟所編譯完成的資料給他安裝到預定的目錄中,就完成安裝啦!

7、安装注意事项

   Tarball 要在 /usr/local/src 裡面解壓縮呢?基本上,在預設的情況下,原本的 Linux distribution 釋出安裝的軟體大多是在 /usr 裡面的,而使用者自行安裝的軟體則建議放置在 /usr/local 裡面

注意事项:软件安装目录放在/usr/local目录下面

在預設的情況下, man 會去搜尋 /usr/local/man 裡面的說明文件, 因此,如果我們將軟體安裝在 /usr/local 底下的話,那麼自然安裝完成之後, 該軟體的說明文件就可以被找到了。

      

所以囉,通常我們會建議大家將自己安裝的軟體放置在 /usr/local 下,至於原始碼 (Tarball)則建議放置在 /usr/local/src (src source 的縮寫)底下啊。

 

例如我將 apache 安裝在 /usr/local/apache 當中,那麼你的檔案目錄就會變成:

  • /usr/local/apache/etc
  • /usr/local/apache/bin
  • /usr/local/apache/lib
  • /usr/local/apache/man

呵呵!單一軟體的檔案都在同一個目錄之下,那麼要移除該軟體就簡單的多了! 只要將該目錄移除即可視為該軟體已經被移除囉!以上面為例,我想要移除 apache 只要下達『rm -rf /usr/local/apache 就算移除這個軟體啦!

说明:理解了/usr/local的含义了吧。将软件可以定义到这个目录的相当于把这个软件的全部的相关目录全部安装到这个目录下面了

 

 

這個方式雖然有利於軟體的移除,但不曉得你有沒有發現,我們在執行某些指令的時候,與該指令是否在 PATH 這個環境變數所記錄的路徑有關,以上面為例,我的 /usr/local/apache/bin 肯定是不在 PATH 裡面的,所以執行 apache 的指令就得要利用絕對路徑了,否則就得將這個 /usr/local/apache/bin 加入 PATH 裡面。另外,那個 /usr/local/apache/man 也需要加入 man page 搜尋的路徑當中啊!

 

看看鸟哥有啥好的建议吧

  1. 最好將 tarball 的原始資料解壓縮到 /usr/local/src 當中;(存放source资料)
  2. 安裝時,最好安裝到 /usr/local 這個預設路徑下;(安装目录)
  3. 考慮未來的反安裝步驟,最好可以將每個軟體單獨的安裝在 /usr/local 底下;
  4. 為安裝到單獨目錄的軟體之 man page 加入 man path 搜尋:
    如果你安裝的軟體放置到 /usr/local/software/ ,那麼 man page 搜尋的設定中,可能就得要在 /etc/man.config 內的 40~50 行左右處,寫入如下的一行:

MANPATH /usr/local/software/man

這樣才可以使用 man 來查詢該軟體的線上文件囉!

个人心得:

1.       将软件包解压缩到/usr/local/src目录下面!这个我以前喜欢放在home目录以后要改过来

2.       把软件安装在/usr/local/software/ 下。方便将来的软件删除

3.       添加man路径----------另外最好配置一下环境变量

 

 

阅读(1034) | 评论(0) | 转发(0) |
0

上一篇:Vi与Vim的区别

下一篇:Rpm与yum包

给主人留下些什么吧!~~