187 lines
7.8 KiB
HTML
187 lines
7.8 KiB
HTML
{% extends "global/layout.html" %}
|
|
{% block title %}New Developer's Guide{% endblock %}
|
|
{% block content %}
|
|
<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?
|
|
Try <a href="{{ site_url('volunteer') }}">getting involved</a> first.
|
|
</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>
|
|
<li><a href="#tools">Tools</a></li>
|
|
</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>
|
|
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>,
|
|
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>
|
|
<ul>
|
|
<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>
|
|
Enable the <a href="{{ site_url('docs/api/i2ptunnel') }}">i2ptunnel</a> client tunnel on port 8998 pointing to mtn.i2p2.i2p.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
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>
|
|
</li>
|
|
<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:
|
|
{% include "include/monotonerc.html" %}
|
|
</li>
|
|
<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
|
|
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>
|
|
<li>
|
|
Pull the I2P sources to your machine. This may take a long time, especially if you are doing this over I2P!
|
|
<ul>
|
|
<li>Anonymously: <code><b>mtn -d i2p.mtn pull 127.0.0.1:8998 i2p.i2p -k""</b></code></li>
|
|
<li>
|
|
<p>
|
|
Non-anonymously: <code><b>mtn -d i2p.mtn pull mtn.i2p2.de i2p.i2p -k"" </b></code>
|
|
</p>
|
|
<p>
|
|
Alternatively, instead of 'mtn.i2p2.de', you can also download from mtn.i2p-projekt.de.
|
|
</p>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
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>
|
|
</p>
|
|
<p>
|
|
The above command creates a directory i2p.i2p, which contains all of the I2P sources.
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<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>
|
|
A long explanation about using monotone is available on the <a href="monotone">monotone page</a>.
|
|
</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,
|
|
see the <a href="{{ site_url('develop/applications') }}">application development guide</a>.
|
|
</p>
|
|
|
|
<h2 id="development-ideas">Development ideas</h2>
|
|
<p>
|
|
See <a href="http://zzz.i2p/forums/3">zzz's TODO lists</a>,
|
|
<a href="{{ site_url('volunteer/todo') }}">this website's TODO list</a> or
|
|
<a href="http://trac.i2p2.de/report/1">Trac</a>
|
|
for ideas.
|
|
</p>
|
|
|
|
<h2 id="making-the-results-available">Making the results available</h2>
|
|
|
|
<p>
|
|
See the bottom of <a href="{{ site_url('develop/licenses') }}#commit">licenses.html</a> for
|
|
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>
|
|
Long version: see the <a href="monotone">monotone page</a>.
|
|
</p>
|
|
|
|
<h2 id="get-to-know-us">Get to know us!</h2>
|
|
<p>
|
|
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="dev-guidelines">additional guidelines for regular developers</a>.
|
|
</p>
|
|
|
|
<h2 id="translations">Translations</h2>
|
|
<p>
|
|
Website and router console translators: See the <a href="{{ site_url('volunteer/guides/newtranslators') }}">New Translators Page</a>
|
|
for next steps.
|
|
</p>
|
|
|
|
<h2 id="tools">Tools</h2>
|
|
<p>
|
|
I2P is open source software that is mostly developed using open sourced
|
|
toolkits. The I2P project recently acquired a license for the YourKit Java
|
|
Profiler. Open source projects are eligible to receive a free license provided
|
|
that YourKit is referenced on the project web site. Please get in touch if you
|
|
are interested in profiling the I2P codebase.
|
|
</p>
|
|
|
|
<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>
|
|
{% endblock %}
|