Do të sqaroj menjëherë se nuk jam ekspert në këtë fushë, por kam shfaqur interes për këtë teknologji më shumë se një herë, por përpjekja për të luajtur me të shpesh shkaktonte pak dhimbje. Sot fillova të eksperimentoj përsëri dhe mora disa rezultate që do të doja t'i ndaja. Shkurtimisht, procesi i instalimit të IPFS dhe disa veçori do të përshkruhen (gjithçka është bërë në ubuntu, nuk e kam provuar në platforma të tjera). Nëse keni humbur se çfarë është IPFS, shkruhet në disa detaje këtu: habr.com/en/post/314768
Instalim
Për pastërtinë e eksperimentit, unë sugjeroj ta instaloni menjëherë në ndonjë server të jashtëm, pasi do të shqyrtojmë disa gracka me punën në modalitetin lokal dhe në distancë. Pastaj, nëse dëshironi, nuk do të prishet për një kohë të gjatë, nuk ka shumë.
Shënim: është më mirë të instaloni IPFS në emër të përdoruesit që supozohet ta përdorë atë më shpesh. Fakti është se më poshtë do të shqyrtojmë mundësinë e montimit nëpërmjet Siguresave dhe ka hollësi.
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
Pas kësaj, mund të ekzekutoni komandat e mëposhtme:
versionet e përditësimit të ipfs - për të parë të gjitha versionet e disponueshme për shkarkim. versioni ipfs-update - për të parë versionin e instaluar aktualisht (derisa të kemi instaluar IPFS, nuk do të jetë asnjë). instalimi i fundit i ipfs-update - instaloni versionin më të fundit të IPFS. Në vend të më të fundit, përkatësisht, mund të specifikoni çdo version të dëshiruar nga lista e atyre të disponueshme.
Instalimi i ipfs
ipfs-update install latest
Po kontrollon
ipfs --version
Direkt me instalimin në terma të përgjithshëm gjithçka.
Filloni IPFS
Inicializimi
Së pari ju duhet të kryeni inicializimin.
ipfs init
Si përgjigje, do të merrni diçka si kjo:
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
Këtu, për mendimin tim, fillon interesante. Djemtë në fazën e instalimit tashmë kanë filluar të përdorin teknologjitë e tyre. Hash-i i propozuar QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv nuk është krijuar posaçërisht për ju, por i qepur në version. Kjo do të thotë, para lëshimit, ata përgatitën një tekst mirëseardhjeje, e derdhën në IPFS dhe shtuan adresën te instaluesi. Unë mendoj se është shumë e lezetshme. Dhe ky skedar (më saktë, i gjithë dosja) tani mund të shihet jo vetëm në nivel lokal, por edhe në portën zyrtare ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Në të njëjtën kohë, mund të jeni i sigurt se përmbajtja e dosjes nuk ka ndryshuar në asnjë mënyrë, sepse nëse do të kishte ndryshuar, atëherë edhe hash-i do të kishte ndryshuar.
Nga rruga, në këtë rast, IPFS ka disa ngjashmëri me serverin e kontrollit të versionit. Nëse bëni ndryshime në skedarët burimor të dosjes dhe derdhni përsëri dosjen në IPFS, atëherë ajo do të marrë një adresë të re. Në të njëjtën kohë, dosja e vjetër nuk do të shkojë askund ashtu dhe do të jetë e disponueshme në adresën e saj të mëparshme.
Nisja e drejtpërdrejtë
ipfs daemon
Ju duhet të merrni një përgjigje si kjo:
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
Hapja e dyerve në internet
Kushtojini vëmendje këtyre dy rreshtave:
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Tani, nëse keni instaluar IPFS në nivel lokal, atëherë do të përdorni ndërfaqet IPFS duke përdorur adresat lokale dhe gjithçka do të jetë e disponueshme për ju (Për shembull, localhost:5001/webui/). Por kur instalohet në një server të jashtëm, si parazgjedhje, portat janë të mbyllura për internetin. Portat dy:
Deri më tani, të dy portet (5001 dhe 8080) mund të hapen për eksperimente, por në një server luftarak, natyrisht, porti 5001 duhet të mbyllet me një mur zjarri. Ekziston edhe porti 4001, i cili nevojitet në mënyrë që kolegët e tjerë të mund t'ju gjejnë. Ajo duhet të lihet e hapur ndaj kërkesave të jashtme.
Hapni ~/.ipfs/config për redaktim dhe gjeni këto rreshta në të:
Nëse webui funksionon për ju, atëherë cilësimet e IPFS mund të ndryshohen drejtpërdrejt në të, duke përfshirë statistikat e shikimit, por më poshtë do të shqyrtoj opsionet e konfigurimit direkt përmes skedarit të konfigurimit, i cili në përgjithësi nuk është kritik. Thjesht është më mirë të mbani mend saktësisht se ku është konfigurimi dhe çfarë të bëni me të, përndryshe nëse faqja e internetit nuk funksionon, do të jetë më e vështirë.
Vendosja e një ndërfaqe në internet për të punuar me serverin tuaj
Këtu është gracka e parë, e cila zgjati rreth tre orë.
Nëse keni instaluar IPFS në një server të jashtëm, por nuk keni instaluar ose ekzekutuar IPFS në nivel lokal, atëherë kur shkoni te /webui në ndërfaqen e internetit, duhet të shihni një gabim lidhjeje:
Fakti është se webui, për mendimin tim, funksionon në mënyrë shumë të paqartë. Së pari, ai përpiqet të lidhet me API-në e serverit ku ndërfaqja është e hapur (bazuar në adresën në shfletues, natyrisht). dhe nëse nuk funksionon atje, ai përpiqet të lidhet me portën lokale. Dhe nëse keni IPFS që funksionon në nivel lokal, atëherë webui do të funksionojë mirë për ju, vetëm ju do të punoni me IPFS lokale, dhe jo të jashtme, megjithëse keni hapur webui në një server të jashtëm. Më pas i ngarkoni skedarët, por për ndonjë arsye nuk i shihni ato ashtu si në një server të jashtëm…
Dhe nëse nuk funksionon në nivel lokal, atëherë marrim një gabim lidhjeje. Në rastin tonë, gabimi ka shumë të ngjarë për shkak të CORS, i cili tregohet gjithashtu nga webui, duke sugjeruar shtimin e një konfigurimi.
Ne rinisim ipfs dhe shohim që webui është lidhur me sukses (në çdo rast, duhet, nëse hapni portat për kërkesat nga jashtë, siç përshkruhet më sipër).
Tani mund të ngarkoni dosje dhe skedarë direkt përmes ndërfaqes së uebit, si dhe të krijoni dosjet tuaja.
Montimi i sistemit të skedarëve FUSE
Këtu është një veçori mjaft interesante.
Skedarët (si dhe dosjet), ne mund të shtojmë jo vetëm përmes ndërfaqes së internetit, por edhe direkt në terminal, për shembull
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
Hashi i fundit është hash-i i dosjes rrënjë.
Duke përdorur këtë hash, ne mund të hapim një dosje në çdo nyje ipfs (e cila mund të gjejë nyjen tonë dhe të marrë përmbajtjen), mundemi në ndërfaqen e internetit në portin 5001 ose 8080, ose mundemi në nivel lokal nëpërmjet ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Por ju mund ta hapni atë si një dosje të rregullt.
Le të krijojmë dy dosje në rrënjë dhe t'i japim të drejta përdoruesve tanë.
Ju mund të krijoni dosje në vende të tjera dhe të specifikoni rrugën drejt tyre përmes parametrave të daemonit ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path
Tani leximi nga kjo dosje është disi e pazakontë.
ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0
Kjo do të thotë, nuk ka qasje të drejtpërdrejtë në rrënjën e kësaj dosjeje. Por ju mund të merrni përmbajtjen, duke ditur 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
Në të njëjtën kohë, edhe vetë-përfundimi funksionon brenda dosjes kur specifikohet shtegu.
Siç thashë më lart, ka hollësi me një montim të tillë: si parazgjedhje, dosjet e montuara FUSE janë të disponueshme vetëm për përdoruesin aktual (edhe root nuk do të jetë në gjendje të lexojë nga një dosje e tillë, për të mos përmendur përdoruesit e tjerë në sistem). Nëse dëshironi t'i bëni këto dosje të disponueshme për përdoruesit e tjerë, atëherë në konfigurim duhet të ndryshoni "FuseAllowOther": false në "FuseAllowOther": e vërtetë. Por kjo nuk është e gjitha. Nëse përdorni IPFS si rrënjë, atëherë gjithçka është në rregull. Dhe nëse në emër të një përdoruesi të rregullt (madje edhe sudo), atëherë do të merrni një gabim
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
Në këtë rast, ju duhet të redaktoni /etc/fuse.conf duke mos komentuar linjën #user_allow_other.
Pas kësaj, rinisni ipfs.
Probleme të njohura me FUSE
Problemi është vënë re më shumë se një herë që pas rinisjes së ipf-ve me montim (dhe ndoshta në raste të tjera), pikat e montimit /ipfs dhe /ipns bëhen të padisponueshme. Nuk ka qasje në to, dhe ls -la /ipfs tregon ???? në listën e të drejtave.
Gjeta këtë zgjidhje:
fusermount -z -u /ipfs
fusermount -z -u /ipns
Pastaj rinisni ipfs.
Shtimi i një shërbimi
Natyrisht, drejtimi në terminal është i përshtatshëm vetëm për testet fillestare. Në modalitetin luftarak, demon duhet të fillojë automatikisht në fillimin e sistemit.
Në emër të sudo, krijoni skedarin /etc/systemd/system/ipfs.service dhe shkruani në të:
USERNAME, sigurisht, duhet të zëvendësohet me përdoruesin tuaj (dhe ndoshta rruga e plotë drejt programit ipfs do të jetë e ndryshme për ju (duhet të specifikoni rrugën e plotë)).
Ne aktivizojmë shërbimin.
sudo systemctl enable ipfs.service
Ne fillojmë shërbimin.
sudo service ipfs start
Kontrollimi i statusit të shërbimit.
sudo service ipfs status
Për pastërtinë e eksperimentit, do të jetë e mundur të rindizni serverin në të ardhmen për të kontrolluar që ipfs të fillojë me sukses automatikisht.
Duke shtuar festat e njohura për ne
Konsideroni një situatë ku ne kemi nyje IPFS të instaluara si në një server të jashtëm ashtu edhe në nivel lokal. Në një server të jashtëm, ne shtojmë disa skedarë dhe përpiqemi ta marrim atë nëpërmjet IPFS në nivel lokal nga CID. Çfarë do të ndodhë? Sigurisht, serveri lokal ka shumë të ngjarë të mos dijë asgjë për serverin tonë të jashtëm dhe thjesht do të përpiqet të gjejë skedarin nga CID duke "kërkuar" të gjithë kolegët IPFS të disponueshëm për të (me të cilët tashmë ka arritur të "njohet"). Ata nga ana e tyre do të pyesin të tjerët. Dhe kështu me radhë, derisa të gjendet skedari. Në fakt, e njëjta gjë ndodh kur përpiqemi ta kalojmë skedarin përmes portës zyrtare ipfs.io. Nëse jeni me fat, skedari do të gjendet në pak sekonda. E nëse jo, nuk do të gjendet as për pak minuta, gjë që ndikon shumë në komoditetin e punës. Por ne e dimë se ku do të shfaqet fillimisht ky skedar. Pra, pse nuk i themi menjëherë serverit tonë lokal "Kërko fillimisht atje"? Me sa duket, kjo mund të bëhet.
1. Shkojmë te serveri i largët dhe shikojmë në konfigurimin ~/.ipfs/config
2. Ekzekutoni statusin e shërbimit sudo ipfs dhe kërkoni për hyrjet e Swarm në të, për shembull:
Swarm announcing /ip4/ip_вашего_сервера/tcp/4001
3. Nga kjo shtojmë adresën e përgjithshme të formularit "/ip4/ip_your_server/tcp/4001/ipfs/$PeerID".
4. Për besueshmëri, ne do të përpiqemi t'ua shtojmë këtë adresë kolegëve përmes webuit tonë lokal.
5. Nëse gjithçka është në rregull, hapni konfigurimin lokal ~ / .ipfs / config, gjeni "Bootstrap" në të: [...
dhe shtoni adresën e marrë së pari në grup.
Rinisni IPFS.
Tani le të shtojmë skedarin në serverin e jashtëm dhe të përpiqemi ta kërkojmë atë në atë lokal. Duhet të fluturojë shpejt.
Por ky funksionalitet nuk është ende i qëndrueshëm. Me sa kuptoj unë, edhe nëse specifikojmë adresën e një peer në Bootstrap, ipfs ndryshon listën e lidhjeve aktive me kolegët gjatë funksionimit. Në çdo rast, diskutimi për këtë dhe dëshirat në lidhje me mundësinë e specifikimit të festave të përhershme është duke u zhvilluar këtu dhe duket sikur supozohet se shtoni disa funksionalitete në [email mbrojtur]+
Lista e kolegëve aktualë mund të shihet si në webui ashtu edhe në terminal.
Derisa ky funksionalitet të jetë përmirësuar, mund të shkruani një mjet për të kontrolluar për një lidhje me kolegun e dëshiruar dhe, nëse jo, për të shtuar një lidhje.
Arsyetimi
Midis atyre që tashmë janë njohur me IPFS, ka argumente pro dhe kundër IPFS. Në thelb, dje diskutim dhe më nxiti të gërmoj përsëri në IPFS. Dhe për sa i përket diskutimit të përmendur më lart: nuk mund të them se kundërshtoj me forcë ndonjë argument të atyre që folën (nuk pajtohem vetëm me faktin që një programues e gjysmë përdorin IPFS). Në përgjithësi, të dy kanë të drejtë në mënyrën e tyre (sidomos koment rreth çeqeve të bën të mendosh). Por nëse e hedhim poshtë vlerësimin moral dhe ligjor, kush do ta bëjë vlerësimin teknik të kësaj teknologjie? Personalisht kam një lloj ndjenje të brendshme që “kjo duhet bërë pa mëdyshje, ka perspektiva të caktuara”. Por pse saktësisht, nuk ka një formulim të qartë. Si, nëse shikoni mjetet ekzistuese të centralizuara, atëherë në shumë aspekte ato janë shumë përpara (stabiliteti, shpejtësia, menaxhueshmëria, etj.). Megjithatë, kam një mendim që duket se ka kuptim dhe që vështirë se mund të zbatohet pa sisteme të tilla të decentralizuara. Sigurisht që po lëkundem shumë, por do ta formuloja në këtë mënyrë: duhet ndryshuar parimi i shpërndarjes së informacionit në internet.
Më lejo të shpjegohem. Nëse mendoni për këtë, tani ne kemi informacion të shpërndarë sipas parimit "Shpresoj që ai të cilit ia dhashë do ta mbrojë dhe nuk do të humbasë apo marrë nga ata të cilëve nuk u ishte menduar". Si shembull, është e lehtë të merren parasysh shërbime të ndryshme postare, depo në re, etj. Dhe me çfarë përfundojmë? Në qendër Habré Siguria e informacionit është në linjën e parë dhe pothuajse çdo ditë marrim lajme për një tjetër rrjedhje globale. Në parim, të gjitha gjërat më interesante janë renditur në <ironi> e mrekullueshme artikull Vera pothuajse ka mbaruar. Nuk ka pothuajse asnjë të dhënë të pazbuluar. Kjo do të thotë, gjigantët kryesorë të internetit po bëhen më të mëdhenj, ata po grumbullojnë gjithnjë e më shumë informacion, dhe rrjedhje të tilla janë një lloj shpërthimi atomik informacioni. Kjo nuk ka ndodhur kurrë më parë, dhe ja ku është përsëri. Në të njëjtën kohë, megjithëse shumë e kuptojnë se ka rreziqe, ata do të vazhdojnë t'i besojnë të dhënat e tyre kompanive të palëve të treta. Së pari, nuk ka shumë alternativë dhe së dyti, premtojnë se i kanë rregulluar të gjitha vrimat dhe kjo nuk do të ndodhë më kurrë.
Çfarë opsioni shoh? Më duket se të dhënat fillimisht duhet të shpërndahen hapur. Por hapja në këtë rast nuk do të thotë që gjithçka duhet të jetë e lehtë për t'u lexuar. E kam fjalën për hapjen e ruajtjes dhe shpërndarjes, por jo hapjen totale në lexim. Unë supozoj se informacioni duhet të shpërndahet me çelësa publikë. Në fund të fundit, parimi i çelësave publikë / privatë është tashmë i vjetër, pothuajse si interneti. Nëse informacioni nuk është konfidencial dhe është i destinuar për një rreth të gjerë, atëherë ai vendoset menjëherë me një çelës publik (por ende në formë të koduar, vetëm kushdo mund ta deshifrojë atë me çelësin e disponueshëm). Dhe nëse jo, atëherë ai vendoset pa një çelës publik, dhe vetë çelësi transferohet në atë që duhet të ketë akses në këtë informacion. Në të njëjtën kohë, ai që duhet ta lexojë duhet të ketë vetëm një çelës, dhe ku ta marrë këtë informacion, ai nuk duhet të fluturojë me të vërtetë - ai thjesht e tërheq atë nga rrjeti (ky është parimi i ri i shpërndarjes sipas përmbajtjes, jo nga adresë).
Kështu, për një sulm masiv, sulmuesit do të duhet të marrin një numër të madh çelësash privatë, dhe kjo nuk ka gjasa të bëhet në një vend. Kjo detyrë, siç e shoh unë, është më e vështirë sesa hakimi i një shërbimi të caktuar.
Dhe këtu mbyllet një problem tjetër: konfirmimi i autorësisë. Tani në internet mund të gjeni shumë citate të shkruara nga miqtë tanë. Por ku është garancia që kanë qenë ata që i kanë shkruar? Tani, nëse çdo regjistrim i tillë do të shoqërohej me një nënshkrim dixhital, do të ishte shumë më e lehtë. Dhe nuk ka rëndësi se ku qëndron ky informacion, gjëja kryesore është nënshkrimi, i cili, natyrisht, është i vështirë për t'u falsifikuar.
Dhe ja çfarë është interesante këtu: IPFS tashmë mbart mjete kriptimi (në fund të fundit, është ndërtuar mbi teknologjinë blockchain). Çelësi privat specifikohet menjëherë në konfigurim.
Unë nuk jam specialist i sigurisë dhe nuk mund ta di saktësisht se si ta përdor siç duhet, por më duket se këta çelësa përdoren në nivelin e shkëmbimit midis nyjeve IPFS. Dhe gjithashtu js-ipfs dhe projekte shembull si p.sh orbitë-dbnë të cilën funksionon orbitë.chat. Domethënë, teorikisht, çdo pajisje (e lëvizshme dhe jo vetëm) mund të pajiset lehtësisht me makinat e veta të enkriptimit-deshifrimit. Në këtë rast, mbetet vetëm që të gjithë të kujdesen për ruajtjen e çelësave të tyre privatë, dhe secili do të jetë përgjegjës për sigurinë e tij, dhe jo të jetë peng i një faktori tjetër njerëzor në ndonjë gjigant super-popullor të internetit.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, te lutem
A keni dëgjuar më parë për IPFS?
Unë kurrë nuk kam dëgjuar për IPFS, por duket interesante
Nuk kam dëgjuar dhe nuk dua të dëgjoj
Dëgjuar por jo i interesuar
Dëgjova, por nuk e kuptova, por tani duket interesante
Unë kam përdorur në mënyrë aktive IPFS për një kohë të gjatë.