Aclariré de seguida que no sóc un expert en aquesta àrea, però he mostrat interès per aquesta tecnologia més d'una vegada, però intentar jugar-hi sovint em provocava una mica de dolor. Avui he tornat a començar a experimentar i he obtingut alguns resultats que m'agradaria compartir. En resum, es descriurà el procés d'instal·lació d'IPFS i algunes característiques (tot es va fer a ubuntu, no ho he provat en altres plataformes). Si us heu perdut què és IPFS, està escrit amb cert detall aquí: habr.com/en/post/314768
Instal · lació
Per a la puresa de l'experiment, suggereixo instal·lar-lo immediatament en algun servidor extern, ja que tindrem en compte alguns inconvenients de treballar en mode local i remot. Aleshores, si es vol, no serà enderrocat durant molt de temps, no hi ha gaire.
Nota: és millor instal·lar IPFS en nom de l'usuari que se suposa que l'utilitza més sovint. El cas és que a continuació considerarem l'opció de muntar via FUSE i hi ha subtileses.
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
Després d'això, podeu executar les ordres següents:
versions ipfs-update - per veure totes les versions disponibles per descarregar. versió ipfs-update - per veure la versió instal·lada actualment (fins que tinguem IPFS instal·lat, no n'hi haurà cap). ipfs-update instal·lació més recent - instal·leu la darrera versió d'IPFS. En lloc de l'últim, respectivament, podeu especificar qualsevol versió desitjada de la llista de les disponibles.
Instal·lant ipfs
ipfs-update install latest
Comprovació
ipfs --version
Directament amb la instal·lació en termes generals tot.
Inicieu IPFS
Inicialització
Primer heu de realitzar la inicialització.
ipfs init
En resposta, rebreu alguna cosa com això:
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
Aquí, al meu entendre, comença l'interessant. Els nois de l'etapa d'instal·lació ja estan començant a utilitzar les seves pròpies tecnologies. El hash proposat QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv no es genera específicament per a vosaltres, sinó que s'ha cosit a la versió. És a dir, abans del llançament, van preparar un text de benvinguda, el van abocar a IPFS i van afegir l'adreça a l'instal·lador. Crec que és molt xulo. I aquest fitxer (més precisament, tota la carpeta) ara es pot veure no només localment, sinó també a la passarel·la oficial. ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Al mateix temps, podeu estar segur que el contingut de la carpeta no ha canviat de cap manera, perquè si hagués canviat, el hash també hauria canviat.
Per cert, en aquest cas, IPFS té algunes similituds amb el servidor de control de versions. Si feu canvis als fitxers font de la carpeta i torneu a abocar la carpeta a IPFS, rebrà una nova adreça. Al mateix temps, la carpeta antiga no anirà enlloc així i estarà disponible a la seva adreça anterior.
Llançament directe
ipfs daemon
Hauríeu de rebre una resposta com aquesta:
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
Obrint les portes a Internet
Fixeu-vos en aquestes dues línies:
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Ara, si heu instal·lat IPFS localment, accedireu a les interfícies IPFS mitjançant adreces locals i tot estarà disponible per a vosaltres (per exemple, localhost:5001/webui/). Però quan s'instal·len en un servidor extern, per defecte, les passarel·les es tanquen a Internet. Passarel·les dues:
Fins ara, els dos ports (5001 i 8080) es poden obrir per a experiments, però en un servidor de combat, per descomptat, el port 5001 s'hauria de tancar amb un tallafoc. També hi ha el port 4001, que és necessari perquè altres companys us puguin trobar. S'ha de deixar obert a sol·licituds externes.
Obriu ~/.ipfs/config per editar-lo i cerqueu-hi aquestes línies:
Canvieu 127.0.0.1 a la ip del vostre servidor i deseu el fitxer i, a continuació, reinicieu ipfs (atura l'ordre en execució amb Ctrl+C i torna a iniciar-lo).
Hauria d'aconseguir
...
WebUI: http://ip_вашего_сервера:5001/webui
Gateway (readonly) server listening on /ip4/ip_вашего_сервера/tcp/8080
Ara les interfícies externes haurien d'estar disponibles.
Si webui us funciona, la configuració IPFS es pot canviar directament, incloses les estadístiques de visualització, però a continuació consideraré les opcions de configuració directament a través del fitxer de configuració, que generalment no és crític. És millor recordar exactament on és la configuració i què fer amb ella, en cas contrari, si la cara web no funciona, serà més difícil.
Configuració d'una interfície web per treballar amb el vostre servidor
Aquí teniu la primera trampa, que va trigar unes tres hores.
Si heu instal·lat IPFS en un servidor extern, però no heu instal·lat ni executat IPFS localment, quan aneu a /webui a la interfície web, haureu de veure un error de connexió:
El fet és que webui, al meu entendre, funciona de manera molt ambigua. En primer lloc, intenta connectar-se a l'API del servidor on la interfície està oberta (en funció de l'adreça del navegador, és clar). i si no funciona allà, prova de connectar-se a la passarel·la local. I si tens IPFS que s'executa localment, aleshores webui funcionarà bé per a tu, només treballaràs amb IPFS local, i no extern, tot i que has obert webui en un servidor extern. A continuació, carregueu els fitxers, però per algun motiu no els veieu així en un servidor extern...
I si no s'executa localment, obtenim un error de connexió. En el nostre cas, el més probable és que l'error es degui a CORS, que també s'indica amb webui, que suggereix afegir una configuració.
Reiniciem l'ipfs i veiem que webui s'ha connectat correctament (en qualsevol cas, ho hauria de fer, si heu obert les passarel·les per a sol·licituds des de l'exterior, com s'ha descrit anteriorment).
Ara podeu carregar carpetes i fitxers directament a través de la interfície web, així com crear les vostres pròpies carpetes.
Muntatge del sistema de fitxers FUSE
Aquí teniu una característica força interessant.
Els fitxers (així com les carpetes), podem afegir no només a través de la interfície web, sinó també directament al terminal, per exemple
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
L'últim hash és el hash de la carpeta arrel.
Utilitzant aquest hash, podem obrir una carpeta en qualsevol node ipfs (que pot trobar el nostre node i obtenir el contingut), podem a la interfície web al port 5001 o 8080, o podem localment mitjançant ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Però encara podeu obrir-lo com una carpeta normal.
Creem dues carpetes a l'arrel i atorguem-hi drets al nostre usuari.
Podeu crear carpetes en altres llocs i especificar-ne el camí mitjançant els paràmetres del dimoni ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path
Ara llegir d'aquesta carpeta és una mica inusual.
ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0
És a dir, no hi ha accés directe a l'arrel d'aquesta carpeta. Però podeu obtenir el contingut, coneixent el 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
Al mateix temps, fins i tot l'emplenament automàtic funciona dins de la carpeta quan s'especifica el camí.
Com he dit anteriorment, hi ha subtileses amb aquest muntatge: de manera predeterminada, les carpetes FUSE muntades només estan disponibles per a l'usuari actual (ni tan sols el root no podrà llegir des d'aquesta carpeta, per no parlar d'altres usuaris del sistema). Si voleu que aquestes carpetes estiguin disponibles per a altres usuaris, a la configuració heu de canviar "FuseAllowOther": false per "FuseAllowOther": true. Però això no és tot. Si executeu IPFS com a root, tot està bé. I si en nom d'un usuari normal (fins i tot sudo), obtindreu un error
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
En aquest cas, heu d'editar /etc/fuse.conf eliminant el comentari de la línia #user_allow_other.
Després d'això, reinicieu ipfs.
Problemes coneguts amb FUSE
El problema s'ha observat més d'una vegada que després de reiniciar ipfs amb el muntatge (i potser en altres casos), els punts de muntatge /ipfs i /ipns no estan disponibles. No hi ha accés, i ls -la /ipfs mostra ???? a la llista de drets.
He trobat aquesta solució:
fusermount -z -u /ipfs
fusermount -z -u /ipns
A continuació, reinicieu ipfs.
Afegir un servei
Per descomptat, executar-se al terminal només és adequat per a proves inicials. En mode de combat, el dimoni hauria d'iniciar-se automàticament a l'inici del sistema.
En nom de sudo, creeu el fitxer /etc/systemd/system/ipfs.service i escriviu-hi:
USERNAME, per descomptat, s'ha de substituir pel vostre usuari (i potser el camí complet al programa ipfs serà diferent per a vosaltres (heu d'especificar el camí complet)).
Activem el servei.
sudo systemctl enable ipfs.service
Comencem el servei.
sudo service ipfs start
Comprovació de l'estat del servei.
sudo service ipfs status
Per a la puresa de l'experiment, serà possible reiniciar el servidor en el futur per comprovar que ipfs s'inicia correctament automàticament.
Afegint-nos festes conegudes
Penseu en una situació en què tenim nodes IPFS instal·lats tant en un servidor extern com localment. En un servidor extern, afegim algun fitxer i intentem obtenir-lo mitjançant IPFS localment mitjançant CID. Què passarà? Per descomptat, el servidor local molt probablement no sàpiga res del nostre servidor extern i simplement intentarà trobar el fitxer per CID "demanant" a tots els parells d'IPFS disponibles (amb els quals ja ha aconseguit "conèixer-se"). Aquests, al seu torn, preguntaran als altres. I així successivament, fins que es trobi el fitxer. De fet, passa el mateix quan intentem aconseguir el fitxer a través de la passarel·la oficial ipfs.io. Si teniu sort, el fitxer es trobarà en pocs segons. I si no, no es trobarà ni en pocs minuts, la qual cosa afecta molt la comoditat de la feina. Però sabem on apareixerà primer aquest fitxer. Aleshores, per què no li diem immediatament al nostre servidor local "Cerca allà primer"? Pel que sembla, això es pot fer.
1. Anem al servidor remot i busquem a la configuració ~/.ipfs/config
2. Executeu l'estat de l'ipfs del servei sudo i cerqueu-hi entrades Swarm, per exemple:
Swarm announcing /ip4/ip_вашего_сервера/tcp/4001
3. Afegim a partir d'això l'adreça general de la forma "/ip4/ip_your_server/tcp/4001/ipfs/$PeerID".
4. Per fiabilitat, intentarem afegir aquesta adreça als companys a través del nostre webui local.
5. Si tot està bé, obriu la configuració local ~ / .ipfs / config, cerqueu-hi "Bootstrap": [...
i afegiu primer l'adreça rebuda a la matriu.
Reinicieu IPFS.
Ara afegim el fitxer al servidor extern i intentem sol·licitar-lo al local. Hauria de volar ràpid.
Però aquesta funcionalitat encara no és estable. Pel que entenc, fins i tot si especifiquem l'adreça d'un peer a Bootstrap, ipfs canvia la llista de connexions actives amb peers durant el funcionament. En tot cas, la discussió i desitjos sobre la possibilitat de concretar festes permanents està en marxa aquí i sembla que suposat afegir alguna funcionalitat a [protegit per correu electrònic]+
La llista de companys actuals es pot veure tant a la webui com al terminal.
ipfs swarm peers
I aquí i allà podeu afegir la vostra festa manualment.
Fins que no s'hagi millorat aquesta funcionalitat, podeu escriure una eina per comprovar si hi ha una connexió amb el parell desitjat i, si no, per afegir una connexió.
Raonament
Entre els que ja estan familiaritzats amb IPFS, hi ha arguments a favor i en contra d'IPFS. Bàsicament, ahir discussió i em va demanar que tornés a investigar IPFS. I pel que fa a la discussió esmentada anteriorment: no puc dir que m'oposi fermament a qualsevol argument dels qui van parlar (només estic en desacord amb el fet que un programador i mig utilitzen IPFS). En general, tots dos tenen raó a la seva manera (especialment comentari sobre els xecs et fa pensar). Però si descartem la valoració moral i legal, qui farà una valoració tècnica d'aquesta tecnologia? Personalment, tinc una mena de sensació interior que "això s'ha de fer de manera inequívoca, té certes perspectives". Però per què exactament, no hi ha una formulació clara. Com, si ens fixem en les eines centralitzades existents, en molts aspectes estan molt per davant (estabilitat, velocitat, maneigabilitat, etc.). No obstant això, tinc un pensament que sembla tenir sentit i que difícilment es pot implementar sense aquests sistemes descentralitzats. Per descomptat, m'estic balancejant massa, però ho formularia així: s'ha de canviar el principi de difusió de la informació a Internet.
Deixa'm explicar. Si hi penseu bé, ara tenim informació distribuïda segons el principi “Espero que aquell a qui la vaig donar la protegeixi i no la perdin ni la rebin aquells a qui no estava destinada”. Com a exemple, és fàcil tenir en compte diversos serveis de correu, emmagatzematge al núvol, etc. I amb què acabem? Al hub Habré Seguretat de la informació està en primera línia i gairebé cada dia rebem notícies sobre una altra filtració global. En principi, totes les coses més interessants s'enumeren a <ironia> meravellós article L'estiu gairebé s'ha acabat. Gairebé no queden dades no filtrades. És a dir, els principals gegants d'Internet són cada cop més grans, acumulen cada cop més informació i aquestes filtracions són una mena d'explosions atòmiques d'informació. Això no havia passat mai abans, i aquí està de nou. Al mateix temps, encara que molts entenen que hi ha riscos, seguiran confiant les seves dades a empreses alienes. En primer lloc, no hi ha gaire alternativa, i en segon lloc, prometen que han arreglat tots els forats i això no tornarà a passar mai més.
Quina opció veig? Em sembla que les dades inicialment s'han de distribuir obertament. Però l'obertura en aquest cas no vol dir que tot hagi de ser fàcil de llegir. Parlo de l'obertura d'emmagatzematge i distribució, però no d'obertura total en la lectura. Suposo que la informació s'ha de distribuir amb claus públiques. Després de tot, el principi de les claus públiques/privades ja és antic, gairebé com Internet. Si la informació no és confidencial i està destinada a un cercle ampli, es disposa immediatament amb una clau pública (però encara en forma xifrada, qualsevol pot desxifrar-la amb la clau disponible). I si no, llavors es disposa sense clau pública, i la clau en si es transfereix al que hauria de tenir accés a aquesta informació. Al mateix temps, el que l'hauria de llegir només hauria de tenir una clau, i d'on obtenir aquesta informació, realment no hauria de volar-se; només la trau de la xarxa (aquest és el nou principi de distribució per contingut, no per adreça).
Per tant, per a un atac massiu, els atacants hauran d'obtenir un gran nombre de claus privades, i això és poc probable que es faci en un sol lloc. Aquesta tasca, tal com la veig, és més difícil que piratejar un servei concret.
I aquí es tanca un altre problema: la confirmació de l'autoria. Ara a Internet podeu trobar moltes cites escrites pels nostres amics. Però, on és la garantia que van ser ells qui les van escriure? Ara, si cada registre estigués acompanyat d'una signatura digital, seria molt més fàcil. I no importa on estigui aquesta informació, el més important és la signatura, que, per descomptat, és difícil de falsificar.
I aquí teniu el que és interessant: IPFS ja porta eines de xifratge (al cap i a la fi, està construït amb tecnologia blockchain). La clau privada s'especifica immediatament a la configuració.
No sóc un especialista en seguretat i no sé exactament com utilitzar-lo correctament, però em sembla que aquestes claus s'utilitzen a nivell d'intercanvi entre nodes IPFS. I també js-ipfs i projectes exemple com ara òrbita-dbsobre el qual treballa òrbita.xat. És a dir, teòricament, cada dispositiu (mòbil i no només) es pot equipar fàcilment amb les seves pròpies màquines de xifrat-desxifrat. En aquest cas, només queda que tothom s'ocupi de desar les seves claus privades, i cadascú serà responsable de la seva pròpia seguretat i no serà ostatge d'un altre factor humà en algun gegant d'Internet súper popular.
Només els usuaris registrats poden participar en l'enquesta. Inicia sessiósi us plau.
Has sentit parlar d'IPFS abans?
No he sentit mai parlar d'IPFS, però em sembla interessant
No he sentit i no en vull sentir
Escoltat però no interessat
He sentit, però no ho he entès, però ara sembla interessant
He estat utilitzant activament IPFS durant molt de temps.