source: debian-alt/doc/dependencies.txt @ 77e539a

Last change on this file since 77e539a was 77e539a, checked in by zzz <zzz@…>, 2 years ago

Docs: Add maven doc from str4d via mattermost
Update dependencies doc

  • Property mode set to 100644
File size: 8.2 KB
1This document is for Debian package maintainers.
2It contains an overview of current package dependencies,
3the plan for improvement, and other notes.
4These notes will also be helpful for non-Debian package maintainers.
6We are not packaging experts, but we are doing the best we can to
7improve our official packages and support other packagers.
8Our packages are available at and
9instructions are at
11This document is current as of release 0.9.37, 2018-10-04.
14Build-only Dependencies
17* ant
18  This is the standard java build system.
20* Java JDK
21  We require openjdk-7-java or higher to build. For 8, set bootclasspath to
22  java 7 jars if available.
23  For 9 or higher, require the same or higher runtime, since bootclasspath
24  isn't possible.
26* libgmp-dev
29Current Runtime Dependencies
32* Java JRE
33  We require Java 7 or higher runtime, if built with Java 7 or bootclasspath was set
34  in the build. If built with 8 or higher and bootclasspath was not set,
35  then require the same JRE or higher.
37* geoip-database
38  In non-Debian builds we bundle our own geoip data;
39  for Debian builds we use the system data.
41* gettext-base
42  For /usr/share/java/libintl.jar.
43  In non-Debian builds we bundle the source code; it's removed in the Debian source package.
45* libgetopt-java
46  For /usr/share/java/gnu-getopt.jar.
47  In non-Debian builds we bundle the source code; it's removed in the Debian source package.
49* libjetty9-java
50  For /usr/share/java/jetty9-*.jar.
51  In non-Debian builds we bundle the jars; it's removed in the Debian source package.
52  This is for Jetty 9.2.x, which is what's in Debian.
53  We are not compatible with Jetty 9.4.x, which is what's in RedHat.
55* libtomcat8-java
56  For /usr/share/java/tomcat8-*.jar.
57  In non-Debian builds we bundle the jars as packaged in the Jetty 9.2 binary release,
58  which are different than the way they are packaged for Debian.
59  They are removed in the Debian source package.
60  This is for Tomcat 8.5.x, which is what's in recent Debian/Ubuntu.
61  Tomcat 8.0.x in older Debian/Ubuntu may or may not work.
63* libtaglibs-standard-*-java (stretch and later, artful and later only)
64  Provides JSTL 1.2, solves the glassfish-javaee problem described below.
66* glassfish-javaee (wheezy, jessie, xenial and earlier only)
67  We need jstl.jar and standard.jar version 1.2.
68  This is an ancient and terrible package, but it's the only place we've found version 1.2 jars.
69  standard.jar classes are inside /usr/share/java/glassfish-appserv-jstl.jar
70  jstl.jar classes are inside /usr/share/java/glassfish-javaee.jar but we can't use it
71  because there are too many conflicting, old, unrelated classes in there, so we currently
72  bundle jstl.jar even in Debian builds.
73  We've found some other packages that contain version 1.1 jars:
74  libjakarta-taglibs-standard-java (containing standard.jar only)
75  and libjstl1.1-java (containing jstl.jar only).
76  Jetty 9 does contain JSTL 1.2 ??? but not in packages???
77  It's not clear why there isn't a libjstl1.2-java package.
78  It also isn't clear why we upgraded to 1.2 years ago, but the rest of the world didn't.
79  And it isn't clear why 1.1 won't work for us.
81* service-wrapper
82  In non-Debian builds we bundle the jars; it's removed in the Debian source package.
83  For some Debian and Ubuntu releases, these seem to be much older than what we're bundling,
84  but there's no particular version that we need.
86* libgmp10
87  In non-Debian builds we bundle compiled C code; in the Debian packages we have a small
88  C shim that links to the libgmp .so file.
90* famfamfam-flag-png
91  Country flags (all except precise)
92  In precise and non-Debian builds we bundle the flags.
95Bundled code, NOT current dependencies
98These are packages that we at least partially bundle jars or java source for,
99even in Debian builds. For most of these we could remove the code and add
100a dependency if the package were widely available.
101We have not created private packages for any of these, we just bundle
102the binaries or sources.
104* geoip-java
105  Java interface to access geoip data.
106  We bundle source from
107  No package or not widely available.
108  There is a Maven geoip-api package at
110* hashcash
111  One Java source file.
112  From
113  No package or not widely available.
114  We don't really use this code anyway, but it would break compilation if we took it out.
116* identicon
117  Small number of Java source files, modified.
118  From
119  No package or not widely available.
121* jrobin
122  This is the Java graphing package.
123  We bundle a large portion of the 1.6.0 source from
124  No package or not widely available.
125  There is an old 1.5.9 Maven jrobin package at
126  Jrobin is in Gentoo.
128* libhttpclient-java
129  We only use a few classes from this large package.
130  We require 4.4 or higher which is not available in older distributions.
131  This is 2 MB of dependencies, instead we bundle 20 KB of copied source.
132  If we do add this dependency, we use only the code in
133  /usr/share/java/httpclient.jar and /usr/share/java/httpcore.jar.
135* UPnP (cybergarage)
136  Large subsystem, large number of Java source files, modified with several fixes.
137  From
138  No package or not widely available.
139  There is a competing UPnP library (libupnp-java) that is packaged, but it would be
140  a huge effort on our part to port our code to use that library instead.
141  Maybe we will do this some day, but it won't be soon.
143* zxing
144  This is the QR/barcode library from Google.
145  We bundle a portion of the source from
146  No package or not widely available.
147  There are Maven zxing packages at
150Other Issues and TODO
153* Building
154  As of 0.9.28, our Debian repo at just contains
155  binaries copied from Launchpad. It's much easier than building them
156  ourselves, but it leaves non-x86 architectures out of date.
157  The directory above (debian-alt) contains various changes for different distros.
159* Configuration
160  So that we may easily support dependency changes in various distributions,
161  and test alternatives, we output configuration settings to the
162  file in the rules script. There are extensive comments in the
163  rules, i2p-router.install, and i2p-router.links files.
164  There's probably a better or more-standard way to do this, but this makes it
165  easier for us, and for non-Debian packagers, if there are any.
167* i2p-doc
168  This is just javadocs.
169  Added priority of 'extra' for 0.9.29, before that, everybody was installing it?
171* Init/systemd
172  Kytv did the systemd and init script parts, no idea if it's compliant,
173  needs review.
175* JCA issues.
176  This has never been a problem for Debian/Ubuntu, but many Gentoo, Redhat, and Fedora
177  distributions are missing or have broken ECDSA support in the Java Cryptography subsystem.
178  The console sidebar will show a warning and the router will log warnings if
179  ECDSA is not working. The router will still work, but the user will not be able
180  to access newer hidden services on the network. For best results, packagers
181  should ensure that the JCA supports ECDSA.
182  For further info, see
184* Raspberry Pi
185  The performance of OpenJDK 8 on the raspberry pi is terrible, it's almost
186  unusable. The Oracle JDK is several times faster. But there's no package for that.
187  We tell people to use Oracle for ARM on our download page, but there's no
188  solution for package users.
190* Splitting packages further
191  Might be nice to further split up the i2p-router package into just the
192  core headless router and the routerconsole/UI part.
193  Or even the susimail/susidns/i2psnark/i2ptunnel webapps also.
195* Plugins
196  We don't have a strategy for building, installing, or finding packages for
197  3rd-party plugins using our plugin system. If we do that, then we can
198  have packages for popular plugins such as i2p-bote.
200* AppArmor
201  Needs work. In complain-only mode now.
Note: See TracBrowser for help on using the repository browser.