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. The build system I'm using is CentOS 7.
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