legacy-wiki
Lab packageCI
Recovered from the older tannerjc.net wiki snapshot dated January 23, 2016.
workspace
- yum groupinstall Development Tools
- yum install mercurial
- yum install rpmlint
- yum instal ruby rubygems ruby-devel
- gem install fpm
- https://github.com/jctanner/mfp
mkdir ~/rpmbuild
mkdir ~/rpmbuild/SPECS
mkdir ~/rpmbuild/SOURCES
mfp
- mkdir ~/github; cd ~/github ; git clone git://github.com/jctanner/mfp.git
- mkdir bin ; ln -s /home/rpmdevel/github/mfp/mfp bin/mfp
specs
create spec file
mfp package.recipe --speconly
cp /tmp/package.spec ~/rpmbuild/SPECS
validate the spec file
rpmlint name.spec
validate spec with rpmbuild
rpmbuild -ba name.spec
python packages
python setup.py bdist_rpm --spec-only --build-requires python --requires python-rpmfluff,rpm-python
python setup.py bdist_rpm --source-only --build-requires python --requires python-rpmfluff,rpm-python
cp build/bdist.linux-x86_64/rpm/SRPMS/mfp-0.2.0-1.src.rpm ~/rpmbuild/SRPMS/
mock -r fedora-19-x86_64 rpmbuild/SRPMS/mfp-0.2.0-1.src.rpm
mock
- creates a chroot for the builds based on the defined OS config
- buildrequires in spec files should be one package per line
- ie: BuildRequires package1\nBuildRequires package2
- putting them all in the same line, causes none of them to get installed
- make sure you copy the artifact(s) out of the results dir, because they won’t be there next time to you run something
create an EL6 release SRPM with mock
mock -r epel-6-x86_64 –buildsrpm –spec SPECS/bar.spec –sources SOURCES/*
INFO: Done(bar.spec) Config(epel-6-x86_64) 1 minutes 42 seconds
INFO: Results and/or logs in: /var/lib/mock/epel-6-x86_64/result
Finish: run
[rpmdevel@jenkins rpmbuild]$ ll /var/lib/mock/epel-6-x86_64/result
total 1920
-rw-rw-r-- 1 root mock 1925831 Jul 5 19:46 available_pkgs
-rw-rw-r-- 1 rpmdevel mock 2016 Jul 5 19:46 bar-0.1-1.el6.src.rpm
-rw-rw-r-- 1 rpmdevel mock 1042 Jul 5 19:46 build.log
-rw-rw-r-- 1 rpmdevel mock 23609 Jul 5 19:46 root.log
-rw-rw-r-- 1 rpmdevel mock 905 Jul 5 19:46 state.log
build EL6 RPM with mock
mock -r epel-6-x86_64 /var/lib/mock/epel-6-x86_64/result/bar-0.1-1.el6.src.rpm
[rpmdevel@jenkins rpmbuild]$ mock -r epel-6-x86_64 SRPMS/bar-0.1-1.el6.src.rpm
INFO: mock.py version 1.1.32 starting...
Start: init plugins
INFO: selinux disabled
Finish: init plugins
Start: run
INFO: Start(SRPMS/bar-0.1-1.el6.src.rpm) Config(epel-6-x86_64)
Start: lock buildroot
Start: clean chroot
INFO: chroot (/var/lib/mock/epel-6-x86_64) unlocked and deleted
Finish: clean chroot
Finish: lock buildroot
Start: chroot init
Start: lock buildroot
Mock Version: 1.1.32
INFO: Mock Version: 1.1.32
INFO: calling preinit hooks
INFO: enabled root cache
Start: unpacking root cache
Finish: unpacking root cache
INFO: enabled yum cache
Start: cleaning yum metadata
Finish: cleaning yum metadata
INFO: enabled ccache
Start: device setup
Finish: device setup
Start: yum update
Start: Outputting list of available packages
Finish: Outputting list of available packages
Finish: yum update
Finish: lock buildroot
Finish: chroot init
INFO: Installed packages:
Start: build phase for bar-0.1-1.el6.src.rpm
Start: device setup
Finish: device setup
Start: build setup for bar-0.1-1.el6.src.rpm
Finish: build setup for bar-0.1-1.el6.src.rpm
Start: rpmbuild -bb bar-0.1-1.el6.src.rpm
Start: Outputting list of installed packages
Finish: Outputting list of installed packages
Finish: rpmbuild -bb bar-0.1-1.el6.src.rpm
Finish: build phase for bar-0.1-1.el6.src.rpm
INFO: Done(SRPMS/bar-0.1-1.el6.src.rpm) Config(epel-6-x86_64) 0 minutes 21 seconds
INFO: Results and/or logs in: /var/lib/mock/epel-6-x86_64/result
Finish: run
[rpmdevel@jenkins rpmbuild]$ file /var/lib/mock/epel-6-x86_64/result/*
/var/lib/mock/epel-6-x86_64/result/available_pkgs: C++ source, ASCII text
/var/lib/mock/epel-6-x86_64/result/bar-0.1-1.el6.src.rpm: RPM v3.0 src
/var/lib/mock/epel-6-x86_64/result/bar-0.1-1.el6.x86_64.rpm: RPM v3.0 bin i386/x86_64 bar-0.1-1.el6
/var/lib/mock/epel-6-x86_64/result/build.log: ASCII text, with very long lines
/var/lib/mock/epel-6-x86_64/result/installed_pkgs: ASCII text
/var/lib/mock/epel-6-x86_64/result/root.log: ASCII text, with very long lines
/var/lib/mock/epel-6-x86_64/result/state.log: ASCII text
Examples
conary
[rpmdevel@jenkins ~]$ cat recipes/conary.recipe
class TestPackage(RpmPackage):
name = conary
version = 2.4.13
release = 1
description = conary package manager
license = Apache 2.0
vendor = rpath
packager = tanner.jc@gmail.com
url = https://bitbucket.org/rpathsync/conary
# requires: python-devel, openssl-devel, elfutils-libelf-devel, sqlite-devel
def setup(r):
r.addArchive(https://bitbucket.org/rpathsync/conary/get/conary-2.4.13.tar.gz)
# cd rpathsync-conary-9e82ab6709a2
# make minimal libelf=-lelf
r.Make(options=minimal libelf=-lelf)
# make install NO_KID=1
r.MakeInstall(options=NO_KID=1)
mfp recipes/conary.recipe --speconly
mock -r epel-6-x86_64 --buildsrpm --spec SPECS/conary.spec --sources SOURCES/conary* --copyin SOURCES/conary* builddir/build/SOURCES/
cd ~ ; mock -r epel-6-x86_64 --buildsrpm --spec rpmbuild/SPECS/conary.spec --sources ~/rpmbuild/SOURCES
cp /var/lib/mock/epel-6-x86_64/result/conary-2.4.13-1.src.rpm ~/rpmbuild/SRPMS/
mock -r epel-6-x86_64 --installdeps rpmbuild/SRPMS/conary-2.4.13-1.src.rpm
mock -r epel-6-x86_64 rpmbuild/SRPMS/conary-2.4.13-1.src.rpm
cp /var/lib/mock/epel-6-x86_64/result/conary-2.4.13-1.x86_64.rpm ~/rpmbuild/RPMS/x86_64/conary-2.4.13-1.el6.x86_64.rpm