Page suivantePage pr�c�denteTable des mati�res

4. Scripts shell

4.1 virtfs

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

4.2 Virtexec

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.

4.3 Notes

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 :


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:22