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]

Reply via email to