Jag ska genast klargöra att jag inte Àr nÄgon expert pÄ detta omrÄde, men jag har visat intresse för den hÀr tekniken mer Àn en gÄng, men att försöka leka med den orsakade ofta en del smÀrta. Idag började jag experimentera igen och fick nÄgra resultat som jag skulle vilja dela med mig av. I korthet kommer IPFS-installationsprocessen och vissa funktioner att beskrivas (allt gjordes pÄ ubuntu, jag har inte provat det pÄ andra plattformar). Om du har missat vad IPFS Àr sÄ skrivs det i detalj hÀr: habr.com/en/post/314768
Installation
För experimentets renhet föreslÄr jag att du omedelbart installerar det pÄ nÄgon extern server, eftersom vi kommer att övervÀga nÄgra fallgropar med att arbeta i lokalt lÀge och fjÀrrkontroll. Sedan kommer det om sÄ önskas inte att rivas pÄ lÀnge, det Àr inte mycket.
Obs: det Ă€r bĂ€ttre att installera IPFS pĂ„ uppdrag av anvĂ€ndaren som ska anvĂ€nda det oftast. Faktum Ă€r att vi nedan kommer att övervĂ€ga möjligheten att montera via SĂKRING och det finns finesser.
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-uppdateringsversioner - för att se alla tillgÀngliga versioner för nedladdning. ipfs-uppdateringsversion - för att se den för nÀrvarande installerade versionen (tills vi har IPFS installerat, kommer det att vara ingen). ipfs-update installera senaste - installera den senaste versionen av IPFS. IstÀllet för senaste, respektive, kan du ange vilken version som helst frÄn listan över tillgÀngliga.
Installerar ipfs
ipfs-update install latest
Kontroll
ipfs --version
Direkt med installationen i allmÀnna termer allt.
Starta IPFS
initiering
Först mÄste du utföra initiering.
ipfs init
Som svar fÄr du nÄgot i stil med detta:
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
HÀr börjar enligt min mening det intressanta. Killarna pÄ installationsstadiet börjar redan anvÀnda sin egen teknik. Den föreslagna hashen QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv genereras inte specifikt för dig, utan sys in i releasen. Det vill sÀga, innan releasen förberedde de en vÀlkomsttext, hÀllde den i IPFS och la till adressen till installationsprogrammet. Jag tycker det Àr vÀldigt coolt. Och den hÀr filen (mer exakt, hela mappen) kan nu ses inte bara lokalt utan ocksÄ pÄ den officiella gatewayen ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Samtidigt kan du vara sÀker pÄ att innehÄllet i mappen inte har förÀndrats pÄ nÄgot sÀtt, för om det hade Àndrats sÄ hade Àven hashen Àndrats.
Förresten, i det hÀr fallet har IPFS vissa likheter med versionskontrollservern. Om du gör Àndringar i mappens kÀllfiler och Äterigen hÀller mappen i IPFS, kommer den att fÄ en ny adress. Samtidigt kommer den gamla mappen inte att hamna nÄgonstans bara sÄ och kommer att finnas tillgÀnglig pÄ sin tidigare adress.
Direkt lansering
ipfs daemon
Du bör fÄ ett svar sÄ hÀr:
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
Ăppnar dörrarna till Internet
Var uppmÀrksam pÄ dessa tvÄ rader:
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Nu, om du har installerat IPFS lokalt, kommer du att komma Ät IPFS-grÀnssnitt med hjÀlp av lokala adresser och allt kommer att vara tillgÀngligt för dig (till exempel, lokalvÀrd:5001/webui/). Men nÀr de installeras pÄ en extern server Àr gateways som standard stÀngda för Internet. Gateways tvÄ:
Ăn sĂ„ lĂ€nge kan bĂ„da portarna (5001 och 8080) öppnas för experiment, men pĂ„ en stridsserver ska givetvis port 5001 stĂ€ngas med en brandvĂ€gg. Det finns ocksĂ„ port 4001, som behövs för att andra kamrater ska hitta dig. Det bör lĂ€mnas öppet för externa förfrĂ„gningar.
Ăppna ~/.ipfs/config för redigering och hitta dessa rader i den:
Om webui fungerar för dig kan IPFS-instÀllningarna Àndras direkt i den, inklusive visning av statistik, men nedan kommer jag att övervÀga konfigurationsalternativ direkt genom konfigurationsfilen, vilket i allmÀnhet inte Àr kritiskt. Det Àr bara bÀttre att komma ihÄg exakt var konfigurationen Àr och vad man ska göra med den, annars om webbansiktet inte fungerar blir det svÄrare.
Konfigurera ett webbgrÀnssnitt för att fungera med din server
HÀr Àr den första fallgropen, som tog cirka tre timmar.
Om du installerade IPFS pÄ en extern server, men inte installerade eller körde IPFS lokalt, bör du se ett anslutningsfel nÀr du gÄr till /webui i webbgrÀnssnittet:
Faktum Àr att webui, enligt min mening, fungerar vÀldigt tvetydigt. Först försöker den ansluta till serverns API dÀr grÀnssnittet Àr öppet (baserat pÄ adressen i webblÀsaren, förstÄs). och om det inte fungerar dÀr försöker den ansluta till den lokala gatewayen. Och om du har IPFS som körs lokalt, kommer webui att fungera bra för dig, bara du kommer att arbeta med lokal IPFS, och inte extern, Àven om du öppnade webui pÄ en extern server. Sedan laddar du upp filerna, men av nÄgon anledning ser du dem inte bara sÄ pÄ en extern server...
Och om det inte körs lokalt fÄr vi ett anslutningsfel. I vÄrt fall beror felet troligen pÄ CORS, vilket ocksÄ indikeras av webui, vilket tyder pÄ att du lÀgger till en konfiguration.
Vi startar om ipfs och vi ser att webui har anslutit framgÄngsrikt (i alla fall bör det, om du öppnade gateways för förfrÄgningar utifrÄn, som beskrivits ovan).
Nu kan du ladda upp mappar och filer direkt via webbgrÀnssnittet, samt skapa dina egna mappar.
Montering av FUSE-filsystemet
HÀr Àr en ganska intressant funktion.
Filer (liksom mappar) kan vi lÀgga till inte bara via webbgrÀnssnittet utan Àven direkt i terminalen, till exempel
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
Den sista hashen Àr hashen för rotmappen.
Med hjÀlp av denna hash kan vi öppna en mapp pÄ valfri ipfs-nod (som kan hitta vÄr nod och hÀmta innehÄllet), vi kan i webbgrÀnssnittet pÄ port 5001 eller 8080, eller vi kan lokalt via ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Men du kan fortfarande öppna den som en vanlig mapp.
LÄt oss skapa tvÄ mappar i roten och ge vÄra anvÀndare rÀttigheter till dem.
Du kan skapa mappar pÄ andra stÀllen och ange sökvÀgen till dem genom ipfs-demonparametrarna -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path
Att nu lÀsa frÄn den hÀr mappen Àr nÄgot ovanligt.
ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0
Det vill sÀga, det finns ingen direkt Ätkomst till roten av denna mapp. Men du kan fÄ innehÄllet genom att kÀnna till hashen.
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
Samtidigt fungerar Àven autokomplettering inne i mappen nÀr sökvÀgen Àr angiven.
Som jag sa ovan, det finns finesser med sÄdan montering: som standard Àr monterade FUSE-mappar endast tillgÀngliga för den aktuella anvÀndaren (Àven root kommer inte att kunna lÀsa frÄn en sÄdan mapp, för att inte tala om andra anvÀndare i systemet). Om du vill göra dessa mappar tillgÀngliga för andra anvÀndare, mÄste du i konfigurationen Àndra "FuseAllowOther": false till "FuseAllowOther": true. Men det Àr inte allt. Om du kör IPFS som root Àr allt OK. Och om pÄ uppdrag av en vanlig anvÀndare (Àven sudo), kommer du att fÄ ett fel
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
I det hÀr fallet mÄste du redigera /etc/fuse.conf genom att avkommentera raden #user_allow_other.
Efter det, starta om ipfs.
KĂ€nda problem med FUSE
Problemet har uppmÀrksammats mer Àn en gÄng att efter omstart av ipfs med montering (och kanske i andra fall) blir monteringspunkterna /ipfs och /ipns otillgÀngliga. Det finns ingen tillgÄng till dem, och ls -la /ipfs visar ???? i listan över rÀttigheter.
Hittade den hÀr lösningen:
fusermount -z -u /ipfs
fusermount -z -u /ipns
Starta sedan om ipfs.
LÀgga till en tjÀnst
Naturligtvis Àr körning i terminalen endast lÀmplig för initiala tester. I stridslÀge bör demonen starta automatiskt vid systemstart.
PĂ„ uppdrag av sudo, skapa filen /etc/systemd/system/ipfs.service och skriv till den:
ANVĂNDARNAMN mĂ„ste naturligtvis ersĂ€ttas med din anvĂ€ndare (och kanske kommer hela sökvĂ€gen till ipfs-programmet att vara annorlunda för dig (du mĂ„ste ange den fullstĂ€ndiga sökvĂ€gen)).
Vi aktiverar tjÀnsten.
sudo systemctl enable ipfs.service
Vi startar tjÀnsten.
sudo service ipfs start
Kontrollera status för tjÀnsten.
sudo service ipfs status
För experimentets renhet kommer det att vara möjligt att starta om servern i framtiden för att kontrollera att ipfs startar automatiskt.
LÀgga till kÀnda för oss högtider
TÀnk pÄ en situation dÀr vi har IPFS-noder installerade bÄde pÄ en extern server och lokalt. PÄ en extern server lÀgger vi till nÄgon fil och försöker fÄ den via IPFS lokalt med CID. Vad kommer att hÀnda? Naturligtvis vet den lokala servern med största sannolikhet ingenting om vÄr externa server och kommer helt enkelt att försöka hitta filen med CID genom att "frÄga" alla IPFS-kamrater som Àr tillgÀngliga för den (som den redan har lyckats "bekanta sig med"). De i sin tur kommer att frÄga andra. Och sÄ vidare, tills filen hittas. I sjÀlva verket hÀnder samma sak nÀr vi försöker fÄ filen genom den officiella gatewayen ipfs.io. Om du har tur kommer filen att hittas pÄ nÄgra sekunder. Och om inte, kommer det inte att hittas ens om nÄgra minuter, vilket i hög grad pÄverkar arbetskomforten. Men vi vet var den hÀr filen först kommer att visas. SÄ varför sÀger vi inte omedelbart till vÄr lokala server "Sök dÀr först"? Tydligen kan detta göras.
1. Vi gÄr till fjÀrrservern och tittar i ~/.ipfs/config-konfigurationen
3. Vi lÀgger till den allmÀnna adressen för formulÀret "/ip4/ip_din_server/tcp/4001/ipfs/$PeerID".
4. För pÄlitlighetens skull kommer vi att försöka lÀgga till den hÀr adressen till kamrater via vÄr lokala webbui.
5. Om allt Àr OK, öppna den lokala konfigurationen ~ / .ipfs / config, hitta "Bootstrap" i den: [...
och lÀgg till den mottagna adressen först till arrayen.
Starta om IPFS.
LÄt oss nu lÀgga till filen pÄ den externa servern och försöka begÀra den pÄ den lokala. Borde flyga snabbt.
Men den hÀr funktionen Àr Ànnu inte stabil. SÄvitt jag förstÄr, Àven om vi anger adressen till en peer i Bootstrap, Àndrar ipfs listan över aktiva anslutningar med peers under drift. Diskussionen om detta och önskemÄl om möjligheten att ange permanenta högtider Àr i alla fall igÄng hÀr och det verkar som förment lÀgga till lite funktionalitet [e-postskyddad]+
Listan över aktuella peers kan ses bÄde i webui och i terminalen.
ipfs swarm peers
Och hÀr och dÀr kan du lÀgga till din fest manuellt.
Tills denna funktionalitet har förbÀttrats kan du skriva ett verktyg för att söka efter en anslutning till önskad peer och, om inte, för att lÀgga till en anslutning.
Resonemang
Bland de som redan Ă€r bekanta med IPFS finns det bĂ„de argument för och emot IPFS. I princip igĂ„r diskussion och fick mig att grĂ€va i IPFS igen. Och nĂ€r det gĂ€ller diskussionen som nĂ€mns ovan: Jag kan inte sĂ€ga att jag starkt motsĂ€tter mig nĂ„got argument frĂ„n dem som talade (jag hĂ„ller bara inte med om att en och en halv programmerare anvĂ€nder IPFS). I allmĂ€nhet har bĂ„da rĂ€tt pĂ„ sitt eget sĂ€tt (sĂ€rskilt kommentar om kontroller fĂ„r dig att tĂ€nka). Men om vi förkastar den moraliska och juridiska bedömningen, vem kommer att ge en teknisk bedömning av denna teknik? SjĂ€lv har jag nĂ„gon slags inre kĂ€nsla av att "det hĂ€r mĂ„ste göras otvetydigt, det har vissa utsikter". Men varför exakt, det finns ingen tydlig formulering. Som, om man tittar pĂ„ de befintliga centraliserade verktygen, sĂ„ ligger de i mĂ„nga avseenden lĂ„ngt fram (stabilitet, hastighet, hanterbarhet, etc.). ĂndĂ„ har jag en tanke som verkar vettig och som knappast kan genomföras utan sĂ„dana decentraliserade system. SjĂ€lvklart svĂ€nger jag för hĂ„rt, men jag skulle formulera det sĂ„ hĂ€r: principen om informationsspridning pĂ„ internet mĂ„ste Ă€ndras.
Vilket alternativ ser jag? Det förefaller mig som att data initialt bör distribueras öppet. Men öppenhet i det hÀr fallet betyder inte att allt ska vara lÀtt att lÀsa. Jag talar om öppenheten i lagring och distribution, men inte total öppenhet i lÀsning. Jag antar att information ska distribueras med publika nycklar. NÀr allt kommer omkring Àr principen om offentliga / privata nycklar redan gammal, nÀstan som Internet. Om informationen inte Àr konfidentiell och avsedd för en bred krets, sÄ lÀggs den ut omedelbart med en offentlig nyckel (men fortfarande i krypterad form, vem som helst kan dekryptera den med den tillgÀngliga nyckeln). Och om inte, sÄ lÀggs den ut utan en publik nyckel, och sjÀlva nyckeln överförs till det som ska ha tillgÄng till denna information. Samtidigt ska den som ska lÀsa den bara ha en nyckel, och var man kan fÄ tag i denna information ska han inte riktigt svÀva - han bara drar den frÄn nÀtverket (detta Àr den nya principen för distribution efter innehÄll, inte efter innehÄll adress).
För en massattack kommer alltsÄ angripare att behöva skaffa ett stort antal privata nycklar, och detta Àr osannolikt att göras pÄ ett stÀlle. Denna uppgift, som jag ser det, Àr svÄrare Àn att hacka en viss tjÀnst.
Och hÀr Àr ett annat problem stÀngt: bekrÀftelse av författarskap. Nu pÄ Internet kan du hitta mÄnga citat skrivna av vÄra vÀnner. Men var Àr garantin att det var de som skrev dem? Nu, om varje sÄdan post Ätföljdes av en digital signatur, skulle det vara mycket enklare. Och det spelar ingen roll var denna information ligger, det viktigaste Àr signaturen, som naturligtvis Àr svÄr att förfalska.
Och hÀr Àr det som Àr intressant hÀr: IPFS har redan krypteringsverktyg (det Àr trots allt byggt pÄ blockchain-teknik). Den privata nyckeln anges omedelbart i konfigurationen.
Jag Àr ingen sÀkerhetsspecialist och kan inte veta exakt hur man anvÀnder det korrekt, men det verkar som om dessa nycklar anvÀnds pÄ nivÄn för utbyte mellan IPFS-noder. Och Àven js-ipfs och exempelprojekt som t.ex orbit-dbsom det fungerar pÄ orbit.chat. Det vill sÀga teoretiskt sett kan varje enhet (mobil och inte bara) enkelt utrustas med sina egna krypterings-dekrypteringsmaskiner. I det hÀr fallet ÄterstÄr det bara för alla att ta hand om att spara sina privata nycklar, och alla kommer att ansvara för sin egen sÀkerhet, och inte vara gisslan för en annan mÀnsklig faktor pÄ nÄgon superpopulÀr internetjÀtte.
Endast registrerade anvÀndare kan delta i undersökningen. Logga in, SnÀlla du.
Har du hört talas om IPFS förut?
Jag har aldrig hört talas om IPFS, men det verkar intressant
Har inte hört och vill inte höra
Hört men inte intresserad
Hörde, men förstod inte, men nu verkar det intressant
Jag har aktivt anvÀnt IPFS under lÄng tid.
69 anvÀndare röstade. 13 anvÀndare avstod frÄn att rösta.