¿Entonces, quiere empezar a trabajar en I2P? ¡Bien! Aquí tiene una pequeña guía de como empezar contribuyendo, con la web o con el software, programando código o traduciendo.

¿Aún no está listo para programar? Pruebe primero a involucrarse en el proyecto.

Estudios básicos

El desarrollo básico del ruter de I2P y de las aplicaciones del núcleo utilizan Java como lenguaje de programación. Si no tiene experiencia con Java, siempre puede echarle un ojo a Thinking in Java.

Estudie la introducción de cómo, los otros "como" documentos, la introducción técnica, y los documentos asociados. Esto le dará una buena vista general de como está estructurado y de qué otras cosas hace I2P.

Obteniendo el código 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

Notas

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

  • Instale monotone. Monotone es un sistema de control de versiones. Lo utilizamos porque nos permite llevar el control de quien cambia el código (y muchas cosas complicadas más, pero el control de los cambios es el motivo principal)
  • Eche una ojeada al tutorial de monotone para asegurarse de que entiende los conceptos
  • Si desea permanecer anónimo necesita un paso adicional, configurar una conexión al servidor de monotone a través de I2P:

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

  • Elija un directorio donde quiera poner todos los archivos de I2P, y cree una base de datos para monotone: mtn -d i2p.mtn db init
  • Defina la lista de confianza creando ~/.monotone/monotonerc (o _MTN/monotonerc en el área de trabajo de i2p.i2p ) con el siguiente contenido:
    -- 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
    
  • Copie y pegue las claves de los desarrolladores en un nuevo archivo (por ejemplo keys.txt) en el mismo directorio que está i2p.mtn. Importe las claves a su base de datos con
     mtn -d i2p.mtn read < keys.txt
  • Descargue el código de I2P a su ordenador. ¡Puede tardar bastante, sobre todo si lo hace a través de I2P!
    • Anónimamente: mtn -d i2p.mtn -k "" pull "mtn://127.0.0.1:8998?i2p.i2p"
    • Sin anonimato: mtn -d i2p.mtn -k "" pull "mtn://mtn.i2p-projekt.de?i2p.i2p"

  • Todo el código esta ahora en su ordenador, en al archivo de la base de datos. Para hacerlo accesible en el directorio necesita ejecutar: mtn -d i2p.mtn co --branch=i2p.i2p

    El comando anterior crea el directorio i2p.i2p, el cual contiene todo el código de I2P.

Notas

Para descargar la página web en vez del código use 'i2p.www' en vez de 'i2p.i2p'.

La descarga inicial puede tardar varias horas. Si falla después de una descarga parcial, simplemente vuelva a ejecutar el mismo comando y empezará donde lo dejó. Si tiene prisa use el sistema de acceso no anónimo

Una lista completa de servidores de descarga, incluyendo i2p.i2p y i2p.www puede encontrarse en viewmtn.

Una explicación completa de cómo usar monotone está disponible en la web de monotone.

Compilando I2P

Para compilar el código necesita Sun Java Development Kit 6 o mayor, o el JDK equivalente (Sun JDK 6 recomendado) y Apache ant versión 1.7.0 o mayor. Si va a trabajar en al código principal de I2P puede entrar al directorio i2p.i2p y ejecutar 'ant' para ver las opciones de compilación.

Para trabajar en la traducción de la consola necesita las herramientas gettext, msgfmt, y msgmerge del paquete GNU gettext.

Para programar nuevas aplicaciones vea la guía de desarrollo de aplicaciones.

Ideas para desarrollar

Para hacerse una idea vea la listaTODO, por hacer, de zzz, el TODO de esta web o el Trac.

Haciendo que los resultados estén disponibles

Mira en la parte de abajo de la página de licencias para conocer los requisitos. Los necesita para poder aportar código a i2p.i2p (¡pero no para la página web!)

Versión corta de cómo generar y usar las claves si tiene planeado hacer aportes:

  • mtn genkey yourname-transport@mail.i2p (use una contraseña vacía, sin contraseña)
  • mtn genkey yourname@mail.i2p (escriba una contraseña)
  • mtn pubkey yourname-transport@mail.i2p (envíe esto al administrador del repositorio de mtn para tener permisos para aportar:)
  • mtn pubkey yourname@mail.i2p (envíe esto al encargado de las versiones para obtener los permisos para aportar - no se requiere para la página web)
  • mtn ci -k yourname@mail.i2p (loguee con esta clave)
  • mtn sync -k yourname-transport@mail.i2p (envíe los cambios al servidor con esta clave)
Versión completa: vea la web de monotone.

¡Conózcanos!

Los desarrolladores suelen estar en el IRC. Puede contactar con ellos en la red Freenode, OFTC, y en la en el IRC de I2P. El lugar usual es #i2p-dev. ¡Únase al canal y diga hola!. También hay guías adicionales para desarrolladores.

Traducciones

Traductores de la consola del ruter y la página web: Vea la guía de nuevos traductores.

Herramientas

I2P es una aplicación de código libre y es desarrollada usando herramientas libres. El proyecto I2P ha adquirido recientemente una licencia para YourKit Java Profiler. Los proyectos libres pueden obtener una licencia gratis mientras se haga referencia a YourKit en las webs del proyecto. Por favor pónganse en contacto su está interesado en la depuración y optimización del código base de I2P.

YourKit está apoyando amablemente a los proyectos libres con el Java Profiler completo. LLC es el creador de inteligentes e innovadoras herramientas para el desarrollo de aplicaciones JAVA y .NET. Échele un ojo a los productos principales de YourKit: YourKit Java Profiler y YourKit .NET Profiler.