Transformer le Raspberry Pi en Time Machine



Pour ceux qui ont un Mac, vous connaissez Time Machine qui permet de faire des sauvegardes incrémentales de votre système vers un disque dur ou une Time Capsule. Nous allons voir comment transformer notre Raspberry Pi Home Server en une Time Capsule.

Transformer le Raspberry Pi en Time Machine

Dans l‘article de préparation du disque dur nous avions créé une partition HFS+. C’est le format qui doit être utilisé pour pouvoir sauvegarder vos données depuis le Mac. Nous allons voir comment la préparer et comment connecter le Mac vers le Raspberry Pi.

  1. Installer le service avahi si ce n’est pas déjà (voir l’article sur AirPlay)
    apt-get install avahi-daemon libavahi-client-dev libdb5.3-dev db-util db5.3-util libgcrypt11 libgcrypt11-dev
  2. Télécharger Netatalk 3.0 (avec wget par exemple). A l’écriture de cet article,il semble que la version 3.1 ne fonctionne pashttp://sourceforge.net/projects/netatalk/files/netatalk/3.0/netatalk-3.0.tar.gz/download
  3. Lancer la configuration, la compilation et l’installation
    cd netatalk-3.0
    
    ./configure --with-init-style=debian --with-zeroconf
    
    make
    
    make install
  4. Installer les packages contenant les outils pour les partitions HFS
    apt-get install hfsplus hfsutils hfsprogs
  5. Créer la partition HFS+
    mkfs.hfsplus /dev/sda1
  6. Désactiver le journaling sur la partition HFS+ sinon l’enregistrement Time Machine ne fonctionnera (et le disque ne sera pas trouvé)
    1. Aller dans le home
    2. Créer un fichier disable.c en y copiant le contenu suivant

      [code lang= »c »]#include <stdio.h>

      #include <stdlib.h>

      #include <unistd.h>

      #include <sys/types.h>

      #include <sys/mman.h>

      #include <fcntl.h>

      #include <byteswap.h>

      int main(int argc, char *argv[])

      {

      int fd = open(argv[1], O_RDWR);

      if(fd < 0) {

      perror("open");

      return -1;

      }

      unsigned char *buffer = (unsigned char *)mmap(NULL, 2048, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

      if(buffer == (unsigned char*)0xffffffff) {

      perror("mmap");

      return -1;

      }

      if((buffer[1024] != ‘H’) && (buffer[1025] != ‘+’)) {

      fprintf(stderr, "%s: HFS+ signature not found — aborting.n", argv[0]);

      return -1;

      }

      unsigned long attributes = *(unsigned long *)(&buffer[1028]);

      attributes = bswap_32(attributes);

      printf("attributes = 0x%8.8lxn", attributes);

      if(!(attributes & 0x00002000)) {

      printf("kHFSVolumeJournaledBit not currently set in the volume attributes field.n");

      }

      attributes &= 0xffffdfff;

      attributes = bswap_32(attributes);

      *(unsigned long *)(&buffer[1028]) = attributes;

      buffer[1032] = ‘1’;

      buffer[1033] = ‘0’;

      buffer[1034] = ‘.’;

      buffer[1035] = ‘0’;

      buffer[1036] = 0;

      buffer[1037] = 0;

      buffer[1038] = 0;

      buffer[1039] = 0;

      printf("journal has been disabled.n");

      return 0;

      }[/code]

    3. Compiler le programme
      gcc disable.c
    4. Désactiver le journal
      ./a.out /dev/sda1
  7. Créer un user timemachine. Mémorisez le mot de passe que vous allez choisir il sera demandé sous Time Machine pour accéder au disque
    adduser timemachine
  8. Créer le point de montage de la partition
    mkdir /media/usbdrive/timemachine
  9. Modifier les droits du point de montage avec le user et le groupe créé à l’étape 7
    chown timemachine:timemachine /media/usbdrive/timemachine
  10. Monter la partition /dev/sda1 avec le user timemachine en lecture/écriture. Ajouter la ligne suivante dans /etc/fstab
/dev/sda1  /media/usbdrive/timemachine        hfsplus force,rw,uid=timemachine,gid=timemachine   0       0
  • Vous pouvez tester le bon fonctionnement du montage
    mount /dev/sda1

    La commande mount doit vous afficher la ligne suivante (à la suite des autres points de montage)

    /dev/sda1 on /media/usbdrive/timemachine type hfsplus (rw,relatime,umask=22,uid=1001,gid=1002,nls=utf8)
  • A ce stade, le disque est prêt. Il reste à le rendre disponible sur le réseau. Pour cela, on commence par configurer netatalk. Editer le fichier /usr/local/etc/afp.conf pour définir où se trouve le répertoire pour Time Machine
    [Global]
    
    
uam list = uams_guest.so, uams_dhx.so, uams_dhx2.so,
    
    [Time Machine Raspberry]
    
    path = /media/usbdrive/timemachine

    
    time machine = yes
  • Créer le fichier /etc/avahi/services/afpovertcp.service. Le Raspberry Pi va apparaitre avec l’icône d’un serveur Mac.
    <?xml version="1.0" standalone='no'?><!--*-nxml-*-->
    
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
    
    <service-group>
    
      <name replace-wildcards="yes">%h</name>
    
      <service>
    
        <type>_afpovertcp._tcp</type>
    
        <port>548</port>
    
      </service>
    
      <service>
    
        <type>_device-info._tcp</type>
    
        <port>548</port>
    
        <txt-record>model=Xserve</txt-record>
    
      </service>
    
    </service-group>
  • Relancer les services netatalk et avahi
    update-rc.d netatalk defaults
    
    service netatalk restart
    
    service avahi-daemon restart
  • Maintenant dans le finder, vous devez voir votre Raspberry Pi

    Le Raspberry Pi dans le Finder

    Le Raspberry Pi dans le Finder

  • Ouvrir les préférences Time Machine, choisir le disque

    Choix du disque sous Time Machine

    Choix du disque sous Time Machine

  • Saisir le user timemachine et son mot de passe

    Saisie du user et mot de passe pour Time Machine

    Saisie du user et mot de passe pour Time Machine

  • Et voilà, la sauvegarde est en cours !

    Sauvegarde Time Machine en cours

    Sauvegarde Time Machine en cours

Voilà. Une belle Time Capsule, certes sans le beau logo d’Apple mais pas au prix d’Apple non plus ! 😉

Vous aimez cet article ? Supportez-moi sur Patreon!

Vous aimerez aussi...