TD: Lancement d'un serveur et scripts CGI
Travail à effectuer
Avant de commencez ce TD, il faut terminer la première partie du
TD sur les CSS (celle qui concerne
l'exemple fd.css)
Première partie : Serveur HTTP Apache
- Installez le serveur Apache pour linux chez vous, dans le
répertoire "~/apache". Pour cela, tapez la commande :
~devernay/apache/bin/install-apache ~/apache
l'argument est le répertoire dans lequel vous souhaitez installer
apache.
- Lancez apache :
~/apache/bin/apachectl start
L'argument "start" peux être remplacé par:
- "start" démarre le serveur
- "stop" l'arrête
- "restart" le redémarre
- "status" et "fullstatus" donnent l'état du serveur
- "configtest" vérifie le fichier de config httpd.conf
- "help" aide
N'oubliez pas d'éteindre votre serveur à la fin du TD !
(~/apache/bin/apachectl stop)
- Ouvrez un navigateur sur la home page de votre serveur :
http://nom_de_votre_machine.unice.fr:8080/
Le nom de votre machine s'obtient avec la commande unix
"hostname"
- Lancer des fenêtres permettant de surveiller le journal des
accès et le journal des erreurs de votre serveur :
- xterm -e tail -f ~/apache/logs/access_log&
- xterm -e tail -f ~/apache/logs/error_log&
Notes : la commande Unix "tail -f fichier" permet de
visualiser un fichier pendant qu'il est en train d'être rempli (ce
qui est le cas des logs du serveur). "xterm -e commande&"
permet de lancer un terminal où s'exécute "commande".
- Accédez à différents documents de votre serveur, et observez
son comportement, notamment à travers les logs :
- La home page du serveur
- La home page d'un utilisateur
- Un document qui n'existe pas (toto par exemple)
- Un script cgi
(http://nom_de_votre_machine.unice.fr:8080/cgi-bin/test-cgi
- L'arborescence de votre serveur contient les répertoires
suivants :
- bin: les binaires et scripts permettant de lancer le
serveur
- cgi-bin: Les scripts (shell ou perl) et programmes CGI
- conf: Les fichiers de configuration, dont httpd.conf (config du
serveur), et mime.types (association extension de fichier =>
type MIME)
- htdocs: Les documents (html, css, gif, jpg) placés sur le
serveur. Vous remarquerez que la home page du serveur s'appelle
index.html et est écrite en de multiples langues !
- icons: Des icones servant au serveur
- logs: Les fichiers de logs (journaux) du serveur
- include, libexec, proxy: Répertoires utilisés par les modules
du serveur
- Examinez (faites "file nomfichier" puis "more nomfichier" si ce
n'est pas un binaire) le contenu des scripts CGI pré-installés sur
le serveur (dans cgi-bin). En quel language sont-ils écrits ?
Deuxième partie : CGI
- Examinez les exemples de scripts du TD écrits dans les
différents languages
- Écrivez une "form" html et un script utilisant la balise
"isindex" pour exécuter la commande "finger" sur un utilisateur (si
on entre abuse@clio.unice.fr, le script doit exécuter "finger
abuse@clio.unice.fr" et renvoyer le résultat avec un type MIME
text/plain).
- Faites une page HTML utilisant les principaux tags HTML
permettant de faire des formulaires.
- Je vous propose d'écrire un script CGI en shell, en
C puis en Perl qui récupère les paramètres saisis et qui
génère une page HTML présentant les résultats.
- Shell Unix :
- Ecrivez un script shell qui fasse la même chose. Vous
utiliserez pour la récupération des paramètres le programme cgiparse
(le programme cgiutils
peut aussi vous etre utile).
Pour cela :
- récupérer en faisant shift+click sur ces liens les fichiers cgiparse.linux et cgiutils.linux
- les renommer respectivement en "cgiparse" et "cgiutils".
- les rendre exécutables ("chmod +x cgiparse cgiutils").
- les déplacer dans ~/bin pour qu'ils soients dans votre chemin
de recherche des programmes (PATH)
- parcourir les documentations de cgiparse
et cgiutils.
- Ecrire un petit script cgi en shell qui liste au vol
dans une page le fichier de logs ou le fichier d'erreur
ou encore le fichier listant les clients utilisés pour se
connecter sur votre serveur.
- Exemples de CGI :
Pour faire tourner les exemples, vous pouvez télécharger les scrips
(fichiers *.sh), et les placer dans le cgi-bin de votre serveur
Apache (n'oubliez pas "chmod +x *.sh"). Les formulaires html les
accompagnant devraient alors fonctionner (si vous les exécutez sur
votre
serveur).
Exemple de formulaire html (tester sous
Netscape) :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>exemple: Traitement de formulaires (CGI)</title>
</head>
<body>
<hr size="4">
<h1>exemple: Traitement de formulaires (CGI)</h1>
<p>
<form method="post" action="/cgi-bin/form.sh">
<! on indique ci-dessus l'URL du script CGI ->
<hr>
<br>
Civilité
<select name="civilite" size="1">
<option value="Mademoiselle"> Melle
<option value="Madame"> Mme
<option value="Monsieur"> Mr
</select>
Donnez votre nom <input type="text" name="nom" size="15">
et votre prenom <input type="text" name="prenom" size="15"> <br>
<input type="reset" value="Effacer" >
<input type="submit" value="Valider" > <br>
</form>
<hr size="4">
</body>
</html>
et le script CGI correspondant, utilisant cgiparse (telecharger le
script avec shift+click) :
#!/bin/sh
#CGI=/usr/local/bin/cgiparse
CGI=cgiparse
#programme utilitaire qui découpe la chaine donnée, donner si possible
#le chemin complet
eval `$CGI -init`
eval `$CGI -form`
#on lance ce programme
echo Content-type: text/html
echo
#en-tete minimal
cat << EOF
<!-- le programme cgiparse crée des variables d'environnement nommée FORM_nom=val où nom est
la valeur donnée à l'attribut NAME de INPUT et val la donnée saisie par l'utilisateur. -->
<html>
<head>
<title> Bienvenue à
EOF
echo $FORM_prenom <!-- affichage du prenom de la personne dans le titre de la page -->
cat << EOF
</title>
</head>
<body>
<hr>
<center>
<h2>
EOF
echo Bonjour $FORM_civilite $FORM_prenom $FORM_nom <!-- affichage de la civilité, du prenom et du nom de la personne -->
cat << EOF
</h2>
</center>
<hr>
</body>
</html>
EOF
- Autre exemple : un pot pourri, utilisant cgiparse et cgiutils
- Autre exemple : un script nph utilisant cgiutils
- Autre exemple : recherche de fichier (photo) à partir d'un nom
(ne fonctionne pas, mais vous pouvez vous en inspirer) :
- Perl :
N'oubliez pas que :
- Votre script (par exemple livredor.cgi) doit etre stocké dans
le répertoire ~/apache/cgi-bin, et doit etre exécutable ("chmod
a+rx livredor.cgi")
- Pour tester votre script, exécutez-le depuis un xterm :
cd ~/apache/cgi-bin
./livredor.cgi
on vous demande d'entrer les noms de paramètres et leur valeur,
par exemple :
nom=Bob
commentaire=Superbe site
Terminez la liste des paramètres par une ligne contenant
seulement le caractère control-d
^D le resultat du script s'affiche
- Pour utiliser une feuille de style depuis votre CGI :
print start_html( -title=>'CGI with
Style',-style=>{-src=>'/~toto/st1.css'});
vous devez mettre l'URL absolu (commençant par /) de votre
CSS.
Pour des indications sur les scripts à écrire pour le projet, allez
voir la page du projet.
- Langage C .
- Téléchargez la librairie CGIC version
1.07, installez-la et écrivez un programme C qui récupère les
paramètres saisis et qui génère une page HTML présentant les
résultats. La documentation
de cette librairie est disponible en ligne.
- Modifiez votre programme pour sauvegarder son environnement
(variables d'environnement, paramètres saisis dans la page HTML).
Compilez-le avec les options de debug et tracez son exécution sous
gdb (il faudra le modifier pour relire son environnement
initial).
- Plus dur : écrire une interface (html + cgi) essayant de
deviner le DISPLAY de la personne qui consulte la page et qui lance
sur demande (appui sur un bouton aprés choix dans un menu) une
application X11 (on testera avec xclock, edt, etc...) sur sa
machine. On traitera les cas d'erreur si le DISPLAY est mal
positionné ou si la machine cible n'est pas en xhost+.
Liens pour le TD
Comment installer son serveur Apache
Si vous avez besoin d'installer vous-même un serveur Apache sur
une machine, voici la marche à suivre :
- Si vous êtes sur Linux, regardez si votre distribution contient
une version précompilée d'Apache. Si oui, installez-la et c'est
terminé.
- Sinon, ou si le "package" fourni par votre distribution ne vous
satisfait pas, il va falloir recompiler Apache. Pour celà,
récupérez une distribution binaire d'Apache pour votre machine
depuis www.apache.org. Si
cette distribution vous satisfait (suivez les instructions fournies
avec), tout va bien. Sinon, récupérez une distribution source (lors
de l'écriture du TD, c'était le fichier apache_1.3.12.tar.gz)
- Depuis votre shell Unix, exécutez la séquence:
gzip -dc apache_1.3.12.tar.gz |tar xvf -
cd apache_1.3.12
./configure --prefix=$HOME/apache --enable-module=all --enable-shared=max
make
make install
- Pour installer PHP3, récupérez la distrib source depuis le site
www.php.net
- Installez PHP3 avec la séquence:
gzip -dc ~devernay/www/cours/internetMI/php-3.0.16.tar.gz |tar xvf -
cd php-3.0.16
./configure --with-gdbm --with-ndbm --with-db2 --enable-track-vars --with-apxs=$HOME/apache/bin/apxs --with-xml
make
make install
Frederic
Devernay
Last modified: Tue Mar 21 10:33:54 MET 2000