On 07 Dec 2015, at 8:44 PM, Steve Cohen <[email protected]> wrote:
> Our organization has a convention for naming rpms. Typically, the rpm will
> have a shorter base name than the Maven project. There is also a convention
> around how releases are named. So we want a name
> like|${shortname}-${project.version}-${release}.noarch.rpm|.
>
> I want to build such rpms using the rpm-maven-plugin rather than older nmake
> technology.
>
> And this is easily accomplished using the plugin's parameters. The rpm
> generated in the target directory has the desired name.
>
> However, when|mvn install|installs this rpm into the maven repository, it
> insists on storing it the "maven
> way":|${project.artifactId}-${project.version}.rpm|
>
> I want the rpm stored in the standard maven repository directory using the
> name that is initially created on package.
>
> I also tried using the maven-install-plugin (install-file goal) and did not
> get the results I was after.
>
> How may I accomplish this?
You don’t change the name of a maven artefact, maven depends on this format and
you break maven if you try and change it.
Turns out yum is also very particular about naming formats, and is different to
maven. What we’ve done to solve this is to create hard links from the entry in
the maven repo to the entry in the yum repo, introspecting the RPM to work out
what the name should be, like this:
RPMDIST=`/bin/rpm -q --qf "%{DISTRIBUTION}\n" -p "${FILE}" | tr -cd
[:alnum:]`
RPMPATH=${YUMPATH}/${REPO}/${RPMDIST}/`/bin/rpm -q --qf "%{ARCH}\n" -p
"${FILE}"`
RPMFILE=${RPMPATH}/`/bin/rpm -q --qf
'%{NAME}-%{VERSION}-%{RELEASE}.%{DISTRIBUTION}.%{ARCH}.rpm\n' -p "${FILE}”`
To be even more specific, we do this automatically when artefacts are published
to our webdav server. We hang the following
script off Apache httpd’s reiiable piped logging feature which auto-processes
the file as soon as an upload is complete:
# reindex the yum repo on rpm PUT
CustomLog "|/usr/sbin/reindex-yum-filter-repo-greenhouse
/var/lib/httpd-repo-greenhouse/web-docs/maven2
/var/lib/httpd-repo-greenhouse/web-docs/yum" "%m %f"
Script is as follows:
#!/bin/bash
# Filter logfile lines from httpd-dev
#
# We are only interested in PUT requests, and we only consider the filename
# resolved by httpd, so we don't use any untainted input in this script.
#
# We extract the DISTRIBUTION (example: el6) and ARCH (example: x86_64, noarch)
# fields to determine the yum repo to link the RPM to.
MAVENPATH="$1"
YUMPATH="$2"
LOCK="/tmp/$0.lock"
trap "rm -f ${LOCK}" EXIT
while read LINE
do
if [ "x${LINE:0:4}" == "xPUT " ]; then
FILE=`/usr/bin/readlink -f "${LINE:4}"`
if [[ "${FILE}" =~ ^${MAVENPATH}/.*[.]rpm$ ]]; then
if [[ "${FILE}" =~ SNAPSHOT ]]; then
RPMREPO="snapshot"
else
RPMREPO="master greenhouse"
fi
touch "${LOCK}"
for REPO in ${RPMREPO}; do
RPMDIST=`/bin/rpm -q --qf "%{DISTRIBUTION}\n" -p "${FILE}" | tr -cd
[:alnum:]`
RPMPATH=${YUMPATH}/${REPO}/${RPMDIST}/`/bin/rpm -q --qf "%{ARCH}\n" -p
"${FILE}"`
RPMFILE=${RPMPATH}/`/bin/rpm -q --qf
'%{NAME}-%{VERSION}-%{RELEASE}.%{DISTRIBUTION}.%{ARCH}.rpm\n' -p "${FILE}"`
if [ ! -f "${RPMFILE}" ]; then
/bin/rpm -q --quiet -p "${FILE}" && \
/bin/mkdir -p "${RPMPATH}" && \
/bin/ln "${FILE}" "${RPMFILE}" && \
/usr/bin/createrepo -q --update --checkts
"${YUMPATH}/${REPO}/${RPMDIST}"
fi
done
rm -f "${LOCK}"
fi
fi
done
Regards,
Graham
—
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]