我应该提一下,如果您已经安装了 BIND,比如通过 RPM 包安装的,那么在安装新的版本之前,您应该先移除旧版本。在 Red Hat 系统上,这通常意味着你需要移除 bind
和 bind-utils
软件包,如果你安装了 bind-devel
和 caching-nameserver
,也可能需要移除它们。
您可能需要保存一份 init 脚本的副本 (例如,/etc/rc.d/init.d/named
),如果有的话,在执行移除操作之前;这在稍后会很有用。
如果您是从旧版本的 BIND 升级,例如 BIND 8,您需要阅读 BIND 源代码包中 doc/misc/migration
文件中的迁移文档。本文档不处理任何迁移问题;我只是假设您正在替换一个现有的、可正常工作的 BIND 9 安装。
这是简单的部分 :-) 。只需运行 make install
并让它为您处理即可。真的,就这么简单!
如果您从您的发行版中获得了一个现有的 init 脚本,那么最好的做法可能是简单地修改它,以使用适当的开关来运行新的二进制文件。 这些开关是... (请击鼓...)
-u named
,它告诉 BIND 以用户 named
而不是 root
的身份运行。-t /chroot/named
,它告诉 BIND 将自身 chroot 到我们设置的 jail 中。-c /etc/named.conf
,它告诉 BIND 在 jail 中查找其配置文件。以下是我在 Red Hat 6.0 系统上使用的 init 脚本。 正如您所见,它几乎与 Red Hat 发行的版本完全相同。 我还没有尝试过 rndc
命令,但我看不出它们有任何理由不能工作。
#!/bin/sh
#
# named This shell script takes care of starting and stopping
# named (BIND DNS server).
#
# chkconfig: 345 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/local/sbin/named ] || exit 0
[ -f /chroot/named/etc/named.conf ] || exit 0
# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting named: "
daemon /usr/local/sbin/named -u named -t /chroot/named -c /etc/named.conf
echo
touch /var/lock/subsys/named
;;
stop)
# Stop daemons.
echo -n "Shutting down named: "
killproc named
rm -f /var/lock/subsys/named
echo
;;
status)
status named
exit $?
;;
restart)
$0 stop
$0 start
exit $?
;;
reload)
/usr/local/sbin/rndc reload
exit $?
;;
probe)
# named knows how to reload intelligently; we don't want linuxconf
# to offer to restart every time
/usr/local/sbin/rndc reload >/dev/null 2>&1 || echo start
exit 0
;;
*)
echo "Usage: named {start|stop|status|restart|reload}"
exit 1
esac
exit 0
与 syslogd 一样,从 Red Hat 7.2 开始,此过程甚至更加容易。 有一个名为 /etc/sysconfig/named
的文件,可以在其中定义 syslogd 的额外参数。 但是,Red Hat 7.2 上的默认 /etc/rc.d/init.d/named
将在启动前检查 /etc/named.conf
的存在。 您需要更正此路径。
在 Caldera OpenLinux 系统上,您只需修改顶部定义的变量,它显然会为您处理其余的事情
NAME=named
DAEMON=/usr/local/sbin/$NAME
OPTIONS="-t /chroot/named -u named -c /etc/named.conf"
对于 FreeBSD 4.3,您可以编辑 rc.conf
文件并在其中输入以下内容
named_enable="YES"
named_program="chroot/named/bin/named"
named_flags="-u named -t /chroot/named -c /etc/namedb/named.conf"
您还需要在 named.conf
中添加或更改一些选项,以保持各个目录的正确。 特别是,您应该在 options
部分添加(或更改,如果您已经拥有它们)以下指令
directory "/etc/namedb";
pid-file "/var/run/named.pid";
statistics-file "/var/run/named.stats";
由于此文件由 named
守护进程读取,因此所有路径当然都相对于 chroot jail。 截至撰写本文时,BIND 9 不支持以前版本中的许多统计信息和转储文件。 据推测,以后的版本会支持;如果您运行的是这样的版本,您可能需要添加额外的条目以使 BIND 也将它们写入 /var/run
目录。