2012-11-11 03:12:16 +00:00
{% extends "global/layout.html" %}
2008-06-29 15:49:54 +00:00
{% block title %}New Developer's Guide{% endblock %}
{% block content %}
2010-10-15 21:07:55 +00:00
< p >
So you want to start work on I2P? Great!
Here's a quick guide to getting started
on contributing to the website or the software, doing development or creating translations.
< / p >
< p >
Not quite ready for coding?
2012-11-11 03:12:16 +00:00
Try < a href = "{{ site_url('volunteer') }}" > getting involved< / a > first.
2010-10-15 21:07:55 +00:00
< / p >
< div id = "TOC" >
< ol >
< li > < a href = "#basic-study" > Basic study< / a > < / li >
< li > < a href = "#getting-the-i2p-code" > Getting the I2P code< / a > < / li >
< li > < a href = "#building-i2p" > Building I2P< / a > < / li >
< li > < a href = "#development-ideas" > Development ideas< / a > < / li >
< li > < a href = "#making-the-results-available" > Making the results available< / a > < / li >
< li > < a href = "#get-to-know-us" > Get to know us!< / a > < / li >
< li > < a href = "#translations" > Translations< / a > < / li >
2012-07-30 08:59:18 +00:00
< li > < a href = "#tools" > Tools< / a > < / li >
2010-10-15 21:07:55 +00:00
< / ol >
< / div >
< h2 id = "basic-study" > Basic 'study'< / h2 >
< p >
Basic development on the I2P router or the embedded applications uses Java as the main development language.
If you don't have experience with Java, you can always have a look at < a href = "http://www.mindview.net/Books/TIJ/" > Thinking in Java< / a > .
< / p >
< p >
2012-11-11 03:12:16 +00:00
Study the < a href = "{{ site_url('docs/how/intro') }}" > how intro< / a > ,
the < a href = "{{ site_url('docs') }}" > other "how" documents< / a > ,
the < a href = "{{ site_url('docs/how/techintro') }}" > tech intro< / a > ,
2010-10-15 21:07:55 +00:00
and associated documents.
These will give you a good overview of how I2P is structured and what different things it does.
< / p >
< h2 id = "getting-the-i2p-code" > Getting the I2P code< / h2 >
< p >
For development on the i2p router or the embedded applications,
get the monotone source repository installed - short instructions:
< / p >
2009-03-14 14:37:15 +00:00
< ul >
2010-10-15 21:07:55 +00:00
< li >
Install < a href = "http://www.monotone.ca/" > monotone< / a > .
Monotone is a version control system.
We use it because it allows us to keep track of who does what changes to the source code (and for a lot of complicated things, but 'keeping track of changes' is the basic idea).
< / li >
< li > Skim over the < a href = "http://monotone.ca/docs/Tutorial.html" > monotone tutorial< / a > , to make sure you understand the concepts.< / li >
< li >
< p >
If you want to remain anonymous, you need to do an additional step, to set up a connection to a monotone server over I2P:
< / p >
< p >
2012-11-11 03:12:16 +00:00
Enable the < a href = "{{ site_url('docs/api/i2ptunnel') }}" > i2ptunnel< / a > client tunnel on port 8998 pointing to mtn.i2p2.i2p.
2010-10-15 21:07:55 +00:00
< / p >
< / li >
< li >
2012-10-05 22:45:27 +00:00
Pick a directory where you want to put all your I2P files, and create a monotone database: < code > < b > mtn -d i2p.mtn db init< / b > < / code >
2010-10-15 21:07:55 +00:00
< / li >
2012-10-05 22:45:27 +00:00
< li > Define the trust list by creating < code > ~/.monotone/monotonerc< / code > (or < code > _MTN/monotonerc< / code > in the i2p.i2p workspace) with the following contents:
2012-11-11 03:12:16 +00:00
{% include "include/monotonerc.html" %}
2012-10-05 22:45:27 +00:00
< / li >
2012-10-07 01:46:14 +00:00
< li > Copy and paste the < a href = "developerskeys" > developer's commit keys< / a > into a new file (e.g. < code > keys.txt< / code > ) in the same directory
2012-10-05 22:56:48 +00:00
that < code > i2p.mtn< / code > is in. Import the keys into your database with < br > < code > < pre > mtn -d i2p.mtn read < keys.txt < / pre > < / code >
2010-10-15 21:07:55 +00:00
< li >
Pull the I2P sources to your machine. This may take a long time, especially if you are doing this over I2P!
< ul >
2012-10-07 01:38:28 +00:00
< li > Anonymously: < code > < b > mtn -d i2p.mtn pull 127.0.0.1:8998 i2p.i2p -k""< / b > < / code > < / li >
2010-10-15 21:07:55 +00:00
< li >
< p >
2012-10-07 01:38:28 +00:00
Non-anonymously: < code > < b > mtn -d i2p.mtn pull mtn.i2p2.de i2p.i2p -k"" < / b > < / code >
2010-10-15 21:07:55 +00:00
< / p >
< p >
Alternatively, instead of 'mtn.i2p2.de', you can also download from mtn.i2p-projekt.de.
< / p >
< / ul >
< / li >
< li >
< p >
2012-10-05 22:45:27 +00:00
All the sources are now present on your machine, in the database file. To make them available in a directory, you need to check them out: < code > < b > mtn -d i2p.mtn co --branch=i2p.i2p< / b > < / code >
2010-10-15 21:07:55 +00:00
< / p >
< p >
The above command creates a directory i2p.i2p, which contains all of the I2P sources.
< / p >
< / li >
2009-03-14 14:37:15 +00:00
< / ul >
2010-10-15 21:07:55 +00:00
< h3 > Remarks< / h3 >
< p >
To download the website files instead of the I2P source files, use 'i2p.www' instead of 'i2p.i2p'.
< / p >
< p >
The initial pull may take several hours using the tunnel.
If it fails after a partial pull, simply rerun it, it will start where it left off.
If you are in a hurry, use the non-anonymous access.
< / p >
< p >
A full list of branches, including i2p.i2p and i2p.www can be found on < a href = "http://stats.i2p/cgi-bin/viewmtn/" > viewmtn< / a > .
< / p >
< p >
2012-10-07 01:46:14 +00:00
A long explanation about using monotone is available on the < a href = "monotone" > monotone page< / a > .
2010-10-15 21:07:55 +00:00
< / p >
< h2 id = "building-i2p" > Building I2P< / h2 >
< p >
To compile the code, you need the Sun Java Development Kit 6 or higher, or equivalent JDK
(< a href = "http://java.sun.com/javase/downloads/index.jsp" > Sun JDK 6< / a > strongly recommended) and
< a href = "http://ant.apache.org/" > Apache ant< / a >
version 1.7.0 or higher.
If you go are working on the main I2P code, you can go into the i2p.i2p directory and run 'ant' to see the build options.
< / p >
< p >
To build or work on console translations, you need
the xgettext, msgfmt, and msgmerge tools from the
< a href = "http://www.gnu.org/software/gettext/" > GNU gettext package< / a > .
< / p >
< p >
For development on new applications,
2012-11-11 03:12:16 +00:00
see the < a href = "{{ site_url('develop/applications') }}" > application development guide< / a > .
2010-10-15 21:07:55 +00:00
< / p >
< h2 id = "development-ideas" > Development ideas< / h2 >
< p >
2012-10-07 01:46:14 +00:00
See < a href = "http://zzz.i2p/forums/3" > zzz's TODO lists< / a > ,
2012-11-11 03:12:16 +00:00
< a href = "{{ site_url('volunteer/todo') }}" > this website's TODO list< / a > or
2012-10-07 01:46:14 +00:00
< a href = "http://trac.i2p2.de/report/1" > Trac< / a >
2010-10-15 21:07:55 +00:00
for ideas.
< / p >
< h2 id = "making-the-results-available" > Making the results available< / h2 >
< p >
2012-11-11 03:12:16 +00:00
See the bottom of < a href = "{{ site_url('develop/licenses') }}#commit" > licenses.html< / a > for
2010-10-15 21:07:55 +00:00
commit privilege requirements. You need these to put code into i2p.i2p (not required for the website!).
< / p >
< p >
Short version of how to generate and use keys if you plan to commit:
< ul >
< li > mtn genkey yourname-transport@mail.i2p < i > (use an empty passphrase)< / i >
< li > mtn genkey yourname@mail.i2p < i > (enter a passphrase)< / i >
< li > mtn pubkey yourname-transport@mail.i2p < i > (< a href = "mailto:mtn@welterde.de" > send< / a > this to a mtn repo operator to get push privileges)< / i >
< li > mtn pubkey yourname@mail.i2p < i > (send this to < a href = "mailto:zzz@mail.i2p" > a release manager< / a > to get commit privileges - not required for website)< / i >
< li > mtn ci -k yourname@mail.i2p < i > (check in with this key)< / i >
< li > mtn sync -k yourname-transport@mail.i2p < i > (push with this key)< / i >
< / ul >
2012-10-07 01:46:14 +00:00
Long version: see the < a href = "monotone" > monotone page< / a > .
2010-10-15 21:07:55 +00:00
< / p >
< h2 id = "get-to-know-us" > Get to know us!< / h2 >
< p >
2012-10-07 01:38:28 +00:00
The developers hang around on IRC. They can be reached on the Freenode network, OFTC, and on the I2P internal networks. The usual place to look is #i2p-dev. Join the channel and say hi!
2012-10-07 01:46:14 +00:00
We also have < a href = "dev-guidelines" > additional guidelines for regular developers< / a > .
2010-10-15 21:07:55 +00:00
< / p >
2010-08-04 22:10:12 +00:00
2010-10-15 21:07:55 +00:00
< h2 id = "translations" > Translations< / h2 >
2010-08-04 22:10:12 +00:00
< p >
2012-11-11 03:12:16 +00:00
Website and router console translators: See the < a href = "{{ site_url('volunteer/guides/newtranslators') }}" > New Translators Page< / a >
2010-10-15 21:07:55 +00:00
for next steps.
< / p >
2010-08-04 22:10:12 +00:00
2012-08-17 20:49:16 +00:00
< h2 id = "tools" > Tools< / h2 >
< p >
I2P is open source software that is mostly developed using open sourced
2012-10-05 22:45:27 +00:00
toolkits. The I2P project recently acquired a license for the YourKit Java
2012-08-17 20:49:16 +00:00
Profiler. Open source projects are eligible to receive a free license provided
2012-10-05 22:45:27 +00:00
that YourKit is referenced on the project web site. Please get in touch if you
2012-08-17 20:49:16 +00:00
are interested in profiling the I2P codebase.
< / p >
2012-07-30 08:59:18 +00:00
< p >
YourKit is kindly supporting open source projects with its full-featured Java Profiler.
YourKit, LLC is the creator of innovative and intelligent tools for profiling
Java and .NET applications. Take a look at YourKit's leading software products:
< a href = "http://www.yourkit.com/java/profiler/index.jsp" > YourKit Java Profiler< / a > and
< a href = "http://www.yourkit.com/.net/profiler/index.jsp" > YourKit .NET Profiler< / a > .
< / p >
2008-06-29 15:49:54 +00:00
{% endblock %}