Aceasta este o versiune revizuită a originalului Complication   ghid care detaliază utilizarea Monotone în dezvoltarea I2P.   Pentru instrucțiuni de bază, consultați ghidul de pornire rapidă.

I2P are un model de dezvoltare distribuit. Codul sursă este reprodus în toate   depozite administrate independent Monotone („MTN”).   Dezvoltatorii care au drepturi de angajare sunt capabili să își schimbe modificările în depozit   (trebuie semnat un acord de licență   înainte de acordarea drepturilor de angajament).

Some of Monotone's noteworthy qualities are: distributed version control, cryptographic authentication, access control, its small size, having few dependencies, storage of projects in a compressed SQLite database file, and having the ability to resume interrupted synchronization attempts.

Operarea unui client Monotone

Generarea cheilor Monoton

O cheie de transport vă oferă posibilitatea de a împinge modificările pe un server de depozit Monotone.   Pentru a comuta codul în Monotone (în esență semnarea codului dvs.), este necesară și o cheie de validare.   Niciunul dintre serverele publice Monotone de pe I2P nu necesită în prezent o cheie pentru a citi (sau a trage) codul sursă.

Without a transport key, one cannot:

  • pull code from a server which doesn't allow global read access
  • push code to any server
  • run a Monotone server

Fără o cheie de angajare, nu se poate:

  • comite orice cod

Dacă intenționați doar să recuperați codul de la MTN, nu ezitați să treceți la   secțiunea următoare. Daca vrei   pentru a genera chei, citiți următoarele.

Prin convenție, cheile sunt denumite ca adrese de e-mail, dar un e-mail corespunzător   adresa nu trebuie să existe. De exemplu, cheile dvs. pot fi numite:

  • [email protected]
  • [email protected]

Monotone stochează chei sub $HOME/.monotone/keys în fișiere text care  sunt numite identic cu chei. De exemplu:

  • /home/complication/.monotone/keys/[email protected]

Pentru a genera chei de transport și de angajare, introduceți următoarele comenzi la prompt:

  • $ mtn genkey [email protected]
  • $ mtn genkey [email protected]

Monotone vă va solicita o parolă pentru a vă proteja cheile. Sunteți foarte încurajat să setați o parolă   pentru cheia de angajare. Mulți utilizatori vor lăsa o parolă goală pentru cheia de transport, în special pentru cei care rulează   Server monoton.

Aveți încredere și inițializați-vă depozitul

Monotone's security model helps to ensure that nobody can easily impersonate a developer without it being noticed. Since developers can make mistakes and become compromised,only manual review can ensure quality of code. Monotone's trust model will ensure that you read the right diffs. It does not replace reading diffs.

Un depozit Monotone este un singur fișier (o bază de date SQLite comprimată) care conține tot codul sursă și istoricul proiectului.

After importing the developers' keys into Monotone and setting up trust evaluation hooks, Monotone will prevent untrusted code from being checked out into your workspace. There are commands available to clean untrusted code from your workspace but in practice they've not been needed due to the push access policies in place.

Un depozit poate deține multe sucursale. De exemplu, depozitul nostru deține   următoarele ramuri principale:

  • i2p.i2p — Routerul I2P și programele asociate
  • i2p.www — Site-ul proiectului I2P
  • i2p.syndie — Syndie, un instrument distribuit pe forumuri

By convention, the I2P Monotone repository is named i2p.mtn. Before pulling source code from servers, a database for your repository will need to be initialized. To initialize your local repository, change into the directory that you want the i2p.mtn file and branch directories to be stored and issue the following command:

  • $ mtn --db="i2p.mtn" db init

Obținerea și implementarea cheilor dezvoltatorilor

Cheile pe care dezvoltatorii le folosesc pentru a comite codul sunt esențiale pentru evaluarea încrederii   Monotonă. Cheile de transport ale celorlalți dezvoltatori sunt necesare numai pentru operatorii de server Monotone.

Cheile de angajare ale dezvoltatorilor sunt furnizate semnat GPG pe o altă pagină.

To import developers' keys after verifying their authenticity, copy all of the keys into a new file. Create this file (e.g. keys.txt) in the same directory where i2p.mtn is located. Import the keys with the command:

  • $ mtn --db="i2p.mtn" read < keys.txt

Notă: Nu adăugați niciodată chei la $HOME/.monotone/keys in mod manual.

Configurarea cârligelor de evaluare a încrederii

Politica implicită de încredere Monotone este mult prea vagă pentru cerințele noastre: fiecare comitent este de încredere în mod implicit.   Acest lucru nu este acceptabil pentru dezvoltarea I2P.

Modificați în directorul $HOME/.monotone și deschideți fișierul   monotonerc cu un editor de text. Copiați și inserați următoarele două funcții în acest fișier:

-- 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",	--  [email protected]
		"f6706ac205e6b5d7a7e3ea4244ab0ef497f0a099",	--  [email protected]
		"690f278ff6c6157cbaf23b0d602b6d6dcf368313",	--  [email protected]
		"eb4ac08d5ddbb2bd73889f86c1211424025a6f07",	--  [email protected]
		"aae785027c240ebbb0a883fd8ebcf8d6ecee4104",	--  [email protected]
		"86478595288d1b96b58f0c8cd8a8971bc430f8fd",	--  [email protected]
		-- completed dev agreement 2013-07 but never checked in anything
		--"5f75b8f0769770edc3267c21ddc9a00ddae31394",	--  [email protected]
		"4ebaace9973913416af92ee8d0fb93d64753df4c",	--  [email protected]
		"7e498ae94c9c322404adfc61b16bed388095906b",	--  [email protected]
		"6c728b0ffed3c2bf7fb0f3c583b30f966d9bacd5",	--  [email protected]
		"0e4e7ebebafbdf4cdacc45a47ba155b1215d8e8b",	--  [email protected]
		"f332b3d3b11b2efdae220cea75b9d5ba9ec3b52d",	--  [email protected]
		"d681db14fd98da1efd6f8ceb2be6b91d784bdf5c",	--  [email protected]
		"e246444b4fe69ba599e13403c4ab931066de902f",	--  [email protected]
		"a61146ee69ddb9fcf3b82b19a62b8114b60d367e",	--  [email protected]
		"4844b1fd45f5a68744fa28d2f3e3b61a3cf83b95",	--  [email protected]
		"6b2acfc9fe2f69b796631a514660fd7bdd237e2d",	--  [email protected]
		"c9b970f5e8917eada663d4c6b22096617021c95c",	--  [email protected]
		"3be64909d6ab7c3d7afe16f20f24e672708b576b",	--  [email protected]
		"2977a6f4e11819a3f928783175caadc0071fc4de",	--  [email protected]
		"de9d196e8057e1629178edbfa1ed754c648d7340",	--  [email protected]
		"2a0bba98558d7a9d7e4b1bd807789601252c0024",	--  [email protected]
		"6ade4b7a9a6425194f482ab351950e4230dbbc85",	--  [email protected]
		"bc74b49fd8a20513b2745a3d13414b7e9818dd18",	--  [email protected]
		"3fb8d1ee1e82981a8076ddbcbf4d18f372b8bba7",	--  [email protected]
		"e3815f0c985663182534fbd7d6a2bf93204a0bd0",	--  [email protected]
		"2ef1ae1e73a30e1afc0b4a7af89b4380b3dd46b7",	--  [email protected]
		"1092773c40f5813b9179d52a8ab7b499b9554da3",	--  [email protected]
		"01265f0c817b24548478341fb75e672720a78b21",	--  [email protected]
		"38fe2aa37e1eb9a300a2061ef153265c48031c6b",	--  [email protected]
		"a0eb78d437efad120dd9edcd776a327ec2c2adde",	--  [email protected]
		"2158706490e62a17c8140b6e9eabca965b681bc7",	--  [email protected]
		"56810cd6434ab33593260e188b32bb83e4e9a139",	--  [email protected]
		"896e399990704373125f782ae2ee19b6611ac612"	--  [email protected]
   }
   local t = keyintersection(signers, trusted_signers)
   if t == nil then return false end
   if #t>= 1 then return true end
   return false
end

Prima funcție determină o intersecție între două seturi, în cazul nostru a   semnatarii reviziei și semnatarii de încredere.

A doua funcție determină încrederea într-o revizuire dată, apelând prima   funcționează cu „semnatarii” și „de încredere” ca argumente. Dacă intersecția este   nul, revizuirea nu este de încredere. Dacă intersecția nu este goală,   revizuirea este de încredere. În caz contrar, revizuirea nu este de încredere.

Mai multe informații despre cârligele de evaluare a încrederii pot fi găsite în documentația oficială Monotone.

Tragerea ramurilor i2p.i2p, i2p.www și i2p.syndie

I2P este livrat cu un tunel pre-configurat îndreptat către serverul Monotone proiect. Asigurați-vă că tunelul a fost pornit   în I2PTunnel înainte de a încerca să tragă codul sursă din 127.0.0.1:8998.

Introduceți directorul în care ați inițializat i2p.mtn. În funcție de dvs.   doriți doar surse I2P, sau de asemenea surse pentru site-ul I2P și Syndie, puteți   efectuați operația de tragere în moduri diferite.

Dacă doriți doar surse I2P:

  • $ mtn --db="i2p.mtn" -k "" pull "mtn://127.0.0.1:8998?i2p.i2p"

Dacă doriți toate sucursalele:

  • $ mtn --db="i2p.mtn" -k "" pull "mtn://127.0.0.1:8998?i2p.*"
Dacă transferul se oprește înainte de finalizarea cu succes, pur și simplu repetarea comenzii pull va relua transferul.

Etragerea în exemplele de mai sus se face anonim prin specificarea unei chei de transport goale.   Dacă toată lumea trage anonim, va fi mai greu pentru un atacator care câștigă controlul asupra serverului   pentru a furniza selectiv unor persoane date manipulate.

Verificarea faptului că evaluarea încrederii funcționează

Pentru a verifica dacă funcționează evaluarea încrederii:

  • Efectuați o copie de rezervă a fișierului dvs. monotonerc.
  • Modificați monotonerc setând variabila trust_signers în felul următor:
           local trusted_signers = {}
      
  • Cu monotonerc configurat ca mai sus, Monotone nu va mai avea încredere în niciun angajator. Confirmă acest lucru schimbând în director în care i2p.mtn a fost creat și încercați o verificare a filialei I2P:
    • $ mtn --db="i2p.mtn" co --branch="i2p.i2p"

    Nu trebuie să apară un director denumit i2p.i2p. Ar trebui să întâlnești mulți   mesaje de eroare precum:

        mtn: warning: trust function disliked 1 signers
        of branch cert on revision 523c15f6f50cad3bb002f830111fc189732f693b
        mtn: warning: trust function disliked 1 signers
        of branch cert on revision 8ac13edc2919dbd5bb596ed9f203aa780bf23ff0
        mtn: warning: trust function disliked 1 signers
        of branch cert on revision 8c4dd8ad4053baabb102a01cd3f91278142a2cd1
        mtn: misuse: branch 'i2p.i2p' is empty
      

    Dacă sunteți mulțumit de rezultate, restabiliți backup-ul   monotonerc care a fost creat mai sus. Dacă nu ați creat o copie de rezervă   după cum este recomandat, citiți din nou Setarea cârligelor de evaluare a încrederii.

    Verificați o copie de lucru a celei mai recente versiuni

    Dacă aveți deja o filială, treceți la următoarea   secțiune.

    Schimbați-vă în directorul în care se află i2p.mtn. Problema de mai sus:

    • $ mtn --db="i2p.mtn" co --branch="i2p.i2p"

    The checkout should complete without error messages and a directory named i2p.i2p should appear in the current directory. Congratulations! You have successfully checked out the latest I2P sources, ready to be compiled.

    Actualizarea copiei de lucru la cea mai recentă versiune

    Dacă nu ați făcut acest lucru deja, trageți codul proaspăt de pe server în localul dvs.   Depozitul monoton. Pentru a realiza acest lucru, treceți în directorul unde   i2p.mtn este localizat și emite:

    • $ mtn --db="i2p.mtn" -k "" pull "mtn://127.0.0.1:8998?i2p.i2p"

    Acum, schimbați-vă în directorul dvs. i2p.i2p și mai întâi problema:

    • $ mtn update

    Atâta timp cât nu au existat erori ... Felicitări! Ați actualizat cu succes la cele mai recente surse I2P. ei   ar trebui să fie gata să compileze.

    Operarea unui server Monotone

    Obținerea și implementarea cheilor de transport ale dezvoltatorilor

    Ca operator de server, poate doriți să acordați acces push anumitor dezvoltatori.

    Acordarea accesului push and pull

    În mod implicit, serverul Monotone refuză tot accesul.

    Pentru a acorda acces la tragere tuturor clienților, setați următoarele $HOME/.monotone/read-permissions:

        pattern "*"
        allow "*"
    

    Nimeni nu va putea să împingă codul pe serverul dvs. fără permisiunea acordată în mod explicit. Pentru a acorda acces push:

    • Adăugați numele cheii de transport a utilizatorului $HOME/.monotone/write-pernussions, cum ar fi
          [email protected]
          [email protected]
      
      cu o cheie pe linie.
    • Importați cheia(i) de transport în baza de date. Procedura de import a cheilor de transport este aceeași ca și pentru importarea cheilor de angajare, care este descrisă în secțiunea Obținerea și implementarea cheilor dezvoltatorilor.

    Rulează Monotone în modul server

    O bază de date separată ar trebui să fie utilizată pentru serverul dvs. Monotone, deoarece monotonul va bloca baza de date în timp ce este servit altora.   Faceți o copie a bazei de date de dezvoltare, apoi porniți serverul cu:

    • $ mtn serve --bind="127.0.0.1:8998" --db="i2p.mtn" --key "[email protected]"
    Dacă cheia dvs. este protejată cu o parolă, Monotone poate solicita parola   când primul client se conectează. Puteți rezolva acest lucru conectând crearea primei conexiuni a clientului la serverul dvs.   (sau ștergând parola pentru cheia de transport).

    Pentru ca serverul dvs. să fie accesibil pentru alții peste I2P, va trebui să creați un   tunel pentru server. Utilizați tipul de tunel „Standard” și profilul „Bulk”.

    Diferențe în Debian GNU / Linux

    Debian (printre alte distribuții) a integrat Monotone în al lor   cadrul de demoni / servicii. Deși serverele Monotone pot fi rulate în continuare   „modul obișnuit” pe sistemele Debian, făcându-l „calea Debian” poate fi mai simplu.

    Permisiunile sunt acordate prin editarea fișierelor /etc/monoton/read-permissions și   /etc/monotonă/write-permissions. De asemenea, va trebui să editați /etc/default/monoton pentru a activa monotonul să pornească de la pornire sau la   personalizați locația gazdă, port sau baza de date.