Introduction `a la plateforme Raspberry Pi — Partie I

Transcription

Introduction `a la plateforme Raspberry Pi — Partie I
Introduction à la plateforme Raspberry Pi
— Partie I —
B. Q UOITIN, D. H AUWEELE et G. H UYSMANS
Faculté des Sciences, Université de Mons
26 novembre 2014
1
Objectifs de la séance
L’objectif de cette séance est la découverte du système d’exploitation Linux sur la plateforme Raspberry
Pi. La plateforme sera utilisée sans écran ( headless ).
La séance couvrira des éléments tels que la gestion des utilisateurs, la gestion des fichiers, l’installation
de nouveaux paquets logiciels ainsi que quelques éléments d’administration réseau. A la fin de la séance,
les étudiants devraient être capables d’installer un serveur web qui servira à exécuter des commandes shell
à distance.
2
Console série
La première étape de cette séance consiste à obtenir une console série sur la platine Raspberry Pi au
travers d’un adaptateur USB/série. Cette console permettra d’effectuer la configuration initiale du système.
+
Attention ! une connexion incorrecte peut endommager la platine. Les manipulations qui suivent
doivent être réalisées lorsque la platine est hors tension. Nous consulter en cas de doute.
L’adaptateur USB/série doit être relié d’une part à la platine Raspberry Pi (connecteur P1) et d’autre
part (côté USB) à l’ordinateur hôte. La Table 1 indique comment les connexions doivent être effectuées. La
connexion d’un adaptateur est illustrée à la Figure 1. Afin de faire fonctionner l’adaptateur sur l’ordinateur
hôte, il peut être nécessaire d’installer un gestionnaire de périphérique sous Windows ou sous Mac OS X.
F IGURE 1 – Raccordement d’une platine Raspberry Pi (modèle A ou B) et d’un adaptateur USB/série.
Afin d’envoyer des commandes à la platine Raspberry Pi au travers de l’adaptateur USB/série, on utilise
un logiciel appelé émulateur de terminal. Sous Linux et Mac OS X, il est recommandé d’utiliser screen.
1
Adapteur USB/série
GND
RXD
TXD
Raspberry Pi
GND, pin 6
RXD, pin 10
TXD, pin 8
TABLE 1 – Connexions entre adaptateur USB/série et carte Raspberry Pi.
Sous Windows, il est recommandé d’utiliser TeraTerm. Il est nécessaire de spécifier certains paramètres de
la liaison série à l’émulateur de terminal. Ces paramètres sont donnés à la Table 2.
Paramètre
Débit (baudrate)
Bits de données
Bit(s) de stop
Bit de parité
Contrôle de flux
Valeur
115200 bauds
8
1
aucun
aucun
TABLE 2 – Paramètres de la liaison série.
Sous Linux et Mac OS X, screen est invoqué dans un terminal comme illustré ci-dessous. Les seuls
paramètres nécessaires sont le nom du périphérique et le débit. L’adaptateur sera désigné par /dev/ttyUSBn
sous Linux et par /dev/tty.SLAB USBtoUARTn sous Mac OS X. Pour quitter screen, entrez la
séquence Ctrl-a k .
bob@hostpc:˜$ screen /dev/ttyUSB0 115200
3
Mise sous tension et ligne de commande
Afin de démarrer la platine Raspberry Pi, brancher une alimentation USB au connecteur USB micro
B nommé S1 (”Power”). La LED rouge PWR s’allume de façon continue. La LED verte ACT s’allume de
façon intermittente, au rythme des accès à la carte SD. Le système démarre dès la mise sous tension et les
messages de démarrage de Linux s’affichent dans l’émulateur de terminal.
+
Attention ! Avant de mettre la platine hors tension, il est nécessaire d’arrêter le système d’exploitation en utilisant la commande sudo poweroff ! ! !
Lorsque le démarrage du système est terminé, l’utilisateur est invité à s’authentifier. Un utilisateur
nommé pi a été prédéfini. Son mot de passe est raspberry. Attention, le login et le mot de passe sont
sensibles à la casse !
Une fois authentifié, une session utilisateur est créée et une invite de commande similaire à celle
illustrée ci-dessous) est affichée . Il est alors possible d’adresser des commandes au système afin de lancer
des programmes, changer la configuration, etc. Les commandes sont interpretées par un programme spécial
appelé shell. Il existe plusieurs shells différents, mais celui configuré ici est appelé bash (Bourne again
shell).
pi@raspberrypi:˜$
+
La plupart des commandes de Linux sont documentées via des pages de manuel (man pages).
Pour consulter la page de manuel d’une commande, utilisez man nom commande.
Il est possible de consulter la liste des messages de démarrage ainsi que ceux qui s’y seraient éventuellement ajoutés avec la commande dmesg.
2
pi@raspberrypi:˜$ dmesg
Afin d’afficher les messages page par page, il est possible de rediriger la sortie de dmesg dans un
programme pager tel que more ou less. Dans l’exemple ci-dessous, le caractère | indique au shell qu’il
faut rediriger la sortie de dmesg vers le programme more. Il suffit alors de presser la touche espace
ou la touche entrée pour avancer d’une page ou d’une ligne dans les messages. La touche q termine le
pager. Avec less, il est aussi possible de remonter dans les messages (flêche haut ou page up) ainsi que
d’effectuer des recherches (en pressant / suivie de la recherche).
pi@raspberrypi:˜$ dmesg | more
A ce stade, il est possible d’utiliser les commandes reprises à la Table 3 pour découvrir certaines caractéristiques du système.
Commande
cat
hexdump
more, less
grep
nano, vi/vim, emacs
uname
uptime
free
lsusb
date
Description
Affiche le contenu d’un fichier texte.
Affiche le contenu d’un fichier binaire.
Pagers : affichent un fichier ou la sortie d’une commande page
par page.
Extrait les lignes d’un fichier ou de la sortie d’une commande
qui correspondent à un pattern.
Editeurs de texte.
Donne le nom du système d’exploitation. L’option -a fournit
des détails précieux tels que la version du noyau.
Détermine le temps écoulé depuis le dernier démarrage ainsi que
la charge moyenne.
Détermine la mémoire disponible. L’option -h permet d’afficher
les volumes de mémoire de façon plus lisible.
Liste les périphériques USB.
Fournit le jour et la date du système 1 .
TABLE 3 – Commandes donnant des informations sur le système.
4
Configuration initiale
Avant de continuer la séance, un certain nombre de paramètres du système peuvent être changés. Ces
changements sont facilités par l’utilitaire raspi-config mais ils peuvent également être réalisés par
d’autres outils 2 . La liste des paramètres à configurer pour cette initiation est limitée au mot de passe de
l’utilisateur et à l’activation du serveur SSH.
Pour lancer l’utilitaire raspi-config, utiliser la commande suivante. La commande raspi-config
nécessite des privilèges d’administrateur du système. La commande sudo permet à certains utilisateurs
d’exécuter des commandes privilégiées.
pi@raspberrypi:˜$ sudo raspi-config
Password:
Pour changer le mot de passe de l’utilisateur pi, aller dans Change User Passwd. Pour autoriser le
serveur SSH (Secure SHell), aller dans Advanced Options, puis SSH et sélectionner Enable.
1. Le Raspberry Pi n’a pas d’horloge temps réel (RTC) mais peut synchroniser son horloge via le réseau avec le protocole NTP.
Il est nécessaire de configurer la timezone du système.
2. Le mot de passe d’un utilisateur peut être changé par la suite via l’utilitaire passwd. Le serveur ssh peut être activé/désactivé
via la commande update-rc.d ssh defaults ou update-rc.d ssh disable.
3
5
Gestion des utilisateurs
Chaque utilisateur porte un nom mais également un numéro d’utilisateur (uid), un numéro de groupe
(gid), un répertoire personnel (home) et un shell par défaut. Les utilisateurs sont définis dans le fichier
/etc/passwd. Ce fichier contient une ligne par utilisateur 3 . L’utilisateur nommé root en particulier a
tous les droits. Il est possible de consulter le contenu 4 de ce fichier avec un programme pager tel que more
ou less.
pi@raspberrypi:˜$ more /etc/passwd
En utilisant l’utilitaire grep, il est possible d’extraire les lignes du fichier /etc/passwd qui concernent
l’utilisateur pi. Le paramètre ˆpi de grep est une expression régulière qui demande d’extraire exclusivement les lignes qui commencent par pi. La seule ligne qui est fournie correspond à l’utilisateur pi.
Y figurent les numéros d’utilisateur (1000) et de groupe (1000), le répertoire personnel (/home/pi) et le
shell (/bin/bash).
pi@raspberrypi:˜$ grep ˆpi /etc/passwd
pi:x:1000:1000:,,,:/home/pi:/bin/bash
Chaque utilisateur peut également faire partie d’autres groupes d’utilisateurs. Chaque groupe d’utilisateurs est également identifié par un numéro de groupe (gid). Les groupes sont définis dans /etc/group.
Il est possible de déterminer les utilisateurs d’un groupe en lisant ce fichier. Pour déterminer les groupes
auxquels un utilisateur appartient, il existe un utilitaire spécifique : groups. Le résultat de la commande
groups ci-dessous indique notamment que pi appartient au groupe sudo. Ce sont les membres de ce
groupe qui peuvent lancer des commandes privilégiées via l’utilitaire sudo.
pi@raspberrypi:˜$ groups
pi adm dialout cdrom sudo audio video plugdev games users netdev input
spi gpio
La Table 4 liste des commandes utiles pour la gestion des utilisateurs. Pour chaque commande un court
descriptif est fourni. Il est nécessaire de consulter la man page des commandes pour obtenir plus de détails.
La plupart de ces commandes nécessitent des droits d’administrateur et peuvent être invoquées avec la
commande sudo. La commande passwd peut être utilisée par un utilisateur non privilégié pour changer
son propre mot de passe.
Commande
passwd
adduser
deluser
usermod
addgroup
delgroup
id
groups
last
lastb
who
Description
Change le mot de passe d’un utilisateur.
Ajoute un utilisateur ou ajouter un utilisateur à un groupe.
Supprime un utilisateur.
Modifie un utilisateur.
Ajoute un groupe.
Supprime un groupe.
Affiche l’uid et le gid d’un utilisateur.
Affiche les groupes auxquels appartient un utilisateur.
Affiche la liste des derniers utilisateurs qui se sont connectés.
Affiche la liste des derniers utilisateurs qui ont échoué à se
connecter.
Affiche la liste des utilisateurs actuellement connectés.
TABLE 4 – Commandes utiles pour la gestion des utilisateurs.
3. Dans les versions antérieures d’UNIX, les mots de passe des utilisateurs étaient stockés dans le fichier /etc/passwd. Aujourd’hui, ceux-ci sont stockés dans le fichier /etc/shadow qui n’est lisible que par l’administrateur du système.
4. Un grand nombre d’utilisateurs sont décrits dans /etc/passwd, cependant tous ne concernent pas des utilisateurs réels, mais
des utilisateurs dédiés à l’exécution de certains programmes.
4
6
Fichiers, répertoires et permissions
Il est possible de lister les fichiers du répertoire courant en utilisant la commande ls. Lorsqu’un utilisateur ouvre une nouvelle session, il est automatiquement placé dans son répertoire personnel. Dans le cas
de l’utilisateur pi, ce répertoire est /home/pi. La commande ls liste les fichiers de ce répertoire. La
commande ls peut prendre un grand nombre de paramètres qu’il est utile de connaı̂tre.
pi@raspberrypi:˜$ ls
pistore.desktop
L’option -a demande d’afficher tous les fichiers, y compris ceux qui sont cachés. La commande révèle
deux fichiers cachés dont le nom commence par un point (en rouge) ainsi que deux répertoires (en bleu) :
le répertoire . (point) désigne le répertoire courant tandis que le répertoire .. (deux points) désigne le
répertoire parent.
pi@raspberrypi:˜$ ls -a
. .. .bash_logout .bashrc
pistore.desktop
.profile
Il est possible de faire référence aux fichiers d’un autre répertoire, en spécifiant le chemin de ce
répertoire. Un chemin est une suite de noms de répertoires séparés par le caractère / . On distingue
les chemins absolus qui commencent à la racine (p.ex. /home/pi) des chemins relatifs qui commencent
au répertoire courant (p.ex. pi).
Une autre option utile de ls est l’option -l qui permet d’obtenir plus d’information sur les fichiers
listés. Par défaut, les informations listées sont le type du fichier, les droits d’accès, le nombre de hard links,
le propriétaire (en rouge ci-dessous), le groupe (en bleu), la taille en octets (en vert), les date et heure de
dernière modification et le nom. L’exemple suivant montre comment ls permet d’obtenir cette information
pour des fichiers particuliers, en fournissant leur chemin complet 5 .
pi@raspberrypi:˜$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1275 Nov 19 16:02 /etc/passwd
pi@raspberrypi:˜$ ls -ld /etc
drwxr-xr-x 98 root root 4096 Nov 19 16:02 /etc
Le premier caractère indique le type du fichier : - indique un fichier normal, d un répertoire et l un lien.
D’autres types de fichiers sont possibles. Les 9 caractères suivants désignent les droits d’accès. La Table 5
montre sur des exemples comment ces droits d’accès sont interprétés. Dans le cas d’un fichier, la lettre
r indique le droit de lecture, w le droit d’écriture et x le droit d’exécution. Dans le cas d’un répertoire,
r indique le droit d’énumérer le contenu, w le droit de renommer ou supprimer le contenu et x le droit
d’entrer dans le répertoire.
Fichier
/etc/passwd
/etc
Type
d
Propriétaire
(owner)
rwrwx
Groupe
(group)
r-r-x
Autres
(others)
r-r-x
TABLE 5 – Type et droits d’accès de fichiers.
Ainsi, le fichier /etc/passwd peut être lu par tout le monde, mais seul le propriétaire (root) peut
le modifier. De même, il est possible à tous les utilisateurs de lire et entrer dans le répertoire /etc mais
seul son propriétaire (root) peut le modifier.
La Table 6 liste des commandes utiles pour la gestion des fichiers et des répertoires.
L’exemple suivant illustre la manipulation de répertoires. L’utilisateur se trouve initialement dans le
répertoire /home/pi, ce qu’il vérifie avec la commande pwd. Il crée un répertoire work avec la commande mkdir, se déplace dans ce répertoire avec cd et y édite un fichier. L’utilisateur retourne au
5. L’option -d permet d’obtenir le listing d’un répertoire et non celui de son contenu.
5
Commande
mv
cp
rm
chown
chmod
umask
cd
mkdir
rmdir
pwd
ln -s
find
Description
Déplace des fichiers et/ou un répertoires.
Copie des fichiers et/ou répertoires.
Supprime des fichiers et/ou répertoires.
Change le propriétaire et/ou le groupe d’un fichier ou d’un
répertoire.
Change les droits d’accès d’un fichier ou d’un répertoire.
Change les droits assignés aux nouveaux fichiers et répertoires.
Change le répertoire courant. En particulier, cd - permet de
revenir au répertoire précédent et cd ˜ permet d’aller vers le
répertoire personnel.
Crée un répertoire.
Supprime un répertoire.
Détermine le répertoire courant.
Crée un lien symbolique vers un fichier ou un répertoire.
Recherche des fichiers.
TABLE 6 – Commandes utiles pour la gestion des fichiers et répertoires.
répertoire précédent avec cd - puis tente de supprimer le répertoire work. Le système refuse car le
répertoire est non vide. L’utilisateur supprime le répertoire et tout son contenu avec la commande rm munie des options -R (récursif) et -f (force).
pi@raspberrypi:˜$ pwd
/home/pi
pi@raspberrypi:˜$ mkdir work
pi@raspberrypi:˜$ cd work
pi@raspberrypi:˜$ pwd
/home/pi/work
pi@raspberrypi:˜$ nano memoire.tex
pi@raspberrypi:˜$ cd /home/pi
pi@raspberrypi:˜$ rmdir work
rmdir: failed to remove ’work’: Directory not empty
pi@raspberrypi:˜$ rm -Rf work
pi@raspberrypi:˜$
+
7
Attention ! En ligne de commande, aucune confirmation n’est demandée avant de modifier,
écraser ou supprimer un fichier. Réfléchissez à 2 fois avant de presser Enter .
Configuration réseau
+
Attention ! Le réseau informatique est une ressource partagée. Une mauvaise manipulation
locale peut causer des dommages tels qu’une interruption de connectivité pour d’autres utilisateurs. En particulier, ne configurez pas d’adresse statique sur le réseau de l’université.
Le système est configuré pour obtenir une adresse IP automatiquement via le protocole DHCP (Dynamic Host Control Protocol). Connecter le câble Ethernet à la platine Raspberry Pi. Après quelques secondes, le système devrait avoir reçu une adresse IP. Ceci peut être vérifié avec l’utilitaire ifconfig.
L’état de l’interface Ethernet est affiché, comme illustré ci-dessous.
6
pi@raspberrypi:˜$ ifconfig eth0
eth0
Link encap:Ethernet HWaddr b8:27:eb:81:6b:a3
inet addr:192.168.1.137 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Il est désormais possible de tester à partir de l’ordinateur hôte si la carte Raspberry Pi est accessible.
Pour cela, utiliser l’utilitaire ping. L’adresse IP donnée dans l’exemple doit être remplacée par celle
obtenue via ifconfig ci-dessus. Appuyer sur Ctrl-C pour arrêter ping.
pi@raspberrypi:˜$ ping 192.168.1.137
PING 192.168.1.137: 56 data bytes
64 bytes from 192.168.1.137: icmp\_seq=0 ttl=64 time=11.910 ms
64 bytes from 192.168.1.137: icmp\_seq=1 ttl=64 time=9.120 ms
(Ctrl-C)
La configuration des interfaces réseau est spécifiée dans le fichier /etc/network/interfaces.
La Table 7 liste un ensemble de commandes utiles pour la configuration et le diagnostic réseau.
Commande
ifconfig
route
ip
netstat
dig
arp
iwconfig
iptables
ip6tables
ufw
tcpdump, tshark
ping
traceroute
iftop
nmap
Description
Affiche ou modifie la configuration des interfaces réseau.
Affiche ou modifie la table de routage.
Outil versatile de configuration IP.
Affiche des informations sur les connexions réseaux, les tables
de routage, etc.
Interroge le système DNS.
Affiche la table ARP.
Affiche ou modifie la configuration des interfaces réseau sans fil.
Affiche ou modifie les règles de firewall.
Equivalent de iptables pour IPv6.
Uncomplicated FireWall : facilite la configuration du firewall.
Capture les paquets réseau.
Teste la joignabilité d’un hôte.
Trace le chemin jusqu’à un hôte.
Affiche l’utilisation de la bande-passante d’une interface.
Scanneur de ports.
TABLE 7 – Commandes utiles pour la configuration et le diagnostic réseau.
8
Démarrer une session SSH
A partir de l’ordinateur hôte, ouvrez une connexion SSH vers l’adresse IP qui vous a été rapportée
par ifconfig. Pour ouvrir une connexion SSH sous Linux et Mac OS X, ouvrez un terminal et tapez
la commande suivante en prenant bien soin de remplacer l’adresse de l’exemple par l’adresse obtenue par
votre propre platine Raspberry Pi en Section 7. Sous Windows, il est recommandé d’utiliser l’utilitaire
putty.
bob@hostpc:˜$ ssh [email protected]
7
+
9
La plateforme Raspberry Pi est destinée à être connectée à un réseau. Il est primordial de
veiller à sa sécurité en (1) remplaçant les mots de passe par défaut des utilisateurs par des
mots de passe forts (utiliser p.ex. makepasswd) et (2) prêter attention aux services réseau
actifs et configurer un firewall (utiliser p.ex. ufw).
Gestion de packages
L’installation de logiciels sous Linux passe généralement par un système de gestion de packages. Celuici maintient la liste des packages disponibles et leurs dépendances. Ainsi, si un package A dépend d’un
autre package B, l’installation de A ne sera possible que si B est installé préalablement. De même, il ne
sera pas possible de désinstaller un package dont d’autres packages dépendent.
La distribution Linux Raspbian installée sur la carte Raspberry Pi est dérivée d’une distribution appelée
Debian. Cette dernière utilise un gestionnaire de packages nommé APT (Advanced Package Tool).
La Table 8 liste les commandes utiles pour la gestion de packages. Les commandes utilisées le plus
fréquemment sont apt-get install pour installer un nouveau package, apt-cache search pour
rechercher un package, ainsi que apt-get update pour maintenir la liste des packages à jour. La plupart des commandes apt- supportent l’option --dry-run qui permet de vérifier ce que la commande
fait sans apporter aucune modification au système.
Commande
apt-cache search P AT T ERN
apt-cache show P KG N AM E
apt-cache depends P KG N AM E
apt-cache rdepends P KG N AM E
apt-get install
apt-get remove
apt-get purge
apt-get clean
apt-get autoclean
apt-get autoremove
apt-get update
apt-get upgrade
dpkg -L P KG N AM E
dpkg --search P AT T ERN
dpkg-query -l P AT T ERN
aptitude
Description
Liste les packages qui contiennent le pattern dans leur nom ou
leur description. Utiliser l’option --names-only pour restreindre la recherche aux noms de packages.
Affiche des détails concernant un package.
Liste les packages dont dépend le package fourni.
Liste les packages qui dépendent du package fourni.
Installe un package et ses dépendances.
Supprime un package.
Supprime un package (y compris ses fichiers de configuration).
Nettoie le système des fichiers téléchargés par apt. Utile pour
libérer de l’espace.
Variante de apt-get clean.
Variante de apt-get clean.
Met à jour la liste des packages disponibles à partir des sources
(/etc/apt/sources.list).
Met à jour les packages installés.
Liste les fichiers installés par un package.
Recherche un fichier parmi les packages installés.
Liste les packages qui correspondent au pattern fourni.
Interface de haut-niveau au gestionnaire de package APT.
TABLE 8 – Commandes utiles pour la gestion de packages.
10
Installation d’un serveur web
L’objectif de cette section est d’installer un serveur web (Apache) sur la carte Raspberry Pi. Il suffit
pour cela d’installer le package apache2.
Une fois le package apache2 installé, le serveur doit être immédiatement opérationnel. La configuration d’apache est effectuée au travers de plusieurs fichiers situés dans le répertoire /etc/apache2. Le
fichier apache2.conf est le fichier de configuration principal. Il fait référence à d’autres fichiers situés
8
dans les sous-répertoires conf.d, mods-enabled (options supplémentaires) et sites-enabled
(liste des sites configurés).
Afin de tester le serveur, ouvrir un navigateur sur l’ordinateur hôte et pointer vers l’adresse de la carte
Raspberry Pi (voir Section 7). Une page web avec le message It works ! devrait s’afficher. La configuration de ce site est située dans /etc/apache2/sites-enabled/000-default. L’emplacement
des fichiers qui constituent ce site est spécifié par les éléments DocumentRoot et Directory. Par défaut,
cet emplacement est dans /var/www. Il est possible d’y ajouter des fichiers et/ou remplacer les fichiers
existants afin de modifier le contenu du site web.
La documentation du serveur Apache 2 peut être trouvée en ligne à l’adresse http://httpd.
apache.org/docs/2.2/. Le serveur Apache génère des logs qui peuvent être très utiles pour déterminer
l’origine d’un problème de configuration. Le fichier /var/log/apache2/access.log liste les tentatives d’accès à des fichiers inconnus ou interdits. Le fichier /var/log/apache2/error.log liste
les erreurs qui se produisent lors de l’accès aux pages.
10.1
Pages dynamiques avec PHP
Cette sous-section propose d’installer, configurer et tester PHP, un langage de programmation simple
très fréquemment utilisé pour générer dynamiquement le contenu de pages web. Le serveur Apache est
prévu pour fonctionner en tandem avec PHP.
La première étape consiste à installer le package php5. Le package libapache2-mod-php5 qui
permet l’intégration à Apache est également installé automatiquement. Le serveur Apache est redémarré
automatiquement par APT afin de rendre le module PHP opérationnel.
Pour tester PHP, il suffit de créer un fichier PHP qui sera placé dans l’arborescence de fichiers utilisée
par Apache, par exemple sous /var/www ou dans un répertoire utilsateur sous ˜/public html. Le
fichier doit avoir l’extension .php afin qu’Apache le donne à PHP pour générer la page web demandée.
Le fichier index.php donné en exemple ci-dessous génère une page HTML qui contient l’heure sur le
serveur. Les tags <?php et ?> délimitent la partie du fichier qui est interpretée par PHP. Il peut y avoir
plusieurs de ces sections.
<html>
<head>
<title>Raspberry Pi PHP test page</title>
</head>
<body>
Heure serveur :
<?php
printf date("H:i");
?>
</body>
</html>
Attention, la configuration par défaut d’Apache désactive l’exécution de scripts PHP pour les répertoires
utilisateurs (i.e. dans ˜/public html. Il est nécessaire de changer le ficher php5.conf dans le répertoire
/etc/apache2/mods-enabled : mettre en commentaire la fin du fichier qui se trouve entre les tags
<IfModule> et </IfModule>.
Une fonction très utile d’Apache pour une application avec le Raspberry Pi est shell exec. Cette
fonction permet d’exécuter une commande sur le Raspberry Pi, à distance, via une page web. Le résultat de
la commande peut être récupéré, éventuellement traité, puis retourné dans la page web générée. En guise
d’exercice, écrire une page PHP qui retourne le résultat de la commande free -k. L’extrait ci-dessous
montre comment utiliser la fonction shell exec.
<?php
$result= shell_exec("ls -lR /home/pi");
$array= explode("\n", $result);
for ($i= 0; $i < count($array); $i++) {
9
print htmlentities($array[$i]);
print "<br>";
}
?>
La documentation du langage PHP peut être trouvée en ligne à l’adresse http://php.net/docs.
php. En cas d’erreur de programmation en PHP, il est utile de consulter le fichier de log d’Apache
/var/log/apache2/error.log. Par exemple, la commande suivante affiche en permanence la fin
du fichier de log et se met à jour lorsque de nouveaux messages de log sont ajoutés. Il peut être utile
d’ouvrir une seconde session SSH dans laquelle s’exécute cette commande.
pi@raspberry:˜$ tail -f /var/log/apache2/error.log
[Tue Nov 25 13:25:19 2014] [error] [client 192.168.1.137]
PHP Fatal error: Call to undefined function shall_exec()
in /home/pi/public_html/index.php on line 11
11
11.1
Pour ceux qui veulent aller plus loin...
Multicast DNS
La configuration réseau actuelle n’est pas pratique car elle nécessite une connexion préalable à la plateforme Raspberry Pi via la console série afin d’en déterminer l’adresse IP. Cette section s’intéresse à la
configuration de mDNS (multicast DNS) afin que la correspondance nom de la machine (hostname) et
adresse IP soit transmise automatiquement aux ordinateurs présents sur le même réseau local.
L’utilisation de mDNS nécessite d’avoir préalablement changé le nom d’hôte de la platine Raspberry Pi. Cette section fait l’hypothèse que le nom d’hôte utilisé est lonely looking pi. Le changement du nom d’hôte peut être effectué avec raspi-config (voir Section 4) ou en modifiant le fichier
/etc/hostname.
Sous Linux, le protocole mDNS est implémenté par le service avahi-daemon. Il est nécessaire de
l’installer et le configurer.
pi@raspberrypi:˜$ sudo apt-get install avahi-daemon
pi@raspberrypi:˜$ sudo service avahi-daemon restart
Restarting Avahi mDNS/DNS-SD Daemon: avahi-daemon.
pi@raspberrypi:˜$
Il est ensuite possible de joindre la platine Raspberry Pi en spécifiant son nom, comme illustré cidessous avec ping. Cela devrait également fonctionner avec ssh et/ou HTTP (web).
bob@hostpc:˜$ ping lonely looking pi.local
Note : sous Windows, il est possible que la résolution de noms avec mDNS ne fonctionne pas immédiatement. Il est nécessaire d’installer Bonjour Print Services for Windows (http://support.apple.
com/kb/dl999) et d’autoriser le firewall à laisser entrer le trafic UDP sur le port 5353 (mDNS). Sous
Linux, il faut que la librairie libnss-mdns soit installée.
10