Files
i2p.www/i2p2www/pages/site/volunteer/guides/new-developers.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 %}