歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Linux下軟件發布技巧

Linux下軟件發布技巧

日期:2017/2/27 14:26:54   编辑:更多Linux
  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  %description  This is a example software, just for see README for detail,  NetSnake, some day.  %changelog  *Fri Dec 27 2002 NetSnake  -build for the first time.  %prep  %setup  %build  make hello  %install  install -m 755 hello /usr/local/bin/hello  %files  %doc README  /usr/local/bin/hello    這個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軟件包:    $rpm -ba hello.spec    需要注意的是,在新版本的Red Hat 8.0 下,制作RPM包的命令已經完全從rpm命令中分離出來,成為了一個單獨的rpmbuild,所以應該是rpmbuild -ba hello.spec。    如果不用-target=[i486][i586]...指定體系結構,默認會是i386,這樣,會在/usr/src/redhat/RPMS/i386/下生成hello-xx-xxx.i386.rpm文件。    總的來說,源代碼方式的缺點是用戶安裝比較麻煩,而且容易出現各種錯誤;優點是可控制性強、靈活。RPM方式剛好相反,用戶安裝簡單,易於使用,但是基本不能按照自己的意思對軟件進行配置。這兩種發布方法各有千秋,具體選擇哪種發布方式可以根據自己的需要確定。




Copyright © Linux教程網 All Rights Reserved