Hneď vysvetlím, že nie som odborníkom v tejto oblasti, ale o túto technológiu som prejavil záujem už viackrát, no pohrať sa s ňou často spôsobovalo bolesť. Dnes som opäť začal experimentovať a dosiahol som nejaké výsledky, o ktoré by som sa rád podelil. V skratke bude popísaný proces inštalácie IPFS a niektoré funkcie (všetko bolo robené na ubuntu, na iných platformách som to neskúšal). Ak ste prehliadli, čo je IPFS, je to podrobne napísané tu: habr.com/en/post/314768
Inštalácia
Pre čistotu experimentu ho navrhujem okamžite nainštalovať na nejaký externý server, pretože zvážime niektoré úskalia práce v lokálnom režime a vzdialenom režime. Potom, ak je to žiaduce, nebude dlho zbúrané, nie je veľa.
Poznámka: IPFS je lepšie inštalovať v mene používateľa, ktorý ho má používať najčastejšie. Faktom je, že nižšie zvážime možnosť montáže cez FUSE a sú tu jemnosti.
cd ~
curl -O https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
tar xvf go1.12.9.linux-amd64.tar.gz
sudo chown -R root:root ./go
sudo mv go /usr/local
rm go1.12.9.linux-amd64.tar.gz
ipfs-update verzie - zobraziť všetky dostupné verzie na stiahnutie. ipfs-update verzia - vidieť aktuálne nainštalovanú verziu (kým nebudeme mať nainštalovaný IPFS, nebude žiadna). ipfs-update nainštalujte najnovšie - nainštalujte najnovšiu verziu IPFS. Namiesto najnovšej, respektíve, môžete zadať ľubovoľnú požadovanú verziu zo zoznamu dostupných.
Inštalácia ipfs
ipfs-update install latest
check
ipfs --version
Priamo s inštaláciou vo všeobecnosti všetko.
Spustite IPFS
Inicializácia
Najprv musíte vykonať inicializáciu.
ipfs init
Ako odpoveď dostanete niečo takéto:
ipfs init
initializing IPFS node at /home/USERNAME/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmeCWX1DD7HnXXXXXXXXXXXXXXXXXXXXXXXXxxx
to get started, enter:
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
Hello and Welcome to IPFS!
██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗ ███████╗
██║██╔═══╝ ██╔══╝ ╚════██║
██║██║ ██║ ███████║
╚═╝╚═╝ ╚═╝ ╚══════╝
If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!
-------------------------------------------------------
| Warning: |
| This is alpha software. Use at your own discretion! |
| Much is missing or lacking polish. There are bugs. |
| Not yet secure. Read the security notes for more. |
-------------------------------------------------------
Check out some of the other files in this directory:
./about
./help
./quick-start <-- usage examples
./readme <-- this file
./security-notes
Tu sa podľa mňa začína to zaujímavé. Chlapci vo fáze inštalácie už začínajú používať svoje vlastné technológie. Navrhovaný hash QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv nie je generovaný špeciálne pre vás, ale je šitý do vydania. To znamená, že pred vydaním pripravili uvítací text, naliali ho do IPFS a pridali adresu do inštalátora. Myslím, že je to veľmi cool. A tento súbor (presnejšie celý priečinok) je teraz možné prezerať nielen lokálne, ale aj na oficiálnej bráne ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Zároveň si môžete byť istí, že obsah priečinka sa nijako nezmenil, pretože ak by sa zmenil, zmenil by sa aj hash.
Mimochodom, v tomto prípade má IPFS určité podobnosti so serverom na kontrolu verzií. Ak vykonáte zmeny v zdrojových súboroch priečinka a znova nalejete priečinok do IPFS, dostane novú adresu. Starý priečinok zároveň len tak nikam neodíde a bude dostupný na svojej predchádzajúcej adrese.
Priame spustenie
ipfs daemon
Mali by ste dostať takúto odpoveď:
ipfs daemon
Initializing daemon...
go-ipfs version: 0.4.22-
Repo version: 7
System version: amd64/linux
Golang version: go1.12.7
Swarm listening on /ip4/x.x.x.x/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
Otváranie dverí k internetu
Venujte pozornosť týmto dvom riadkom:
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Teraz, ak ste nainštalovali IPFS lokálne, budete pristupovať k rozhraniam IPFS na lokálnych adresách a všetko vám bude dostupné (napr. localhost:5001/webui/). Pri inštalácii na externý server sú však brány predvolene zatvorené pre internet. Dve brány:
Zatiaľ môžu byť oba porty (5001 a 8080) otvorené pre experimenty, ale na bojovom serveri by mal byť port 5001 samozrejme uzavretý firewallom. K dispozícii je tiež port 4001, ktorý je potrebný, aby vás ostatní kolegovia mohli nájsť. Malo by byť ponechané otvorené pre vonkajšie požiadavky.
Otvorte ~/.ipfs/config na úpravu a nájdite v ňom tieto riadky:
Ak vám webi funguje, nastavenia IPFS je možné zmeniť priamo v ňom, vrátane prezerania štatistík, ale nižšie zvážim možnosti konfigurácie priamo cez konfiguračný súbor, čo vo všeobecnosti nie je kritické. Je len lepšie si zapamätať, kde presne je konfigurácia a čo s ňou robiť, inak, ak webová tvár nefunguje, bude to ťažšie.
Nastavenie webového rozhrania na prácu s vaším serverom
Tu je prvá nástraha, ktorá trvala asi tri hodiny.
Ak ste nainštalovali IPFS na externý server, ale nenainštalovali alebo nespustili IPFS lokálne, potom keď prejdete na /webui vo webovom rozhraní, mali by ste vidieť chybu pripojenia:
Faktom je, že webi podľa mňa fungujú veľmi nejednoznačne. Najprv sa pokúsi pripojiť k API servera, kde je rozhranie otvorené (samozrejme na základe adresy v prehliadači). a ak to tam nepojde, snazi sa pripojit na lokalnu branu. A ak máte IPFS spustený lokálne, webi vám bude fungovať dobre, iba vy budete pracovať s lokálnym IPFS a nie externým, hoci ste webi otvorili na externom serveri. Potom nahráte súbory, ale z nejakého dôvodu ich na externom serveri nevidíte len tak...
A ak nefunguje lokálne, dostaneme chybu pripojenia. V našom prípade je chyba s najväčšou pravdepodobnosťou spôsobená CORS, čo naznačuje aj webi, čo naznačuje pridanie konfigurácie.
Reštartujeme ipfs a vidíme, že webi sa úspešne pripojil (v každom prípade by mal, ak ste otvorili brány pre požiadavky zvonku, ako je popísané vyššie).
Teraz môžete nahrávať priečinky a súbory priamo cez webové rozhranie, ako aj vytvárať vlastné priečinky.
Pripojenie súborového systému FUSE
Tu je celkom zaujímavá funkcia.
Súbory (ale aj priečinky) môžeme pridávať nielen cez webové rozhranie, ale aj priamo v termináli, napr.
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
Posledný hash je hash koreňového priečinka.
Pomocou tohto hashu môžeme otvoriť priečinok na akomkoľvek uzle ipfs (ktorý môže nájsť náš uzol a získať obsah), môžeme vo webovom rozhraní na porte 5001 alebo 8080, alebo môžeme lokálne cez ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Stále ho však môžete otvoriť ako bežný priečinok.
Vytvorme dva priečinky v koreňovom adresári a prideľme k nim práva nášmu používateľovi.
Priečinky môžete vytvárať na iných miestach a zadať k nim cestu cez parametre démona ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path
Teraz je čítanie z tohto priečinka trochu nezvyčajné.
ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0
To znamená, že neexistuje priamy prístup do koreňového adresára tohto priečinka. Ale môžete získať obsah, keď poznáte hash.
ls -la /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx
total 0
-r--r--r-- 1 root root 10 Aug 31 07:03 test.txt
cat /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx/test.txt
test
test
Zároveň funguje aj automatické dokončovanie vo vnútri priečinka, keď je zadaná cesta.
Ako som povedal vyššie, takéto pripojenie má jemnosť: v predvolenom nastavení sú pripojené priečinky FUSE dostupné iba aktuálnemu používateľovi (dokonca ani root nebude môcť čítať z takéhoto priečinka, nehovoriac o iných používateľoch v systéme). Ak chcete tieto priečinky sprístupniť ostatným používateľom, potom v konfigurácii musíte zmeniť "FuseAllowOther": false na "FuseAllowOther": true. Ale to nie je všetko. Ak spustíte IPFS ako root, potom je všetko v poriadku. A ak v mene bežného používateľa (aj sudo), dostanete chybu
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
V tomto prípade musíte upraviť súbor /etc/fuse.conf zrušením komentára v riadku #user_allow_other.
Potom reštartujte ipfs.
Známe problémy s FUSE
Problém bol zaznamenaný viac ako raz, že po reštartovaní ipfs s pripojením (a možno aj v iných prípadoch) sa body pripojenia /ipfs a /ipns stanú nedostupnými. Nie je k nim prístup a ls -la /ipfs zobrazuje ???? v zozname práv.
Našlo sa toto riešenie:
fusermount -z -u /ipfs
fusermount -z -u /ipns
Potom reštartujte ipfs.
Pridanie služby
Spustenie v termináli je samozrejme vhodné len na počiatočné testy. V bojovom režime by sa mal démon spustiť automaticky pri štarte systému.
V mene sudo vytvorte súbor /etc/systemd/system/ipfs.service a napíšte doň:
USERNAME, samozrejme, musí byť nahradené vaším používateľom (a možno bude pre vás úplná cesta k programu ipfs iná (musíte zadať úplnú cestu)).
Aktivujeme službu.
sudo systemctl enable ipfs.service
Spúšťame službu.
sudo service ipfs start
Kontrola stavu služby.
sudo service ipfs status
Kvôli čistote experimentu bude možné v budúcnosti reštartovať server, aby sa skontrolovalo, či sa ipfs úspešne automaticky spustí.
Pridávanie nám známych hodov
Zvážte situáciu, keď máme uzly IPFS nainštalované na externom serveri aj lokálne. Na externý server pridáme nejaký súbor a pokúsime sa ho získať cez IPFS lokálne podľa CID. Čo sa bude diať? Samozrejme, lokálny server s najväčšou pravdepodobnosťou nevie nič o našom externom serveri a jednoducho sa pokúsi nájsť súbor podľa CID tak, že sa „opýta“ všetkých IPFS partnerov, ktorí sú mu k dispozícii (s ktorými sa už stihol „zoznámiť“). Tí sa zase budú pýtať ostatných. A tak ďalej, kým sa súbor nenájde. V skutočnosti sa to isté stane, keď sa pokúsime dostať súbor cez oficiálnu bránu ipfs.io. Ak budete mať šťastie, súbor sa nájde za pár sekúnd. A ak nie, nenájde sa ani za pár minút, čo značne ovplyvňuje komfort práce. Vieme však, kde sa tento súbor prvýkrát objaví. Prečo teda okamžite nepovieme nášmu miestnemu serveru „najskôr tam hľadajte“? Zrejme sa to dá.
1. Prejdeme na vzdialený server a pozrieme sa do konfigurácie ~/.ipfs/config
2. Spustite stav sudo service ipfs a vyhľadajte v ňom položky Swarm, napríklad:
Swarm announcing /ip4/ip_вашего_сервера/tcp/4001
3. Z toho pridáme všeobecnú adresu formulára "/ip4/ip_your_server/tcp/4001/ipfs/$PeerID".
4. Kvôli spoľahlivosti sa pokúsime pridať túto adresu k rovesníkom prostredníctvom nášho lokálneho webu.
5. Ak je všetko v poriadku, otvorte lokálnu konfiguráciu ~ / .ipfs / config, nájdite v nej „Bootstrap“: [...
a najprv pridajte prijatú adresu do poľa.
Reštartujte IPFS.
Teraz pridajme súbor na externý server a skúsme si ho vyžiadať na lokálnom. Mal by letieť rýchlo.
Táto funkcia však ešte nie je stabilná. Pokiaľ tomu rozumiem, aj keď v Bootstrape zadáme adresu partnera, ipfs počas prevádzky zmení zoznam aktívnych spojení s partnermi. V každom prípade o tom a želaniach ohľadom možnosti upresnenia stálych sviatkov prebieha diskusia tu a zdá sa mal pridať nejaké funkcie [chránené e-mailom]+
Zoznam aktuálnych partnerov je možné zobraziť na webe aj v termináli.
Kým sa táto funkcia nezlepší, môžete napísať nástroj na kontrolu spojenia s požadovaným partnerom a ak nie, na pridanie spojenia.
Zdôvodnenie
Medzi tými, ktorí už poznajú IPFS, existujú argumenty za aj proti IPFS. V podstate včera diskusia a podnietil ma, aby som sa znova ponoril do IPFS. A čo sa týka vyššie spomínanej diskusie: nemôžem povedať, že by som bol zásadne proti akýmkoľvek argumentom tých, ktorí hovorili (nesúhlasím len s tým, že jeden a pol programátora používa IPFS). Vo všeobecnosti majú obaja pravdu svojím vlastným spôsobom (najmä komentovať kontroly núti vás premýšľať). Ale ak dáme bokom morálno-právne posúdenie, kto dá aké technické posúdenie tejto technológie? Osobne mám akýsi vnútorný pocit, že „to je určite potrebné, má to isté vyhliadky“. Ale prečo presne, neexistuje jasná formulácia. Napríklad, ak sa pozriete na existujúce centralizované nástroje, potom sú v mnohých ohľadoch ďaleko popredu (stabilita prevádzky, rýchlosť prevádzky, ovládateľnosť atď.). Napriek tomu mám jeden nápad, ktorý sa zdá byť zmysluplný a ktorý sa bez takýchto decentralizovaných systémov dá len ťažko zrealizovať. Samozrejme, že príliš tlačím, ale sformuloval by som to takto: treba zmeniť princíp šírenia informácií na internete.
Nechaj ma vysvetliť. Ak sa nad tým zamyslíte, teraz máme informácie distribuované podľa zásady „Dúfam, že ten, komu som ich dal, ich ochráni a nestratia ani neprijmú tí, ktorým neboli určené.“ Ako príklad je ľahké zvážiť rôzne poštové služby, cloudové úložiská atď. A s čím skončíme? Na hube Habré Informačná bezpečnosť je na prvom riadku a takmer každý deň dostávame správy o ďalšom globálnom úniku. V zásade sú všetky najzaujímavejšie veci uvedené v <irónii> úžasné článok Leto je takmer za nami. Nezostali takmer žiadne neuniknuté dáta. To znamená, že hlavní internetoví giganti sa zväčšujú, hromadia čoraz viac informácií a takéto úniky sú akýmsi informačným atómovým výbuchom. Toto sa ešte nikdy nestalo a je to tu znova. Zároveň, hoci mnohí chápu, že existujú riziká, budú naďalej dôverovať svojim údajom spoločnostiam tretích strán. Po prvé, nie je veľa alternatív a po druhé sľubujú, že zaplátali všetky diery a už sa to nikdy nestane.
Akú možnosť vidím? Zdá sa mi, že údaje by sa mali spočiatku distribuovať otvorene. No otvorenosť v tomto prípade neznamená, že všetko by sa malo dať ľahko čítať. Hovorím o otvorenosti skladovania a distribúcie, ale nie o úplnej otvorenosti v čítaní. Predpokladám, že informácie by sa mali distribuovať pomocou verejných kľúčov. Koniec koncov, princíp verejných / súkromných kľúčov je už starý, takmer ako internet. Ak informácia nie je dôverná a je určená pre široký okruh, potom sa okamžite rozloží s verejným kľúčom (ale stále v zašifrovanej forme, dostupným kľúčom ich môže dešifrovať každý). A ak nie, potom je položený bez verejného kľúča a samotný kľúč sa prenesie na to, čo by malo mať prístup k týmto informáciám. Zároveň ten, kto by to mal čítať, by mal mať iba kľúč a kde tieto informácie získať, by nemal skutočne stúpať - iba si ich stiahne zo siete (to je nový princíp distribúcie podľa obsahu, nie podľa adresa).
Na hromadný útok teda útočníci budú musieť získať obrovské množstvo súkromných kľúčov, a to sa pravdepodobne nepodarí na jednom mieste. Táto úloha, ako to vidím ja, je náročnejšia ako hacknutie konkrétnej služby.
A tu sa uzatvára ďalší problém: potvrdenie autorstva. Teraz na internete môžete nájsť veľa citátov napísaných našimi priateľmi. Kde je však záruka, že ich napísali práve oni? Teraz, keby bol každý takýto záznam sprevádzaný digitálnym podpisom, bolo by to oveľa jednoduchšie. A nezáleží na tom, kde tieto informácie ležia, hlavnou vecou je podpis, ktorý je, samozrejme, ťažké sfalšovať.
A tu je to, čo je zaujímavé: IPFS už obsahuje šifrovacie nástroje (napokon je postavené na technológii blockchain). Súkromný kľúč je okamžite špecifikovaný v konfigurácii.
Nie som bezpečnostný špecialista a nemôžem presne vedieť, ako to správne používať, ale zdá sa mi, že tieto kľúče sa používajú na úrovni výmeny medzi uzlami IPFS. A tiež js-ipfs a ukážkové projekty ako napr orbit-dbna ktorom to funguje orbit.chat. To znamená, že teoreticky každé zariadenie (nielen mobilné) môže byť jednoducho vybavené vlastnými šifrovacími a dešifrovacími strojmi. V tomto prípade zostáva len na všetkých, aby sa postarali o uloženie svojich súkromných kľúčov a každý bude zodpovedný za svoju bezpečnosť a nebude rukojemníkom iného ľudského faktora na nejakom superpopulárnom internetovom gigante.
Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.
Počuli ste už o IPFS?
Nikdy som nepočul o IPFS, ale zdá sa mi to zaujímavé
Nepočul som a ani nechcem počuť
Počul, ale nezaujímalo ma
Počul, ale nerozumel, ale teraz sa to zdá zaujímavé
IPFS aktívne používam už dlho.
Hlasovalo 69 užívateľov. 13 užívateľov sa zdržalo hlasovania.