RPM 是廣泛使用的用於交付 Linux 軟體的工具,用戶可以輕鬆的安裝用 RPM 打包的產品。在本文中(系列文章的第 1 篇),IBM 軟體工程師 Dan Poirier 向您演示如何在 Red Hat Linux 7.1 系統上用 RPM 打包簡單軟體。 RPM(Red Hat Package Manager)是用於 Linux 分發版(distribution)的最常見的軟體包管理器。因為它允許分發已編譯的軟體,所以用戶只用一個命令就可以安裝軟體。
RPM 是 Linux「標準基本庫」版本 1.0.0 指定的安裝工具。在 Linux 分發版前 10 名中,有 8 個是基於 RPM(請參閱「Comparison of Linux Distributions」,它位於本文後面的 參考資料中列出的 distrowatch.com 上)。即使某些通常不使用 RPM 的分發版,如 Debian,也有可用工具將 RPM 轉換成它們自己的格式。在 Linux 上,對於除開發人員以外的任何人,RPM 也是用來打包軟體的最佳選擇。
RPM 軟體包從源文件形式的程序開始,作好了編譯準備。我不想創建一個沒有實際意義的示例,而是選擇使用 GNU Indent 程序(請參閱 參考資料)。
在 Linux 下創建 Indent 非常容易。 indent-2.2.6.tar.gz 文件位於當前目錄之中,所有您要做的就是:
手工構建 indent $ tar xzf indent.2.2.6.tar.gz $ cd indent-2.2.6 $ ./configure $ make $ make install
如果您已經構建過很多開放源碼項目,那麼這可能看起來很熟悉。 unpack;./configure;make;make install 序列是典型的使用 GNU 自動配置(autoconf)工具的軟體。因為這太普通了,所以我在這裡描述的關於 indent 的大部分東西,幾乎不加改變就可以用於其它開放源碼項目。
現在假設您正在使用 Red Hat 7.1。在本文的後面,我將給出一些 在其它 Linux 分發版上使用 RPM 的建議。
在 Red Hat 7.1 上, 在繼續以前,請確保您已安裝了 rpm-build 軟體包。為檢查是否安裝,請運行 rpm -q rpm-build 。您應該看到一些類似於 rpm-build-4.0.2-8 的信息(版本可能會不同)。如果您看到的是 package rpm-build is not installed ,則將需要從 Red Hat 安裝 CD 上安裝它。
創建文件 indent-1.spec,如下所示。您可以任意地給它命名並把它放到任何地方;RPM 對這些沒有要求。 以 root 用戶登錄。 將 indent-2.2.6.tar.gz 文件複製到 /usr/src/redhat/SOURCES。 運行 rpm -ba indent-1.spec ,將 indent-1.spec 改為您使用的名字。 第一個 spec 文件:indent-1.spec Summary: GNU indent Name: indent Version: 2.2.6 Release: 1 Source0: %{name}-%{version}.tar.gz License: GPL Group: Development/Tools %description The GNU indent program reformats C code to any of a variety of formatting standards, or you can define your own. %prep %setup -q %build ./configure make %install make install %files %defattr(-,root,root) /usr/local/bin/indent %doc /usr/local/info/indent.info %doc %attr(0444,root,root) /usr/local/man/man1/indent.1 %doc COPYING AUTHORS README NEWS
您應該看到 RPM 解包這個 tar 文件,編譯並安裝它。 在 Red Hat 7.1 上,工作目錄將是 /usr/src/redhat/BUILD。
第二個 spec 文件:indent-2.spec Summary: GNU indent Name: indent Version: 2.2.6 Release: 2 Source0: %{name}-%{version}.tar.gz License: GPL Group: Development/Tools BuildRoot: %{_builddir}/%{name}-root %description The GNU indent program reformats C code to any of a variety of formatting standards, or you can define your own. %prep %setup -q %build ./configure make %install rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) /usr/local/bin/indent %doc /usr/local/info/indent.info %doc %attr(0444,root,root) /usr/local/man/man1/indent.1 %doc COPYING AUTHORS README NEWS
更改說明 首先,我們增加了版本的發行號。無論何時,當您編輯 spec 文件時,都不要忘了這麼做。
我們在頭中添加了 BuildRoot,以便告訴 RPM 這是在構建期間臨時安裝文件的地方。對於臨時文件,我們這裡使用了兩個 RPM 宏,而不是假設某個特定位置。在 Red Hat 7.1 上, %{_builddir} 以類似於 /usr/src/redhat/BUILD 結束。