La dernière mise à jour de cette page été effectuée en July 2018.

Donc vous voulez commencer à travailler sur I2P ? Très bien ! Voici un guide rapide 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 embarqué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 laprésentation « Comment », les autres documents « Comment », laprésentation « Tech » et les documents connexes. Ils vous donneront une bonne vue d’ensemble de la structure d’I2P et de la fonction de différents éléments.

Obtenir le code de I2P

Pour développement concernant le routeur I2P ou les applications incorporées, il y a deux façons d’obtenir le code source :

La manière facile : Git

  • Installer Git.
  • Obtenir le code depuis le miroir GitHub:
    git clone https://github.com/i2p/i2p.i2p.git

Remarques

Le dépôt Git est actuellement un miroir en lecture seule. Si vous souhaitez l’utiliser pour le développement, vous devrez soumettre vos correctifs à notre système de suivi de problèmes. Nous pouvons accepter les requêtes d’extraction vers GitHub, mais elles doivent être traitées manuellement en les transformant en correctifs de toute façon.

La manière appropriée : 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 :

    Activer le tunnel client d'i2ptunnel sur le port 8998 dirigé vers 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
    		"2ef1ae1e73a30e1afc0b4a7af89b4380b3dd46b7",	--  slumlord@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’archivage des développeurs dans un nouveau fichier (p. ex. clés.txt) dans le même répertoire que i2p.mtn. Importez les clés dans votre base de données avec
     mtn -d i2p.mtn read < clés.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 à la place des fichiers source d’I2P, utiliser 'i2p.www' à la place 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 être 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 licences 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 (utiliser une phrase de passe vide)
  • mtn genkey yourname@mail.i2p (saisir une phrase 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 responsable des parutions pour obtenir des privilèges d’archivage - n’est pas 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 à code source ouvert qui est surtout développé en utilisant des boîtes à outils à code source ouvert. Le projet I2P a récemment fait l’acquisition d’une licence du profileur Java YourKit. Les projets à code source ouvert peuvent recevoir une licence gratuite tant qu’ils font référence à YourKit sur le site Web du projet. Veuillez nous contacter si vous souhaitez profiler le code base 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’œil aux produits logiciels principaux de YourKit : YourKit Java Profiler et YourKit .NET Profiler.