Linux現在能夠被越來越多的人認識及使用,在很大程度上可以歸結為其具有強大的C編譯器——gcc、便於交流的環境——Internet,以及雄厚的師資——有數不清的程序員在開發數不清的代碼.
有了Linux和Internet,我們可以很容易地在世界範圍內發布軟體作品,與他人交流開發心得與技巧.當我們完成了自己的軟體作品,怎麼樣才能讓其他人以快捷、方便的方式與自己分享成果、理解開發思想呢?這就是我們要討論的Linux下軟體打包和發布的方法.
在Linux尚未流行之前,Linux下軟體打包和發布應用僅僅停留在程序員中,因此軟體分發基本都使用源代碼方式,便於大家相互學習和交流.隨著大量普通用戶和商業應用的參與,源代碼方式就顯得過於繁瑣,對用戶要求太高,而且耗費時間,
編譯好的二進位文件發布方式開始流行起來.這就是Linux下兩種主要的軟體發布方式:源代碼方式和二進位方式.源代碼方式通常是將源文件以tar、tgz格式打包,解包後進行配置、編譯和安裝;二進位方式以Red Hat公司的RPM(Red Hat Package Manager)格式最廣泛,它可以完成所有的步驟,自動將軟體安裝到系統中.
tgz源代碼方式
使用這種源代碼方式發布的軟體,一般需要進行下列步驟:
1.解開壓縮文件,如tar、gz、bz2或tgz.
2.執行./configure [--options] 進行軟體的配置.
3.執行make、make install等命令編譯代碼,並安裝到系統中.
因此,如果要發布軟體,就需要生成可供配置的configure文件和進行編譯安裝的Makefile.
下面以一個簡單的例子來說明.假設要發布一個標準的hello程序,它打出「Hello, world!」的文字,該源程序命名為hello.c.在這個目錄下(注意只有源文件hello.c,不需要編譯hello.o或者hello),
執行命令autoscan:
$autoscan
這樣會生成configure.scan文件,它包含了系統配置的基本選項.作為一個簡單的例子,其中很多東西是不需要的,
可以修改這個文件,讓它僅僅包含下面幾行:
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello, 0.1)
AC_PROG_CC
AC_OUTPUT(Makefile)
然後把這個文件複製為configure.in,作為配置的輸入文件.
由於使用了m4宏(AM_INIT... 語句),必須運行aclocal命令生成相應的宏文件:
$aclocal
在當前目錄中會產生aclocal.m4文件.
然後執行autoconf,以生成configure執行腳本:
$autoconf
這樣關於配置的部分就完成了,下面是和編譯生成有關的.
我們需要手工編輯一個文本文件——Makefile.am,內容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c
這個文件應該很好理解,foreign告訴系統這是一個普通的應用軟體,該程序名稱為hello,而hello程序包含的源程序(SOURCES)只有hello.c這個文件.接著執行:
$automake --add-missing
automake會自動生成所有必須的文件,包括Makefile.in等重要文件.
進行壓縮、打包,整個工作就完成了.
獲得這個壓縮包的用戶只需要進行前面提到的三個安裝步驟,就可以順利地得到hello應用程序了.
RPM二進位方式
正如前面介紹的,使用源代碼方式發布軟體無論是對作者還是用戶都比較麻煩.於是,Red Hat公司開發出一種直接安裝編譯好的二進位文件方式,並可根據不同的平台發布不同的版本.用戶只需要一個命令,就可以完成所有要安裝的步驟,十分適合普通用戶使用.那麼,如何把自己的軟體製作成RPM包呢?
下面以Red Hat Linux為例,在默認情況下,和RPM包相關的目錄是/usr/src/redhat/下的SOURCES、SPECS和RPMS.其中SOURCES目錄存放需要製作的源代碼文件,一般是tgz格式壓縮;SPECS目錄存放編寫的spec文件,這些文件指示RPM製作工具如何進行打包工作;而RPMS下有i386、i586、noarch等子目錄,分別對應不同的體系結構,如Intel 80386、586處理器等,noarch則是通用的,製作完成的RPM包就存放在這些目錄中.
仍然以前面的hello為例,直接將hello.c壓縮成hello.tgz格式:
$tar cfvz hello.tgz hello.c
然後把hello.tgz拷貝到/usr/src/redhat/SOURCES下,並在/usr/src/redhat/SPECS/下編寫一個簡單的hello.spec文件,內容如下:
Name: hello program
Summary: My first linux software
Version: 0.1
Release: 1
Copyright: OpenSource
Group: Extensions/Chinese
Source: hello.tgz
Packager: NetSnake