Simplest Enterprise Continuous Integration Solutions

Saturday, July 28, 2012

Enterprise Linux: Build a binary RPM package

# Build el5 RPM from el5 OS

# root setup rpm build requires RPMs - redhat-rpm-config, rpm-build on EL5:

[root@linux.el5.x86_64-rpm-server ~]# uname -a
Linux linux64-rpm-server 2.6.32-100.0.19.el5 #1 SMP Fri Sep 17 17:51:41 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@linux.el5.x86_64-rpm-server ~]# rpmbuild --version
RPM version 4.4.2.3
[root@linux.el5.x86_64-rpm-server ~]# yum install redhat-rpm-config
Loaded plugins: security
Setting up Install Process
Package redhat-rpm-config-8.0.45-32.0.1.el5.noarch already installed and latest version
Nothing to do
[root@linux.el5.x86_64-rpm-server ~]# yum install rpm-build
Loaded plugins: security
Setting up Install Process
Package rpm-build-4.4.2.3-18.el5.x86_64 already installed and latest version
Nothing to do

# none root user (i.e. rpm_build_user) setup RPM build environment:

su - rpm_build_user
[rpm_build_user@linux.el5.x86_64-rpm-server ~]$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[rpm_build_user@linux.el5.x86_64-rpm-server ~]$ mkdir -p ~/rpmbuild/RPMS/{noarch,i686,x86_64} 
[rpm_build_user@linux.el5.x86_64-rpm-server ~]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
[rpm_build_user@linux.el5.x86_64-rpm-server ~]$ rpm --eval '%{_sourcedir}'
/home/rpm_build_user/rpmbuild/SOURCES

# RPM spec file example

#
# spec file for package 'name' (version 'v')
#
# The software is released as specified below.
#
Name: <software_name>
Version: <software_version>
Release: <software_release>%{?dist}
Summary: <software_name>
Vendor: <vendor_name>
License: <Commercial | Free>
URL: <vendor_url>
Group: <Server | Application>
BuildArch: <noarch | i686 | x86_64>
Prefix: /usr/local

%description
This RPM contains <software_name> from <vendor_name>

%pre

%post

%preun

%files
%defattr(-,root,root)
%doc

/usr/local/<software_name>

%changelog
* Sat Jul 28 2012 <rpm_build_user> <rpm_build_user@rpm_build_user.com>
- Initial Spec File

# RPM spec file location

[rpm_build_user@linux.el5.x86_64-rpm-server ~]$ find /home/rpm_build_user/rpmbuild
/home/rpm_build_user/rpmbuild
/home/rpm_build_user/rpmbuild/RPMS
/home/rpm_build_user/rpmbuild/RPMS/x86_64
/home/rpm_build_user/rpmbuild/RPMS/i386
/home/rpm_build_user/rpmbuild/RPMS/noarch
/home/rpm_build_user/rpmbuild/BUILD
/home/rpm_build_user/rpmbuild/SOURCES
/home/rpm_build_user/rpmbuild/SPECS
/home/rpm_build_user/rpmbuild/SPECS/<software_name>.spec
/home/rpm_build_user/rpmbuild/SRPMS

# build RPM binary package

[rpm_build_user@linux.el5.x86_64-rpm-server ~]$ rpmbuild -bb /home/rpm_build_user/rpmbuild/SPECS/<software_name>.spec --target <noarch|i686|x86_64>
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.27208
+ umask 022
+ cd /home/rpm_build_user/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.27208
+ umask 022
+ cd /home/rpm_build_user/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.27208
+ umask 022
+ cd /home/rpm_build_user/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: <software_name>-<software_version>-<software_release>
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot}
Wrote: /home/rpm_build_user/rpmbuild/RPMS/noarch/<software_name>-<software_version>-<software_release>.<noarch | i686 | x86_64>.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.88637
+ umask 022
+ cd /home/rpm_build_user/rpmbuild/BUILD
+ exit 0

# query installed rpm package information

[root@linux.el5.x86_64-dev-server ~]# rpm -qi <software_name>
Name        : <software_name>  Relocations: /usr/local
Version     : <software_version>                             Vendor: <vendor_name>
Release     : <software_release>                             Build Date: Sat 28 Jul 2012 03:28:58 PM EDT
Install Date: Sat 28 Jul 2012 03:32:54 PM EDT      Build Host: linux.el5.x86_64-rpm-server
Group       : <Server | Application>                        Source RPM: <software_name>-<software_version>-<software_release>.<noarch | i686 | x86_64>.src.rpm
Size        : 17173222                         License: <Commercial | Free>
Signature   : (none)
URL         : <vendor_url>
Summary     : <software_name>-<software_version>-<software_release>.<noarch | i686 | x86_64>
Description :
This RPM contains <software_name> from <vendor_name>

Saturday, July 7, 2012

Enterprise Linux: kickstart install Puppet



#######################################################################

# This is an installation not an upgrade

install
cdrom
lang en_US
# Use text mode install
text
keyboard us
# Do not configure the X Window System
skipx
# for dhcp
network --bootproto=dhcp --device=eth0 --onboot=on --hostname <computer_node_name>
rootpw N0th!ng
authconfig --useshadow --enablemd5
selinux --disabled
timezone --utc America/New_York
firewall --disabled
# Reboot after installation
reboot

bootloader --location=mbr --append="console=ttyS0,9600n8"
clearpart --all --initlabel

%packages

@base

%post 

#!/bin/sh

# create puppet yum.repo config file
cat <<EOF > /etc/yum.repos.d/puppetlabs.repo
[puppetlabs]
name=Puppet Labs Packages
baseurl=http://linux64-yum-repo-server/puppet/el/5/products/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://linux64-yum-repo-server/puppet/RPM-GPG-KEY-puppetlabs
[puppetlabs_dependencies]
name=Puppet Labs Packages
baseurl=http://linux64-yum-repo-server/puppet/el/5/dependencies/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://linux64-yum-repo-server/puppet/RPM-GPG-KEY-puppetlabs
EOF

# create yum puppet install script

cat <<EOF > /usr/local/yum_install_puppet.sh
#!/bin/sh
# make sure only runonce after reboot when rpm didn't get install yet
if [[ \`yum list installed | grep puppet\` == "" ]]; then
   yum -y install puppet
   # configure Puppet agent installation
   echo "    certname = <computer_node_name>" >> /etc/puppet/puppet.conf
   echo "    server = <puppet_master_host_name>" >> /etc/puppet/puppet.conf
   # start puppet agent service
   /etc/init.d/puppet start
fi
EOF
chmod a+x /usr/local/yum_install_puppet .sh

# creat runonce after reboot cron

echo "@reboot /usr/local/yum_install_puppet >/dev/null 2>&1" > /var/spool/cron/root