Utiliser un Raspberry Pi comme serveur.


Enfin ! Je l’avais commandé le jour de sa sortie en février, mais un peu trop tard. En effet, je me suis levé à 8h00 pour acheter le produit mis à la vente dès 7h00. Résultat ? Les 10 000 exemplaires (il me semble) étaient déjà partis. J’ai donc dû attendre la nouvelle production qui vient de se terminer : j’ai reçu le mien il y a deux semaines, soit en début juillet. Mieux vaut tard que jamais hein !

Il aura le rôle d’un petit serveur pour m’amuser à installer quelques services, apprendre des trucs. J’espère que sa puissance ne sera pas trop limitée, histoire d’avoir quelques programmes utilisables en pratique. On verra bien ça par la suite. Pour commencer, le rendre opérationnel semble être un bon point de départ.

Préparation de la carte mémoire.

La première chose à faire est déjà de mettre en place un système d’exploitation sur une carte mémoire qu’on prendra comme disque dur. J’ai choisi Debian. En effet, je pense qu’il est plus sûr de déployer un serveur sur cet OS. Mais j’ai l’impression qu’il y a beaucoup de bullshit d’également installés avec, ou du moins, des programmes inutiles pour mon utilisation (gdm & cie). Donc peut-être qu’Archlinux pourrait aussi être un bon choix. N’hésitez pas à me faire part de vos recommandations là-dessus. 😉

Debian donc ! Pour commencer, je vous invite à télécharger l’archive quivabien sur la page web prévue pour : http://www.raspberrypi.org/downloads. N’oubliez pas de vérifier si le cheksum concorde et que vous n’avez pas obtenu quelque chose de malsain.

[spydemon@Myrphak][~]% sha1sum debian6-19-04-2012.zip
1852df83a11ee7083ca0e5f3fb41f93ecc59b1c8  debian6-19-04-2012.zip

Ensuite, pour « installer » le système d’exploitation sur la carte SD, on va copier en dur l’image présente dans l’archive que vous avez téléchargée comme décrit sur le wiki : http://elinux.org/RPi_Easy_SD_Card_Setup

[spydemon@Myrphak][~]# unzip debian6-19-04-2012.zip
Archive:  debian6-19-04-2012.zip
   creating: debian6-19-04-2012/
  inflating: debian6-19-04-2012/debian6-19-04-2012.img.sha1  
  inflating: debian6-19-04-2012/debian6-19-04-2012.img  

[root@Myrphak spydemon]# dd bs=1M if=/home/spydemon/debian6-19-04-2012/debian6-19-04-2012.img of=/dev/sdb
1859+1 enregistrements lus
1859+1 enregistrements écrits
1950000000 octets (2,0 GB) copiés, 1029,61 s, 1,9 MB/s

Attention maintenant. Si vous êtes attentif, vous verrez qu’avec dd, nous n’avons écrit que 2Go de donnés sur la carte SD. Comme dd copie vraiment les octets en dur, on a forcément que mis en place un système de fichier sur ces deux gigas, rendant le reste de la mémoire inutilisable.

État de la carte mémoire après avoir copié l’image Debian dessus.

Deux possibilités s’offrent à nous : soit on créé une nouvelle partition sur l’espace devenu non formaté, sur laquelle on montera /usr ou /home, soit on augmente la taille de celle sur laquelle le système d’exploitation est déjà « installé ».

J’ai choisi la deuxième solution, car j’ai trouvé que les 2Go étaient trop peu que ça soit pour /usr (pour les programmes), pour /opt (les scripts perso) ou pour /home (donc les données)[1]. Et de toute façon, je ne pense pas perdre en sécurité, car même si je compte réinstaller un nouvel OS, donc recopier une image via dd, je corromprais certainement ces partitions ajoutées moi-même à cause de la violence de dd.

Pour augmenter la taille, je ne me suis pas vraiment compliqué la vie. J’ai ouvert gparted, et j’ai tout modifié à la main. Ça ne me paraît pas très propre, mais ça fonctionne plutôt bien.

État de la carte mémoire après modification.

Attention. N’oubliez pas de recréer une partition swap derrière la partition ext4 rallongée.

Déploiement du Raspi.

Le Raspberry Pi et sa carte SD.

La première étape (et la meilleure :D) est bien sûr, de sortir le petit de son mignon emballage. Si vous l’avez commandé chez RS, on commence par ouvrir la boite en carton dans lequel il se repose tranquillement. On arrache délicatement les autocollants de garantie pour permettre l’ouverture, puis retirons la mousse du dessus pour protéger des chocs.

Après cela, on aperçoit enfin la bête à travers le sachet antiélectricité-statique dans lequel il dort.
Le sortir pour y insérer la carte SD, le brancher sur le secteur et le connecter à la télé via le port HDMI peut être une bonne idée. Notons que dans un premier temps, il n’est pas nécessaire de le relier à Internet, car ssh est déjà installé, mais n’est pas un processus lancé au démarrage. La première étape sera donc de résoudre ce problème pour se passer de la télé. Ah et pour éviter de perdre 20 minutes comme moi à trouver l’emplacement de la carte mémoire : regardez sous le raspi…
Une fois tout en place vous devriez le voir booter pendant 2 bonnes minutes. Enfin, on vous invite à vous loguer sur la machine 🙂 . Connectez-vous avec le compte « pi », comme indiqué sur la page de téléchargement de l’image et nous allons pouvoir commencer les choses sérieuses.

On va a présent toucher à tout ce qui démarre automatiquement les démons au boot de Debian. Pour ça, on débutera par se renseigner un peu pour savoir comment Debian gère tout ça : la distribution utilise encore le système V. Je vous invite à lire la page de présentation des runlevels sous Debian.
Je vous propose à présent de désactiver certains démons dont je n’en ai pas l’utilité. N’oublions pas que sur un serveur, il faut uniquement faire tourner ce qui est nécessaire. Pas de superflu ! D’après le précédent site, on apprend que nous pouvons nous servir du script update-rc.d pour mettre à jour les processus au démarrage. On va donc l’utiliser pour désactiver portmap et nft :

pi@raspberrypi:~$ sudo update-rc.d portmap stop
update-rc.d: using dependency based boot sequencing
Use of uninitialized value in string eq at /usr/sbin/update-rc.d line 500.
update-rc.d: warning: portmap start runlevel arguments (none) do not match LSB Default-Start values (S 2 3 4 5)
update-rc.d: warning: portmap stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)
insserv: warning: current start runlevel(s) (empty) of script `portmap' overwrites defaults (2 3 4 5 S).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6 S) of script `portmap' overwrites defaults (0 1 6).

pi@raspberrypi:~$ sudo update-rc.d nfs-common stop
update-rc.d: using dependency based boot sequencing
Use of uninitialized value in string eq at /usr/sbin/update-rc.d line 5c00.
update-rc.d: warning: nfs-common start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5 S)
update-rc.d: warning: nfs-common stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)
insserv: warning: current start runlevel(s) (empty) of script `nfs-common' overwrites defaults (2 3 4 5 S).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6 S) of script `nfs-common' overwrites defaults (0 1 6).

Et enfin, on configure OpenSSH pour qu’il s’exécute au boot :

pi@raspberrypi:~$ sudo update-rc.d -f ssh start
update-rc.d: using dependency based boot sequencing
Use of uninitialized value in string eq at /usr/sbin/update-rc.d line 500.
update-rc.d: warning: ssh start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
insserv: warning: current start runlevel(s) (2) of script `ssh' overwrites defaults (2 3 4 5).

Configurer correctement le réseau.

Si vous utilisez votre raspi comme server@home, il sera très probablement branché sur votre machinBox. L’ennui c’est que celle-ci fonctionne à l’aide de DHCP pour attribuer les IP locales facilement à tous les utilisateurs, et ça, c’est pas très pratique pour la configuration du NAT statique. En effet, si quelqu’un de l’extérieur veut par exemple accéder à votre serveur Web, il faut que le NAT sache vers quelle IP locale les paquets du port 80 doivent être routés. Or, si à chaque nouvelle connexion votre IP change, ça va être la galère, voir même rendre la chose impossible.

On ne peut évidemment pas désactiver DHCP (à moins que vous vous sentez de force à apprendre à toute votre famille comment attribuer des IP statiquement ^^). Non le plus simple serait d’allouer une IP statiquement uniquement à notre raspi, donc d’en utiliser une qui soie hors de la gestion de DHCP. Vous pouvez trouver cette information sur le site web interne de votre routeur. Ma Livebox par exemple, a DHCP de configuré pour gérer les IP 192.168.1.10 à 192.196.1.50, mais pas les autres.

Je vous propose donc de dire à votre Raspberry de se connecter automatiquement avec l’IP 192.168.1.52. Pour ce faire, je vous invite dans un premier temps à lire le chapitre cinq de la documentation sur la configuration du réseau avec Debian. On y apprend qu’il suffit de modifier le fichier /etc/network/interfaces. Le nôtre aura cette tête :

auto lo
auto eth0

iface lo inet loopback

iface eth0 inet static
 address 192.168.1.52
 netmask 255.255.255.0
 gateway 192.168.1.1

L’interface “lo” concerne la boucle locale. Elle devrait déjà être configurée de la sorte dans votre fichier. Je n’y touche pas et me concentre uniquement sur eth0. La deuxième ligne “auto eth0” signifie que l’interface eth0 doit être activée au démarrage de l’ordinateur. En effet, c’est bien plus pratique si la seule façon d’avoir accès à l’ordinateur est de passer via SSH, donc, via le réseau ^^ La configuration en détail de l’interface se passe dans les lignes de fin du fichier. Comme décrite dans la doc, la 6ème définit les paramètres de notre interface comme étant un réseau IP à attribution statique.  Les trois dernières correspondent donc aux caractéristiques manuelles que la machine devra utiliser. Respectivement, son adresse IP, le masque du réseau dans lequel elle se situe et enfin, l’adresse de la passerelle pour aller sur Internet !

Activation du swap.

Encore un truc pour finir, j’ai remarqué à l’aide de la commande top que ma partition swap n’était pas montée par défaut. Je ne sais pas si c’est à cause du fait d’avoir agrandi la partition ext4, du coup d’avoir détruit l’ancien swap qui gênait et d’avoir mis un nouveau à la fin de la carte ou si c’est réellement « normal ». Quoi qu’il en soit, le problème peut être vite résolu, car il suffit d’aller dans le fichier /etc/fstab et de des-commenter la deuxième ligne :

#vi /etc/fstab
/dev/mmcblk0p1 none swap sw 0 0

Si vous voulez directement avoir accès au swap sans rebooter, utilisez la commande swapon :

#swapon /dev/mmcblk0p1

La boite au Raspi !

Eh oui, un truc qu’on oubli souvent avec les serveurs tellement que l’on n’a pas l’habitude de les voir, c’est qu’eux aussi prennent un (petit) espace physique quelque part. Il est quand même bien de les protéger un minimum :p
Je vous propose de créer son boiter avec le carton de transport dans lequel il était livré.

Et voilà ! Les choses de base sont maintenant terminées, et vous êtes près pour utiliser pleinement les capacités de votre appareil comme (petit)serveur@home 🙂


Note :


8 réponses à “Utiliser un Raspberry Pi comme serveur.”

  1. Salut Gamoth 🙂

    C’est clair qu’un dédié c’est bien mieux niveau perf, mais c’est plus cher aussi…
    Moi le but du Raspi est surtout éducatif, et comme je m’intéresse aussi à l’électronique, je lui trouverai certainement une autre utilité le jour ou moi aussi, je prendrai un dédié :p

    S’toi le moche, elle est très bien ma boite ^^

  2. Moi, j’aime bien ton boîtier de protection …

    Sinon, je la commande a la rentrée , je compte ajouter un petit FPGA dessus, pour augmenter le nombre d’entrée sortie …

    • Disons qu’on peut difficilement faire moins cher pour le boitier. :p

      Pour le FPGA, c’est vrais que ça doit être intéressant. Je comptes me mettre à l’électronique dès que j’ai un peu plus le temps… J’ai pensé à essayer de connecter le raspi à une cafetière et à Twitter pour lancer à la distance la création d’un nouveau café 😀 Ambitieux, certes, mais ça à l’air fun ! 🙂

      • Spydemon, au niveau électronique c’est assez simple, un transistor , un relais , sur les GPIO , et c’est parti .

        Si tu as besoin / envie n’hésite pas a prendre mon mail, faire le schéma ça me prendra 5 minutes, j’achète la raspberry après les rattrapages, ça peut être une bonne chose de bosser a plusieurs dessus.

        A+
        Matthieu .

        • Merci de ton aide ! 😉
          Oui, je vais déjà commencer par faire un tour sur ton site. À première vue, il ne me parait pas trop mal. 🙂

          Après la difficulté en élec, tout dépend ce que l’on vise ! Pour commencer, j’avais pensé lire le livre Make Electronics de O’Reily que j’ai toujours pas fini, et de faire quelques montages qu’ils présentent dans ce bouquin.

          L’électronique avec le Raspi ne viendra que plus tard je pense. Pour le moment, c’est mon serveur. 😉

          • Ok, bonne lecture, par contre , je te conseil d’utiliser ce livre comme une aide, tu décide , je vais faire ça , comment je peut faire? Et là tu t’inspire de ton livre. et tu dimensionne bien comme il faut …

            Il existe des composant sympa qui enregistre des sons, double ta tension d’alimentation… Ces composants tu ne les trouveras pas dans ce livre , il faut chercher chez les fondeurs .

            Sinon petite question tu fais des études en informatique ?

          • Oui, ce livre et une aide, mais le lire avant tout c’est bien quand même pour comprendre comment « penser électronique ». Comprendre le fonctionnement général pour définir les besoins, et les méthodes de conception. 🙂

            Oui, j’ai fais un DUT Informatique. Maintenant, je fais un Bachelor informatique au Danemark. :p