Aclararé de inmediato que no soy un experto en esta área, pero he mostrado interés en esta tecnología más de una vez, pero tratar de jugar con ella a menudo causaba algo de dolor. Hoy comencé a experimentar nuevamente y obtuve algunos resultados que me gustaría compartir. En resumen, se describirá el proceso de instalación de IPFS y algunas características (todo se hizo en ubuntu, no lo he probado en otras plataformas). Si se perdió lo que es IPFS, está escrito con cierto detalle aquí: habr.com/es/post/314768
Instalación
Para la pureza del experimento, sugiero instalarlo inmediatamente en algún servidor externo, ya que consideraremos algunos inconvenientes al trabajar en modo local y remoto. Luego, si lo desea, no será demolido por mucho tiempo, no hay mucho.
Nota: es mejor instalar IPFS en nombre del usuario que se supone que debe usarlo con más frecuencia. El hecho es que a continuación consideraremos la opción de montaje a través de FUSIBLE y hay sutilezas.
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
Después de eso, puede ejecutar los siguientes comandos:
Versiones de actualización de ipfs - para ver todas las versiones disponibles para descargar. versión actualizada de ipfs - para ver la versión instalada actualmente (hasta que no tengamos IPFS instalado, será ninguno). ipfs-update instalar lo último - instalar la última versión de IPFS. En lugar de la última, respectivamente, puede especificar cualquier versión deseada de la lista de disponibles.
Instalación de ipfs
ipfs-update install latest
Cheque
ipfs --version
Directamente con la instalación en términos generales todo.
Iniciar IPFS
Inicialización
Primero debe realizar la inicialización.
ipfs init
En respuesta, recibirás algo como esto:
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í, en mi opinión, comienza lo interesante. Los muchachos en la etapa de instalación ya están comenzando a usar sus propias tecnologías. El hash propuesto QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv no se genera específicamente para usted, sino que se incluye en la versión. Es decir, antes del lanzamiento, prepararon un texto de bienvenida, lo vertieron en IPFS y agregaron la dirección al instalador. Creo que es muy bueno. Y este archivo (más precisamente, la carpeta completa) ahora se puede ver no solo localmente, sino también en la puerta de enlace oficial. ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Al mismo tiempo, puede estar seguro de que el contenido de la carpeta no ha cambiado de ninguna manera, porque si hubiera cambiado, el hash también habría cambiado.
Por cierto, en este caso, IPFS tiene algunas similitudes con el servidor de control de versiones. Si realiza cambios en los archivos de origen de la carpeta y vuelve a verter la carpeta en IPFS, recibirá una nueva dirección. Al mismo tiempo, la carpeta anterior no irá a ningún lado así como así y estará disponible en su dirección anterior.
Lanzamiento directo
ipfs daemon
Deberías recibir una respuesta como esta:
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
Abriendo las puertas a Internet
Presta atención a estas dos líneas:
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Ahora, si instaló IPFS localmente, accederá a las interfaces de IPFS usando direcciones locales y todo estará disponible para usted (por ejemplo, localhost:5001/webui/). Pero cuando se instala en un servidor externo, por defecto, las puertas de enlace están cerradas a Internet. Pasarelas dos:
Hasta ahora, ambos puertos (5001 y 8080) pueden abrirse para experimentos, pero en un servidor de combate, por supuesto, el puerto 5001 debe cerrarse con un firewall. También está el puerto 4001, que es necesario para que otros pares puedan encontrarlo. Debe dejarse abierto a solicitudes externas.
Abra ~/.ipfs/config para editar y busque estas líneas en él:
Si webui funciona para usted, entonces la configuración de IPFS se puede cambiar directamente en él, incluida la visualización de estadísticas, pero a continuación consideraré las opciones de configuración directamente a través del archivo de configuración, que generalmente no es crítico. Es mejor recordar exactamente dónde está la configuración y qué hacer con ella, de lo contrario, si la cara web no funciona, será más difícil.
Configuración de una interfaz web para trabajar con su servidor
Aquí está la primera trampa, que tomó alrededor de tres horas.
Si instaló IPFS en un servidor externo, pero no instaló ni ejecutó IPFS localmente, cuando vaya a /webui en la interfaz web, debería ver un error de conexión:
El hecho es que webui, en mi opinión, funciona de manera muy ambigua. Primero, intenta conectarse a la API del servidor donde está abierta la interfaz (basándose en la dirección en el navegador, por supuesto). y si no funciona allí, intenta conectarse a la puerta de enlace local. Y si tiene IPFS ejecutándose localmente, entonces webui funcionará bien para usted, solo trabajará con IPFS local y no externo, aunque abrió webui en un servidor externo. Luego subes los archivos, pero por alguna razón no los ves así en un servidor externo…
Y si no se ejecuta localmente, obtenemos un error de conexión. En nuestro caso, lo más probable es que el error se deba a CORS, que también lo indica webui, lo que sugiere agregar un archivo config.
Reiniciamos ipfs y vemos que webui se ha conectado correctamente (en cualquier caso, debería hacerlo, si abriste las puertas de enlace para solicitudes externas, como se describe anteriormente).
Ahora puede cargar carpetas y archivos directamente a través de la interfaz web, así como crear sus propias carpetas.
Montaje del sistema de archivos FUSE
Aquí hay una característica bastante interesante.
Archivos (así como carpetas), podemos agregar no solo a través de la interfaz web, sino también directamente en la terminal, por ejemplo
ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test
El último hash es el hash de la carpeta raíz.
Usando este hash, podemos abrir una carpeta en cualquier nodo ipfs (que puede encontrar nuestro nodo y obtener el contenido), podemos hacerlo en la interfaz web en el puerto 5001 u 8080, o podemos hacerlo localmente a través de ipfs.
ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt
Pero aún puede abrirlo como una carpeta normal.
Vamos a crear dos carpetas en la raíz y concederles derechos a nuestro usuario.
Puede crear carpetas en otros lugares y especificar la ruta a ellas a través de los parámetros del demonio ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path
Ahora, leer de esta carpeta es algo inusual.
ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0
Es decir, no hay acceso directo a la raíz de esta carpeta. Pero puedes obtener el contenido, conociendo 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 mismo tiempo, incluso el autocompletado funciona dentro de la carpeta cuando se especifica la ruta.
Como dije anteriormente, hay sutilezas con dicho montaje: por defecto, las carpetas FUSE montadas están disponibles solo para el usuario actual (incluso el root no podrá leer desde dicha carpeta, sin mencionar a otros usuarios en el sistema). Si desea que estas carpetas estén disponibles para otros usuarios, entonces en la configuración debe cambiar "FuseAllowOther": false a "FuseAllowOther": true. Pero eso no es todo. Si ejecuta IPFS como root, entonces todo está bien. Y si en nombre de un usuario normal (incluso sudo), obtendrá un error
mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
En este caso, debe editar /etc/fuse.conf descomentando la línea #user_allow_other.
Después de eso, reinicie ipfs.
Problemas conocidos con FUSE
El problema se ha notado más de una vez que después de reiniciar ipfs con el montaje (y tal vez en otros casos), los puntos de montaje /ipfs y /ipns dejan de estar disponibles. No hay acceso a ellos, y ls -la /ipfs muestra ???? en la lista de derechos.
Encontré esta solución:
fusermount -z -u /ipfs
fusermount -z -u /ipns
Luego reinicie ipfs.
Agregar un servicio
Por supuesto, ejecutar en la terminal solo es adecuado para pruebas iniciales. En el modo de combate, el demonio debería iniciarse automáticamente al iniciar el sistema.
En nombre de sudo, cree el archivo /etc/systemd/system/ipfs.service y escríbalo:
NOMBRE DE USUARIO, por supuesto, debe ser reemplazado con su usuario (y quizás la ruta completa al programa ipfs sea diferente para usted (debe especificar la ruta completa)).
Activamos el servicio.
sudo systemctl enable ipfs.service
Iniciamos el servicio.
sudo service ipfs start
Comprobación del estado del servicio.
sudo service ipfs status
Para la pureza del experimento, será posible reiniciar el servidor en el futuro para comprobar que ipfs se inicia correctamente de forma automática.
Agregar fiestas conocidas para nosotros
Considere una situación en la que tenemos nodos IPFS instalados tanto en un servidor externo como localmente. En un servidor externo, agregamos algún archivo e intentamos obtenerlo a través de IPFS localmente por CID. ¿Lo que sucederá? Por supuesto, lo más probable es que el servidor local no sepa nada sobre nuestro servidor externo y simplemente intente encontrar el archivo por CID "preguntando" a todos los pares de IPFS disponibles (con los que ya ha logrado "familiarizarse"). Éstos a su vez preguntarán a otros. Y así sucesivamente, hasta encontrar el archivo. En realidad, sucede lo mismo cuando intentamos obtener el archivo a través de la puerta de enlace oficial. ipfs.io. Si tiene suerte, el archivo se encontrará en unos segundos. Y si no, no se encontrará ni en unos minutos, lo que afecta en gran medida a la comodidad del trabajo. Pero sabemos dónde aparecerá este archivo por primera vez. Entonces, ¿por qué no le decimos inmediatamente a nuestro servidor local "Busca allí primero"? Aparentemente, esto se puede hacer.
1. Vamos al servidor remoto y buscamos en el ~/.ipfs/config config
2. Ejecute sudo service ipfs status y busque entradas de Swarm en él, por ejemplo:
Swarm announcing /ip4/ip_вашего_сервера/tcp/4001
3. Agregamos a partir de esto la dirección general de la forma "/ip4/ip_su_servidor/tcp/4001/ipfs/$PeerID".
4. Para mayor confiabilidad, intentaremos agregar esta dirección a los pares a través de nuestra webui local.
5. Si todo está bien, abra la configuración local ~ / .ipfs / config, busque "Bootstrap" en ella: [...
y agregue la dirección recibida primero a la matriz.
Reinicie IPFS.
Ahora agreguemos el archivo al servidor externo e intentemos solicitarlo en el servidor local. Debería volar rápido.
Pero esta funcionalidad aún no es estable. Según tengo entendido, incluso si especificamos la dirección de un par en Bootstrap, ipfs cambia la lista de conexiones activas con los pares durante la operación. En todo caso, está en curso la discusión de este y deseos respecto a la posibilidad de concretar fiestas permanentes. aquí y parece que se supone que añadir alguna funcionalidad a [email protected]+
La lista de pares actuales se puede ver tanto en webui como en la terminal.
ipfs swarm peers
Y aquí y allá puedes agregar tu fiesta manualmente.
Hasta que se haya mejorado esta funcionalidad, puede escribir una herramienta para verificar una conexión con el par deseado y, si no, agregar una conexión.
Razonamiento
Entre aquellos que ya están familiarizados con IPFS, hay argumentos a favor y en contra de IPFS. Básicamente, ayer discusión y me incitó a profundizar en IPFS nuevamente. Y con respecto a la discusión mencionada anteriormente: no puedo decir que me oponga firmemente a ningún argumento de los que hablaron (solo estoy en desacuerdo con el hecho de que un programador y medio usa IPFS). En general, ambos tienen razón a su manera (especialmente comentario sobre cheques te hace pensar). Pero si descartamos la valoración moral y jurídica, ¿quién dará una valoración técnica de esta tecnología? Personalmente, tengo una especie de sentimiento interno de que "esto debe hacerse de manera inequívoca, tiene ciertas perspectivas". Pero por qué exactamente, no hay una formulación clara. Por ejemplo, si observa las herramientas centralizadas existentes, en muchos aspectos están muy por delante (estabilidad, velocidad, capacidad de administración, etc.). Sin embargo, tengo una idea que parece tener sentido y que difícilmente puede implementarse sin tales sistemas descentralizados. Por supuesto, me estoy balanceando demasiado, pero lo formularía de esta manera: el principio de difusión de información en Internet debe cambiarse.
Dejame explicar. Si lo piensas bien, ahora tenemos información distribuida según el principio “Espero que aquel a quien se la di la proteja y no se pierda ni la reciban aquellos a quienes no estaba destinada”. Como ejemplo, es fácil considerar varios servicios de correo, almacenamiento en la nube, etc. ¿Y con qué terminamos? En el eje de Habré Seguridad de la información está en primera línea y casi todos los días recibimos noticias sobre otra fuga mundial. En principio, todas las cosas más interesantes se enumeran en <ironía> maravilloso artículo El verano casi termina. Casi no quedan datos sin filtrar. Es decir, los principales gigantes de Internet son cada vez más grandes, acumulan cada vez más información y esas filtraciones son una especie de explosiones atómicas de información. Esto nunca ha sucedido antes, y aquí está de nuevo. Al mismo tiempo, aunque muchos entienden que existen riesgos, seguirán confiando sus datos a terceras empresas. En primer lugar, no hay muchas alternativas y, en segundo lugar, prometen que han reparado todos los agujeros y que esto nunca volverá a suceder.
¿Qué opción veo? Me parece que los datos inicialmente deberían distribuirse abiertamente. Pero la apertura en este caso no significa que todo deba ser fácil de leer. Hablo de la apertura del almacenamiento y la distribución, pero no de la apertura total en la lectura. Supongo que la información debe distribuirse con claves públicas. Después de todo, el principio de claves públicas/privadas ya es antiguo, casi como Internet. Si la información no es confidencial y está destinada a un círculo amplio, entonces se presenta de inmediato con una clave pública (pero aún en forma cifrada, cualquiera puede descifrarla con la clave disponible). Y si no, se presenta sin una clave pública, y la clave misma se transfiere a lo que debería tener acceso a esta información. Al mismo tiempo, quien debe leerlo solo debe tener una clave, y dónde obtener esta información, en realidad no debe dispararse, simplemente la extrae de la red (este es el nuevo principio de distribución por contenido, no por DIRECCIÓN).
Por lo tanto, para un ataque masivo, los atacantes deberán obtener una gran cantidad de claves privadas, y es poco probable que esto se haga en un solo lugar. Esta tarea, tal como yo la veo, es más difícil que hackear un servicio en particular.
Y aquí se cierra otro problema: la confirmación de la autoría. Ahora en Internet puedes encontrar muchas citas escritas por nuestros amigos. Pero, ¿dónde está la garantía de que fueron ellos quienes las escribieron? Ahora, si cada registro de este tipo fuera acompañado de una firma digital, sería mucho más fácil. Y no importa dónde se encuentre esta información, lo principal es la firma, que, por supuesto, es difícil de falsificar.
Y esto es lo que es interesante: IPFS ya cuenta con herramientas de encriptación (después de todo, se basa en la tecnología blockchain). La clave privada se especifica inmediatamente en la configuración.
No soy un especialista en seguridad y no puedo saber exactamente cómo usarlo correctamente, pero me parece que estas claves se usan a nivel de intercambio entre los nodos de IPFS. Y también js-ipfs y ejemplos de proyectos como órbita-dben el que funciona órbita.chat. Es decir, en teoría, cada dispositivo (móvil y no solo) puede equiparse fácilmente con sus propias máquinas de cifrado y descifrado. En este caso, solo queda que cada uno se encargue de guardar sus claves privadas, y cada uno será responsable de su propia seguridad, y no será rehén de otro factor humano en algún gigante de Internet superpopular.
Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor
¿Ha oído hablar de IPFS antes?
Nunca he oído hablar de IPFS, pero me parece interesante.
No he oído y no quiero oír
Escuché pero no me interesó
Escuché, pero no entendí, pero ahora parece interesante
He estado usando activamente IPFS durante mucho tiempo.