Archive for juin 2011

Gnome 3

Actualité, Intérêts divers, Linux | Publié par cpb
juin 24 2011

Voici quelques jours que j’ai installé la distribution Fedora 15 sur mon poste de travail principal. L’évolution la plus visible de cette version Fedora est l’adoption de Gnome 3.0. Hors cette interface graphique, il existe d’autres nouveautés et évolutions dans cette nouvelle version de la Fedora, comme la généralisation de systemd pour la configuration du boot, ou le nommage persistant des interfaces ethernet : les interfaces se trouvant sur la carte mère sont nommées em1, em2, etc (em pour embedded) et les interfaces supplémentaires s’appellent désormais pci<numero slot>#<numero port>.

Gnome 3.0 modifie les concepts habituels d’interface utilisateur graphique. Fini les menus Applications, Raccourcis et Système en haut de l’écran et les sous-menus Accessoires, Bureautique, etc. Disparus la barre des tâches et le changeur de bureau au bas de l’écran.

Plutôt que de proposer à l’utilisateur un choix d’applications à lancer, l’interface vise à se concentrer plutôt sur les activités de l’utilisateur. Souhaite-t-il rédiger un courrier ? un document ? naviguer sur le web ? lire ses mails ? En fait on s’intéresse, du moins me semble-t-il, plus à la tâche à réaliser qu’à l’outil à employer. Cette perspective se rapproche de celle des tablettes et smartphones : l’environnement Gnome-Shell est visiblement prêt pour une interface tactile à la manière des tablettes.

Plus précisément, l’interaction avec le Gnome-Shell est sollicitée par le survol à la souris de l’angle supérieur gauche de l’écran. Apparaissent alors deux docks regroupant, pour celui de gauche les applications favorites, et pour celui de droite les bureaux virtuels actifs. Le nombre de ces bureaux virtuels augmente ou diminue dynamiquement. En outre deux boutons « Fenêtres » et « Applications » apparaissent dans la partie supérieure de l’écran : le premier présente une mosaïque des fenêtres ouvertes (rafraichies en permanence) et le second propose toutes les applications disponibles avec une présentation qui rappelle furieusement les smartphones actuels.

Certains éléments de configuration de Gnome 3.0 ne sont pas évidents. J’ai listé ci-dessous quelques-unes de solutions que j’ai trouvées.

Configuration de l’aspect des fenêtres

Gnome 3.0 n’offre pas beaucoup d’éléments visuels directement configurables par l’utilisateur. Même l’aspect des fenêtres (barre de titres, boutons système, etc.) n’est pas modifiable avec les outils de configuration de base. Il faut commencer par installer un utilitaire supplémentaire : Gnome-Tweak-Tool.

[~]# yum install -y gnome-tweak-tool

On peut choisir dans son menu Shell les boutons système à afficher (maximiser, minimiser, fermer) et dans le menu Windows le thème à appliquer aux fenêtres. Toutefois celui-ci n’est pris en compte qu’à la reconnexion de l’utilisateur. Voici donc un aperçu des thèmes disponibles avec l’installation standard (cliquez sur l’image ci-dessous pour voir les styles de fenêtres).

Styles des fenêtres Gnome 3.0

Taille du texte sous les icônes des applications

Je trouve que le texte indiquant les noms des applications sous leurs icônes est trop petit. Il nécessite un effort visuel. Pour corriger ceci, il faut éditer le fichier /usr/share/gnome-shell/theme/gnome-shell.css et chercher l’emplacement des lignes suivantes :

.app-well-app > .overview-icon,
.remove-favorite > .overview-icon,
.search-result-content > .overview-icon {
    border-radius: 4px;
    padding: 3px;
    border: 1px rgba(0,0,0,0);
    font-size: 7.5pt;
    color: white;
    transition-duration: 100;
    text-align: center;
}

et remplacer la valeur font-size par celle de votre choix (9.5 pour ma part).

Lancer une application à la connexion

J’avais l’habitude, sous Gnome 2 de voir l’utilitaire GkrellM démarrer automatiquement et se coller le long du bord droit de mon écran. Pour réaliser la même chose avec Gnome 3, c’est un peu plus compliqué que précédemment. Il faut aller dans le répertoire ~/.config/autostart/ et y créer un fichier correspondant à l’application à lancer avec le suffixe .desktop. Ensuite on remplira les champs suivants :

[autostart]$ cd ~/.config/autostart/
[autostart]$ cat gkrellm.desktop
[Desktop Entry]
Type=Application
Name=GkrellM
Exec=/usr/bin/gkrellm
Hidden=false
X-GNOME-Autostart-enabled=true
Comment=Gnome Krell Monitor
[autostart]$

Des extensions pour configurer le Gnome-Shell

Il existe déjà quelques extensions pour le Gnome Shell, entre autres celles du projet Gnome Shell frippery qui modifie sensiblement certains éléments, en reprenant des comportements plus proches de Gnome 2. J’ai installé l’ensemble de l’archive (à l’aide du RPM fourni), puis conservé seulement les extensions : Bottom Panel et Panel Favorites. Pour supprimer les autres après installation du RPM, il suffit de supprimer (ou déplacer) les répertoires correspondants de /usr/share/gnome-shell/extensions/.

Conclusion

En conclusion, après quelques jours d’utilisation, cette nouvelle interface est plutôt agréable, et offre un renouveau notable dans le monde des interfaces-utilisateur graphiques. Toutefois, il y a un gros défaut pour Gnome-Shell : une fuite mémoire qui le rend inutilisable au bout de deux ou trois jours sans déconnexions. Il s’agit d’un bug connu, qui je l’espère pourra être corrigé rapidement. Le paliatif proposé par le site web recensant les bugs Fedora (se déconnecter et se reconnecter quotidiennement) est efficace mais pas très satisfaisant si des applications au long cours doivent s’exécuter.

Construire son système personnel sur carte Pandaboard (5)

Embarqué, Linux | Publié par cpb
juin 17 2011

Nous avons installé dans l’article précédent un serveur Apache sur une carte Pandaboard en le cross-compilant – non sans mal. En effet, ce serveur n’est pas particulièrement prévu pour être compilé sur un système embarqué.

Nous allons aborder une seconde étape assez épique : la compilation de PHP. Comme on peut s’y attendre, il n’est pas non plus prévu pour être facilement cross-compilé (après tout, un éléphant sur un système embarqué…) et nous devrons emprunter des voies détournées pour atteindre notre but !

Configuration de PHP

Premièrement, nous allons télécharger et décompresser les sources de PHP :

[~]$ cd Projets/Panda/
[Panda]$ wget http://fr2.php.net/get/php-5.3.6.tar.bz2/from/this/mirror
--2011-06-16 18:31:35--  http://fr2.php.net/get/php-5.3.6.tar.bz2/from/this/mirror
[...]
2011-06-16 18:31:47 (965 KB/s) - «php-5.3.6.tar.bz2» sauvegardé [10952171/10952171]
[Panda]$ tar -xjf php-5.3.6.tar.bz2
[Panda]$ cd php-5.3.6
[php-5.3.6]$

Nous allons devoir modifier le script configure qui prépare la compilation. En effet celui-ci essaye de déterminer s’il peut optimiser les opérations en virgules flottantes en les codant directement en assembleur. Rien ne l’empêchera de compiler son test, mais il ne pourra bien entendu pas le faire s’exécuter car le programme devrait tourner sur un autre processeur. Nous allons contourner le test et donner des valeurs par défaut à certaines constantes de configuration. Les commandes sed que j’indique ci-dessous peuvent très bien être réalisées à la main ou dans un éditeur de texte. Je les utilise ici car je pense que c’est la manière la plus reproductible de décrire la modification à apporter.

[php-5.3.6]$ sed -i -e 's/ac_cfp_have__fpu_setcw=yes/ac_cfp_have__fpu_setcw=no/' configure
[php-5.3.6]$ sed -i -e 's/ac_cfp_have_fpsetprec=yes/ac_cfp_have_fpsetprec=no/' configure
[php-5.3.6]$ sed -i -e 's/ac_cfp_have__controlfp=yes/ac_cfp_have__controlfp=no/' configure
[php-5.3.6]$ sed -i -e 's/ac_cfp_have__controlfp_s=yes/ac_cfp_have__controlfp_s=no/' configure
[php-5.3.6]$ sed -i -e 's/ac_cfp_have_fpu_inline_asm_x86=yes/ac_cfp_have_fpu_inline_asm_x86=no/' configure

Lors de la configuration, le script va exécuter la commande apxs pour connaître la configuration du serveur Apache pour lequel il doit créer un nouveau module. Cette commande apxs est elle-même un script qui a été généré lors de la compilation d’Apache. Il se trouve dans /server/bin. Petit souci : le script vérifie que le serveur httpd soit bien présent en essayant de le lancer ! Mais il n’est pas compilé pour le bon processeur et la configuration échoue.

Pour contourner ce problème, nous allons modifier le script apxs pour mettre en commentaire la portion qui essaye de lancer le serveur. Je vous propose d’utiliser le petit patch ci-dessous. En cas de souci, sachez qu’il suffit de mettre en commentaire (avec des #) la zone suivante du fichier /server/bin/apxs :

unless (grep /mod_so/, `. $envvars && $httpd -l`) {
    error("Sorry, no shared object support for Apache");
    error("available under your platform. Make sure");
    error("the Apache module mod_so is compiled into");
    error("your server binary `$httpd'.");
    exit 1;
}

Voici l’utilisation du patch :

[Panda]$ su -
Mot de passe :
[root@tr-a-0 ~]# cd /server/bin/
[root@tr-a-0 bin]# patch -p0 < apxs-commente.patch 
patching file apxs
[root@tr-a-0 bin]# exit
[Panda]$

A présent, nous pouvons lancer la configuration :

[php-5.3.6]$ ./configure --host=arm-generic-linux-gnueabi --disable-all --prefix=/server --with-apxs2=/server/bin/apxs
creating cache ./config.cache
checking for Cygwin environment... no
checking for mingw32 environment... no
checking for egrep... grep -E
checking for a sed that does not truncate output... /bin/sed
checking host system type... arm-generic-linux-gnueabi
checking target system type... arm-generic-linux-gnueabi
[...]
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

[php-5.3.6]$

Compilation de PHP

Prêt pour la cross-compilation ? Non, pas tout à fait ! Le script configure ne tient pas vraiment compte du nom du compilateur, il utiliser gcc sans se soucier de nos options… Nous devons modifier le Makefile pour remplacer gcc par arm-generic-linux-gnueabi-gcc :

[php-5.3.6]$ sed -i -e 's/gcc/arm-generic-linux-gnueabi-gcc/' Makefile
[php-5.3.6]$

Et la même chose pour les utilitaires mentionnés dans le script libtool qui réalise l’édition des liens :

[php-5.3.6]$ sed -i -e 's/"ar"/"arm-generic-linux-gnueabi-ar"/' libtool
[php-5.3.6]$ sed -i -e 's/"gcc"/"arm-generic-linux-gnueabi-gcc"/' libtool
[php-5.3.6]$ sed -i -e 's/"strip"/"arm-generic-linux-gnueabi-strip"/' libtool
[php-5.3.6]$ sed -i -e 's/"objdump"/"arm-generic-linux-gnueabi-objdump"/' libtool
[php-5.3.6]$ sed -i -e 's/"as"/"arm-generic-linux-gnueabi-as"/' libtool
[php-5.3.6]$ sed -i -e 's/"ranlib"/"arm-generic-linux-gnueabi-ranlib"/' libtool

Pour la ligne suivante, le script contient le chemin de ld. Pour éviter d’avoir à préfixer tous les / du chemin par des \, je préfère remplacer les / de la commande de substitution de sed par des !.

[php-5.3.6]$ sed -i -e 's!"/usr/bin/ld"!"arm-generic-linux-gnueabi-ld"!' libtool

Nous pouvons maintenant lancer enfin la compilation…

[php-5.3.6]$ make
/bin/sh /home/cpb/Projets/Panda/php-5.3.6/libtool --silent --preserve-dup-deps --mode=compile arm-generic-linux-gnueabi-gcc -Iext/date/lib -Iext/date/ -I/home/cpb/Projets/Panda/php-5.3.6/ext/date/ -DPHP_ATOM_INC -I/home/cpb/Projets/Panda/php-5.3.6/include -I/home/cpb/Projets/Panda/php-5.3.6/main -I/home/cpb/Projets/Panda/php-5.3.6 -I/home/cpb/Projets/Panda/php-5.3.6/ext/date/lib -I/home/cpb/Projets/Panda/php-5.3.6/ext/ereg/regex -I/home/cpb/Projets/Panda/php-5.3.6/TSRM -I/home/cpb/Projets/Panda/php-5.3.6/Zend    -g -O2 -fvisibility=hidden   -c /home/cpb/Projets/Panda/php-5.3.6/ext/date/lib/parse_date.c -o ext/date/lib/parse_date.lo
[...]
Build complete.
Don't forget to run 'make test'.
[php-5.3.6]$

Contrairement à ce que nous demande la chaîne de compilation de Php, nous n’allons pas exécuter le make test. En effet, elle essaye alors de compiler des exemples (pour la cible embarquée) et de les exécuter (sur l’hôte de développement), ce qui ne donne vraiment pas de bons résultats !

Installation de PHP

[php-5.3.6]$ su
Mot de passe :
[root@tr-a-0 php-5.3.6]# make install
Installing PHP SAPI module:       apache2handler
/server/build/instdso.sh SH_LIBTOOL='/server/build/libtool' libphp5.la /server/modules
/server/build/libtool --mode=install cp libphp5.la /server/modules/
[...]
Installing man pages:             /server/man/man1/
  page: phpize.1
  page: php-config.1
[root@tr-a-0 php-5.3.6]#

Nous pouvons vérifier la présence d’un module pour Apache qui vient d’être ajouté :

[root@tr-a-0 php-5.3.6]# ls -l /server/modules/
total 8832
-rw-rw-r-- 1 root root    9149  9 juin  08:37 httpd.exp
-rwxr-xr-x 1 root root 9030634 13 juin  21:57 libphp5.so
[root@tr-a-0 php-5.3.6]#

Pour les tests, nous allons ajouter un petit script PHP dans le répertoire /server/htdocs/ (à côté du fichier index.html fourni par défaut avec Apache :

/server/htdocs/essai.php :
<html>
<head><title>Essai avec PHP</title></head>
<body>
<?php  echo "Ce message est g&eacute;n&eacute;r&eacute; par un script PHP"; ?>
</body>
</html>

Puis nous devrons ajouter deux lignes au fichier de configuration d’Apache, qui se trouve dans /server/conf/httpd.conf. Juste sous la ligne :

LoadModule php5_module        modules/libphp5.so

(qui a été insérée lors de l’installation de Php), nous ajoutons la ligne :

AddHandler   php5-script  php

Et dans la section mime_module qui contient plusieurs lignes commençant par AddType, ajoutons la ligne :

 AddType text/html       php

Transférons l’image du serveur sur notre cible, décompressons-la, et lançons Apache :

[php-5.3.6]$ su -
Mot de passe :
[root@tr-a-0 ~]# cd /
[root@tr-a-0 /]# tar -xzf server.tar.gz server/
[root@tr-a-0 /]# scp server.tar.gz root@192.168.3.152:/
root@192.168.3.152's password:
server.tar.gz                                                            100% 5225KB   5.1MB/s   00:01
[root@tr-a-0 /]# ssh root@192.168.3.152
root@192.168.3.152's password:
[PANDA ~]# cd /
[PANDA /]# tar -xzf server.tar.gz 
[PANDA /]# /server/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for (none)
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[PANDA /]#

Il nous reste à tester notre installation en demandant depuis un navigateur de notre système hôte la page :
http://192.168.3.152/essai.php.

Apache et PHP sur Pandaboard

Construire son système personnel sur une carte Pandaboard (4)

Embarqué, Linux | Publié par cpb
juin 10 2011

Après avoir obtenu un système minimal sur notre carte Pandaboard (voir les articles 1, 2 et 3), nous allons pouvoir l’enrichir un peu, en commençant par un serveur HTTP plus puissant que le précédent : Apache.

Le serveur Apache est l’un des plus utilisés sur Internet (au moins un site Web sur deux). Il est extensible grâce à de nombreux modules (par exemple PHP). Beaucoup de documents sont disponibles tant sur son installation que son administration.

Toutefois, il n’est pas particulièrement prévu pour être installé sur un système embarqué, et la cross-compilation pour un processeur différent est assez tortueuse, comme nous le verrons plus loin.

Apache utilise des fonctionnalités assez avancées des threads Posix, qui ne sont pas connus de la bibliothèque uClibC (celle-ci s’appuie sur l’ancienne bibliothèque LinuxThreads). Il nous faudra donc installer sur notre carte Pandaboard une bibliothèque GlibC (qui emploie les fonctionnalités de la NPTL Native Posix Thread Library). Pour cela, je vous renverrai à l’article décrivant l’utilisation de Crosstool-NG, ce dernier nous permettant d’installer un système basé sur une GlibC (après avoir recompilé Busybox).

Compilation d’Apache

Tout d’abord téléchargeons les sources d’Apache :

[~]$ PATH=$PATH:~/cross-arm-linux-ctng/bin/
[~]$ cd ~/Projets/Panda/
[Panda]$ wget http://mir2.ovh.net/ftp.apache.org/dist/httpd/httpd-2.2.19.tar.bz2
--2011-06-09 20:04:37--  http://mir2.ovh.net/ftp.apache.org/dist/httpd/httpd-2.2.19.tar.bz2
Résolution de mir2.ovh.net... 91.121.125.139
[...]
2011-06-09 20:04:47 (542 KB/s) - «httpd-2.2.19.tar.bz2» sauvegardé [5322082/5322082]
[Panda]$

Décompressons les sources d’Apache :

[Panda]$ tar -xjf ~/httpd-2.2.19.tar.bz2
[Panda]$ cd httpd-2.2.19
[httpd-2.2.19]$

Pour préparer la configuration, nous allons devoir court-circuiter plusieurs tests. En effet, le script configure qui prépare la compilation est prévu pour générer des programmes de tests et les exécuter sur place. Naturellement ces tests n’auraient aucun sens lors d’une compilation croisée. Il faudra donc passer des options spécifiques à configure pour indiquer directement les résultats. Voici la ligne de commande employée :

[httpd-2.2.19]$  ./configure  --prefix=/server  --host=arm-generic-linux-gnueabi   ac_cv_file__dev_zero=yes   ac_cv_func_setpgrp_void=yes   apr_cv_tcp_nodelay_with_cork=yes   ac_cv_sizeof_struct_iovec=8   apr_cv_process_shared_works=yes   apr_cv_mutex_robust_shared=no   ac_cv_struct_rlimit=yes    ap_cv_void_ptr_lt_long=no --enable-so --enable-module=all
configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking build system type... i686-pc-linux-gnu
checking host system type... arm-generic-linux-gnueabi
[...]
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
[httpd-2.2.19]$

Nous pouvons à présent lancer la compilation :

[httpd-2.2.19]$ make
Making all in srclib
make[1] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib »
Making all in apr
make[2] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
make[3] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
[...]
./dftables /home/cpb/Projets/Panda/httpd-2.2.19/srclib/pcre/chartables.c
./dftables: ./dftables : fichier binaire impossible à lancer
make[3]: *** [/home/cpb/Projets/Panda/httpd-2.2.19/srclib/pcre/chartables.c] Erreur 126
make[3] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/pcre »
make[2]: *** [all-recursive] Erreur 1
make[2] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/pcre »
make[1]: *** [all-recursive] Erreur 1
make[1] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib »
make: *** [all-recursive] Erreur 1
[httpd-2.2.19]$

Une erreur de compilation ? Et oui ! La compilation d’Apache passe par l’utilisation d’un outil personnel « dftables » qui est compilé à la volée, puis utilisé. Cela ne peut évidemment pas marcher avec une cross-compilation. Si nous devons faire tourner le programme sur l’hôte de développement (un PC), il va falloir le compiler manuellement :

[httpd-2.2.19]$ cd srclib/pcre/
[httpd-2.2.19]$ cc dftables.c -o dftables
[httpd-2.2.19]$

Puis relancer la compilation :

[httpd-2.2.19]$ cd ../..
[httpd-2.2.19]$ make
Making all in srclib
make[1] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib »
Making all in apr
make[2] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
make[3] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
[...]
/home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr/libtool --silent --mode=link arm-generic-linux-gnueabi-gcc -g -O2        -o gen_test_char  gen_test_char.lo -lm
./gen_test_char > test_char.h
/bin/sh: ./gen_test_char : fichier binaire impossible à lancer
make[2]: *** [test_char.h] Erreur 126
make[2] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/server »
make[1]: *** [all-recursive] Erreur 1
make[1] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/server »
make: *** [all-recursive] Erreur 1
[httpd-2.2.19]$

Encore ? Même problème, même remède : la compilation à la main…

[httpd-2.2.19]$ cd server/
[httpd-2.2.19]$ cc gen_test_char.c -o gen_test_char -I ../srclib/apr/include/
[httpd-2.2.19]$

Relançons à nouveau la compilation :

[httpd-2.2.19]$ cd ..
[httpd-2.2.19]$ make
Making all in srclib
make[1] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib »
Making all in apr
make[2] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
make[3] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
[...]
ttpd-2.2.19/srclib/pcre/libpcre.la /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr-util/libaprutil-1.la /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr-util/xml/expat/libexpat.la /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr/libapr-1.la -lrt -lcrypt -ldl
make[1] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19 »
[httpd-2.2.19]$

Installation d’Apache

Voilà, notre serveur Apache est compilé. Il ne reste plus qu’à l’installer. Lors de la configuration, j’ai précisé l’option "--prefix=/server". Ceci signifie que l’installation devra se faire dans le répertoire /server. En principe, nous devrions pouvoir préparer l’installation sur notre hôte de compilation en choisissant un répertoire local ainsi :

$ make DESTDIR=~/Projets/Panda/Target/  install

Toutefois, Apache n’est pas vraiment prévu pour la cross-compilation (comment ? je l’ai déjà dit ?) et le répertoire DESTDIR se retrouve mentionné dans les fichiers de configuration générés lors de l’installation… Pour contourner (un peu lâchement, j’en conviens) ce problème, j’ai décidé de lancer l’installation sur la plateforme de compilation comme si nous étions sur la cible (donc dans le répertoire /server de l’hôte).

[httpd-2.2.19]$ su
Mot de passe :
[httpd-2.2.19]# make install
Making install in srclib
make[1] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib »
Making install in apr
make[2] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
make[3] : on entre dans le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19/srclib/apr »
[...]
mkdir /server/man
mkdir /server/man/man1
mkdir /server/man/man8
mkdir /server/manual
make[1] : on quitte le répertoire « /home/cpb/Projets/Panda/httpd-2.2.19 »
[httpd-2.2.19]# ls /server/
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[httpd-2.2.19]#

Nous allons le transférer, sous forme d’archive zippée sur la cible :

[httpd-2.2.19]# cd /
[/]# tar -czf server.tar.gz server/
[/]# scp server.tar.gz root@192.168.3.152:/
root@192.168.3.152's password:
server.tar.gz                                 100% 5225KB   1.7MB/s   00:03
[/] #

Connectons-nous sur la cible. Par rapport à l’article précédent, j’ai désactivé le serveur httpd de la Busybox.

[/]# ssh root@192.168.3.152
root@192.168.3.152's password:
[PANDA /root]# cd /
[PANDA /]# ls
bin            lib            proc           sys
dev            linuxrc        root           tmp
etc            lost+found     sbin           usr
home           mnt             server.tar.gz  var
[PANDA /]# tar -xzf server.tar.gz 
[PANDA /]#

Test du serveur Apache

Apache s’exécute sous l’identité daemon du groupe daemon. Créons ces comptes, puis lançons le serveur.

[PANDA /]# touch /etc/group
[PANDA /]# adduser daemon
Changing password for daemon
New password:
Retype password:
Password for daemon changed by root
[PANDA /]# /server/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for (none)
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[PANDA /]#

Les messages ne sont que des avertissements, le serveur a bien démarré. Vérifions-le :

[PANDA /]# ps
PID   USER     TIME   COMMAND
    1 root       0:01 init
    2 root       0:00 [kthreadd]
    3 root       0:00 [ksoftirqd/0]
[...]
 1129 root       0:00 [flush-179:0]
 1136 root       0:00 dropbear -r /etc/dbkey
 1137 root       0:00 -sh
 1186 root       0:00 /server/bin/httpd -k start
 1187 daemon     0:00 /server/bin/httpd -k start
 1188 daemon     0:00 /server/bin/httpd -k start
 1189 daemon     0:00 /server/bin/httpd -k start
 1190 daemon     0:00 /server/bin/httpd -k start
 1191 daemon     0:00 /server/bin/httpd -k start
 1192 root       0:00 ps
[PANDA /]#

La meilleure vérification va consister à lancer un navigateur sur notre hôte de développement, et à le faire pointer sur l’adresse IP de la cible. Nous devrions voir une page par défaut qu’Apache a installé dans /server/htdocs/index.html.

Capture Apache sur Pandaboard