<?xml version="1.0"?><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr"><head><title>EER - ERIS and Object Storage</title><style type="text/css">body {
    max-width: 900px;
    margin-top: 3em;
    margin-bottom: 5em;
    margin-left: auto;
    margin-right: auto;
    text-align: left;
    line-height: 1.6;
    font-family: &quot;courier new&quot;, courier, monospace;
    font-size: 12pt;
}

#logo {
    margin: auto;
    width: 70px;
    display: block;
}

nav ul {
    list-style-type: none;
    display: flex;
    margin: 0;
    padding: 0;
}
nav ul li {
    margin: auto; padding: 2.0rem;
}
nav ul li a::before {
    content: &quot;[&quot;
}
nav ul li a::after {
    content: &quot;]&quot;
}

.banner {width: 25%; display: block; margin: auto; padding: 2.0rem;}
.banners {display: flex;}

h1 {text-align: center;}

h2 {margin-top: 4em; text-align: center;}

h3 {margin-top: 2em;}

table {border-collapse: collapse; width: 100%; margin: 1.5rem 0;}

td, th {border: 1px solid black; text-align: left; padding: 0.5rem;}

th {background: goldenrod; font-weight: bold;}

pre {
    max-width: 100%;
    overflow: auto;
}

code {
    font-size: 90%;
    background-color: whitesmoke;
}


figure {width: 80%; display: block; margin: auto; padding: 2.0rem;}
img { margin: auto; max-width: 70%; }
footer { text-align: right; font-weight: 200; padding-top: 5em; }
footer span { padding: 0 0.5em 0 0.5em; }
</style></head><body><svg id="logo" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 32"><defs><clipPath id="inside"><circle cx="16" cy="16" r="12" /></clipPath></defs><circle cx="16" cy="16" r="14" fill="goldenrod" stroke="black" stroke-width="2" /><path id="symbol" d="M 6,6 A 8,8 0 0,1 6,26 M 16,1 V 31 M 26,6 A 8,8 0 0,0 26,26" fill="none" stroke="black" stroke-width="2" clip-path="url(#inside)" /></svg><nav><a href="index.html">back to index</a></nav><article><h1>ERIS and Object Storage</h1><h2>Introduction</h2><p>So called cloud service providers offer managed services on their own infrastructure. One of the services offered is object storage. Object storage allows data to be stored as objects referenced by a key. This is opposed to usual file-systems that store data in hierarchical trees. Cloud storage providers usually provide a HTTP-based API for uploading and accessing objects. The most wide-spread API for seems to be the S3 API as developed by Amazon. There are self-hostable software as well as many other providers beside Amazon that offer the same API.</p><p>Object storage can be used to store blocks of ERIS encoded content. In this document we describe a layout for blocks stored in object storage, describe how to upload and access blocks from object storage as well as define a store URL format.</p><p>There are <a href="https://anarchaserver.org/8m/">many reasons</a> for not using services offered by cloud service providers and only few legitimate reasons for using them (e.g. <a href="https://en.wikipedia.org/wiki/Collateral_freedom">censorsip-resistance</a>).</p><p>Self-hostable software that expose the S3 API exists (e.g. <a href="https://min.io/">MinIO</a> or <a href="https://garagehq.deuxfleurs.fr/">Garage</a>). However, using these as an ERIS store seems unnecessarily complicated as <a href="coap.xml">simpler protocols</a> and more light-weight storage backends can be used instead. Still, it might make sense for collectives to provide object storage as many existing self-hostable software supports the same APIs (e.g. <a href="https://docs.funkwhale.audio/administrator/configuration/object-storage.html">Funkwhale</a> or <a href="https://docs.nextcloud.com/server/20/admin_manual/configuration_files/primary_storage.html">Nextcloud</a>). If a self-hosted object storage is already in-place it might make sense to use it for ERIS blocks.</p><h2>Layout</h2><p>Blocks are stored as objects using the Base32-encoded hash as key.</p><p>For example:</p><pre><code>- FGIBBZ22V4GRMJVXNCSLVQHRP3NAPHRR5NW3GDPPXRJKBI452YBA
- RY2DQNYEPJD5TOJZME7MEK3RFFF75ZOIIFAJTKHP4SEMI3CPJXAQ
- EHQ2P3JZUX6TP3PZKFPMWOK4SBQKOEWKU52YJJQTKQJ66WWEQX4Q
- CMC7JNIYGVRPDTU4M2OUPKFNEEUPXYDWUNSINMAOBJXYUZA32CBA</code></pre><h2>Public Access</h2><p>The bucket and all objects should have the ACL set to <code>public-read</code>. This allows blocks to be accessed via HTTP without any authentication.</p><h2>Store URL</h2><p>We define an URL that can be used by applications that allow user-defined ERIS stores (see also the Store URL defined for <a href="coap.xml">ERIS over CoAP</a>):</p><pre><code>s3://ENDPOINT/BUCKET/</code></pre><p>Where <code>ENDPOINT</code> is the HTTPS host of the endpoint and <code>BUCKET</code> the name of the bucket.</p><p>Example include:</p><ul><li><code>s3://s3.eu-central-1.wasabisys.com/eris/</code></li><li><code>s3://s3.amazonaws.com/my-block-bucket/</code></li></ul><h2>Implementations</h2><p>The <a href="https://codeberg.org/eris/python-eris">python-eris</a> repository has an <a href="https://codeberg.org/eris/python-eris/src/branch/main/examples/cloud_storage.py">implementation of a store backed by cloud object storage</a>.</p></article><footer><span><a href="https://codeberg.org/eris/eer/" title="Git repository from which this site is generated">Git</a></span><span><a href="https://creativecommons.org/licenses/by-sa/4.0/" title="Content licensed as CC-BY-SA-4.0">CC-BY-SA-4.0</a></span></footer></body></html>