Home Linux Distros Redhat
Script to automate the creation of a rpm that runs a script

# test if 3 arguments are passed to the command
if [[ $# -ne 3 ]]
then
    echo "Usage: `basename $0` <packageName> <version> </path/to/script>"
    exit 1
fi

PKGNAME=$1
VERSION=$2
SCRIPTPATH=$3
SCRIPT="$(basename $SCRIPTPATH)"

if [[ ! -f $SCRIPTPATH ]]
then
    echo "$SCRIPTPATH does not exist. Exiting ..."
    exit 1
fi

if ! rpm -q rpm-build
then
    echo "rpm-build must be installed. Exiting ..."
    exit 1
fi

if ! rpm -q rpmdevtools
then
    echo "rpmdevtools must be installed. Exiting ..."
    exit 1
fi

if [[ ! -d ~/rpmbuild ]]
then
    rpmdev-setuptree
fi

if [[ -d ~/rpmbuild/$PKGNAME-$VERSION ]]
then
    echo "$PKGNAME-$VERSION already exist. Exiting ..."
    exit 1

fi

mkdir  ~/rpmbuild/$PKGNAME-$VERSION
cp $SCRIPTPATH ~/rpmbuild/$PKGNAME-$VERSION/$SCRIPT

tar czvf  ~/rpmbuild/SOURCES/$PKGNAME-$VERSION.tgz -C ~/rpmbuild $PKGNAME-$VERSION

cat > ~/rpmbuild/SPECS/$PKGNAME-$VERSION.spec  <<EOF
Name: $PKGNAME
Version: $VERSION
Release:        1%{?dist}
Summary: Package used to run a script on servers.

Group: JLG/SCRIPT
License: GPL
URL: http://www.jlgirard.com
Source0: $PKGNAME-$VERSION.tgz

Vendor: jlg

%description
Package used to run a script on servers.
%prep
%setup -q

%build

%install
rm -rf \$RPM_BUILD_ROOT
install -d  \$RPM_BUILD_ROOT/usr/local/script
install $SCRIPT \$RPM_BUILD_ROOT/usr/local/script/$SCRIPT

%clean
rm -rf \$RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc
/usr/local/script/$SCRIPT

%post
/usr/local/script/$SCRIPT

%changelog
EOF

# if rpmbuild -ba --sign ~/rpmbuild/SPECS/$PKGNAME-$VERSION.spec >/dev/null 2>&1
if rpmbuild -ba ~/rpmbuild/SPECS/$PKGNAME-$VERSION.spec >/dev/null 2>&1
then
    echo "RPM is ready:  ~/rpmbuild/RPMS/x86_64/$PKGNAME-$VERSION-1.el6.x86_64.rpm"
else
    echo "There was an error creating the rpm ..."
fi


Signing a rpm

Create GPG Key pairs if needed

gpg2 --gen-key


Add to ~/.rpmmacros to use the key

%_signature gpg
%_gpg_name <keyID>


Sign the rpm

rpm --resign </path/to/myrpm.rpm>
rpm --checksig -v </path/to/myrpm.rpm>


Export public key to file. Used if rpm shared with repo

gpg2 --export --armor keyname > /var/www/html/pub/mykey.asc


Add package to a repo  on satellite

rhnpush -c <repoName>  </path/to/myrpm.rpm>


Install rpm on client from satellite server

spacewalk-channel -a -c <channelName>
rpm --import <http://satellite.url/pub/mykey.asc>