Chaque domaine doit avoir une arborescence de r�pertoires. Puisque vous utilisez chroot
, vous aurez besoin de copies multiples des librairies, binaires, fichiers de configuration, etc. J'utilise le r�pertoire /virtual/domaine1.com
pour chaque domaine que je cr�e.
Je comprends bien que cela repr�sente du gaspillage d'espace disque, mais l'espace disque est meilleur march� qu'une nouvelle machine ou que des cartes r�seau. Si vous d�sirez r�ellement sauver de l'espace disque, vous pouvez faire des liens, afin qu'une seule copie de chaque binaire soit pr�sente. Le systeme de fichiers que j'utilise prend un peu plus de 2Mo. Le script essaye de copier tous les fichiers du syst�me de fichiers principal pour que ce soit le plus identique possible.
Voici un fichier virtfs d'exemple :
#!/bin/bash echo '$Revision: 1.1.1.1 $' echo -n "Saisissez le nom de domaine : " read domain if [ "$domain" = "" ] then echo Vous n'avez rien saisi : on arr�te l� exit 0 fi leadingdir=/virtual echo -n "Saisissez le nom du r�pertoire contenant les domaines (d�faut: $leadingdir): " read ans if [ "$ans" != "" ] then leadingdir=$ans fi newdir=$leadingdir/$domain if [ -d "$newdir" ] then echo Le r�pertoire $newdir existe d�j� exit 0 else echo Nouveau r�pertoire : $newdir fi echo Cr�ation de $newdir mkdir -p $newdir echo Cr�ation de bin cp -pdR /bin $newdir echo Cr�ation de dev cp -pdR /dev $newdir echo Cr�ation de dev/log ln -f /virtual/log $newdir/dev/log echo Cr�ation d'etc mkdir -p $newdir/etc for i in /etc/* do if [ -d "$i" ] then continue fi cp -pd $i $newdir/etc done echo Cr�ation de etc/skel mkdir -p $newdir/etc/skel echo Cr�ation de home for i in a b c d e f g h i j k l m n o p q r s t u v w x y z do mkdir -p $newdir/home/$i done echo Cr�ation de home/c/crc mkdir -p $newdir/home/c/crc chown crc.users $newdir/home/c/crc echo Cr�ation de lib mkdir -p $newdir/lib for i in /lib/* do if [ -d "$i" ] then continue fi cp -pd $i $newdir/lib done echo Cr�ation de proc mkdir -p $newdir/proc echo Cr�ation de sbin cp -pdR /sbin $newdir echo Cr�ation de tmp mkdir -p -m 0777 $newdir/tmp chmod +t $newdir/tmp echo Cr�ation de usr mkdir -p $newdir/usr echo Cr�ation de usr/bin cp -pdR /usr/bin $newdir/usr echo Cr�ation de usr/lib mkdir -p $newdir/usr/lib echo Cr�ation de usr/lib/locale cp -pdR /usr/lib/locale $newdir/usr/lib echo Cr�ation de usr/lib/terminfo cp -pdR /usr/lib/terminfo $newdir/usr/lib echo Cr�ation de usr/lib/zoneinfo cp -pdR /usr/lib/zoneinfo $newdir/usr/lib echo Cr�ation de usr/lib/\*.so\* cp -pdR /usr/lib/*.so* $newdir/usr/lib echo Cr�ation de usr/sbin cp -pdR /usr/sbin $newdir/usr echo Lien de usr/tmp vers /tmp ln -s /tmp $newdir/usr/tmp echo Cr�ation de var mkdir -p $newdir/var echo Cr�ation de var/lock cp -pdR /var/lock $newdir/var echo Cr�ation de var/log mkdir -p $newdir/var/log echo Cr�ation de var/log/wtmp cp /dev/null $newdir/var/log/wtmp echo Cr�ation de var/run cp -pdR /var/run $newdir/var echo Cr�ation de var/run/utmp cp /dev/null $newdir/var/run/utmp echo Cr�ation de var/spool cp -pdR /var/spool $newdir/var echo Lien de var/tmp vers /tmp ln -s /tmp $newdir/var/tmp echo Cr�ation de var/www/html mkdir -p $newdir/var/www/html chown webmast.www $newdir/var/www/html chmod g+s $newdir/var/www/html echo Cr�ation de var/www/master mkdir -p $newdir/var/www/master chown webmast.www $newdir/var/www/master echo Cr�ation de var/www/server mkdir -p $newdir/var/www/server chown webmast.www $newdir/var/www/server exit 0
Afin d'ex�cuter des commandes dans un environnement virtuel, vous devez utiliser chroot
sur ce r�pertoire puis lancer la commande. J'ai �crit un script shell nomm� virtexec se chargeant de ces op�rations, pour n'importe quelle commande :
#!/bin/sh echo '$Revision: 1.1.1.1 $' BNAME=`basename $0` FIRST4CHAR=`echo $BNAME | cut -c1-4` REALBNAME=`echo $BNAME | cut -c5-` if [ "$BNAME" = "virtexec" ] then echo Vous ne pouvez pas lancer virtexec directement. Il FAUT un lien symbolique exit 0 fi if [ "$FIRST4CHAR" != "virt" ] then echo Le lien ne pointe pas sur une fonction virtuelle exit 0 fi list="" num=1 for i in /virtual/* do if [ ! -d "$i" ] then continue fi if [ "$i" = "/virtual/lost+found" ] then continue fi list="$list $i $num" num=`expr $num + 1` done if [ "$list" = "" ] then echo Je ne trouve pas d'environnement virtuel exit 0 fi dialog --clear --title 'Virtexec' --menu Pick 20 70 12 $list 2> /tmp/menu.$$ if [ "$?" = "0" ] then newdir=`cat /tmp/menu.$$` else newdir="" fi tput clear rm -f /tmp/menu.$$ echo '$Revision: 1.1.1.1 $' if [ ! -d "$newdir" ] then echo Le nouveau r�pertoire $newdir N'EXISTE PAS exit 0 else echo Nouveau r�pertoire : $newdir fi echo bname: $BNAME echo realbname: $REALBNAME if [ "$*" = "" ] then echo arguments: aucun else echo args: $* fi echo Changement de r�pertoire vers $newdir cd $newdir echo Lancement de $REALBNAME chroot $newdir $REALBNAME $* exit 0
Veuillez noter que vous devez disposer du programme dialog
sur votre syst�me pour que ce script fonctionne. Pour utiliser virtexec, cr�ez un lien symbolique d'un programme vers celui-ci. Par exemple :
ln -s /usr/local/bin/virtexec /usr/local/bin/virtpasswd ln -s /usr/local/bin/virtexec /usr/local/bin/virtvi ln -s /usr/local/bin/virtexec /usr/local/bin/virtpico ln -s /usr/local/bin/virtexec /usr/local/bin/virtemacs ln -s /usr/local/bin/virtexec /usr/local/bin/virtmailq
A pr�sent, si vous tapez virtvi
ou virtpasswd
ou encore virtmailq
, cela vous permettra d'�diter un fichier, changer le mot de passe d'un utilisateur, ou v�rifier la file d'attente de mail sur votre syst�me virtuel. Vous pouvez cr�er autant de liens vers virtexec que vous le d�sirez. Cependant, notez bien que si votre programme n�cessite une librairie partag�e, celle-ci doit se trouver sur le syst�me de fichiers virtuel, ainsi que les binaires.
J'installe tous les scripts dans /usr/local/bin
. Tout ce que je ne d�sire pas mettre sur le syst�me de fichiers virtuel, je le place dans /usr/local
. Le script ne touche � rien dans ce r�pertoire lors de la copie. Les fichiers ne devant pas chevaucher plusieurs syst�mes de fichiers virtuels doivent �tre supprim�s. Par exemple, ssh
est install� sur mon syst�me, et je n'ai pas voulu que les clefs priv�es soient disponibles sur tous les syst�mes de fichier. J'ai donc supprim� le fichier des syst�mes de fichiers virtuels apr�s avoir lanc� virtfs
. Je change �galement le resolv.conf
et supprime tout ce qui contient le nom d'un autre domaine, pour des raisons l�gales. Par exemple, les fichiers /etc/hosts
et /etc/HOSTNAME
.
Les programmes pour lesquels je fais un lien symbolique vers virtexec sont :
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:22