O bit mais básico é que você precisa da ferramenta rpmbuild e precisa escrever um arquivo de especificação. Eu tenho o seguinte script que leva um arquivo de especificação e uma árvore como ficaria instalado na máquina de destino:
#!/bin/bash
set -e
SPECFILE=$1
shift
SOURCEDIR=$1
BASEDIR=/usr/src/rpm/BUILD
[ -e ${BASEDIR} ] || BASEDIR=/usr/src/redhat/BUILD
BASENAME=$(grep -E '^Name:' $SPECFILE | awk '{ print $2 }')
VERSION=$(grep -E '^Version:' $SPECFILE | awk '{ print $2 }')
RELEASE=$(grep -E '^Release:' $SPECFILE | awk '{ print $2 }')
BUILDROOT=${BASEDIR}/${BASENAME}-${VERSION}-${RELEASE}
rm -rf ${BUILDROOT}
cp -r ${SOURCEDIR} ${BUILDROOT}
export SOURCEDIR BUILDROOT
rpmbuild --buildroot=${BUILDROOT} -bb $SPECFILE
Para detalhes sobre arquivos de especificações, consulte Especificação de especificações de RPM.