EucalyptusInMainSpec

Differences between revisions 17 and 18
Revision 17 as of 2009-06-29 13:13:10
Size: 11809
Editor: lns-bzn-48f-81-56-218-246
Comment:
Revision 18 as of 2009-07-02 15:48:09
Size: 9221
Editor: lns-bzn-48f-81-56-218-246
Comment:
Deletions are marked like this. Additions are marked like this.
Line 34: Line 34:
 * Abandoned stuff
   * OpenSAML 1.1/Java
Line 42: Line 40:
 * Use a specific eucalyptus-hibernate package instead of generic libhibernate3-java: saves 34+ packages
 * Include libhibernate-entity-manager in eucalyptus-hibernate: saves 10+ packages
 * Include libhibernate-[commons-]annotations in eucalyptus-hibernate: saves 2 packages (?)
 * Use a specific eucalyptus-javadeps with hibernate/ehcache/spring: saves 60+ packages
Line 46: Line 42:
 * Add arch-based recommend in antlr3 + build as "any": removed antlr3-gcj from list
 * Add arch-based recommend in libbcprov-java + build as "any": removed libbcprov-java-gcj from list
 * Avoid dependencies on Glassfish packages, use geronimo-specs-* and jakarta-taglibs instead
Line 51: Line 46:
||<rowbgcolor="#cccccc"> '''Binary Package''' || '''Runtime dep of''' || '''Extra Build dep of''' ||
|| antlr3 || ej || ||
|| groovy || ej || ||
|| janino || ej || ||
|| junit4 || groovy || ||
|| libasm2-java || ej, groovy || ||
|| libasm3-java || || ej, libjarjar-java ||
|| libasm-java || ej, libcglib2.1-java || ||
|| libaspectwerkz2-java || || libcglib2.1-java ||
|| libavalon-framework-java || ej || ||
|| libbackport-util-concurrent-java || libdom4j-java || ||
|| libbcprov-java || ej || ||
|| libc3p0-java || ej || ||
|| libcglib2.1-java || ej || ||
|| libclassworlds-java || groovy || ||
|| libcommons-cli-java || ej, groovy || ||
|| libcommons-codec-java || ej, libjaxme-java, libcommons-httpclient-java || ||
|| libcommons-fileupload-java || ej || ||
|| libcommons-httpclient-java || ej || ||
|| libcommons-io-java || ej, libcommons-fileupload-java || ||
|| libcommons-jxpath-java || ej || ||
|| libconcurrent-java || || libaspectwerz2-java ||
|| libdom4j-java || ej, libjaxen-java || ||
|| libgeronimo-activation-1.1-spec-java || ej || ||
|| libgeronimo-j2ee-connector-1.5-spec-java || ej || ||
|| libgeronimo-javamail-1.4-spec-java || ej || ||
|| libgeronimo-javamail-1.4-provider-java || ej || ||
|| libgeronimo-jms-1.1-spec-java || ej || ||
|| libgeronimo-jta-1.0.1b-spec-java || ej || ||
|| libgeronimo-stax-1.0-spec-java || ej || ||
|| libgoogle-collections-java || ej || ||
|| libjarjar-java || || libaspectwerkz2-java ||
|| libjavassist-java || ej || ||
|| libjaxen-java || ej, libdom4j-java, libxom-java || ||
|| libjaxme-java || libdom4j-java || ||
|| libjdom1-java || ej, libcommons-jxpath-java, libjaxen-java || ||
|| libjettison-java || ej || libxstream-java ||
|| libjibx-java || ej || ||
|| libjmock-java || || libqdox-java ||
|| libjoda-time-java || || libxstream-java ||
|| libjrexx-java || libaspectwerkz2-java || ||
|| libjunitperf-java || || libdom4j-java ||
|| libmockobjects-java || ej, groovy || ||
|| libow-util-ant-tasks-java || || libasm-java, libasm2-java, libasm3-java ||
|| libqdox-java || libjibx-java || ej, libcommons-attributes-java ||
|| libslf4j-java || ej || ||
|| libstringtemplate-java || antlr3 || ||
|| libtrove-java || || libaspectwerkz2-java ||
|| libwoodstox-java || libjibx-java || ||
|| libxml-commons-external-java || ej || ||
|| libxml-security-java || ej || ||
|| libxom-java || ej || ||
|| libxpp2-java || libdom4j-java || ||
|| libxpp3-java || ej, libdom4j-java, groovy, libjibx-java || ||
|| libxstream-java || ej, groovy || ||

=== New dependencies expected from Eucalyptus 1.6 ===
{{{
antlr3
groovy
ivy (groovy)
janino
junit4 (groovy, spring)
libasm2-java
libasm3-java (libmvel-java)
libasm-java (libcglib2.1-java)
libaspectwerkz2-java (libcglib2.1-java)
libaxiom-java
libbackport-util-concurrent-java (libdom4j-java, spring)
libbcprov-java
libc3p0-java
libcglib2.1-java
libclassworlds-java (groovy)
libcommons-beanutils-java
libcommons-cli-java
libcommons-codec-java (libjaxme-java)
libcommons-collections3-java
libcommons-discovery-java
libcommons-fileupload-java
libcommons-io-java
libcommons-jxpath-java
libcommons-vfs-java (ivy)
libdnsjava-java
libdom4j-java
libeasymock-java (libhamcrest-java)
eucalyptus-javadeps
libgeronimo-activation-1.1-spec-java
libgeronimo-j2ee-connector-1.5-spec-java
libgeronimo-javamail-1.4-provider-java
libgeronimo-javamail-1.4-spec-java
libgeronimo-jms-1.1-spec-java
libgeronimo-jta-1.0.1b-spec-java
libgeronimo-stax-1.0-spec-java
libgoogle-collections-java
libhamcrest-java (junit4)
libjavassist-java
libjaxen-java
libjaxme-java (libdom4j-java)
libjdom1-java (libcommons-jxpath-java, libjaxen-java)
libjettison-java
libjetty-java
libjibx-java
libjmock-java (libqdox-java)
libjoda-time-java (libxstream-java)
libjrexx-java (libaspectwerkz2-java)
libjug-asl-java
libjunitperf-java (libdom4j-java)
libmockobjects-java (groovy)
libmvel-java
libnetty-java
libow-util-ant-tasks-java (libasm2-java)
libqdox-java (libjibx-java, spring)
libslf4j-java
libstringtemplate-java (antlr3)
libtrove-java (libaspectwerkz2-java)
libwoodstox-java (libjibx-java)
libwsdl4j-java
libxml-security-java
libxom-java
libxpp2-java (libdom4j-java)
libxpp3-java
libxstream-java (groovy)
}}}

=== New dependencies expected for Eucalyptus 1.6 ===
Line 111: Line 117:
 * Excalibur  * Excalibur Logkit
Line 114: Line 120:
 * jakarta-taglibs-std
Line 122: Line 129:
 * Spring  * openSAML1.1
Line 126: Line 133:

=== Packages from Eucalyptus-Hibernate ===

 * eucalyptus-hibernate

=== Dependencies from Spring ===

Spring packaging is proposed in Debian, however it brings a little too many dependencies with it and a few alternate choices we would not make (wrt what is already in main).

==== Ubuntu delta ====

 * Use libtomcat6-java instead on libtomcat5.5-java (avoiding libcommons-[el,launcher,modeler]-java)
 * Use tomcat6-examples (or a new "jakarta-taglibs-std") instead of glassfish-appserv
 * Do not build spring-orb, get rid of hibernate/toplink/ibatis/jdo dependencies
 * Migrate glassfish-javaee deps to Geronimo equivalents
 * Use our libehcache ?

==== Core dependencies ====

||<rowbgcolor="#cccccc"> '''Package''' || '''Dependency of''' || '''Extra build dep of''' ||
|| jruby1.1 || || Spring ||
|| libcommons-attributes-java || || Spring ||
|| libaopalliance-java || || Spring ||
|| libjamon-java || || Spring ||
|| libfreemarker-java || Spring || ||
|| velocity || Spring || ||
|| libjexcelapi-java || Spring || ||
|| libstruts1.2-java || Spring || ||
|| libtiles-java || Spring || ||
|| libquartz-java || Spring || ||
|| libxapool-java || Spring || ||
|| libvelocity-tools-java || Spring || ||
|| testng || Spring/test || ||
|| libjdom0-java || libfreemarker-java, velocity || ||
|| libwerken.xpath-java || velocity || ||
|| libcommons-digester-java || libstruts1.2-java, libcommons-validator-java, libcommons-modeler-java, libtiles-java || ||
|| libcommons-validator-java || libstruts1.2-java || ||
|| libcommons-beanutils-java || libtiles-java || ||
 * HttpComponents Core

=== Dependencies from new eucalyptus-javadeps ===

 * jruby1.1 (spring)
 * libaopalliance-java (spring)
 * libcommons-attributes-java (spring)
 * libjamon-java (spring)
 * libjsr107cache-java (ehcache)
 * ...
Line 167: Line 146:
 * 54 from primary list
 * 5 from new Eucalyptus deps
 * 9 from RefactorEucalyptusJavadepsSpec
 * 1 from Euca-hibernate
 * 18 from Refactor/S
pring

'''Total: 87 packages to MIR'''
 * 64 from primary list
 * 6 from new Eucalyptus deps
 * 10 from RefactorEucalyptusJavadepsSpec
 * 5 from new euca-javadeps

'''Total: 85 packages to MIR'''
Line 177: Line 155:
 * Do a minimal Spring rather than take Debian spring, get rid of (at most) 17 packages  * ...
Line 181: Line 159:
=== Create eucalyptus-hibernate ===

Create the specific eucalyptus hibernate libraries, containing the subset of hibernate needed for Eucalyptus and not all the JBoss hooks the libhibernate3-java package contains.
=== Create new eucalyptus-javadeps ===

Create the specific eucalyptus hibernate libraries, containing the subset of hibernate needed for Eucalyptus and not all the JBoss hooks the libhibernate3-java package contains. Same for ehcache and Spring.

Summary

Eucalyptus, as part of the Ubuntu Enterprise Cloud, needs to move to main to be properly supported by Canonical. That means that all runtime and build-time dependencies (and all dependencies of the dependencies) must also move to main. This specification tracks which packages will need to move to main and efforts made to reduce the total number as much as possible.

Release Note

Eucalyptus is now part of the Ubuntu "main" repository, and fully supported by Canonical.

Rationale

Eucalyptus is currently in universe, together with most of its Java library dependencies. Since Eucalyptus is part of the Ubuntu Enterprise Cloud product, it needs to be properly supported by Canonical, which means move to the "main" repository. However, packages in "main" also need to have all their runtime and build-time dependencies in "main" as well. Java software in general heavily makes use of other Java libraries, so this quickly snowballs into a large number of packages to move to main. Furthermore, there isn't so much Java-based software in main already (OpenOffice.org, tomcat6) so even some basic Java libraries need to be moved.

User stories

  • Dave has been trying the UEC technology preview in 9.04 and aims to deploy UEC with the 9.10 release. As it will no longer be a technology preview, it needs to be properly supported.

Assumptions

This spec does not take care of any other non-Java MIR that Eucalyptus may need. iscsitarget for example could be a new 1.6 dependency, and it is in universe currently.

Design

We need to try to keep the number of packages as small as possible in order to avoid MIR team overload. Some hacks (like duplicating some greedy source packages to avoid bringing lots of unnecessary build dependencies) are worth the trouble if they save a significant amount of packages. However Debian doesn't care about keeping the number of dependency packages small, so those hacks don't really make sense from a Debian perspective.

Avoid packages difficult to maintain

  • Large software stacks
    • JBoss (pulled through Hibernate)
    • Glassfish (pulled through glassfish-javaee and glassfish-toplink-essentials, used as build-deps)

Proposed actions for package number reduction

  • Use a specific eucalyptus-javadeps with hibernate/ehcache/spring: saves 60+ packages
  • Remove dependency from libclassworlds-java -> maven-ant-helper: saves 8+ packages

  • Avoid dependencies on Glassfish packages, use geronimo-specs-* and jakarta-taglibs instead

Resulting list (without those from RefactorEucalyptusJavadepsSpec)

antlr3
groovy
ivy (groovy)
janino
junit4 (groovy, spring)
libasm2-java
libasm3-java (libmvel-java)
libasm-java (libcglib2.1-java)
libaspectwerkz2-java (libcglib2.1-java)
libaxiom-java
libbackport-util-concurrent-java (libdom4j-java, spring)
libbcprov-java
libc3p0-java
libcglib2.1-java
libclassworlds-java (groovy)
libcommons-beanutils-java
libcommons-cli-java
libcommons-codec-java (libjaxme-java)
libcommons-collections3-java
libcommons-discovery-java
libcommons-fileupload-java
libcommons-io-java
libcommons-jxpath-java
libcommons-vfs-java (ivy)
libdnsjava-java
libdom4j-java
libeasymock-java (libhamcrest-java)
eucalyptus-javadeps
libgeronimo-activation-1.1-spec-java
libgeronimo-j2ee-connector-1.5-spec-java
libgeronimo-javamail-1.4-provider-java
libgeronimo-javamail-1.4-spec-java
libgeronimo-jms-1.1-spec-java
libgeronimo-jta-1.0.1b-spec-java
libgeronimo-stax-1.0-spec-java
libgoogle-collections-java
libhamcrest-java (junit4)
libjavassist-java
libjaxen-java
libjaxme-java (libdom4j-java)
libjdom1-java (libcommons-jxpath-java, libjaxen-java)
libjettison-java
libjetty-java
libjibx-java
libjmock-java (libqdox-java)
libjoda-time-java (libxstream-java)
libjrexx-java (libaspectwerkz2-java)
libjug-asl-java
libjunitperf-java (libdom4j-java)
libmockobjects-java (groovy)
libmvel-java
libnetty-java
libow-util-ant-tasks-java (libasm2-java)
libqdox-java (libjibx-java, spring)
libslf4j-java
libstringtemplate-java (antlr3)
libtrove-java (libaspectwerkz2-java)
libwoodstox-java (libjibx-java)
libwsdl4j-java
libxml-security-java
libxom-java
libxpp2-java (libdom4j-java)
libxpp3-java
libxstream-java (groovy)

New dependencies expected for Eucalyptus 1.6

  • netty 3.1
  • dnsjava
  • Excalibur Logkit
  • geronimo-ejb_3.0_spec-1.0.1
  • geronimo-jpa_3.0_spec-1.1.1
  • jakarta-taglibs-std

Packages expected from RefactorEucalyptusJavadepsSpec

  • Axiom
  • Drools
  • Mule
  • MVEL
  • WSS4J
  • openSAML1.1
  • JUG
  • Jetty 6
  • Google Web Toolkit
  • HttpComponents Core

Dependencies from new eucalyptus-javadeps

  • jruby1.1 (spring)
  • libaopalliance-java (spring)
  • libcommons-attributes-java (spring)
  • libjamon-java (spring)
  • libjsr107cache-java (ehcache)
  • ...

Total

Total: 85 packages to MIR

Other potential actions to reduce number of packages

  • ...

Implementation

Create new eucalyptus-javadeps

Create the specific eucalyptus hibernate libraries, containing the subset of hibernate needed for Eucalyptus and not all the JBoss hooks the libhibernate3-java package contains. Same for ehcache and Spring.

Those should be shipped as the new "eucalyptus-javadeps" package (which is kept to include all the non-standard libraries required by Eucalyptus).

Implement other hacks

All the other number-reducing hacks should be implemented:

  • Remove dependency from libclassworlds-java -> maven-ant-helper

  • ...

Determine final map of MIR, split into sets

The final dependencies should be determined and splitted into sets that can be handled separately.

Process MIR sets

Several options, to be discussed with MIR team:

  • One bug per set, one task per package in set
  • One bug per package
  • One bug for everything
  • Process outside Launchpad, with one metabug to track progress

Test/Demo Plan

It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during testing, and to show off after release. Please add an entry to http://testcases.qa.ubuntu.com/Coverage/NewFeatures for tracking test coverage.

This need not be added or completed until the specification is nearing beta.

Unresolved issues

None.

BoF agenda and discussion

UDS discussion

Current status

  • 99 packages which would need to move to main.
  • Java in main is currently driven by OpenOffice. Tomcat6 is there, but has few dependencies.

Future

  • Eucalyptus version for Karmic should have fewer dependencies anyway from upstream refactoring.

How can the number of build/runtime dependencies be reduced?

  • Get rid of anything not necessary
    • Geronimo spec packages (already provided by glassfish-j2ee)
  • Move parts into Eucalyptus code
  • Refactor packages (e.g. hibernate pulls in a lot of stuff)
    • Requires multiple source packages or only to promote some resulting binaries to main.
      • (doko recommends duplicating the source package and documenting it)

What could be expected to be refused inclusion to main

  • Active upstream criteria
    • Annogen
    • OpenSAML
    • WSS4J?
  • Known to be insecure
    • Nothing obvious
  • Partial builds (because of non-free dependencies)
    • Mule
    • We don't really care

Size issues (adding to default CD)

  • GWT is 6MB of binary
    • 1.6 should be more granular and work with existing java packages more
  • JRuby is 3MB
    • Just be a build-time dependency of GWT
  • libjgroups-java, 3MB. Not needed ?
  • glassfish-toplink-essentials, 2.4MB, comes from hibernate
  • Avoiding JDK would save about 50MB of CD space
  • Avoiding GCJ would save about 20MB

Can we use the new Spring packaging from Debian?

  • Not included yet in Debian, but work is underway
  • Might make too hard choices for us ? Testing from Eucalyptus side needed.

Safety net

  • Keep a eucalyptus-javadeps package to drop in any problematic parts which can't be fixed (hibernate?).
    • One tiny part of Drools

Action Summary

  • Which Eucalyptus version we'll use in Karmic and its dependencies?
  • Can we use Spring from Debian?
  • What can we do to reduce Hibernate size?
    • Will it be acceptable to move JBoss to main?
  • JDK dependency investigation
  • Ask Colin about blacklisting for the server seed only to solve GCJ issue
  • Once it's known what is required, start preparing/filing MIRs to avoid a last minute panic.


CategorySpec

EucalyptusInMainSpec (last edited 2009-08-10 09:46:57 by lns-bzn-48f-81-56-218-246)