Files
i2p.www/i2p2www/pages/site/get-involved/guides/new-developers.html

191 lines
9.8 KiB
HTML
Raw Normal View History

{% extends "global/layout.html" %}
{% block title %}{% trans %}New Developer's Guide{% endtrans %}{% endblock %}
2015-05-29 16:18:25 +00:00
{% block content_nav %}
<ol>
<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>
</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>
<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>
<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 -%}
Skim over the <a href="http://www.monotone.ca/docs/Tutorial.html">monotone tutorial</a>, to make sure you understand the concepts.
{%- endtrans %}</li>
<li>
<p>{% trans -%}
If you want to remain anonymous, you need to do an additional step, to set up a connection to a monotone server over I2P:
{%- 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>
</li>
<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>
</li>
<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 %}
{% include "include/monotonerc.html" %}
</li>
<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>
{%- 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 %}
<ul>
<li>{% trans %}Anonymously:{% endtrans %} <code><b>mtn -d i2p.mtn -k "" pull "mtn://127.0.0.1:8998?i2p.i2p"</b></code></li>
<li>
<p>
{% trans %}Non-anonymously:{% endtrans %} <code><b>mtn -d i2p.mtn -k "" pull "mtn://mtn.i2p2.de?i2p.i2p"</b></code>
</p>
<p>{% trans -%}
Alternatively, instead of 'mtn.i2p2.de', you can also download from mtn.i2p-projekt.de.
{%- endtrans %}</p>
</ul>
</li>
<li>
<p>
{% 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>
</p>
<p>{% trans %}The above command creates a directory i2p.i2p, which contains all of the I2P sources.{% endtrans %}</p>
</li>
2009-03-14 14:37:15 +00:00
</ul>
<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/' -%}
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>
<p>{% trans sunjdk6='http://www.oracle.com/technetwork/java/javase/downloads/index.html' -%}
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>
<p>{% trans zzz=i2pconv('zzz.i2p'), todo=site_url('get-involved/todo'), trac='https://trac.i2p2.de/report/1' -%}
See <a href="http://{{ zzz }}/forums/3">zzz's TODO lists</a>,
<a href="{{ todo }}">this website's TODO list</a> or
<a href="{{ trac }}">Trac</a>
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 %}
<ul>
<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>
</ul>
{% trans monotone=site_url('get-involved/guides/monotone') -%}
Long version: see the <a href="{{ monotone }}">monotone page</a>.
{%- endtrans %}
</p>
<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>
<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>
<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
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
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.
{%- endtrans %}</p>
2012-08-17 20:49:16 +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:
<a href="{{ java }}">YourKit Java Profiler</a> and
<a href="{{ dotnet }}">YourKit .NET Profiler</a>.
{%- endtrans %}</p>
{% endblock %}