Membuat RPM untuk Apache Maven2

Penulis sedang membuat profile puppet untuk environment CentOS 6.2 Desktop, saat sedang membuat profile developer java atau engineer, membutuhkan Apache maven2. Repository CentOS ternyata belum menyediakan untuk versi 2.2.1. Karena alasan keamanan yuu kita buat saja RPM-nya. karena kompabilitas dengan aplikasi yang di buat java developer, maven yang digunakan adalah versi 2.2.1 walaupun saat ini sudah ada versi 3.0.4.

OK saatnya beralih ke mesin build:

1. Download source Apache Maven2 versi 2.2.1, dan juga Checksum-nya
[root@devsec ~]# wget -c http://www.reverse.net/pub/apache//maven/binaries/apache-maven-2.2.1-bin.tar.gz
--2012-02-17 18:32:23--  http://www.reverse.net/pub/apache//maven/binaries/apache-maven-2.2.1-bin.tar.gz
Resolving www.reverse.net... 208.101.47.10
Connecting to www.reverse.net|208.101.47.10|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2840961 (2.7M) [application/x-gzip]
Saving to: “apache-maven-2.2.1-bin.tar.gz”

100%[===================================================================================================================>] 2,840,961    117K/s   in 25s     

2012-02-17 18:32:53 (112 KB/s) - “apache-maven-2.2.1-bin.tar.gz” saved [2840961/2840961]

[root@devsec ~]# wget -c http://www.apache.org/dist/maven/binaries/apache-maven-2.2.1-bin.tar.gz.md5
--2012-02-17 18:08:23--  http://www.apache.org/dist/maven/binaries/apache-maven-2.2.1-bin.tar.gz.md5
Resolving www.apache.org... 140.211.11.131
Connecting to www.apache.org|140.211.11.131|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 32 [text/plain]
Saving to: “apache-maven-2.2.1-bin.tar.gz.md5”

100%[===================================================================================================================>] 32          --.-K/s   in 0s      

2012-02-17 18:08:23 (266 KB/s) - “apache-maven-2.2.1-bin.tar.gz.md5” saved [32/32]

[root@devsec ~]# md5sum apache-maven-2.2.1-bin.tar.gz
3f829ed854cbacdaca8f809e4954c916  apache-maven-2.2.1-bin.tar.gz

Proses pengecekan md5sum ini hanya karena penulis paraniod, untuk mengecek apakah file ini benar-benar asli.

2. Instal rpmdevtools, tool ini digunakan untuk kita membuat folder rpmbuild beserta subdirektorinya, jadi kita tidak perlu susah untuk membuat folder satu persatu, seperti folder BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS, dimana nanti kita akan membuat RPM.

[root@devsec ~]# yum install rpmdevtools
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security, versionlock
Loading mirror speeds from cached hostfile
 * base: mirror.nus.edu.sg
 * extras: mirror.nus.edu.sg
 * updates: centosl3.centos.org
432 packages excluded due to repository priority protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rpmdevtools.noarch 0:7.5-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================
 Package                                  Arch                                Version                                Repository                         Size
=============================================================================================================================================================
Installing:
 rpmdevtools                              noarch                              7.5-1.el6                              base                              108 k

Transaction Summary
=============================================================================================================================================================
Install       1 Package(s)

Total download size: 108 k
Installed size: 216 k
Is this ok [y/N]: y
Downloading Packages:
rpmdevtools-7.5-1.el6.noarch.rpm                                                                                                      | 108 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : rpmdevtools-7.5-1.el6.noarch                                                                                                              1/1 

Installed:
  rpmdevtools.noarch 0:7.5-1.el6                                                                                                                             

Complete!
[root@devsec ~]# 

3. Biasanya disarankan untuk membuat paket RPM menggunakan user biasa, tapi kali ini karena kita membutuhkan akses ke /usr/share, maka penulis menggunakan user root. Mari kita buat direktori RPM dimana tempat kita bekerja nanti:

[root@devsec ~]# rpmdev-setuptree 
[root@devsec ~]# ls rpmbuild/
BUILD/     BUILDROOT/ RPMS/      SOURCES/   SPECS/     SRPMS/     
[root@devsec ~]# 

4. Copy-kan file apache-maven-2.2.1-bin.tar.gz yang tadi sudah kita download, ke folder ~/rpmbuild/SOURCES/


[root@devsec ~]# cp apache-maven-2.2.1-bin.tar.gz rpmbuild/SOURCES/
[root@devsec ~]# ll rpmbuild/SOURCES/
total 32
-rw------- 1 root root 28826 Feb 17 18:16 apache-maven-2.2.1-bin.tar.gz
[root@devsec ~]# 

5. Sekarang kita membuat spec file sendiri untuk file RPM yang akan kita buat letak file spec itu di rpmbuild/SPECS, berikut isi spec filenya:

#################################################################################
Summary:maven2
Name:maven2
Version:2.2.1
Release:suka-suka
BuildArch:noarch
Group:Development/Build Tools
Distribution:Linux
Vendor:The Apache Software Foundation
Packager:unixhat public@unixhat.com
License:Apache License, version 2.0
BuildRoot:%{_builddir}/%{name}-root

%description
Apache Maven is a software project management and comprehension tool.

%prep
%{__rm} -rf %{buildroot}

%build
cd %{_sourcedir}
tar -xf %{_sourcedir}/apache-maven-2.2.1-bin.tar.gz

%install
mkdir -p %{buildroot}/usr/share/maven2
mkdir -p %{buildroot}/usr/bin
cd %{_sourcedir}/apache-maven-2.2.1/
cp -r *  %{buildroot}/usr/share/maven2/

%clean
%{__rm} -rf %{buildroot}

%post
ln -s /usr/share/maven2/bin/mvn /usr/bin/mvn

%files
%attr(755,root,root)
/usr/share/maven2
#################################################################################

Keterangan dari spec file, penulis menggunakan noarch saat membuat, jadi tidak perlu membuat 2 paket yang berbeda di mesin 32bit atau 64bit, karena hasilnya bisa di gunakan 32bit dan 64bit.

6. Sekarang saatnya kita membuild:

[root@devsec ~]# rpmbuild -ba rpmbuild/SPECS/maven2.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.PVRUsn
+ umask 022
+ cd /root/rpmbuild/BUILD
+ /bin/rm -rf /root/rpmbuild/BUILDROOT/maven2-2.2.1-miaow.i386
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.3Wkuf1
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/SOURCES
+ tar -xf /root/rpmbuild/SOURCES/apache-maven-2.2.1-bin.tar.gz
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.Ez8pzF
+ umask 022
+ cd /root/rpmbuild/BUILD
+ mkdir -p /root/rpmbuild/BUILDROOT/maven2-2.2.1-miaow.i386/usr/share/maven2
+ mkdir -p /root/rpmbuild/BUILDROOT/maven2-2.2.1-miaow.i386/usr/bin
+ cd /root/rpmbuild/SOURCES/apache-maven-2.2.1/
+ cp -r LICENSE.txt NOTICE.txt README.txt bin boot conf lib /root/rpmbuild/BUILDROOT/maven2-2.2.1-miaow.i386/usr/share/maven2/
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip
+ /usr/lib/rpm/brp-strip-static-archive
+ /usr/lib/rpm/brp-strip-comment-note
Processing files: maven2-2.2.1-miaow.noarch
Requires(interp): /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Requires: /bin/sh
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/maven2-2.2.1-miaow.i386
Wrote: /root/rpmbuild/SRPMS/maven2-2.2.1-miaow.src.rpm
Wrote: /root/rpmbuild/RPMS/noarch/maven2-2.2.1-miaow.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.sDWe0F
+ umask 022
+ cd /root/rpmbuild/BUILD
+ /bin/rm -rf /root/rpmbuild/BUILDROOT/maven2-2.2.1-miaow.i386
+ exit 0

Mari kita lihat hasilnya:
[root@devsec ~]# ll rpmbuild/RPMS/noarch/
-rw------- 1 root root 2844124 Feb 17 18:35 rpmbuild/RPMS/noarch/maven2-2.2.1-miaow.noarch.rpm

Ternyata berhasil, sekarang mari kita coba install di sistem:

[root@devsec ~]# rpm -ivh rpmbuild/RPMS/noarch/maven2-2.2.1-miaow.noarch.rpm 
Preparing...                ########################################### [100%]
   1:maven2                 ########################################### [100%]

[root@devsec ~]# mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-07 02:16:01+0700)
Java version: 1.6.0_29
Java home: /usr/java/jdk1.6.0_29/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-220.2.1.el6.i686" arch: "i386" Family: "unix"
[root@devsec ~]# 

Alhamduillah berhasil terinstall dengan baik. Sekarang penulis bisa melanjutkan membuat puppet scriptnya =)