2012-11-11 03:12:16 +00:00
{% extends "global/layout.html" %}
2013-01-26 02:15:45 +00:00
{% block title %}{% trans %}New Developer's Guide{% endtrans %}{% endblock %}
2015-05-29 16:18:25 +00:00
{% block content_nav %}
2010-10-15 21:07:55 +00:00
< ol >
2013-01-26 02:15:45 +00:00
< li > < a href = "#basic-study" > {% trans %}Basic study{% endtrans %}< / a > < / li >
< li > < a href = "#getting-the-i2p-code" > {% trans %}Getting the I2P code{% endtrans %}< / a > < / li >
< li > < a href = "#building-i2p" > {% trans %}Building I2P{% endtrans %}< / a > < / li >
< li > < a href = "#development-ideas" > {% trans %}Development ideas{% endtrans %}< / a > < / li >
< li > < a href = "#making-the-results-available" > {% trans %}Making the results available{% endtrans %}< / a > < / li >
< li > < a href = "#get-to-know-us" > {% trans %}Get to know us!{% endtrans %}< / a > < / li >
< li > < a href = "#translations" > {% trans %}Translations{% endtrans %}< / a > < / li >
< li > < a href = "#tools" > {% trans %}Tools{% endtrans %}< / a > < / li >
2010-10-15 21:07:55 +00:00
< / ol >
2015-05-29 16:18:25 +00:00
{% endblock %}
{% block content %}
< p > {% trans %}
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.
{%- endtrans %}< / p >
< p > {% trans volunteer=site_url('get-involved') %}
Not quite ready for coding?
Try < a href = "{{ volunteer }}" > getting involved< / a > first.
{%- endtrans %}< / p >
2010-10-15 21:07:55 +00:00
2013-01-26 02:15:45 +00:00
< h2 id = "basic-study" > {% trans %}Basic study{% endtrans %}< / h2 >
< p > {% trans -%}
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 > .
{%- endtrans %}< / p >
< p > {% trans intro=site_url('docs/how/intro'), docs=site_url('docs'), techintro=site_url('docs/how/tech-intro') -%}
Study the < a href = "{{ intro }}" > how intro< / a > ,
the < a href = "{{ docs }}" > other "how" documents< / a > ,
the < a href = "{{ techintro }}" > tech intro< / a > ,
and associated documents.
These will give you a good overview of how I2P is structured and what different things it does.
{%- endtrans %}< / p >
< h2 id = "getting-the-i2p-code" > {% trans %}Getting the I2P code{% endtrans %}< / h2 >
< p > {% trans -%}
For development on the i2p router or the embedded applications,
get the monotone source repository installed - short instructions:
{%- endtrans %}< / p >
2009-03-14 14:37:15 +00:00
< ul >
2013-01-26 02:15:45 +00:00
< li > {% trans -%}
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).
{%- endtrans %}< / li >
< li > {% trans -%}
2013-02-06 03:24:18 +00:00
Skim over the < a href = "http://www.monotone.ca/docs/Tutorial.html" > monotone tutorial< / a > , to make sure you understand the concepts.
2013-01-26 02:15:45 +00:00
{%- endtrans %}< / li >
2010-10-15 21:07:55 +00:00
< li >
2013-01-26 02:15:45 +00:00
< p > {% trans -%}
2010-10-15 21:07:55 +00:00
If you want to remain anonymous, you need to do an additional step, to set up a connection to a monotone server over I2P:
2013-01-26 02:15:45 +00:00
{%- endtrans %}< / p >
< p > {% trans i2ptunnel=site_url('docs/api/i2ptunnel') -%}
Enable the < a href = "{{ i2ptunnel }}" > i2ptunnel< / a > client tunnel on port 8998 pointing to mtn.i2p2.i2p.
{%- endtrans %}< / p >
2010-10-15 21:07:55 +00:00
< / li >
2013-01-26 02:15:45 +00:00
< li > {% trans -%}
Pick a directory where you want to put all your I2P files, and create a monotone database:{% endtrans %} < code > < b > mtn -d i2p.mtn db init< / b > < / code >
2010-10-15 21:07:55 +00:00
< / li >
2013-01-26 02:15:45 +00:00
< li > {% trans -%}
Define the trust list by creating < code > ~/.monotone/monotonerc< / code > (or < code > _MTN/monotonerc< / code > in the i2p.i2p workspace) with the following contents:
{%- endtrans %}
2012-11-11 03:12:16 +00:00
{% include "include/monotonerc.html" %}
2012-10-05 22:45:27 +00:00
< / li >
2013-01-26 02:15:45 +00:00
< li > {% trans devkeys=site_url('get-involved/develop/developers-keys') -%}
Copy and paste the < a href = "{{ devkeys }}" > 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 >
2013-01-26 02:15:45 +00:00
{%- endtrans %}< / li >
< li > {% trans %}Pull the I2P sources to your machine. This may take a long time, especially if you are doing this over I2P!{% endtrans %}
2010-10-15 21:07:55 +00:00
< ul >
2014-01-08 02:14:31 +00:00
< li > {% trans %}Anonymously:{% endtrans %} < code > < b > mtn -d i2p.mtn -k "" pull "mtn://127.0.0.1:8998?i2p.i2p"< / b > < / code > < / li >
2010-10-15 21:07:55 +00:00
< li >
< p >
2014-01-08 02:14:31 +00:00
{% trans %}Non-anonymously:{% endtrans %} < code > < b > mtn -d i2p.mtn -k "" pull "mtn://mtn.i2p2.de?i2p.i2p"< / b > < / code >
2010-10-15 21:07:55 +00:00
< / p >
2013-01-26 02:15:45 +00:00
< p > {% trans -%}
2010-10-15 21:07:55 +00:00
Alternatively, instead of 'mtn.i2p2.de', you can also download from mtn.i2p-projekt.de.
2013-01-26 02:15:45 +00:00
{%- endtrans %}< / p >
2010-10-15 21:07:55 +00:00
< / ul >
< / li >
< li >
< p >
2013-01-26 02:15:45 +00:00
{% trans %}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:{% endtrans %} < code > < b > mtn -d i2p.mtn co --branch=i2p.i2p< / b > < / code >
2010-10-15 21:07:55 +00:00
< / p >
2013-01-26 02:15:45 +00:00
< p > {% trans %}The above command creates a directory i2p.i2p, which contains all of the I2P sources.{% endtrans %}< / p >
2010-10-15 21:07:55 +00:00
< / li >
2009-03-14 14:37:15 +00:00
< / ul >
2013-01-26 02:15:45 +00:00
< h3 > {% trans %}Remarks{% endtrans %}< / h3 >
< p > {% trans %}
To download the website files instead of the I2P source files, use 'i2p.www' instead of 'i2p.i2p'.
{%- endtrans %}< / p >
< p > {% trans -%}
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.
{%- endtrans %}< / p >
2013-08-30 23:07:33 +00:00
< p > {% trans viewmtn='http://'+i2pconv('killyourtv.i2p')+'/viewmtn/' -%}
2013-01-26 02:15:45 +00:00
A full list of branches, including i2p.i2p and i2p.www can be found on < a href = "{{ viewmtn }}" > viewmtn< / a > .
{%- endtrans %}< / p >
< p > {% trans monotone=site_url('get-involved/guides/monotone') -%}
A long explanation about using monotone is available on the < a href = "{{ monotone }}" > monotone page< / a > .
{%- endtrans %}< / p >
< h2 id = "building-i2p" > {% trans %}Building I2P{% endtrans %}< / h2 >
2013-02-06 03:24:18 +00:00
< p > {% trans sunjdk6='http://www.oracle.com/technetwork/java/javase/downloads/index.html' -%}
2013-01-26 02:15:45 +00:00
To compile the code, you need the Sun Java Development Kit 6 or higher, or equivalent JDK
(< a href = "{{ sunjdk6 }}" > 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.
{%- endtrans %}< / p >
< p > {% trans -%}
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 > .
{%- endtrans %}< / p >
< p > {% trans apps=site_url('get-involved/develop/applications') -%}
For development on new applications,
see the < a href = "{{ apps }}" > application development guide< / a > .
{%- endtrans %}< / p >
< h2 id = "development-ideas" > {% trans %}Development ideas{% endtrans %}< / h2 >
2013-10-26 11:03:57 +00:00
< p > {% trans zzz=i2pconv('zzz.i2p'), todo=site_url('get-involved/todo'), trac='https://trac.i2p2.de/report/1' -%}
2013-01-26 02:15:45 +00:00
See < a href = "http://{{ zzz }}/forums/3" > zzz's TODO lists< / a > ,
< a href = "{{ todo }}" > this website's TODO list< / a > or
2013-10-26 11:03:57 +00:00
< a href = "{{ trac }}" > Trac< / a >
2013-01-26 02:15:45 +00:00
for ideas.
{%- endtrans %}< / p >
< h2 id = "making-the-results-available" > {% trans %}Making the results available{% endtrans %}< / h2 >
< p > {% trans licenses=site_url('get-involved/develop/licenses') -%}
See the bottom of < a href = "{{ licenses }}#commit" > the licenses page< / a > for
commit privilege requirements. You need these to put code into i2p.i2p (not required for the website!).
{%- endtrans %}< / p >
< p > {% trans %}Short version of how to generate and use keys if you plan to commit:{% endtrans %}
2010-10-15 21:07:55 +00:00
< ul >
2013-01-26 02:15:45 +00:00
< li > mtn genkey yourname-transport@mail.i2p < i > ({% trans %}use an empty passphrase{% endtrans %})< / i >
< li > mtn genkey yourname@mail.i2p < i > ({% trans %}enter a passphrase{% endtrans %})< / i >
< li > mtn pubkey yourname-transport@mail.i2p < i > ({% trans email='mtn@welterde.de' %}< a href = "mailto:{{ email }}" > send< / a > this to a mtn repo operator to get push privileges{% endtrans %})< / i >
< li > mtn pubkey yourname@mail.i2p < i > ({% trans email='zzz@'+i2pconv('mail.i2p') %}send this to < a href = "mailto:{{ email }}" > a release manager< / a > to get commit privileges - not required for website{% endtrans %})< / i >
< li > mtn ci -k yourname@mail.i2p < i > ({% trans %}check in with this key{% endtrans %})< / i >
< li > mtn sync -k yourname-transport@mail.i2p < i > ({% trans %}push with this key{% endtrans %})< / i >
2010-10-15 21:07:55 +00:00
< / ul >
2013-01-26 02:15:45 +00:00
{% trans monotone=site_url('get-involved/guides/monotone') -%}
Long version: see the < a href = "{{ monotone }}" > monotone page< / a > .
{%- endtrans %}
2010-10-15 21:07:55 +00:00
< / p >
2013-01-26 02:15:45 +00:00
< h2 id = "get-to-know-us" > {% trans %}Get to know us!{% endtrans %}< / h2 >
< p > {% trans guidelines=site_url('get-involved/guides/dev-guidelines') -%}
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!
We also have < a href = "{{ guidelines }}" > additional guidelines for regular developers< / a > .
{%- endtrans %}< / p >
2010-08-04 22:10:12 +00:00
2013-01-26 02:15:45 +00:00
< h2 id = "translations" > {% trans %}Translations{% endtrans %}< / h2 >
< p > {% trans newtrans=site_url('get-involved/guides/new-translators') -%}
Website and router console translators: See the < a href = "{{ newtrans }}" > New Translator's Guide< / a >
for next steps.
{%- endtrans %}< / p >
2010-08-04 22:10:12 +00:00
2013-01-26 02:15:45 +00:00
< h2 id = "tools" > {% trans %}Tools{% endtrans %}< / h2 >
< p > {% trans -%}
2012-08-17 20:49:16 +00:00
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.
2013-01-26 02:15:45 +00:00
{%- endtrans %}< / p >
2012-08-17 20:49:16 +00:00
2013-01-26 02:15:45 +00:00
< p > {% trans java='http://www.yourkit.com/java/profiler/index.jsp', dotnet='http://www.yourkit.com/.net/profiler/index.jsp' -%}
2012-07-30 08:59:18 +00:00
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:
2013-01-26 02:15:45 +00:00
< a href = "{{ java }}" > YourKit Java Profiler< / a > and
< a href = "{{ dotnet }}" > YourKit .NET Profiler< / a > .
{%- endtrans %}< / p >
2008-06-29 15:49:54 +00:00
{% endblock %}