 
 
 
Syslog est l'outil de logging couramment utilisé sur les systèmes UNIX. C'est un démon qui ouvre un fichier spécial appelé FIFO. Une FIFO est un fichier spécial, se comportant comme une file d'attente. Tout ce qui y est écrit "ressortira" en lecture. Le démon syslog attend les données en lecture. Il existe des fonctions C pour écrire dans les FIFO. Si vous utilisez ces fonctions C dans vos programmes, la sortie ira vers syslod.
Souvenez vous que vous avez utilisé chroot et que la FIFO que syslog lit /dev/log ne se trouve pas dans l'environnement virtuel. Cela implique qu'aucun des environnements virtuels ne pourra utiliser syslog. Nous ne pouvons pas tout simplement copier le fichier, puisque les programmes utiliseraient /dev/log au lieu du nouveau que nous aurions créé.
Syslog peut scruter d'autres FIFO si vous le lui dites en ligne de commande. Lancez donc syslog avec l'argument :
syslog -p /virtual/log
Faites alors un lien de /dev/log vers /virtual/log (un lien symbolique) :
ln -sf /virtual/log /dev/log
Puis liez toutes les copies de /dev/log vers ce fichier avec la commande (attention, c'est un lien NON symbolique) :
ln /virtual/log /virtual/domain.com/dev/log
Le script virtfs ci-dessus le fait pour vous. Puisque /virtual est un disque entier, et que les /dev/log sont liés, ils ont le même numéro d'inode et pointent vers les mêmes données. Le chroot ne peut pas empêcher cela, et donc tous vos /dev/log virtuels vont à présent fonctionner. Notez également que tous les messages de toutes les machines virtuelles seront écrits dans un même fichier. Cependant, vous pouvez écrire des programmes pour filtrer les données.
Cette version du fichier syslog.init refait les liens vers les /dev/log à chaque fois que vous le lancez. Voici un syslog.init modifié :
#!/bin/sh
# Source function library.
. /etc/rc.d/init.d/functions
case "$1" in
  start)
        echo -n "Starting dev log: "
        ln -sf /virtual/log /dev/log
        echo done
        echo -n "Starting system loggers: "
        daemon syslogd -p /virtual/log
        daemon klogd
        echo
        echo -n "Starting virtual dev log: "
        for i in /virtual/*
        do
                if [ ! -d "$i" ]
                then
                        continue
                fi
                if [ "$i" = "/virtual/lost+found" ]
                then
                        continue
                fi
                ln -f /virtual/log $i/dev/log
                echo -n "."
        done
        echo " done"
        touch /var/lock/subsys/syslog
        ;;
  stop)
        echo -n "Shutting down system loggers: "
        killproc syslogd
        killproc klogd
        echo
        rm -f /var/lock/subsys/syslog
        ;;
  *)
        echo "Usage: syslog {start|stop}"
        exit 1
esac
exit 0
Si vous manquez de place sur un système de fichiers, et que vous devez séparer 
vos domaines virtuels en plusieurs disques, rappellez-vous que les liens 
(non symboliques) ne peuvent pas passer à travers plusieurs disques. Ce qui 
implique de devoir lancer un syslogd pour chaque groupe de domaine par disque.
Par exemple, si vous avez 13 domaines sur /virtual1 et 15 sur /virtual2, vous 
devrez faire un lien pour les 13 domaines sur /virtual1/log et lancer syslogd avec 
 syslogd -p /virtual1/log , ainsi qu'un lien pour les 15 domaines sur 
/virtual2/log et lancer  syslogd -p /virtual2/log .
Si vous ne voulez pas centrer les logs sur un seul endroit, vous pouvez aussi lancer 
un syslogd par domaine. Cela donne des pertes de processus ID, donc je ne le 
recommande pas, mais c'est facile à mettre en oeuvre. Vous devriez modifier votre 
fichier syslod.init pour lancer syslogd par  chroot /virtual/domain1.com syslogd  pour chaque domaine. Ceci lancera syslogd dans le  chroot  
et les logs se trouveront dans /virtual/domain1.com/var/log au lieu d'être tous 
rassemblés dans /var/log. 
N'oubliez pas de lancer syslod normalement  syslod  pour le système 
principal ainsi qu'un logger pour le noyau  klogd .
 
 
