
Iako je na Habr-u već bilo .
Odmah ću pojasniti da nisam ekspert u ovoj oblasti, ali sam više puta iskazivao interes za ovu tehnologiju, a pokušaji igranja s njom često su bili bolni. Danas sam opet započeo eksperimente i dobio neke rezultate koje bih želeo podeliti. Ukratko, opisat ću proces instalacije IPFS-a i neke trikove (sve se izvodilo na Ubuntu-u, na drugim platformama nisam isprobavao).
Ako ste propustili što je IPFS, prilično detaljno je objašnjeno ovde:
Instalacija
Za čistoću eksperimenta predlažem odmah instalaciju na nekom vanjskom serveru, jer ćemo razmatrati neke zamke u radu u lokalnom režimu i na daljinu. Kasnije, ako želite, lako će se ukloniti, nema puno posla.
Instaliramo go
Aktualnu verziju možete vidjeti na
Napomena: bolje je instalirati IPFS pod korisničkim imenom koje se najčešće koristi. Naime, u nastavku ćemo razmotriti opciju s montiranjem preko i tu postoje suptilnosti.
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
Zatim treba ažurirati okruženje (više ovde: ).
echo 'export GOPATH=$HOME/work' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc
Proveravamo da li je go instaliran
go versionInstaliramo IPFS
Najviše mi se svidela instalacija preko .
Instaliramo ga komandom
go get -v -u github.com/ipfs/ipfs-update
Nakon toga možete izvoditi sledeće komande:
ipfs-update versions — da vidite sve dostupne verzije za preuzimanje.
ipfs-update version — da vidite trenutno instaliranu verziju (dok IPFS nije instaliran, biće none).
ipfs-update install latest — instalirati najnoviju verziju IPFS-a. Umesto latest, možete navesti bilo koju željenu verziju s liste dostupnih.
Instaliramo ipfs
ipfs-update install latest
Provjeravamo
ipfs --versionŠto se tiče same instalacije, to je ukratko sve.
Pokretanje IPFS-a
Inicijalizacija
Prvo treba izvršiti inicijalizaciju.
ipfs initU odgovoru ćete dobiti nešto ovako:
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
Možete izvršiti predloženu komandu
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readmeRezultat
Pozdrav i dobrodošli u IPFS!
██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗ ███████╗
██║██╔═══╝ ██╔══╝ ╚════██║
██║██║ ██║ ███████║
╚═╝╚═╝ ╚═╝ ╚══════╝
Ako ovo vidite, uspješno ste instalirali
IPFS i sada se povezuje sa ipfs merkledag!
-------------------------------------------------------
| Upozorenje: |
| Ovo je alfa softver. Koristite na vlastitu odgovornost! |
| Puno toga nedostaje ili nije dorađeno. Postoje greške. |
| Još nije sigurno. Pročitajte sigurnosne napomene za više informacija. |
-------------------------------------------------------
Pogledajte neke od drugih datoteka u ovom direktoriju:
.\/about
.\/help
.\/quick-start <-- primjeri korištenja
.\/readme <-- ova datoteka
.\/security-notes
E, ovdje, po mom mišljenju, već počinje zanimljivo. Momci već na fazi instalacije počinju koristiti vlastite tehnologije. Predloženi hash QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv — nije generiran posebno za vas, već je ugrađen u izdanju. To znači da su do izdanja pripremili uvodni tekst, smjestili ga u IPFS i dodali adresu u instalacijski program. Smatram da je to jako cool. I ovu datoteku (točnije, cijelu mapu) sada možete pregledati ne samo lokalno, već i na službenom mostu. . U isto vrijeme možete biti sigurni da sadržaj mape nikako nije promijenjen, jer bi se u suprotnom hash također promijenio.
Usput, u ovom slučaju IPFS ima određenu sličnost sa serverom za kontrolu verzija. Ako se u izvorne datoteke mape izvrše promjene i ponovo se ispuni mapa u IPFS, tada će dobiti novu adresu. Pri tome stara mapa neće nestati i bit će dostupna na svojoj prethodnoj adresi.
Pokretanje
ipfs daemonTrebalo bi odgovoriti nešto poput ovog:
ipfs daemon
Inicijalizacija demona...
go-ipfs verzija: 0.4.22-
Repo verzija: 7
Sistem verzija: amd64/linux
Golang verzija: go1.12.7
Swarm slušanje na /ip4/x.x.x.x/tcp/4001
Swarm slušanje na /ip4/127.0.0.1/tcp/4001
Swarm slušanje na /ip6/::1/tcp/4001
Swarm oglašavanje na /p2p-circuit
Swarm oglašavanje na /ip4/127.0.0.1/tcp/4001
Swarm oglašavanje na /ip6/::1/tcp/4001
API server sluša na /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (samo za čitanje) server sluša na /ip4/127.0.0.1/tcp/8080
Demon je spreman
Otvaramo vrata za Internet
Obratite pažnju na ove dve linije:
WebUI: http://127.0.0.1:5001/webui
Gateway (samo za čitanje) server sluša na /ip4/127.0.0.1/tcp/8080
Ako ste instalirali IPFS lokalno, pristupat ćete IPFS sučeljima putem lokalnih adresa i sve će vam biti dostupno (Na primjer, :5001/webui/). No prilikom instalacije na vanjskom poslužitelju, prema zadanim postavkama, pristupnici su zatvoreni za internet. Ima dva pristupnika:
- Admin panel webui () na portu 5001.
- Vanjsko API na portu 8080 (samo za čitanje).
Za eksperimentalne svrhe možete otvoriti oba porta (5001 i 8080), ali na produkcijskom poslužitelju treba zatvoriti port 5001 putem vatrozida. Također postoji port 4001, koji je potreban da bi vas drugi čvorovi mogli pronaći. Treba ga ostaviti otvorenim za vanjske zahtjeve.
Otvorite za uređivanje ~/ .ipfs/config i pronađite ove retke:
"Addresses": {
"Swarm": [
" /ip4/0.0.0.0/tcp/4001",
" /ip6/::/tcp/4001"
],
"Announce": [],
"NoAnnounce": [],
"API": " /ip4/127.0.0.1/tcp/5001",
"Gateway": " /ip4/127.0.0.1/tcp/8080"
}Zamijenite 127.0.0.1 s ip adresom vašeg poslužitelja i spremite datoteku, a zatim ponovo pokrenite ipfs (zaustavite pokrenutu naredbu Ctrl+C i ponovno pokrenite).
Trebali biste dobiti
.
WebUI: http://ip_vašeg_poslužitelja:5001/webui
Server pristupnika (samo za čitanje) sluša na /ip4/ip_vašeg_poslužitelja/tcp/8080
Sada bi vanjski sučelja trebala biti dostupna.
Provjerite
http://domen_ili_ip_poslužitelja:8080/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readmeTrebalo bi se otvoriti navedena readme datoteka.
http://domen_ili_ip_poslužitelja:5001/webui/Trebalo bi se otvoriti web sučelje.
Ako vam webui radi, postavke IPFS-a možete mijenjati izravno u njemu, uključujući pregled statistike, no u nastavku ću obrađivati opcije konfiguracije izravno putem datoteke konfiguracije, što u načelu nije kritično. Samo je bolje zapamtiti gdje se točno nalazi konfiguracija i što s njom raditi, jer ako web sučelje ne radi, postat će teže.
Postavljanje web sučelja za rad s vlastitim poslužiteljem
Ovdje je prvi skriveni problem na kojem je potrošeno tri sata.
Ako ste instalirali IPFS na vanjskom poslužitelju, ali ga niste instalirali ili pokrenuli lokalno, prilikom pristupanja /webui u web sučelju trebali biste vidjeti grešku u vezi s povezivanjem:

Problem je u tome što webui, po mom mišljenju, djeluje prilično ambivalentno. Prvo pokušava povezati se na API poslužitelja gdje je sučelje otvoreno (naravno temeljeći se na adresi u pregledniku), a ako ne uspije, pokušava se povezati preko lokalnog pristupnika. I ako imate lokalno pokrenut IPFS, webui će raditi normalno, samo što ćete raditi s lokalnim IPFS-om, a ne vanjskim, iako ste otvorili webui na vanjskom poslužitelju. Zatim učitavate datoteke, ali ih iz nekog razloga ne vidite jednostavno na vanjskom poslužitelju...
Ako lokalno nije pokrenut, dobijamo grešku veze. U našem slučaju je greška verovatno zbog CORS-a, što takođe ukazuje webui, predlažući da dodamo konfiguraciju.
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://ip_vašeg_servera:5001", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'Ja sam jednostavno stavio wildcard.
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'Sve dodane zaglavlja možete pronaći u istom ~/.ipfs/config. U mom slučaju to je
"API": {
"HTTPHeaders": {
"Access-Control-Allow-Origin": [
"*"
]
}
},
Ponovo pokrećemo ipfs i vidimo da se webui uspešno povezao (bar bi trebao, ako ste otvorili pristupe za spoljne zahteve, kao što je opisano gore).
Sada možemo direktno kroz web interfejs dodavati foldere i datoteke, kao i kreirati svoje foldere.
Montiranje FUSE datotečnog sistema
Ovo je prilično zanimljiva stvar.
Datoteke (kao i foldere), možemo dodavati ne samo kroz web interfejs, već i direktno u terminalu, na primer
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
Poslednji heš je heš korenskog foldera.
Prema ovom hešu možemo otvoriti folder na bilo kojoj ipfs nodi (koja može pronaći našu nodu i dobiti sadržaj), možemo putem web interfejsa na portu 5001 ili 8080, ili lokalno kroz ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Ali takođe se može otvoriti kao običan folder.
Kreirajmo dva foldera u korenu i dodelimo prava našem korisniku.
sudo mkdir /ipfs /ipns
sudo chown USERNAME /ipfs /ipns
i ponovo pokrenimo ipfs sa flagom —mount
ipfs daemon --mountMožete kreirati foldere i na drugim mestima i odrediti put do njih putem parametara ipfs daemon —mount —mount-ipfs /ipfs_path —mount-ipns /ipns_path
Sada je čitanje iz ovog foldera pomalo neobično.
ls -la /ipfs
ls: čitanje direktorijuma '/ipfs': Operacija nije dozvoljena
total 0
Dakle, nema direktnog pristupa korenu ovog foldera. Ali možete dobiti sadržaj, poznavajući heš.
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
Pri tome unutar foldera čak i automatsko dopunjavanje radi kada se navodi put.
Kao što sam rekao ranije, pri takvoj montaži postoje specifičnosti: prema zadanim postavkama montirane FUSE mape dostupne su samo trenutnom korisniku (čak ni root ne može čitati iz takve mape, da ne govorimo o drugim korisnicima u sustavu). Ako želite omogućiti pristup tim mapama drugim korisnicima, trebate promijeniti „FuseAllowOther”: false u „FuseAllowOther”: true u konfiguraciji. No, to još nije sve. Ako pokrećete IPFS pod imenom root, tada je sve u redu. A ako kao običan korisnik (čak i sa sudo), dobit ćete grešku
mount helper error: fusermount: opcija allow_other dopuštena je samo ako je 'user_allow_other' postavljen u /etc/fuse.confU tom slučaju trebate prilagoditi /etc/fuse.conf, komentirajući liniju #user_allow_other.
Nakon toga ponovo pokrećemo ipfs.
Poznati problemi s FUSE
Nekoliko puta primjećena je greška da nakon ponovnog pokretanja ipfs s montažom (ili možda u drugim slučajevima), točke montiranja /ipfs i /ipns postaju nedostupne. Nema pristupa njima, a ls -la /ipfs pokazuje ???? u popisu prava.
Pronašao sam sljedeće rješenje:
fusermount -z -u /ipfs
fusermount -z -u /ipnsNakon čega ponovo pokrećemo ipfs.
Dodajemo servis
Naravno, pokretanje u terminalu odgovara samo za inicijalna testiranja. U produkcijskom režimu, demon bi trebao automatski pokretati pri pokretanju sustava.
Pod imenom sudo kreiramo datoteku /etc/systemd/system/ipfs.service i upisujemo u nju:
[Unit]
Description=IPFS Daemon
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/home/USERNAME/work/bin/ipfs daemon --mount
User=USERNAME
Restart=always
[Install]
WantedBy=multi-user.target
USERNAME naravno treba zamijeniti sa svojim korisničkim imenom (i možda će putanja do programa ipfs biti drugačija (mora se navesti puna putanja)).
Aktiviramo servis.
sudo systemctl enable ipfs.servicePokrećemo servis.
sudo service ipfs startProvjeravamo status servisa.
sudo service ipfs statusZa čistoću eksperimenta, kasnije može biti dobro ponovno pokrenuti server kako bismo provjerili da li ipfs uspješno starta automatski.
Dodajemo poznate nam peerove
Razmotrite situaciju kada imamo IPFS node instalirane i na vanjskom serveru i lokalno. Na vanjskom serveru dodajemo neki file i pokušavamo ga dobiti putem IPFS-a lokalno po CID-u. Što će se dogoditi? Naravno, lokalni server vjerojatno ništa ne zna o našem vanjskom serveru i jednostavno će pokušati pronaći file po CID-u „pitajući” sve dostupne IPFS peerove (s kojima se već uspio „upoznati”). Oni će zauzvrat pitati druge. I tako, sve dok file ne bude pronađen. U suštini, isto se događa i kada pokušavamo dobiti file preko službenog gateway-a . Ako budemo imali sreće, file će biti pronađen za nekoliko sekundi. A ako ne, neće biti pronađen ni za nekoliko minuta, što jako negativno utječe na udobnost rada. No, mi znamo gdje će se taj file u prvom redu pojaviti. Zašto ne bismo odmah rekli našem lokalnom serveru „Traži prvenstveno tamo”? Naizgled, to se može učiniti.
1. Prijavite se na udaljeni server i u konfiguraciji ~/ipfs/config tražite
"Identity": {
"PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuxxxxxxxxxxxxxxxx",
2. Izvršite sudo service ipfs status i tražite u njemu zapise Swarm, na primjer:
Swarm announcing /ip4/ip_vašeg_servera/tcp/40013. Od toga sastavljamo zajedničku adresu u obliku „/ip4/ip_vašeg_servera/tcp/4001/ipfs/$PeerID”.
4. Za sigurnost putem našeg lokalnog webui pokušajte dodati ovu adresu u peerove.

5. Ako je sve u redu, otvorimo lokalnu konfiguraciju ~/ipfs/config, pronađemo u njoj „Bootstrap”: […
i dodajemo prvo u niz dobivenu adresu.
Ponovno pokrenite IPFS.
Sada ćemo dodati file na vanjski server i pokušati ga zatražiti lokalno. Trebao bi brzo doći.
Ali ova funkcionalnost je još uvijek nestabilna. Koliko razumijem, čak i ako navedemo adresu peera u Bootstrap, tijekom rada ipfs mijenja popis aktivnih veza s peerovima. U svakom slučaju, rasprava o ovome i želje o mogućnosti označavanja stalnih peerova su u tijeku i kao što vidimo da dodamo neku funkcionalnost u ipfs@5.0+
Popis trenutnih peerova može se pregledati i u webui i u terminalu.
ipfs swarm peersI tamo i ovdje možete ručno dodati svoj peer.
ipfs swarm connect "/ip4/ip_vašeg_servera/tcp/4001/ipfs/$PeerID"Dok ne poboljšamo ovu funkcionalnost, možemo napisati alat koji provjerava povezanost s potrebnim peerom i ako nije, dodaje vezu.
Razmišljanja
Među onima koji su već upoznati s IPFS-om, postoje i argumenti za i protiv IPFS-a. U osnovi, to je izazvalo dodatnu želju da još jednom istražim IPFS. I to se odnosi na spomenutu raspravu: ne mogu reći da se jako protivim nekom od iznesenih argumenata (samo se ne slažem s tim da jedan i pol programera koristi IPFS). U cjelini, oboje su na svoj način u pravu (osobito navigira na razmišljanje). No, ako zanemarimo moralnu i pravnu procjenu, tko će dati tehničku procjenu ove tehnologije? Osobno, imam neku unutarnju percepciju da "to mora biti obavezno, to ima određene perspektive". No, zašto točno, nemam jasnu formulaciju. Recimo, ako pogledamo već postojeće centralizirane alate, oni su u mnogim aspektima mnogo ispred (stabilnost rada, brzina rada, upravljivost itd.). Ipak, imam jednu misao koja, činimi se, ima smisla i koja teško može biti ostvarena bez ovakvih decentraliziranih sustava. Naravno, možda pretjerujem, ali bih to formulirao ovako: princip širenja informacija na internetu treba promijeniti.
Objašnjavaću. Ako se malo zapitamo, sada nam se informacije šire prema principu "Nadam se da će onaj kome sam je prenio zaštititi i da neće biti izgubljena ili primljena od nekoga kome nije namijenjena". Lako je pogledati različite usluge e-pošte, oblaka i sl. I što na kraju imamo? Na Habr-u, Habr je na prvoj stranici i praktički svaki dan dobijamo vijesti o novoj globalnoj curenju. U osnovi, sve najzanimljivije navedeno je u prekrasnom članku. Dakle, glavni internetski divovi postaju sve veći, akumuliraju sve više informacija, a takve curenja su svojevrsne informacijske atomske eksplozije. Takvo nešto nikad nije bilo, a evo opet. Iako mnogi shvaćaju da rizici postoje, nastavit će vjerovati svojim podacima stranim kompanijama. Prvo, posebno nema alternativi, a drugo, oni obećavaju da su pokrpali sve rupe i da se ovo nikad više neće ponoviti.
Koji bi mi scenarij mogao izgledati? Mislim da bi se informacije trebale inicijalno širiti otvoreno. No otvorenost u ovom slučaju ne znači da sve mora biti lako čitljivo. Govorim o otvorenosti pohrane i distribucije, ali ne i potpunoj otvorenosti u čitanju. Pretpostavljam da bi se informacije trebale distribuirati s otvorenim ključevima. Na kraju krajeva, princip otvorenih/zatvorenih ključeva star je gotovo koliko i Internet. Ako informacije nisu povjerljive i namijenjene široj publici, trebale bi biti objavljene odmah s otvorenim ključem (ali još uvijek u šifriranom obliku, samo što ih svatko može dešifrirati dostupnim ključem). A ako to nije slučaj, objavljuju se bez otvorenog ključa, a ključ se predaje onome tko treba imati pristup tim informacijama. Pri tome, onaj tko ih treba pročitati, treba samo ključ, a odakle da uzme te informacije ne bi ga smjelo posebno opterećivati — jednostavno ih preuzima s mreže (to je novi princip distribucije prema sadržaju, a ne prema adresi).
Tako, napadačima će za masovni napad trebati dobiti ogromnu količinu zatvorenih ključeva, i teško će to moći učiniti na jednom mjestu. Ova zadaća mi se čini kompliciranijom od provale u neki određeni servis.
I ovdje se zatvara još jedan problem: potvrda autorstva. Danas se na internetu može pronaći mnogo citata koje su napisali naši poznanici. No, gdje je jamstvo da su upravo oni to napisali? Kada bi svaki takav zapis bio praćen digitalnim potpisom, bilo bi mnogo lakše. I nije bitno gdje se ta informacija nalazi, glavno je — potpis koji se, unaprijed, teško može falsificirati.
I ovdje je zanimljivo: IPFS već nosi sredstva za šifriranje (jer je izgrađen na blockchain tehnologiji). U konfiguraciji je odmah naveden privatni ključ.
"Identity": {
"PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx",
"PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+\/NDI51jA0MRzpBviM3o\/c\/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5
pUEDqamve+xAJO8BWt\/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa\/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj\/Fb+GJMiciJUZaAjgHoaZrrf2b\/Eii3z0i+QIVG7OypXT3Z9JUS60
KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp\/908M10QQleH\/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8\/Zijgq27oLyxKNr9T7
2gxqPCI06VTfMiCL1wBBUP1wHdFmD\/YLJwOjV\/sVzbsl9HxqzgzlDtfMn\/bJodcURFI1sf1e6WO+MyTc3..................Nisam stručnjak za sigurnost i ne mogu točno znati kako to pravilno koristiti, ali čini mi se da se ti ključevi koriste na razini razmjene između IPFS čvorova. Osim toga, i takvi projekti kao što su , na kojoj se temelji . To znači da bi svako uređaj (mobilni i ne samo) mogao lako biti opremljen svojim strojevima za šifriranje i dešifriranje. U tom slučaju, svatko će se morati pobrinuti za čuvanje svojih privatnih ključeva, a svaki će biti odgovoran za svoju sigurnost, umjesto da bude talac nekog ljudskog faktora u nekoj super popularnoj internetskoj gigantu.
Samo registrirani korisnici mogu sudjelovati u anketi. , molimo.
Jeste li ikada čuli za IPFS?
Nikad nisam čuo za IPFS, ali izgleda zanimljivo.
Nisam čuo i ne želim čuti.
Čuo sam, ali me nije zainteresiralo.
Čuo sam, ali nisam razumio, a sada izgleda zanimljivo.
Već dugo aktivno koristim IPFS.
Glasalo je 69 korisnika. Suzdržano je 13 korisnika.
Izvor: habr.com
