wiki:RpmBuilding

Version 13 (modified by jorrit, 6 years ago) (diff)

--

Building RPMs with Mock

I'll try to write down what I need to do to set-up a simple rpm build system using mock, whereby some packages have dependencies on my own builds.

Requirements for the build system

yum install mock createrepo yum-utils

Create the following directories to allow inspection and modification of RPM packages

mkdir -p ~/rpm/BUILD ~/rpm/RPMS ~/rpm/SOURCES ~/rpm/SPECS ~/rpm/SRPMS

Create a ~/.rpmmacros file with the following content

%HOME       %{expand:%%(cd; pwd)}
%_topdir    %{HOME}/rpm

Any source rpm you now install (as regular user) will end up under $HOME/rpm/*

Generate a GPG signing key:

gpg --gen-key

follow the instructions

gpg --export -a 'Jorrit Jorritsma' > ~/RPM-GPG-KEY-jorrit

Import your public key to your RPM DB

sudo rpm --import RPM-GPG-KEY-jorrit

Add the following to your ~/.rpmmacros file

%_signature gpg
%_gpg_path ~/.gnupg
%_gpg_name Jorrit Jorritsma
%_gpgbin /usr/bin/gpg

Singing of packages can now be done with:

rpm --addsign *.rpm

Create a rpm repository under your web server:

sudo mkdir -p /var/www/html/repos
sudo chown jorrit. /var/www/html/repos
mkdir /var/www/html/repos/x86_64
createrepo /var/www/html/repo/x86_64

Add your own repo to your mock config for the target build (e.g. /etc/mock/epel-7-x86_64.cfg)

[jj]
name=jj
baseurl=http://centos7.fritz.box/repo/x86_64/
gpgcheck=0
skip_if_unavailable=False

get the src rpms

mkdir ~/asterisk
cd asterisk
wget -r --no-parent -A *.src.rpm https://ast.tucny.com/repo/

Build the packages

move to the package download location

cd asterisk/ast.tucny.com/repo/asterisk-common/el7/SRPMS

Build

mock --target=epel-7-x86_64 --rebuild dahdi-linux-2.11.1-2.el7.centos.src.rpm
rpm --addsign /var/lib/mock/epel-7-x86_64/result/*.rpm
cp /var/lib/mock/epel-7-x86_64/result/*src.rpm /var/www/html/repo/SRPMS/
rm -f /var/lib/mock/epel-7-x86_64/result/*src.rpm
cp /var/lib/mock/epel-7-x86_64/result/*.rpm /var/www/html/repo/x86_64
createrepo --update /var/www/html/repo/x86_64

mock --target=epel-7-x86_64 --rebuild dahdi-firmware-2.11.0-2.el7.src.rpm             # wrong change log dates, after correction and re-creation of src rpm it compiles nicely
mock --target=epel-7-x86_64 --rebuild dahdi-tools-2.11.1-1.el7.src.rpm                # had to re-create src.rpm from spec file before it wanted to set the arch correct in output (?)
mock --target=epel-7-x86_64 --rebuild asterisk-sounds-core-1.5.0-1.el7.centos.src.rpm 
mock --target=epel-7-x86_64 --rebuild asterisk-moh-opsound-2.03-1.el7.centos.src.rpm
mock --target=epel-7-x86_64 --rebuild libss7-2.0.0-1.el7.centos.src.rpm
mock --target=epel-7-x86_64 --rebuild libresample-0.1.3-13.el7.centos.src.rpm
mock --target=epel-7-x86_64 --rebuild libpri-1.6.0-1.el7.centos.src.rpm               # had to re-create src.rpm from spec file before it wanted to set the arch correct in output (?)
mock --target=epel-7-x86_64 --rebuild iksemel-1.5-0.1.git978b733.el7.src.rpm
mock --target=epel-7-x86_64 --rebuild asterisk-15.5.0-2.el7.src.rpm