Donc vous voulez commencer à travailler sur I2P ? Très bien ! Voici un guide rapide doit pour commencer en contribuant au site Web ou au logiciel, faire du développement ou créer des traductions.

Pas tout à fait prêt pour programmer ? essayez d''abord de devenir impliqué.

Étude basique

Le développement de base concernant le routeur I2P ou les applications incorporées utilisent Java comme principal langage de développement. Si vous n'avez pas d'expérience avec Java, vous pouvez toujours regarder Thinking in Java.

Étudiez l'intro comment, les autres documents "comment", l'intro tech, et documents associés. Ceux-ci vous donneront une bonne vue d'ensemble sur comment I2P est structuré et quelles différentes choses il fait.

Obtenir le code de I2P

For development on the I2P router or the embedded applications, there are two ways to get the source code:

The easy way: Git

Remarques

The Git repository is currently a read-only mirror. If you wish to use it for development, you will need to submit patches to our issue tracker. We can accept GitHub pull requests, but they must be processed manually by turning them into patches anyway.

The proper way: Monotone

  • Installez monotone. Monotone est un système de contrôle de version. Nous l'utilisons parce qu'il nous permet de garder la trace de qui fait quels changements au code source (et pour beaucoup de choses compliquées, mais 'garder la trace des changements' est l'idée de base).
  • Lisez le tutoriel de monotone, pour vous assurer vous comprenez les concepts.
  • Si vous voulez rester anonyme, vous devez faire une étape supplémentaire, pour configurer une connexion à un serveur monotone au travers d''I2P :

    Enable the i2ptunnel client tunnel on port 8998 pointing to mtn.i2p-projekt.i2p.

  • Choisissez un répertoire dans lequel vous voulez mettre tous vos fichiers I2P, et créez une base de données monotone : mtn -d i2p.mtn db init
  • Définissez la liste de confiance en créant ~/.monotone/monotonerc (ou _MTN/monotonerc dans l'espace de travail i2p.i2p) avec le contenu suivant :
    -- This implements a list of trusted signers.
    -- It is used on checkout and update.
    -- It is not used for repo sync/push/pull.
    -- If you do not include this function in ~/.monotone/monotonerc, the
    -- default is to trust everybody, which is probably a bad thing
    -- in an anonymous network.
    -- Update the list below to reflect the signers YOU trust.
    --
    -- ref: http://www.monotone.ca/docs/Trust-Evaluation-Hooks.html
    -- Modified to use key identities instead of key names, since
    -- monotone allows duplicate key names, so any key-name-based
    -- trust system is insecure.
    
    --
    --  Modified from intersection() to use key identities instead of key names, since
    --  monotone allows duplicate key names.
    --
    --  a: table of ID structures (see above)
    --  b: table of hex IDs
    --
    function keyintersection(a,b)
        local s={}
        local t={}
        for k,v in pairs(a) do s[v.id] = 1 end
        for k,v in pairs(b) do if s[v] ~= nil then table.insert(t,v) end end
        return t
    end
    
    --
    -- from mtn source project.hh and lua_hooks.cc:
    -- signers is a table of integers (starting with 1) to the following ID structure:
    -- struct ID
    -- {
    --   id: (key_id in key_identity_info) hex of revision id hash;
    --   given_name: (given_name in key_identity_info) // name given when creating the key
    --   name: (official_name in key_identity_info) // name returned by hooks or (once implented) policy
    -- };
    -- id: hex of revision id hash;
    -- name: cert_name
    -- val: cert_value
    --
    function get_revision_cert_trust(signers, id, name, val)
       local trusted_signers = {
    		"5bc185cfd680eb512fdb9626b9fb4298e136215e",	--  BlubMail@mail.i2p
    		"f6706ac205e6b5d7a7e3ea4244ab0ef497f0a099",	--  cervantes@mail.i2p
    		"690f278ff6c6157cbaf23b0d602b6d6dcf368313",	--  complication@mail.i2p
    		"eb4ac08d5ddbb2bd73889f86c1211424025a6f07",	--  dev@robertfoss.se
    		"aae785027c240ebbb0a883fd8ebcf8d6ecee4104",	--  dev@welterde.de
    		"86478595288d1b96b58f0c8cd8a8971bc430f8fd",	--  dg2@mail.i2p
    		-- completed dev agreement 2013-07 but never checked in anything
    		--"5f75b8f0769770edc3267c21ddc9a00ddae31394",	--  digit@mail.i2p
    		"4ebaace9973913416af92ee8d0fb93d64753df4c",	--  dream@mail.i2p
    		"7e498ae94c9c322404adfc61b16bed388095906b",	--  duck@mail.i2p
    		"6c728b0ffed3c2bf7fb0f3c583b30f966d9bacd5",	--  echelon2@mail.i2p
    		"0e4e7ebebafbdf4cdacc45a47ba155b1215d8e8b",	--  forget@mail.i2p
    		"f332b3d3b11b2efdae220cea75b9d5ba9ec3b52d",	--  hamada@mail.i2p
    		"e246444b4fe69ba599e13403c4ab931066de902f",	--  hiddenz@mail.i2p
    		"a61146ee69ddb9fcf3b82b19a62b8114b60d367e",	--  HungryHobo@mail.i2p
    		"4844b1fd45f5a68744fa28d2f3e3b61a3cf83b95",	--  kytv@mail.i2p
    		"6b2acfc9fe2f69b796631a514660fd7bdd237e2d",	--  laziestgravy@mail.i2p
    		"c9b970f5e8917eada663d4c6b22096617021c95c",	--  m1xxy@mail.i2p
    		"3be64909d6ab7c3d7afe16f20f24e672708b576b",	--  magma@mail.i2p
    		"2977a6f4e11819a3f928783175caadc0071fc4de",	--  mathiasdm@mail.i2p
    		"de9d196e8057e1629178edbfa1ed754c648d7340",	--  meeh@mail.i2p
    		"2a0bba98558d7a9d7e4b1bd807789601252c0024",	--  mkvore-commit@mail.i2p
    		"6ade4b7a9a6425194f482ab351950e4230dbbc85",	--  neutron@mail.i2p
    		"bc74b49fd8a20513b2745a3d13414b7e9818dd18",	--  Oldaris@mail.i2p
    		"3fb8d1ee1e82981a8076ddbcbf4d18f372b8bba7",	--  privateer@mail.i2p
    		"e3815f0c985663182534fbd7d6a2bf93204a0bd0",	--  russiansponsor@mail.i2p
    		"1092773c40f5813b9179d52a8ab7b499b9554da3",	--  sponge@mail.i2p
    		"01265f0c817b24548478341fb75e672720a78b21",	--  str4d@mail.i2p
    		"38fe2aa37e1eb9a300a2061ef153265c48031c6b",	--  walking@mail.i2p
    		"a0eb78d437efad120dd9edcd776a327ec2c2adde",	--  zab@mail.i2p
    		"2158706490e62a17c8140b6e9eabca965b681bc7",	--  zab2@mail.i2p
    		"56810cd6434ab33593260e188b32bb83e4e9a139",	--  z3r0fox@mail.i2p
    		"896e399990704373125f782ae2ee19b6611ac612"	--  zzz@mail.i2p
       }
       local t = keyintersection(signers, trusted_signers)
       if t == nil then return false end
       if #t>= 1 then return true end
       return false
    end
    
  • Copiez et collez les clés d'engagement des développeurs dans un nouveau fichier (ex: keys.txt) dans le même répertoire dans lequel se trouve i2p.mtn. Importez les clés dans votre base de données avec
     mtn -d i2p.mtn read < keys.txt
  • Tirez les sources d'I2P vers votre machine. Cela peut prendre longtemps, en particulier si vous le faites à travers I2P !
    • Anonymement : mtn -d i2p.mtn -k "" pull "mtn://127.0.0.1:8998?i2p.i2p"
    • Non anonymement : mtn -d i2p.mtn -k "" pull "mtn://mtn.i2p-projekt.de?i2p.i2p"

  • Toutes les sources sont maintenant présentes sur votre machine, dans le fichier de base de données. Pour les rendre disponibles dans un répertoire, vous devez les vérifier : mtn -d i2p.mtn co --branch=i2p.i2p

    La commande susdite crée un répertoire i2p.i2p, qui contient toutes les sources d''I2P.

Remarques

Pour télécharger les fichiers du site Web au lieu des fichiers du source d''I2P, utiliser 'i2p.www' au lieu de 'i2p.i2p'.

La traction initiale peut prendre plusieurs heures en utilisant le tunnel. Si elle échoue après une traction partielle, simplement relancez-la, elle commencera là où elle s'est arrêtée. Si vous êtes pressé, utilisez l'accès non-anonyme.

Une liste complète de branches, y compris i2p.i2p et i2p.www peuvent êtres trouvées sur viewmtn.

Une longue explication concernant l'utilisation de monotone est disponible sur la page monotone.

Construire I2P

Pour compiler le code, vous avez besoin de Sun Java Development Kit 6 ou plus récente, ou HDJ équivalent (Sun JDK 6 fortement recommandé) et Apache ant version 1.7.0 ou plus récente. Si vous comptez travailler sur le code principal d''I2P, vous pouvez aller au répertoire i2p.i2p et exécuter 'ant' pour voir les options de construction.

Pour construire ou travailler sur les traductions de console, vous avez besoin des outils xgettext, msgfmt, et msgmerge issus du GNU gettext package.

Pour le développement de nouvelles applications, voyez le guide de développement d''application.

Idées de développement

Voir la liste de zzz de TODO (choses à faire), liste TODO concernant ce site web ou Trac pour des idées.

Rendre disponibles les résultats

Voyez en bas de la page licenses pour les exigences de privilège d'engagement. Vous avez besoin de ceux-ci pour mettre du code dans i2p.i2p (non exigé pour le site Web !).

Version courte sur la façon de générer et utiliser des clés si vous planifiez de vous engager :

  • mtn genkey yourname-transport@mail.i2p (utilise une phrase mot de passe vide)
  • mtn genkey yourname@mail.i2p (entrer une phrase mot de passe)
  • mtn pubkey yourname-transport@mail.i2p (envoyer ceci à un opérateur de dépôt mtn pour obtenir les privilèges de poussée)
  • mtn pubkey yourname@mail.i2p (envoyez ceci à un gestionnaire de release pour obtenir les privilèges - non exigé pour le site Web)
  • mtn ci -k yourname@mail.i2p (vérifiez avec cette clé)
  • mtn sync -k yourname-transport@mail.i2p (pousser avec cette clé)
Version longue : voyez la page Monotone.

Apprenez à nous connaître !

Les développeurs traînent sur IRC. Ils peuvent être atteints sur le réseau Freenode, OFTC, et sur les réseaux internes d''I2P. L'endroit habituel à regarder est #i2p-dev. Rejoignez le canal et dites salut ! Nous avons aussi des directives supplémentaires pour les développeurs habitués.

Traductions

Traducteurs du site Web et de la console routeur : voyez le Guide du nouveau traducteur pour les étapes suivantes.

Outils

I2P est un logiciel libre qui est est développé surtout en utilisant des boîtes à outils d''origine open source. Le projet d''I2P a récemment acquis une licence pour YourKit Java Profiler. Des projets open source ont le droit de recevoir une licence gratuite du fait que YourKit est référencé sur le site Web du projet. Mettez-vous en contact s'il vous plaît si vous êtes intéressé par le profilage du codebase d''I2P.

YourKit soutient avec bonté des projets open source avec son Java Profiler toutes options. YourKit, LLC est le créateur d'outils novateurs et intelligents pour le profilage d''applications Java et .NET. Jetez un coup d''oeil aux produits logiciels principaux de YourKit : YourKit Java Profiler et YourKit .NET Profiler.