Je dois signaler que si vous avez une installation existante de BIND, par exemple en provenance d'un RPM, vous devrez probablement la désinstaller avant d'installer la nouvelle. Sur un système Red Hat, cela implique probablement de désinstaller les paquetages bind et bind-utils, et peut-être bind-devel et caching-nameserver, si vous les avez.
Vous voudrez sans doute sauvegarder une copie du script d'init (par exemple
/etc/rc.d/init.d/named), s'il y a en un, avant de
faire ceci ; ce sera utile plus tard.
C'est la partie facile :-). Il vous suffit d'exécuter make
install et laissez faire le tout pour vous. Vous pouvez
vouloir faire un chmod 000 /usr/local/sbin/named
par la suite, pour être sûr que vous n'exécutez pas accidentellement une
copie de BIND hors environnement restreint (il s'agit de
/usr/sbin/named si vous ne lui avez pas dit d'aller
dans /usr/local/sbin comme je
l'ai suggéré).
Seuls deux parties du paquetage doivent s'exécuter à l'intérieur de l'environnement restreint : le démon principal named lui-même, et named-xfer, qui est utilisé pour les transferts de zone. Vous pouvez simplement les copier depuis l'arborescence source :
# cp src/bin/named/named /chroot/named/bin # cp src/bin/named-xfer/named-xfer /chroot/named/bin
Si vous avez un script d'init provenant de votre distribution, le mieux serait probablement de simplement le modifier pour exécuter /chroot/named/bin/named, avec les paramètres appropriés. Les paramètres sont… (roulement de tambour s'il vous plaît…)
-u named, qui demande à BIND de s'exécuter en tant
qu'utilisateur named, plutôt que
root.
-g named, pour exécuter BIND avec le groupe
named également, plutôt que root
ou wheel.
-t /chroot/named, qui demande à BIND de s'exécuter dans
l'environnement restreint que nous avons construit.
Ce qui suit est le script d'init que j'utilise avec mon système Red Hat
6.0. Comme vous pouvez voir, il est presque identique à celui
livré par Red Hat. J'ai aussi modifié la commande ndc
restart de façon à ce qu'elle redémarre le serveur correctement,
et le garde à l'intérieur de l'environnement restreint. Vous pouvez
probablement faire la même chose dans votre script d'init, sans avoir à
copier celui-ci.
#!/bin/sh
#
# named Le rôle de ce script "shell" est de démarrer et d'arrêter
# named (serveur DNS BIND)
#
# chkconfig: 345 55 45
# description: named (BIND) est le serveur de nom de domain (DNS)
# qui est utilisé pour résoudre les noms de domaines en adresses IP.
# probe: true
# Bibliothèque basique de fonctions.
. /etc/rc.d/init.d/functions
# Configuration basique du réseau.
. /etc/sysconfig/network
# Vérifie que la gestion du réseau est assurée
[ ${NETWORKING} = "no" ] && exit 0
[ -f /chroot/named/bin/named ] || exit 0
[ -f /chroot/named/etc/named.conf ] || exit 0
# En fonction de ce qui est appelé
case "$1" in
start)
# Démarrer le démon.
echo -n "Démarrage de named : "
daemon /chroot/named/bin/named -u named -g named -t /chroot/named
echo
touch /var/lock/subsys/named
;;
stop)
# Arrêter le démon.
echo -n "Arrêt de named : "
killproc named
rm -f /var/lock/subsys/named
echo
;;
status)
/usr/local/sbin/ndc status
exit $?
;;
restart)
/usr/local/sbin/ndc -n /chroot/named/bin/named "restart -u named -g named -t /chroot/named"
exit $?
;;
reload)
/usr/local/sbin/ndc reload
exit $?
;;
probe)
# named sait comment redémarrer intelligemment ; nous ne voulons pas
# que linuxconf nous propose de le redémarrer à chaque fois
/usr/local/sbin/ndc reload >/dev/null 2>&1 || echo start
exit 0
;;
*)
echo "Utilisation: named {start|stop|status|restart}"
exit 1
esac
exit 0
Sur les systèmes Caldera OpenLinux, vous avez juste besoin de modifier les variables définies au début et le système va s'occuper du reste pour vous :
NAME=named DAEMON=/chroot/named/bin/$NAME OPTIONS="-t /chroot/named -u named -g named"
Vous devez aussi ajouter ou modifier quelques options dans votre
named.conf pour avoir vos différents répertoires en
ordre. En particulier, vous devez ajouter (ou changer, si vous les avez
déjà) les directives suivantes dans la section
options :
directory "/etc/namedb"; pid-file "/var/run/named.pid"; named-xfer "/bin/named-xfer";
Puisque ce fichier est lu par le démon named, tous les chemins sont naturellement relatifs à l'environnement restreint.
Quelques personnes ont aussi rapporté devoir ajouter quelques lignes
supplémentaires à leur named.conf pour obtenir un
fonctionnement correct de ndc :
controls {
unix "/var/run/ndc" perm 0600 owner 0 group 0;
};