@ctron ctron released this Jul 1, 2015 · 301 commits to master since this release

New and Noteworthy

Improved performance

Thanks to @afischer211 we were able to dramatically improve the performance of Package Drone when it comes to uploading artifacts and running modify operations on channels. Although measuring performance is not always a that simple, here are a few figures.

Adding a plain maven artifact using the Maven deploy call took about 15 seconds in one specific setup, and now only takes about 2 seconds. The channel had a few hundred artifacts and has to perform a full channel aggregation after each upload for creating P2 indexes.

In another example re-creating a full channel took over 40 minutes, which got improved to only a few minutes now. In this case the cleanup aspect was re-scheduled to only run once at the end of the channel operation.

There are a few more scenarios where the performance got improved, and although there are still a few spots which must be optimized, 0.10.0 is a major step in the right direction.

Together with this a few profiling tools where added to the code in order to know what exactly had to be worked on.


Package Drone did have support for DEB and APT for some time now, but RPM and YUM was missing. This release adds extracting meta data from RPM files and allows creating YUM repositories based on this meta data.

The trickiest part of all of this was extracting the information from the RPM files in plain Java. While there is a library called "jRPM", it seems to be unmaintained for quite a while and does not support the functionality we looked for. So we had to create our own. So if you need for a library which parses RPM files, have a look at de.dentrassi.rpm.

Switch to OSGi HttpService based setup

Finally the switch to an OSGi HttpService based setup was made (see #79). It is based on Pax Web, JBoss JSTL, Glassfish based Apache Jasper, Equinox for JSP Servlet support and a few others.

From a front-end side nothing should have changed. However this was one of the most intrusive changes since the development of Package Drone. This allows for future enhancements which depend on the OSGi HttpService support. Like JAX-RS support for a nicer REST API.

Anonymous usage statistics

Now this is a difficult topic, so the first information is: Yes, you can disable it by simply setting the system property drone.usage.disable to true, even during runtime. And most probably you might have a Jenkins instance running as well, which does exactly the same (see http://stats.jenkins-ci.org/jenkins-stats/).

So why do we need this? In order to know how Package Drone is being used. And what do we transmit? There is a full explanation on admin page in the running instance. In short we do transmit a short JSON fragment (which you can see in the admin page) which contains a random and changing ID, the version, and the number of artifacts and bytes stored.

reCAPTCHA support

A minor but interesting feature for installations which allow self-registration. It is possible to activate reCAPTCHA support with a few clicks in Package Drone now. Right now it is only used for the registration process. But there are a few other places where this could be useful in the future.

Eclipse Oomph based development setup

Thanks to Oomph (yes, that's the name) setting up a Package Drone development system now has become a lot easier. Starting the [Eclipse installer](https://wiki.eclipse.org Eclipse_Installer) and selecting "Package Drone" from the "GitHub" branch will setup you up a full blown Eclipse IDE, containing all the necessary plugins and settings, check out the source code, import all projects and configure your target platform. 👍

Changed behavior

OSGi R5 uses channel cache

The OSGi R5 adapter now makes use of the channel cache in order to serve the index files quicker. This also requires to actually add the OSGi R5 aspect to a channel, which was not required in the past.

Also see #99

Switch to Apache Felix for providing the ConfigurationAdmin service

The configuration storage of OSGi has been switched from the Equinox based implementation to the implementation provided by Apache Felix. Equinox is still the OSGi container, but the ConfigurationAdmin of Felix is now used. This was done in order to the fix annoying issue #103, which caused the configuration store to go corrupt on each Package Drone upgrade.

As an extra feature the whole configuration is now stored in plain and simple properties files. Defaulting to the directory /var/libpackage-drone-server/cm when the RPM or DEB installation method is used. This also allows external backup programs to pick these up if desired.

Changed system properties for ports

Due to the switch from plain Jetty to Pax Web, the system properties for ports and hosts have changed. These follow now the standard OSGi HttpService properties.

Name Description Default
org.osgi.service.http.port Port to bind to 8080
org.ops4j.pax.web.listening.addresses The network address to bind to (any)

Also see: https://ops4j1.jira.com/wiki/display/paxweb/Basic+Configuration

Improvements and bug fixes

  • #97, #108: The lock manager was re-written
  • #104: P2 has a special handling of system.bundle and now so does Package Drone
  • #106: fix detection of maven artifacts to also find non-pom direct artifacts
  • #112: add workaround for Eclipse Link issue 289771
  • #115: added a artifact count to the channel overview
  • Lock all channels when performing modification with MySQL
  • Some e-mails get sent out as HTML e-mail now (multipart alternative)
  • added the subtitle to the HTML page title

Known issues

Installing the release requires to re-configure the system due to the switch to Apache Felix. However this is the last time this is required. A backup can be made before upgrading and can be imported later on.

MySQL still is not recommended for running Package Drone.



Assets 6