BanaNAS Un NAS sur un BananaPi M1+

BanaNAS Un NAS sur un BananaPi M1+

NicolasSchmid Lv2

Introduction

Les ordinateurs super compactes sur des micro cartes sont incroyables ! Ils permettent de faire tant de chose sans demander trop de ressources et à un prix relativement faible.

J’ai eu l’idée de donner une nouvelle vie à mon BananaPi M1+ en le transformant en NAS. L’idée est de lui rajouter un disque dur en SATA et de le configurer grâce à OpenMediaVault pour permettre de gérer facilement depuis une interface web le NAS. Son usage sera pour les déplacements: je veux qu’il copie automatiquement les cartes SD exFAT sur son stockage interne puis qu’il le synchronise chaque nuit avec mon NAS chez moi.

Le projet s’appelle donc BanaNAS (Pour BananaPi + Network Attached Storage si jamais).

Construction du BanaNAS

Composants

Cette construction sera faite avec les composants suivants, tout n’est pas requis mais dans ce tuto j’utiliserai tout les composants cités.

  • BananaPi M1+
  • Carte SD 32 GO 45Mo/s
  • Disque dur externe WD Blue 1TO compact

Au niveau des câbles:

  • Câble SATA court et flexible
  • Câble fabriqué maison pour l’alimentation du disque
  • Câble Micro-USB pour l’alimentation de la board
  • Câble Ethernet RJ45
  • Câble HDMI

Et quelques composants standards:

  • Clavier
  • Écran supportant l’HDMI

Assemblage

Dans cette étape importante, j’utilise le port SATA ainsi que son alimentation pour rajouter mon disque dur plateau de 1TO. La construction est simple mais je tente de le faire le plus compacte possible. Le résultat ressemble à cela:

BananaPi Construit en NAS 01
BananaPi Construit en NAS 02

Je ne suis pas électronicien donc au niveau du câble d’alimentation SATA créé par moi même, je ne vais par rentrer dans les détails.

La suite est de flasher l’OS sur la carte SD.

Préparation de la carte SD

Pour installer un OS sur un BananaPi, il faut télécharger l’image pré-construite et ensuite la flasher sur la carte SD qui sera plus tard mise dans la board.

Télécharger la version de l’OS désirée

J’utilise cette version de Armbian:

  • Armbian_23.08.0-trunk_Bananapim1plus_bookworm_current_6.1.37

Il est possible de la télécharger depuis: Google Drive . Des OS différents sont disponibles depuis le répertoire officiel des images pour BananaPi M1+ sur ce Wiki .

Flasher sur la carte SD

Maintenant que l’image est prête, j’utilise Balena Etcher sur Windows 11 pour copier le contenu de l’image pré-construire sur ma carte SD. Les étapes sont simples grâce à l’interface graphique: Il suffit de sélectionner l’image (décompressez l’archive avant pour bien récupérer l’image), de sélectionner l’USB à flasher et d’exécuter le tout avec un bouton !

Balena Etcher GUI

Je peux maintenant réinsérer la carte SD dans mon BananaPi et brancher l’alimentation ! (Le démarrage se fait automatiquement, pas besoins d’appuyer sur un bouton)

Armbian

Premier démarrage

La première chose qui est demandée de faire lorsque le BanaNAS est connecté et allumé, c’est de renseigner les configuration de base du système, cela ressemblera à ça (bien évidemment, renseignez vos informations personnelles et mots de passe):

Config de base

Ensuite, j’aime bien et je trouve cela propre de totalement mettre à jour le système grâce à ces commandes:

1
sudo apt update && apt full-upgrade -y

Finalement redémarrer le système (requis car mis à jour du Kernel Linux):

1
sudo reboot

Open Media Vault

Installation

Cette installation se fait grâce au script officiel suivant:

1
wget -O - https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/installScript/master/install | sudo bash

L’exécution devrait ressembler à cela:

Installation OMV

Une fois le script exécuté, pour terminer le tout dans les règles de l’art, je conseille d’exécuter encore ces commandes pour s’assurer que tout est bien installé et pour libérer potentiellement de l’espace-disque:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Effacer le contenu inutile
sudo apt autoremove

# Nettoyer le cache apt
sudo apt clean

# Configurer un peu le dpkg
sudo dpkg --configure -a

# Mettre à jour et installer les paquets
sudo apt update && apt full-upgrade -y

# Éteindre l'OS
sudo poweroff

Il est conseillé d’exécuter cette commande non en SSH mais directement avec le clavier sur l’hôte physique car des modification sur les configurations réseau seront faites et la connexion en SSH sera coupée entre deux, ce qui peut interrompre l’exécution du script.

En cas de crash du script (ce qui m’est arrivé), je recommande de redémarrer la machine et de reexécuter le script après avoir redémarré le système.

Je préviens, sur un BananaPI M1+ avec 1GO de RAM et un CPU lent, cela peut facilement prendre 1 après-midi, donc buvez du thé vert en attendant !

Configuration

Pour accéder à l’interface de configuration d’Open Media Vault, j’utilise un navigateur Web et rentre l’IP du BanaNAS (port 80 en http). Le login par défaut est admin openmediavault:

GUI Open Media Vault

La configuration avancée d’OpenMediaVault ne sera pas abordée ici, cependant, les étapes clés à suivre dans l’ordre sont:

  • Ajouter son utilisateur dans les groupes Open Media Vautl pour accéder à l’interface web
  • Modifier le nom d’hôte
  • Configurer l’interface RJ45 avec une IP fixe
  • Configurer les disques
  • Configurer les répertoires partagés + droits
  • Configurer les services réseau tel SMB et NFS pour les accès distant aux répertoire partagés

Docker

Installation

Docker est fantastique pour exécuter rapidement des applications sur Linux de manière sécurisé, rapide et performante. Je l’utiliserai pour déployer des conteneurs comme Dashy ou Apache Guacamole.

Cette installation se fait avec ce script officiel:

1
2
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

La fin de l’installation devrait ressembler à cela:

Fin de l'installation de docker par script

Vérifiez le fonctionnement de docker en exécutant ces commandes. Docker-compose devrait renvoyer les informations d’aide sur la commande (car aucun arguments ne seront renseignés):

1
2
3
4
5
# Créer le conteneur de test Docker
docker run hello-world

# Vérifier que docker-compose est correctement installé
docker-compose

Résultat Docker Run

Déplacer le répertoire Docker

Je désire déplacer le répertoire Docker contenant toutes les images et configurations sur le disque SATA pour optimiser les performances et l’espace disque. Une documentation écrite par mes soins existe ici .

La modification apportée au fichier /etc/docker/daemon.json est la suivante:

1
2
3
{
"data-root": "/srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba/Docker"
}

La nouvelle destination se trouve donc sur le répertoire Docker de ma partition sur le disque SATA. Ne pas oublier de redémarrer le NAS après la modification.

Installation de Portainer

J’adore les interfaces web et je désire pouvoir gérer mes conteneurs grâce à Portainer. L’installation se fait grâce aux commandes prises du site officiel pour la version communauté.

1
2
3
4
5
# Créer le volume de Portainer
docker volume create portainer_data

# Instancier Portainer
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Le port de l’interface web est 9443 sur https.

Services Docker installés

La grande majorité de mes applications seront exécutées dans Docker et gérées par Portainer car c’est simple et efficace. J’installe ces applications:

Cette section de documentation fournis les docker-composes et quelques explications utilisés.

Syncthing

Syncthing me permettra de synchroniser le répertoires de photographies avec mon NAS chez moi pour qu’il y ait toujours une copie supplémentaire de mes données.

Syncthing

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3"
services:
syncthing:
image: syncthing/syncthing
container_name: syncthing
hostname: BanaNAS
environment:
- PUID=1000
- PGID=1000
volumes:
- "/srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba:/var/syncthing"
ports:
- 8384:8384 # Web UI
- 22000:22000/tcp # TCP file transfers
- 22000:22000/udp # QUIC file transfers
- 21027:21027/udp # Receive local discovery broadcasts
restart: always

FileBrowser

Dans le répertoire srv se trouve la racine du parcours de fichiers depuis l’interface web. J’y met la racine de la partition principale de mon disque SATA. Les autres fichiers concernent des configurations

File Browser

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.8'

services:
filebrowser:
image: filebrowser/filebrowser
container_name: filebrowser
restart: always
ports:
- "81:80"
volumes:
- "/srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba:/srv"
- "/srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba/Docker/data/filebrowser/database.db:/database.db"
- "/srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba/Docker/data/filebrowser/.filebrowser.json:/.filebrowser.json"

Dashy

Simple et efficace, Dashy ne requis qu’un seul et unique fichier de configuration qui contiendra toute l’application. J’adore ce principe car c’est très facilement gérable et sauvegardable.

Dashy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3.8"
services:
dashy:
# To build from source, replace 'image: lissy93/dashy' with 'build: .'
# build: .
image: lissy93/dashy:2.1.2
container_name: Dashy
# Pass in your config file below, by specifying the path on your host machine
volumes:
- /srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba/Docker/data/dashy/config.yml:/app/public/conf.yml
ports:
- 4000:80
# Set any environmental variables
environment:
- NODE_ENV=production
# Specify your user ID and group ID. You can find this by running `id -u` and `id -g`
# - UID=1000
# - GID=1000
# Specify restart policy
restart: unless-stopped

Apache Guacamole

Cette image adaptée pour supporter arm32v7 est utilisée pour apache guacamole. Je monte le répertoire des configurations de l’application (dont la DB).

Apache Guacamole

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "2"

networks:
guacnetwork_compose:
driver: bridge

services:
guacamole:
image: jwetzell/guacamole:arm32v7
container_name: guacamole
restart: always
ports:
- 8080:8080
volumes:
- /srv/dev-disk-by-uuid-c732a4c4-2084-4462-b675-11ad3c2b23ba/Docker/data/apache_guacamole:/config
networks:
guacnetwork_compose:

Conclusion

Voilà ! J’ai maintenant un NAS portable et beaucoup trop stylé me permettant de gérer mes fichiers pendant mes déplacements.

Améliorations possibles

Je comptais également ajouter la fonctionnalité de point d’accès Wifi pour mon téléphone, mais je pense plutôt faire cela avec un routeur dd-wrt…

  • Title: BanaNAS Un NAS sur un BananaPi M1+
  • Author: NicolasSchmid
  • Created at : 15.03.2024 20:23:49
  • Updated at : 27.03.2024 07:17:25
  • Link: https://doc.spacesdata.net/2024/03/15/BanaNAS-Un-NAS-sur-un-BananaPi-M1/
  • License: This work is licensed under CC BY-NC-SA 4.0.