Linux下軟體釋出技巧
【原文:http://www.sudu.cn/info/html/edu/20070930/68136.html】
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方式剛好相反,使用者安裝簡單,易於使用,但是基本不能按照自己的意思對軟體進行配置。這兩種釋出方法各有千秋,具體選擇哪種釋出方式可以根據自己的需要確定。
相關文章
- Linux下RPM軟體包的使用技巧Linux
- 轉貼:釋出小軟體
- linux下常用軟體!Linux
- 短影片批次釋出軟體,一鍵釋出短影片
- Linux下軟體安裝Linux
- Sublime Text 3.0 正式釋出!提供 Linux 軟體包倉庫支援Linux
- 即時科研集團釋出Linux多媒體軟體桌面平臺(轉)Linux
- linux常用服務軟體搭建及使用技巧Linux
- 無壓力的軟體釋出之旅
- Linux下的多媒體軟體(轉)Linux
- linux下 rlwrap 軟體安裝Linux
- ◆◆◆◆◆◆◆◆◆◆◆linux下軟體包的管理◆◆◆◆◆◆◆◆◆◆◆◆◆◆Linux
- GandCrab v4.1勒索軟體釋出,仍通過虛假破解軟體下載網站傳播網站
- 成功的軟體釋出的三個要素
- 釋出一個軟體,需要多少人?
- 百家號批次釋出軟體,批次釋出自媒體內容
- Linux下使用f.lux軟體Linux
- Linux下的常用軟體列表(轉)Linux
- Linux下的軟體安裝(轉)Linux
- Linux下的軟體開發(轉)Linux
- Linux下如何釋放cache記憶體Linux記憶體
- Screen To Gif 2.23 釋出,動畫錄製軟體動畫
- sysget 2.2 釋出,通用軟體包管理器
- 釋出你的開源軟體到 Ubuntu PPAUbuntu
- Linux下的環境部署和專案釋出Linux
- 軟體漏洞分析技巧分享
- Linux 下軟體開機自啟動Linux
- linux下使用yum upgrade軟體包Linux
- windows下讀取Linux分割槽軟體WindowsLinux
- linux常用開源軟體下載地址Linux
- IDC釋出Linux年度報告 開源軟體應用持續走(轉)Linux
- 360度VR體驗盟雲移軟 《荷蘭花田》軟著釋出VR
- 盟雲移軟360度VR體驗《海島度假》軟著釋出VR
- CRM中介軟體裡的釋出-訂閱者模式模式
- 微軟釋出API及軟體開發工具包微軟API
- Adobe釋出網頁設計軟體Muse網頁
- 軟體工程估算的技巧 - shubhro軟體工程
- 金蝶KIS軟體操作小技巧