There are several RPM builds of haproxy that can be found throughout the Internet. There are GitHub repositories with customized .spec files to build your own RPM. In fact, there is an haproxy.spec file that may be found in the official .tar.gz file under examples. However, here is a unique way to build one as close to the original, haproxy-1.5.4-2.el6.rpm, official build found in the CentOS 6 base repositories.
Using rpmrebuild, it was plain that the official build used this source, haproxy-1.5.4-2.el6.src.rpm.
Download Dependancies
yum install -y rpm-build rpmdevtools pcre-devel openssl-devel zlib-devel redhat-rpm-config gcc gcc-c++ make libstdc++-devel wget rpmlint vim rpmdev-setuptree
Create your build environment
rpmdev-setuptree cd ~/rpmbuild/SOURCES/
Download and Build
# Download the original source RPM used to create the official yum update RPM wget http://vault.centos.org/6.7/os/Source/SPackages/haproxy-1.5.4-2.el6.src.rpm # Extract to ~/rpmbuild/SOURCES/ rpm2cpio haproxy-1.5.4-2.el6.src.rpm | cpio --extract --make-directories --verbose # Copy the haproxy.spec file to correct location cp ~/rpmbuild/SOURCES/haproxy.spec ~/rpmbuild/SPECS/haproxy.spec # Modify the haproxy.spec file sed -i "/Version: / s/$(grep ^Version haproxy.spec | cut -d" " -f2-)/1.5.16/g" ~/rpmbuild/SPECS/haproxy.spec # Download the dependencies spectool -R -g ~/rpmbuild/SPECS/haproxy.spec # Bump the build and comment it. rpmdev-bumpspec --comment="Build from source" --userstring="Canon <canon@it.megocollector.com>" ~/rpmbuild/SPECS/haproxy.spec # Optional: check the .spec rpmlint ~/rpmbuild/SPECS/haproxy.spec # Build it rpmbuild -ba ~/rpmbuild/SPECS/haproxy.spec
Check out your Build
rpm -qlp /root/rpmbuild/RPMS/x86_64/haproxy-1.5.16-3.el6.x86_64.rpm
Install it
yum install haproxy-1.5.16-3.el6.x86_64.rpm
Bonus
If you attempt to manually build from source ip6range, you may be presented with many, many errors and no build.
./BUILD/haproxy-1.5.16/contrib/ip6range:
total 16
-rw-r–r–. 1 root root 160 Mar 13 19:16 Makefile
-rw-r–r–. 1 root root 11687 Mar 13 19:16 ip6range.c
For reasons that can be found elsewhere, the structure of one of the helper files and that of the ip6range.c file had changed. Do this to fix it and use make to build it. Enjoy.
sed -i 's/in6_u.u6_addr32/__in6_u.__u6_addr32/g' ip6range.c make
Sources
- https://github.com/kevholmes/haproxy-rpm
- https://github.com/nmilford/rpm-haproxy
- https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html
- https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Building_a_Package.html
- https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Testing_a_Package.html