Since, I had an local repository file where I wanted to distribute it to the YUM repository, so had to created an RPM file as explained below
Objective: Demonstrate a simple scenario on how to build RPM.
Environment: CentOS 6.6 (X86_64)
Install required RPM
#yum install -y rpm-build rpmdevtools
Create user for RPM build
# useradd -m rpmbld
# passwd rpmbld
Build RPM
login with the rpmbld account and from the home directory create the directory structure.
Creates the directory rpmbuild with several sub-directories.
~]$ id
uid=501(rpmbld) gid=501(rpmbld) groups=501(rpmbld)
~]$ rpmdev-setuptree
~]$ echo $?
0
~]$
~]$ cd rpmbuild/
~]$ ls
BUILD RPMS SOURCES SPECS SRPMS
~]$
Create compressed content with RPM content
Change to the SOURCE directory, representing directory structure with RPM name,version and target file system. here, I use /etc/yum.repos.d copy desired repo file into the rpms structure. Once after that gzip all of that.
~]$ cd rpmbuild/SOURCES/
~/rpmbuild/SOURCES]$ ls
~/rpmbuild/SOURCES]$ mkdir -p localrepo-1/etc/yum.repos.d
~/rpmbuild/SOURCES]$ cp /tmp/centos66.repo localrepo-1/etc/yum.repos.d
~/rpmbuild/SOURCES]$
~]$ ls
localrepo-1
~/rpmbuild/SOURCES]$
~/rpmbuild/SOURCES]$ tar -zcvf localrepo-1.tar.gz localrepo-1/
localrepo-1/
localrepo-1/etc/
localrepo-1/etc/yum.repos.d/
localrepo-1/etc/yum.repos.d/centos66.repo
~/rpmbuild/SOURCES]$
SPEC skeleton
SPEC skeleton
Instructions for the build process are created in the rpmbuild/SPECS directory. rpmdev-newspec <filename> used to create a sample file in your current directory.Edit as required.
~]$ cd rpmbuild/SPECS/
~/rpmbuild/SPECS]$
~/rpmbuild/SPECS]$ rpmdev-newspec localrepo.spec
Skeleton specfile (minimal) has been created to "localrepo.spec".
~/rpmbuild/SPECS]$
~/rpmbuild/SPECS]$ ls
localrepo.spec
~/rpmbuild/SPECS]$
:~]$ cat rpmbuild/SPECS/localrepo.spec
Name: localrepo
Version: 1
Release: 0
Summary: Centos repository
Group: System Environment/Base
License: GPL
source0: localrepo-1.tar.gz
buildarch: noarch
BuildRoot: %{_tmppath}/%{name}-buildroot
%description
Create YUM repository pointing to local centos/redhat repository.
%prep
%setup -q
%install
mkdir -p "$RPM_BUILD_ROOT"
cp -R * "$RPM_BUILD_ROOT"
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
/etc/yum.repos.d/centos66.repo
:~]$
RPMBUILD
you can now use the rpmbuild process to create RPM with -bb for binary rpm without src rpm.
:~]$ rpmbuild -v -bb rpmbuild/SPECS/localrepo.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.RjS32s
+ umask 022
+ cd /home/rpmbld/rpmbuild/BUILD
+ cd /home/rpmbld/rpmbuild/BUILD
+ rm -rf localrepo-1
+ /bin/tar -xf -
+ /usr/bin/gzip -dc /home/rpmbld/rpmbuild/SOURCES/localrepo-1.tar.gz
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd localrepo-1
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.qqYUfq
+ umask 022
+ cd /home/rpmbld/rpmbuild/BUILD
+ cd localrepo-1
+ mkdir -p /home/rpmbld/rpmbuild/BUILDROOT/localrepo-1-0.i386
+ cp -R etc /home/rpmbld/rpmbuild/BUILDROOT/localrepo-1-0.i386
+ /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: localrepo-1-0.noarch
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/rpmbld/rpmbuild/BUILDROOT/localrepo-1-0.i386
Wrote: /home/rpmbld/rpmbuild/RPMS/noarch/localrepo-1-0.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.lBmbql
+ umask 022
+ cd /home/rpmbld/rpmbuild/BUILD
+ cd localrepo-1
+ rm -rf /home/rpmbld/rpmbuild/BUILDROOT/localrepo-1-0.i386
+ exit 0
:~]$
Test your build custom RPM's:
:~]# rpm -qiaf /home/rpmbld/rpmbuild/RPMS/noarch/localrepo-1-0.noarch.rpm
Name : localrepo Relocations: (not relocatable)
Version : 1 Vendor: (none)
Release : 0 Build Date: Wednesday 01 April 2015 05:18:03 AM IST
Install Date: (not installed) Build Host: redhat
Group : System Environment/Base Source RPM: localrepo-1-0.src.rpm
Size : 110 License: GPL
Signature : (none)
Summary : Centos repository
Description :
Create YUM repository pointing to local centos repository.
:~]#
:~]# rpm -ivh /home/rpmbld/rpmbuild/RPMS/noarch/localrepo-1-0.noarch.rpm
Preparing... ########################################### [100%]
1:localrepo ########################################### [100%]
:~]#
:~]# ls -l /etc/yum.repos.d/centos66.repo
-rw-r--r-- 1 root root 110 Apr 1 05:18 /etc/yum.repos.d/centos66.repo
:~]#
this is how the custom RPM's are build, hope this tutorial can help you all for your custom RPM builds.
sharing in public, re-share for all.
No comments:
Post a Comment