Contenu

Monter automatiquement et accéder au disque dur de sa Freebox HD/Server via FTP sous Linux

Séries - Monter les disques durs de Freebox
Contenu
Avertissement
Dernière modification de cet article le 2011-06-16, le contenu pourrait être dépassé/obsolète.

La Freebox HD est équipée d’un disque dur généralement utilisé pour stocker vidéos, musiques et images puis les consulter directement depuis son téléviseur.

L’accès à ce disque dur depuis un autre ordinateur se fait via FTP (avec la récente Freebox Server, le SMB/CIFS peut également être utilisé).

L’utilisation du FTP pour transférer des fichiers sur le disque dur de ma Freebox HD est relativement très aisé mais j’avais envie de quelque chose de plus “direct”.

Il est possible de “monter” un dossier originellement accessible via FTP, directement dans le FS de son système d’exploitation.

Sous Linux, cela peut se faire avec curlftpfs (qui utilise FUSE et cURL) et la commande suivante :

1
curlftpfs ftp://fqdn_ou_IP_serveur_FTP/dossier /dossier/où/monter/le/dossier/FTP

Avec une Freebox HD ayant le serveur FTP activé et configuré pour autoriser les connexions anonymes, la commande permettant de monter le disque dur dans le dossier “/mnt/Freebox” serait :

1
curlftpfs ftp://hd1.freebox.fr/Disque dur/ /mnt/Freebox

Ensuite, la copie d’un fichier sur le disque dur de la Freebox se fait exactement comme si le disque était directement branché à notre ordinateur (comme n’importe quel disque IDE, SATA, USB ou FireWire). Tout accès au dossier “/mnt/Freebox” et à ses sous-dossiers sera répercuté sur le dossier “Disque dur” du serveur FTP.

Chez moi, ma Freebox HD n’est pas constamment allumée ni même en veille car je la débranche dès que je n’en ai plus besoin : consommation électrique inutile évitée.

L’ennui est qu’une fois celle-ci allumée, si je veux y copier un fichier, il faut que je remonte son HDD via la commande donnée plus haut.

Afin de simplifier ma tâche, j’ai fait un script qui exécute la commande dès que la Freebox HD est allumée.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

# Monte/démonte le serveur FTP de la Freebox dans un dossier ($MOUNT_PATH)
# @author DUVERGIER Claude
# @date 2011-03-23
#
# Références :
# - Utiliser la FreeboxHD comme un disque dur local sous linux : http://wiki.freeplayer.org/index.php?title=Utiliser_la_FreeboxHD_comme_un_disque_dur_local_sous_linux
# - determine if tcp port is open : http://www.commandlinefu.com/commands/view/8075/determine-if-tcp-port-is-open
# - Bash-Check If FS is Already Mounted On Directory : http://www.linuxquestions.org/questions/programming-9/bash-check-if-fs-is-already-mounted-on-directory-137282/
# - Capturing program return codes in a bash script? : http://www.technologyquestions.com/technology/linux/218765-capturing-program-return-codes-bash-script.html

FTP_HOST="hd1.freebox.fr"
FTP_LOGIN="" #TODO:
FTP_PWD="" #TODO:

MOUNT_PATH="/mnt/FreeboxHD/"

if (nc -zw2 $FTP_HOST 21); then # Serveur disponible
	mountpoint -q "$MOUNT_PATH"
	if [ $? -ne 0 ]; then # Si mountpoint n'a pas retourné 0, c'est donc que "$MOUNT_PATH" n'est pas un point de montage
		echo "Mounting..."
		curlftpfs ftp://$FTP_HOST "$MOUNT_PATH"; # On monte
	fi
else # Serveur non disponible
	#BUG: Si monté mais serveur FTP indisponible, mountpoint se bloque
	#BUGFIX: Ne pas appeler mountpoint, fusermount se plaindra que $MOUNT_PATH n'est pas monté ("fusermount: /some/folder/ not mounted")
	#mountpoint -q "$MOUNT_PATH"
	#if [ $? -eq 0 ]; then # Si mountpoint a retourné 0, c'est donc que "$MOUNT_PATH" est un point de montage
		echo "Unmounting..."
		fusermount -u -z "$MOUNT_PATH"; # On démonte
	#fi
fi

Le principe est simple :

  1. La disponibilité du serveur FTP est testé via netcat (le délai de réponse alloué au serveur est de 2 secondes ce qui devrait suffire sur un réseau local non surchargé).
  2. Si le serveur FTP est prêt, le point de montage est vérifié via mountpoint, afin de ne pas remonter le serveur FTP s’il l’est déjà.
  3. Si le point de montage n’est pas déjà utilisé, le disque dur de la Freebox HD est monté via curlftpfs.
  4. Si le serveur FTP n’est pas prêt (nc -z a retourné autre chose que ``), alors le dossier FTP est démonté via fusermount.

Dans mon installation, ce script est appelé par cron toutes les 3 minutes (choix personnel : rien n’empêche d’appeler le script toutes les minutes si on veut).

J’espère qu’il vous aidera pour une tâche ou une autre sachant qu’il fonctionne avec n’importe quel serveur FTP et non pas seulement une Freebox HD ou Freebox Server. Si vous avez besoin de monter un espace disque FTP nécessitant une identification, vous n’avez qu’à rajouter le couple identifiant - mot de passe dans la ligne de curlftpfs.