This commit is contained in:
plast 2019-11-25 08:23:58 -05:00 committed by notnull
parent 940fdb6c4f
commit 66019125ac

114
md/ipfs.md Normal file
View File

@ -0,0 +1,114 @@
# IPFS: The Interplanetary File System
## What is IPFS
Ipfs is software that connects every computer thats a node in the system to the same,
indestructable network of files. Its comparable to a bittorrent swarm and evokes the
spirit of the original version of the web.
## What can I do with it?
Ipfs is designed to make anything you post on it, near impossible to get rid of as
as the network is up. This means you can make files that are impossible censor and
cant 404 just because the server hosting it craps out. Its even possible to make
an indestructible, completely decentralized static website!
## Basics of IPFS
You can install it with your native package manager or snap if your distro supports it
`sudo apt install snapd`
`snap install ipfs`
`ln -s /snap/ipfs/current/bin/ipfs /usr/local/bin`
Setup is just as easy!
`ipfs init`
`ipfs less /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme`
`ipfs daemon`
`ipfs swarm peers`
## Cool stuff to do after set up
### Adding a file to ipfs
If having you're own immortal file sounds awesome, you'll be happy to know doing the
same is easy!
Simply type:
`ipfs add the_meaning_of_life.txt`
and you're done!
The command will return a hash that looks something like this: `QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy`
You'll need that has to get your file from ipfs, just like a website url gets you the site. The hash changes when the file changes, so as long as the file is the same the has will also be.
More can be found [here](https://flyingzumwalt.gitbooks.io/decentralized-web-primer/content/files-on-ipfs/lessons/add-and-retrieve-file-content.html)
### Making an Indestructible Website
If you've every wanted a website but
a) Couldn't afford hosting
b) Needed to post things you're government wouldn't approve
or
c) thought it was too complicated
Ipfs has you covered!
Start by making a directory containing your html files, lets say `zerzangang` is your
folder name. Make sure the daemon is running:
`ipfs daemon`
Then you can add the directory to ipfs
`ipfs add -r zerzangang`
You'll get something like this spat out at you
`
added QmcMN2wqoun88SVF5own7D5LUpnHwDA6ALZnVdFXhnYhAs zerzangang/pics/zerzan_sexy.jpg
added QmS8tC5NJqajBB5qFhcA1auav14iHMnoMZJWfmr4k3EY6w zerzangang/pics
added QmYh6HbZhHABQXrkQZ4aRRSoSa6bb9vaKoHeumWex6HRsT zerzangang/index.html
added QmYeAiiK1UfB8MGLRefok1N7vBTyX8hGPuMXZ4Xq1DPyt7 zerzangang/`
Something to note is how every file and subdirectory is given its own crypto hash.
For now, all you need to know is that the last line is what functions as your
"site url". And you're done! All you have to do is type `http://localhost:8080/ipfs/$SITE_CID` where `$SITE_CID` is your hash of your site's directory.
And you're done!
#### IPNS: The Problem Solver
You might remember me saying that the entire hash changes when you change the file.
So one downside is that if you edit your website and republish it on ipfs, your site's
hash, which is part of its url, will change completely. This is obviously a pain in
the ass. But dont worry IPNS has you covered! IPNS allows you to register one hash
that stays the same despite the file changes. Lets set it up with your site now!
Start by running:
`ipfs name publish $SITE_CID`
The command will return
`Published to $PEER_ID: /ipfs/$SITE_CID`
`PEER_ID` will be the new site hash and you can verify everything went write by typing
`ipfs name resolove PEER_ID`. You can now visit your site on `https://ipfs.io/ipns/PEER_ID`. The next time you you want to update the site, simply run:
`ipfs add -r zerzangang/`
`ipfs name publish NEW_SITE_HASH`
Now when someone wants to visit your site the address stays the same!
## Up and Coming projects using IPFS
[Neocities](https://neocities.org), the spirtual successor to geocities, uses ipfs to
back up every change made on the sites it hosts. Making sure that a wealth of web
culture won't go AWOL again.
[Radicle](http://radicle.xyz/) is a really interesting project that uses ipfs to make
a p2p way to collab on code.