Title: OpenBSD 6.9 packages using IPFS
Author: Solène
Date: 01 May 2021
Tags: openbsd ipfs
Description: 

# Update 15/07/2021

I disable the IPFS service because it's nearly not used and draw too
much CPU on my server.  It was a nice experiment, thank you very much
for the support and suggestions.

# Introduction

OpenBSD 6.9 has been released and I decided to extend my IPFS
experiment to latest release.  This mean you can fetch packages and
base sets for 6.9 amd64 now over IPFS.

If you don't know what IPFS is, I recommend you to read my previous
articles about IPFS.

Note that it also works for -current / amd64, the server automatically
checks for new updates of 6.9 and -current every 8 hours.

# Benefits

The benefits is to play with IPFS to understand how it works with a
real world use case.  Instead of using mirrors to distributes packages,
my server is providing the packages and everyone downloading it can
also participate into providing data to other IPFS client, this can be
seen as a dynamic Bittorrent CDN (Content Delivery Network), instead of
making a torrent per file, it's automatic.  You certainly wouldn't
download each packages as separate torrents files, nor you would
download all the packages in a single torrent.

This could reduce the need for mirrors and potentially make faster
packages access to people who are far from a mirrors if many people
close to that person use IPFS and downloaded the data.  This is a great
technology that can only be beneficial once it reach a critical mass of
adopters.

# Installing IPFS on OpenBSD

To make it brief, there are instructions in the provided pkg-readme but
I will give a few advice (that I may add to the pkg-readme later).

```OpenBSD installation instructions
pkg_add go-ipfs
su -l -s /bin/sh _go-ipfs -c "IPFS_PATH=/var/go-ipfs /usr/local/bin/ipfs init"
rcctl enable go_ipfs

# recommended settings
rcctl set go_ipfs flags --routing=dhtclient --enable-namesys-pubsub

cat <> /etc/login.conf
go_ipfs:\
        :openfiles=2048:\
        :tc=daemon:
EOF

rcctl start go_ipfs
```

Put this in /etc/installurl:

```local link to ipfs gateway
http://k51qzi5uqu5dmebzq75vx3z23lsixir3cxi26ckl409ylblbjigjb1oluj3f2z.ipns.localhost:8080/pub/OpenBSD
```

# Conclusion

Now, pkg_add will automatically download the packages from IPFS, if
more people use it, it will be faster and more resilient than if only
my server is distributing the packages.

Have fun and enjoy 6.9 !

If you are worried about security, packages distributed are the same
than the one on the mirrors, pkg_add automatically checks the signature
in the files against the signify keys available in /etc/signify/ so if
pkg_add works, the packages are legitimates.