---
marp: true
theme: kant
# theme: https://cunhapaulo.github.io/style/kant.css
author: Paolo Asperti
title: "rclone: cosa è e cosa può fare per noi"
style: |
    div.columns {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 1rem;
    }
paginate: true
footer: "Linux Day 2025 SE - 10/05/2025 - Mantova"
---

<!-- _class: titlepage -->
<!-- footer: -->

# rclone

## cosa è e cosa può fare per noi

### Paolo Asperti

<span style="margin-top: 1ex;">&nbsp;</span>

#### Linux Day 2025 Spring Edition
#### Creative LAB, Lunetta (MN) &mdash; 10 maggio 2025

###### [![height:2cm BgLUG](images/logo_bglug.svg)](https://bglug.it)

---

## Agenda

<div class="columns" align="center">
<div>

- che roba è
- differenze rispetto a rsync
- storage systems supportati
- note su installazione
- configurazione

</div>
<div>

- utilizzo di base (+DEMO)
- funzionalità avanzate (+DEMO)
- server / webgui (+DEMO)
- casi d'uso

</div>
</div>


---

## che roba è

Rclone è un tool che ha lo scopo di sincronizzare una directory locale con un repository remoto.
Pensiamolo come un rsync che al posto di avere solo ssh può utilizzare svariati servizi cloud.

---

## differenze rispetto a rsync

- rsync parla solo con rsync (locale o tramite ssh)
- può fare sync anche tra 2 repository remoti
- multithreaded
- rclone: file level / rsync: block level

---

## storage systems supportati

- S3 compatibili
- FTP / webdav
- nextcloud / owncloud
- SFTP
- SMB / CIFS
- mille altri vendor-specific

---

## installazione

Sebbene sia incluso in praticamente tutti i sistemi operativi, alcuni utilizzano versioni piuttosto datate.

(ad esempio debian 12 e ubuntu 22.04 usano rclone 1.60.1, datata 2022)

---

## configurazione

`rclone` permette di avere molti repository configurati in un unico file di configurazione.

Normalmente è possibile copiare questo file di configurazione su un'altra macchina per avere accesso ai medesimi repository.

In alcuni casi le password sono **offuscate**, per scoraggiare i curiosoni; questo non è chiaramente un metodo per salvare i segreti in maniera sicura.

> **Demo**: configurazione di un remoto

---

## mount

E' possibile montare un remoto su una cartella locale.

Il processo di `rclone` deve rimanere attivo.

> **Demo**: montaggio di un remoto

---

## ncdu

- per rispondere alla domanda: "ma cosa sta consumando tutto questo spazio?"
- per controllare rapidamente se la configurazione di un remoto è corretta

> **Demo**: ncdu

---

## sync

Siete qui per questo

> **Demo**: sync

---

## compressione

Prima si crea la configurazione di uno storage remoto e poi si applica sopra a questa un layer di compressione.
In pratica è un nuovo remoto che si appoggia ad un remoto esistente.
Al momento, il solo metodo di compressione supportato è `gzip`.

---

## crittografia (client-side encryption)

Come per la compressione, prima si crea la configurazione di uno storage remoto e poi si applica sopra a questa un layer di crittografia.

note:

- è possibile scegliere se crittografare i nomi di files e directory o meno
- i nomi dei files crittografati hanno un limite di lunghezza
- il timestamp di modifica dei files non è crittografato (ed è usato per la sincronizzazione)
- la dimensione dei files non è crittografata
- usando la crittografia, non vengono salvati gli hash dei files

---

## combine (unione di più remoti)

Serve a creare un remoto in cui altri remoti sono visibili attraverso sottocartelle.

> **Demo**: combine di più remoti

---

## union

A differenza di `combine`, qui i remoti sono sovrapposti; il risultato è che l'elenco dei files è la "somma" dei remoti combinati.

A volte è poco intuitivo capire dove vanno a finire i files scritti.

> **Demo**: union di più remoti

---

### rcd e web gui

Il server rcd è comodo anche solo per configurare...

Fondamentalmente si usa per spostare in remoto le varie operazioni.

Ascolta su un socket o su una porta (default: `http://localhost:5572/`).

> **Demo**: rcd

---

## server (webdav/sftp/...)

Serve il contenuto di un remoto via http sulla porta 8080 (default)

> **Demo**: serve http

---

## server (volumi docker)

Utilizza un remoto come storage per il provisioning di volumi docker

> **Demo**: serve docker

---

## esempi di utilizzo

- montaggio cartella remota compressa e crittografata
- mysqldump pippato su rclone
- backup in docker compose

> **Demo**: casi d'uso

---

## Riferimenti

Queste slides saranno presto disponibili sul sito BgLUG:

[https://bglug.it/](https://bglug.it/)
