maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Graham Leggett <minf...@sharp.fm>
Subject Re: [rpm-maven-plugin] how to control the name under which rpm is stored in m2 repository?
Date Mon, 07 Dec 2015 20:48:32 GMT
On 07 Dec 2015, at 8:44 PM, Steve Cohen <scohen@javactivity.org> 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: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Mime
View raw message