以一個實例說明在AIX上RPM包的製作過程

製作automake-1.9.6的RPM包過程如下:

1.下載automake-1.9.6的源代碼包
$ wget http://ftp.gnu.org/gnu/automake/automake-1.9.6.tar.gz


2. 準備patch

解壓automake-1.9.6.tar.gz,更名爲automake-1.9.6.patched,

$ tar zxvfautomake-1.9.6.tar.gz
$ mv automake-1.9.6 automake-1.9.6.patched


按照下面的變化修改config.guess(文件位置automake-1.9.6.patched/lib/config.guess)

@@ -527,7 +527,7 @@
                echo rs6000-ibm-aix3.2
        fi
        exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[45])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -cprocessor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El ${IBM_CPU_ID} |grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000


再解壓一個原始的automake-1.9.6, 並生成patch文件:

$ tar zxvfautomake-1.9.6.tar.gz
$ diff -urNautomake-1.9.6 automake-1.9.6.patched > automake-1.9.6-aix6.patch


檢查patch文件:

$ catautomake-1.9.6-aix6.patch  
diff -urN automake-1.9.6/lib/config.guessautomake-1.9.6.patched/lib/config.guess
---automake-1.9.6/lib/config.guess    2005-07-10 17:16:04.000000000 +0000
+++automake-1.9.6.patched/lib/config.guess    2013-07-17 01:16:48.000000000 +0000
@@ -527,7 +527,7 @@
                echo rs6000-ibm-aix3.2
        fi
        exit ;;
-    *:AIX:*:[45])
+    *:AIX:*:[456])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -cprocessor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El ${IBM_CPU_ID} |grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000


3. 編寫SPEC文件

編寫spec文件,可以參照下面的資料:

http://www.redbooks.ibm.com/redbooks/pdfs/sg246033.pdf


編寫完的spec文件內容如下:

# cat automake-1.9.6-3.spec
Summary: A GNU tool forautomatically creating Makefiles.
Name: automake
Version: 1.9.6
Release: 3
License: GPL
Group: Development/Tools
Source:ftp://ftp.gnu.org/gnu/automake/%{name}-%{version}.tar.gz
URL:http://www.gnu.org/software/automake
Patch0:         automake-1.9.6-aix6.patch
BuildRoot:/var/tmp/%{name}-root
%define _prefix/opt/freeware
Buildrequires: autoconf>= 2.58, flex, bison
Requires: perl, autoconf>= 2.58
BuildArchitectures:noarch
%define DEFCC cc
%description
Automake is a tool forautomatically generating `Makefile.in'
files compliant with theGNU Coding Standards.
You should installAutomake if you are developing software and would
like to use its abilityto automatically generate GNU standard
Makefiles. If youinstall Automake, you will also need to install
GNU's Autoconf package.
%prep
exportPATH=/opt/freeware/bin:$PATH
rm -rf $RPM_BUILD_ROOT
%setup -q
if test x$PATCH = x ;then
  PATCH=patch ;
fi
$PATCH -p1 -s <%{_sourcedir}/automake-1.9.6-aix6.patch
%build
# Use the defaultcompiler for this platform - gcc otherwise
if [[ -z "$CC"]]
then
    if test "X`type %{DEFCC}2>/dev/null`" != 'X'; then
       export CC=%{DEFCC}
    else
       export CC=gcc
    fi
fi
if [[ "$CC" !="gcc" ]]
then
       export RPM_OPT_FLAGS=`echo$RPM_OPT_FLAGS | sed 's:-fsigned-char::'`
fi
exportCFLAGS=$RPM_OPT_FLAGS
%configure--prefix=%{_prefix}
makeCFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s
%install
["${RPM_BUILD_ROOT}" != "/" ] && rm -rf${RPM_BUILD_ROOT}
makeDESTDIR=${RPM_BUILD_ROOT} install
cd $RPM_BUILD_ROOT
mkdir -p usr/bin || true
for file in automakeaclocal
do
        ln -sf ../..%{_bindir}/$fileusr/bin/$file
done
%clean
["${RPM_BUILD_ROOT}" != "/" ] && rm -rf${RPM_BUILD_ROOT}
%files
%defattr(-,root,system)
%doc AUTHORS COPYINGINSTALL NEWS README THANKS TODO
%{_bindir}/*
%{_prefix}/share/*
%{_prefix}/info/*.info*
/usr/bin/*
%changelog
*  Tue May 16 2006  BULL
 - Release 3
*  Tue Nov 15 2005  BULL
 - Release 2
*  Mon Nov 14 2005  BULL
 - Release 1
 - New version version: 1.9.6


4. 打包

將上面準備的文件拷貝到下面的目錄中:

# cp automake-1.9.6.tar.gz /opt/freeware/src/packages/SOURCES/
# cp automake-1.9.6-aix6.patch /opt/freeware/src/packages/SOURCES/
# cp automake-1.9.6-3.spec /opt/freeware/src/packages/SPECS/


然後用下面的命令打包。如果有rpmbuild 命令,應該用rpmbuild -bs --target=i686 xxx.spec而不是rpm。

rpm -ba/opt/freeware/src/packages/SPECS/automake-1.9.6-3.spec


當看到如下內容的時候,就成功了。

Wrote:/opt/freeware/src/packages/SRPMS/automake-1.9.6-3.src.rpm
Wrote:/opt/freeware/src/packages/RPMS/noarch/automake-1.9.6-3.aix6.1.noarch.rpm


5. 檢查和測試

將生成的兩個包拷貝出來。

mkdir mypackages
cp /opt/freeware/src/packages/RPMS/noarch/automake-1.9.6-3.aix6.1.noarch.rpm.
cp /opt/freeware/src/packages/SRPMS/automake-1.9.6-3.src.rpm.


通過下面的命令查看rpm內容,確定下src包中是否包含了patch,看看二進制rpm包的內容。

rpm -qpl automake-1.9.6-3.aix6.1.noarch.rpm
rpm -qpl automake-1.9.6-3.src.rpm


先清理一下垃圾

# rm -fr/opt/freeware/src/packages/BUILD/automake-1.9.6/
# rm -fr/opt/freeware/src/packages/SOURCES/automake-1.9.6-aix6.patch
# rm -fr/opt/freeware/src/packages/SOURCES/automake-1.9.6.tar.gz
# rm -fr/opt/freeware/src/packages/SRPMS/automake-1.9.6-3.src.rpm
# rm -fr/opt/freeware/src/packages/RPMS/noarch/automake-1.9.6-3.aix6.1.noarch.rpm
# rm -fr/opt/freeware/src/packages/SPECS/automake-1.9.6-3.spec


通過下面的命令安裝測試:

#rpm -ivh --testautomake-1.9.6-3.aix6.1.noarch.rpm
#rpm -ivh --testautomake-1.9.6-3.src.rpm


如果上面的命令沒有出錯,可以用下面的命令真正安裝:

#rpm -ivh  automake-1.9.6-3.aix6.1.noarch.rpm
automake  ##################################################
# rpm -ivhautomake-1.9.6-3.src.rpm
automake  ##################################################


運行完第二個命令後可以查看到下面的文件:

# ls/opt/freeware/src/packages/SPECS/
automake-1.9.6-3.spec
# ls/opt/freeware/src/packages/SOURCES/
automake-1.9.6-aix6.patch  automake-1.9.6.tar.gz


現在可以再次編譯運行,測試src包是否正確:

rpm -ba/opt/freeware/src/packages/SPECS/automake-1.9.6-3.spec


現在與剛開始的時候一樣了,可以查看執行結果中是否有下面的兩行:

Wrote:/opt/freeware/src/packages/SRPMS/automake-1.9.6-3.src.rpm
Wrote:/opt/freeware/src/packages/RPMS/noarch/automake-1.9.6-3.aix6.1.noarch.rpm


如果有,恭喜你,可以發佈了。

http://download.csdn.net/download/leanderlee/5768731

http://download.csdn.net/download/leanderlee/5768717


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章