歡迎您光臨本站 註冊首頁

Linux自由軟體的安裝

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  一、自由軟體的結構

一個自由軟體的發行版本,總是有相同的文件結構,它通常包含下面幾個文件:
INSTALL: 說明安裝程序。
README: 關於這個程序的一般性信息(簡介,作者,下載文件的地址,相關文件及連結等),如果沒有INSTALL文件,通常會把簡單的安裝程序放在這個文件。
COPYING:其中包括了使用執照或是描述軟體發地版本,有時LICENCE文件取代。
CONTRIB或CREDITS :與這個軟體相關人士的列表(積极參与者,中肯的評論,輔助軟體)
CHANGE :有時這個文件會叫做NEWS,紀錄最近改版及除錯的狀況
Makefile :有這個文件才能編譯軟體,但是通常在配置的過程中才會產生這個文件。
你會經常看到一個configure或Imakefile文件,可以讓我們由這個文件產生Makefile文件。
一個存放原始碼的目錄:也是編譯完成後存放二進位文件的地方,通常命名為src。
一個存放與軟體相關文件的目錄(通常是Texinfo或man的格式):,通常命名為doc。
有時會有一個目錄存放軟體的特定資料,用來放配置文件,產生資料的範例,或是資源文件。

二、 還原安裝文件(解壓縮)
在Linux的世界里,最常見的壓縮格式,就是gzip格式,這是由GNU計畫所開發,也是一種常用的壓縮工具。 
Gzip常和一個叫tar的公用程序同時使用,tar是一個歷史悠久的程序,以前用來將資料儲存在磁帶上。現在軟盤和光碟已經取代磁帶,但是tar還是用來產生壓縮程序,它可以將所有的文件及目錄結合為一個文件,這個文件可以簡單的用gzip壓縮。這就是為何很多tar的壓文件用gzip來壓縮,所以這些壓縮文件的後綴名為.tar.gz(
或者tgz)。
 
2.1 GNU Tar的使用
  要解開以.tar.gz為後綴的壓縮文件,先用gzip解壓縮再用tar還原目錄結構就可以解開了。但是GNU版本的tar會自己去直接調用gzip,所以在解壓縮的時候也不用拆成兩個步驟,當然也不會浪費多餘的硬碟空間。
  Tar的命令格式如下:
tar <文件選項> [文件名稱]
[文件名稱]:這個參數是可以省略的,如果省略了,會直接將整個壓縮文件解開。對以tar.gz為後綴的壓縮文件,該參數不是必要的。
  例如:
$ tar xvfz guile-1.3.tar.gz
-rw-r--r-- 442/1002 10555 1998-10-20 07:31 guile-1.3/Makefile.in
-rw-rw-rw- 442/1002 6668 1998-10-20 06:59 guile-1.3/README
-rw-rw-rw- 442/1002 2283 1998-02-01 22:05 guile-1.3/AUTHORS
-rw-rw-rw- 442/1002 17989 1997-05-27 00:36 guile-1.3/COPYING
-rw-rw-rw- 442/1002 28545 1998-10-20 07:05 guile-1.3/ChangeLog
-rw-rw-rw- 442/1002 9364 1997-10-25 08:34 guile-1.3/INSTALL
-rw-rw-rw- 442/1002 1223 1998-10-20 06:34 guile-1.3/Makefile.am
-rw-rw-rw- 442/1002 98432 1998-10-20 07:30 guile-1.3/NEWS
-rw-rw-rw- 442/1002 1388 1998-10-20 06:19 guile-1.3/THANKS
-rw-rw-rw- 442/1002 1151 1998-08-16 21:45 guile-1.3/TODO
...
 
tar的選項說明如下:
v: 讓tar進入監視狀態,在解壓縮過程中,會將所有壓縮文件中的文件名顯示出來,如果沒有這個選項,在解壓縮過程當中,將不會顯示這些信息。
f:必要選項,代表要打開指定的壓縮文件。否則,tar會去尋找磁帶而不是文件來解壓縮。
z:允許你處理gzip文件(後綴為.gz),如果沒有這個選項,tar會產生錯誤信息,反過來說,如果壓縮文件沒有經過gzip處理過,請不要加這個參數。
tar允許對壓縮文件進行解壓縮、讀取、壓縮、新增文件等動作,執行這些動作的選項如下:
x: 從壓縮文件中解出文件
t: 列出壓縮文件中的內容
c: 產生壓縮文件,可以利用這個指令備份個人資料。
r: 在壓縮文件中增加新文件,但是新加的文件不能為壓縮文件。
 
2.2 bzip2與gzip
 bzip2是最近興起的壓縮格式,有逐漸取代gzip地位的趨勢。Bzip壓出的文件比gzip要小,但尚未成為標準,附屬文件名.tar.bz2,是最近才出現的。
兩個壓縮程序有近似的語法:
Gzip [選項] [文件名稱]
  如果沒有給文件名稱,gzip及bzip2都會等著由標準輸入取得資料並將結果送到標準輸出,因此可以在這兩個程序使用管道,兩個程序也有一些相同的選項:
1.-1,....,-9: 設定壓縮比,數字越大,壓縮比越高但同時也就越慢,天下沒有白吃的午餐。
2.-d: 解壓縮文件案,等於使用gunzip或bunzip2。
3.-c: 將壓縮或解壓縮文件的結果列印到標準輸出。
請注意!如果沒有使用-c選項,gzip及bzip2在壓縮完成後會刪除源文件,在bzip2可以使用-k選項防止,但gzip就沒辦法啦!
接下來以幾個例子作為說明,首先將所有現行目錄中,擴展名為txt的文件用bzip2壓縮:
$ bzip2 -9 *.txt
若想與某人分享文件的備份,但他只有gzip,所以要將最後的文件轉換成為.gz格式,有些麻煩吧:(。沒關係,下面這條命令無須將文件解壓縮再重新壓縮,只要解壓縮到標準輸出,利用管道,由標準輸出壓縮轉向輸出成新的備份文件:
Bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz
  通過tar使用Bzip2的用法與gzip完全相同,唯一要做的是將選項z換成y,例如:
$ tar xvfy foo.tar.bz2
有一些發行版本會以I代替:
$ tar xvfI foo.tar.bz2
另外還有一種方式,看起來可移植性比較高, 可是卻要多打不少字!?
$ tar --use-compress-program=bzip2 -xvf foo.tar.bz2
使用tar來處理.bz2格式壓縮文件前,要確定bzip2已經被安裝,而且PATH的環境變數中。
 
2.3 Just Do It!
2.3.1 最簡單的方法
  現在可以開始解壓縮文件了,在這之前別忘了以系統管理者的身份來做這件事,因為以一般用戶的身份,
是不被允許執行一部份程序的,即使可以,以系統管理者的身份來做,還是會簡單很多。 
第一步就是做備份,最好保持有一份原始壓縮文件,當你安裝好的程序毀了的時候,還可以重新安裝,如果硬碟空間不夠,可以將他備份在軟盤上,再把硬碟上的壓縮文件殺掉,當然如果確認當需要的時候,可由網路找到,可以不備份。
  解壓tar壓縮文件后,通常會產生一個新目錄(可以在解壓縮前檢查),進入這個目錄,現在可以進行下一個步驟了。
 
2.4.2 最安全的方法
  Linux系統有著較為完善的安全措施,一般用戶無法執行危害到系統的操作(例如格式化硬碟),或改變其它用戶的文件,同時也可以防止系統被病毒感染。
  另一方面,超級用戶root 可以做每一件事,甚至執行毀滅性的程序,擁有原始碼可以檢查這些不懷好意的程序代碼(例如病毒或特洛依木馬),對於這點最好小心一點。 
有一個好方法,用addusr指令新增一個用戶,讓這個用戶擔任管理工作,它必須在下列目錄具有寫入的許可權:
/usr/local/src, /usr/local/bin 及/usr/local/lib ,還有/usr/man下的所有子目錄(或許還需要拷貝文件到其它地方),建議讓這個用戶或組擁有前述必要目錄的寫入權。做完這些預防措施后,就可以依照上面介紹的方法來做。


三、配置(configure)
  在編譯軟體前,要對軟體的運行環境進行設置。系統中,通常有好幾個配置軟體,你必須使用軟體作者指定的,有時還要同時用到多個配置軟體,如果如果在發行版本的主要目錄中有configure這個文件存在通常使用Autoconf ;如果在發行版本的主要目錄中有Imakefile這個文件就使用Imake。  

3.1 Autoconf
  Autoconf 是一個配置軟體,產生的配置文件供編譯程序(例如Makefile)使用,有時會直接修改原始碼(例如在文件中使用config.h)。它的功能如下:
軟體的程序設計師將編譯軟體所需做的測試(例如可以使用那個版本的函數庫),依照規定的語法寫在configure.in這個文件里。 程序設計師執行Autoconf,Autoconf讀取configure.in的內容產生一個設定的命令槁,這個命令執行系統設定時,所應做的測試。最終用戶執行這個命令,然後Autoconf 就做所有編譯過程中所需的測試。
Autoconf使用範例:
$ ./configure
loading cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for main in -lX11... yes
checking for main in -lXpm... yes
checking for main in -lguile... yes
checking for main in -lm... yes
checking for main in -lncurses... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile
在configure 后加上環境變數,可對configure的產出好更好的的控制。例如:
$ ./configure --with-gcc --prefix=/opt/GNU
或 (在bash下)
$ export CC=`which gcc`
$ export CFLAGS=-O2
$ ./configure --with-gcc
或:
$ CC=gcc CFLAGS=-O2 ./configure

3.3 錯誤信息
configure命令的錯誤信息:configure: error: Cannot find library guile ,意思是說configure命令找不到一個函數庫(在這個例子里是guile),當configure編譯程序時,如果找不到這個函數庫,將無法繼續編譯,所以發出該錯誤提示信息。
  在config.log文件中可以找到發生錯誤的原因,這個文件記錄了配置的所有步驟,錯誤信息非常清楚,它對解決問題很有幫助。
  檢查錯誤信息所提及的函數庫是否安裝,如果沒有就安裝(由原始碼或已編譯的二進位文件)該函數庫,然後再執行configure一次。最有效的方法是直接尋找這個函數庫,函數庫的名字通常為lib<名字>.so,例如:
$ find / -name libguile*
  或:
$ locate libguile
確認編譯器可以訪問這個函數庫,在環境變數LD_LIBRARY_PATH 中列出的函數庫目錄如 /usr/lib, /lib, /usr/X11R6/lib 等,找出這個文件,請輸入file libguile.so。
檢查configure的響應是函數庫確實不存在或確認函數庫存在但沒有響應,例如:你的系統中沒有curses函數庫,那可能是LD_LIBRARY_PATH變數可能錯了。
 
3.4 Imake
  依照簡單的規則產生Makefile文件,Imake可以協助我們設定自由軟體,這些規則決定產生二進位文件時所需的文件,Imake依此產生對應的Makefile文件,這些規則放在Imakefile文件中。
  有趣的是,Imake使用與結構相關(architecture-dependent)的信息,對使用X窗口系統的應用程序非常方便,但Imake仍被許多其它類型的應用程序使用。使用Imake最簡單的方法是到文件解壓縮產生的主要目錄,執行xmkmf命令,調用imake 程序:
$ xmkmf -a
imake -DuseInstalled -I/usr/X11R6/lib/X11/config
make Makefiles
如果無法正確的安裝,重新編譯並安裝X11R6!

3.5 各個系統shell腳本命令
  詳讀INSTALL或README文件以獲得更多的信息,通常要執行install.sh或configure.sh,然後安裝命令不是直接自己執行就是主動詢問系統信息(例如路徑),如果搞不清楚必須執行哪些文件,鍵入./(在Bash下),按兩次TAB 鍵,Bash會在目錄中自動執行可能的可執行文件(一個可能的設定命令),如果有好幾個文件都是可執行
文件,會被列出來,只要選擇正確的文件就可以了。
 一個特別的例子是安裝Perl模塊,安裝過程要執行一個Perl寫的設定命令,執行的命令通常是:
$perl Makefile.PL

3.6 其它方式
  部分自由軟體的發行版本整理的很差,特別是在開發的第一階段(但所有的用戶都被警告過了),需要手動去更改一些設定,通常要改的文件是 Makefile 和config.h文檔。
如非用戶真正了解所做的更動,建議不要做這些手動的設定動作,因為需要知識及毅力才能做好,不過練習可以越做越好。

3.7 編譯
  現在軟體已經正確地配置好了,剩下的工作就是編譯了,這個階段通常很簡單,不會產生嚴重的問題。

3.7.1 make
在自由軟體社群中,最受歡迎的程序代碼編譯工具,就是make,它可以有效率的管理程序預定的編譯,開發者可以節省大量的時間。對於軟體的最終用戶,即使他們不具備足夠多的相關知識也能夠以幾行簡單的命令編譯及安裝軟體。
  所有編譯原始碼過程過程被紀錄在Makefile或GNUMakefile文件中,maked 在執行時從當前工作目錄讀取這些文件,如果不在現行目錄,就需要以make的 -f 選項來指定文件位置。
 
3.7.2 規則
由於編譯出一個二進位文件,要經過好幾個步驟,make會依照系統的相依性,按照順序執行。例如假設要產生glloq二進位文件,要編譯及連結main.o及init.o兩個目的文件(編譯的中間文件),所以這兩個目的文件就是原始文件的相依文件。
 前面的文字僅是簡單介紹make,了解其繁複功能的輪廓,如果想要在多知道一點,建議到APRIL的網站,那裡有很多的make相關文件(http://www.april.org/groupes/doc/),至於參考書,可以看看OReilly書局出版,Andrew Oram及Steve Talbott合著的Managing Projects with Make的第二版。
 
3.7.3 開始make
  make的使用遵循一些慣例,例如:
make 後面如果沒有參數,僅執行程序的編譯,而不進行安裝
make install 編譯程序(但不是每次),並提供安裝過程所需文件的正確位置,部分文件很少正確地被安裝(例如:man, info),必須用戶自己手動安裝。有時make install必須在特定的子目錄安裝,通常是因為使用到其它廠商開發的模塊。
make clean 清除所有編譯過程產生的臨時文件,很多情況下也會執行文件。
第一階段編譯程序,請鍵入以下命令(假設的例子):
$ make
gcc -c glloq.c -o glloq.o
gcc -c init.c -o init.o
gcc -c main.c -o main.o
gcc -lgtk -lgdk -lglib -lXext -lX11 -lm glloq.o init.o main.o -o glloq
 
太棒了!二進位文件正確的編譯出來,我們現在可以進行下一步驟,安裝軟體的發行版本(二進位文件及資料文件)。


四、 安裝
 
4.1 用make安裝
現在已經完成編譯的工作,你必須將編譯好的文件複製到適當的地方(通常是在/usr/local的子目錄之一)。
  make常用來安裝,安裝是make的功能之一,以make install進行安裝。
  在INSTALL或README文件中,通常會說明安裝的過程,但有時程序開發者會忘了寫,就得自己安裝每一個東西。拷貝后:
可執行文件放在/usr/local/bin目錄,函數庫(lib*.so文件)放/usr/local/lib目錄,標頭文件(*.h文件)放在/usr/local/share(注意不要刪除原來的文件)
數據文件放在/usr/local/share.
如果不懂安裝程序,可以試試看先不複製資料文件,直接執行程序,當錯誤訊息出現(例Cannot open /usr/local/share/glloq /data.db),再依照錯誤訊息,把資料文件複製到訊息中所提到的目錄。
至於軟體文件文件則有一點不同:
man文件放在/usr/local/man的子目錄中,通常格式為troff(或groff),附屬文件名為數字,文件名為命令的名稱(例如:echo.1),如果附文件名的數字是n,複製文件到/usr/local/man/man(n)。
info文件放在/usr/info或/usr/local/info目錄中。
  恭喜!完工了!現在您已經有能力編譯整個操作系統了!
 
4.2 疑難排解
如果已經安裝自由軟體,可是執行的時候,卻激活另一個程序或者沒有反應,可是在原始碼目錄中執行時卻沒有任何問題。這是PATH的問題,系統在安裝新軟體的目錄前,找到另一個名稱相同的程序,鍵入type -a <程序>檢查程序的路徑。
  解決的方法是:
1. 把安裝程序的目錄在PATH中,放的前面一點。
2. 刪除或更名那個不速之客的程序。
3. 更改新軟體執行文件的名稱,以避免混淆。
4. 如果系統殼支持,可以使用別名(例:以 tar 代表/usr/local/ bin/gtar)。


[火星人 ] Linux自由軟體的安裝已經有619次圍觀

http://coctec.com/docs/linux/show-post-68047.html