Linux下軟體發布技巧

2021-03-04 01:13:06 字數 3128 閱讀 5656

作者:楊鵬發文時間:2003.04.21

linux現在能夠被越來越多的人認識及使用,在很大程度上可以歸結為其具有強大的c編譯器——gcc、便於交流的環境——inter***,以及雄厚的師資——有數不清的程式設計師在開發數不清的**。

有了linux和inter***,我們可以很容易地在世界範圍內發布軟體作品,與他人交流開發心得與技巧。當我們完成了自己的軟體作品,怎麼樣才能讓其他人以快捷、方便的方式與自己分享成果、理解開發思想呢?這就是我們要討論的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:

這樣會生成configure.scan檔案,它包含了系統配置的基本選項。作為乙個簡單的例子,其中很多東西是不需要的,所以可以修改這個檔案,讓它僅僅包含下面幾行:

然後把這個檔案複製為configure.in,作為配置的輸入檔案。

由於使用了m4巨集(am_init... 語句),必須執行aclocal命令生成相應的巨集檔案:

在當前目錄中會產生aclocal.m4檔案。

然後執行autoconf,以生成configure執行指令碼:

這樣關於配置的部分就完成了,下面是和編譯生成有關的。

我們需要手工編輯乙個文字檔案——makefile.am,內容如下:

這個檔案應該很好理解,foreign告訴系統這是乙個普通的應用軟體,該程式名稱為hello,而hello程式包含的源程式(sources)只有hello.c這個檔案。接著執行:

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格式:

然後把hello.tgz拷貝到/usr/src/redhat/sources下,並在/usr/src/redhat/specs/下編寫乙個簡單的hello.spec檔案,內容如下:

這個spec檔案是整個製作過程的關鍵,它控制著整個軟體包的製作流程,因此我們需要仔細分析一下。

前面的name、summary等都是關於軟體性質、版本等的說明,可以看作是乙個概述和總攬,其中version和release將會影響到生成軟體包的名稱。例如這裡版本是0.1,發布是1,那麼做出來的rpm包就是hello-0.

1-1.i386.rpm。

而group指的是在x-window下生成快捷方式的位置,chinese就是在「中文」下生成子目錄。然後就進入了具體的製作流程,所有以「%」開頭的巨集語句都表示製作流程中的一步。

由此不難看出,製作過程大概需要這樣幾步:

◆ %description是對整個軟體的注釋,比如寫一些粗略的功能說明,可以分成若干行;

◆ %prep和%setup可以認為是預處理階段,對於小軟體來說沒什麼實質性用途;

◆ 接下來就是%build階段,這時候會將所有打包檔案解開,並根據實際情況將原始檔編譯為二進位制檔案(make hello);

◆ build完成之後是%install,這個步驟通過%config、%file、%doc等巨集將編譯好的軟體、文件、配置檔案等安裝到指定的位置;

◆ 最後是所有被安裝到系統中的檔案列表。

這就是整個rpm包安裝過程。它與makefile比較起來要簡單得很多,因為它將所有操作集中到乙個檔案中,非常有利於整理和糾錯。

接下來就需要執行,以生成自己的rpm軟體包:

需要注意的是,在新版本的red hat 8.0 下,製作rpm包的命令已經完全從rpm命令中分離出來,成為了乙個單獨的rpmbuild,所以應該是rpmbuild -ba hello.spec。

如果不用-target=[i486][i586]...指定體系結構,缺省會是i386,這樣,會在/usr/src/redhat/rpms/i386/下生成hello-xx-***.i386.

rpm檔案。

總的來說,源**方式的缺點是使用者安裝比較麻煩,而且容易出現各種錯誤;優點是可控制性強、靈活。rpm方式剛好相反,使用者安裝簡單,易於使用,但是基本不能按照自己的意思對軟體進行配置。這兩種發布方法各有千秋,具體選擇哪種發布方式可以根據自己的需要確定。

(責任編輯:西門吹雪)

linux下軟體安裝的方法

裝軟體注 只要你可以上網,只需要用apt cache search查詢軟體,用apt get install軟體 六 bin檔案安裝 如果你 到的軟體名是一般情況下是個可執行檔案,安裝方法如下 1 開啟乙個終端,su 成root使用者 2 chmod x 3 執行這個命令就可以安裝軟體了 七 不需要...

LINUX下PHP MYSQL APACHE配置過程

需要軟體如下 apache mysql phpgd zendoptimizer gettext netpbm 所用的軟體版本如下 redhat enterprise as 4 apache imap gettext 一.安裝mysql 我把他全部 到 usr local software目錄下 進入...

軟體發布版本說明

xx releasenotes發布版本說明模板revision record修訂記錄 distribution list 分發記錄歷史記錄 2 目錄 3 發布版本說明 總體 4 1 引言 4 1.1 宣告 4 1.2 目的 4 1.3 背景 4 1.4 定義 4 1.5 參考資料 4 2 關於本發布...