之前介绍过BIND的基本使用啦。关于BIND的入门级使用方法见:http://www.cnblogs.com/anpengapple/p/5877661.html简易教程系列,本篇只讲BIND安装。

本来源码安装不想介绍了,但是最近重装的时候,还是爆出来好多问题。唉,apt方式装习惯了,生成配置文件的脚本都是按照apt的目录和用户来的,源码方式有些坑。所以,还是介绍一下吧(有些部分是直接照前面扒下来的)。

首先,因为需要开启DNSSec,所以必须要安装openssl。如果不需要装,或者已经安装好了openssl,可以跳过这步。

****************安装openssl的分割线****************

openssl尽量使用源码安装,先从官网(https://www.openssl.org/)下载到最新稳定版(我的是1.0.2h,没用最新版,应该没什么区别),然后,跟通常的软件稍微有点不一样。

tar zxvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
sudo ./config --prefix=/usr/local (注意这里是config而不是configure)
sudo make depend (注意这里必须先depend)
sudo make
sudo make install

因为少写了一句depend坑了我一个礼拜。。。openssl装上没有报错,但是在安装BIND的时候./configure就死活过不去了,报这么个错:

checking for OpenSSL library... using OpenSSL from /usr/local/lib and /usr/local/include
checking whether linking with OpenSSL works... no
configure: error: Could not run test program using OpenSSL from
/usr/local/lib and /usr/local/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).

找这个破玩意我都快哭了。后来还是自己无限次安装openssl,然后在一个角落里看到的一句make depend,拯救了我一颗破碎的心。

**********************************
*
* 跳过openssl安装的同学从这里开始看
*
**********************************

好,接下来进入正题BIND的安装,还是使用源码。到官网(https://www.isc.org/downloads/)下载最新的稳定版本BIND(我现在用的是9.10.4-P3,因为之前的P1和P2版本最近爆出来一个严重的漏洞)。然后

tar zxvf bind-9.10.-P2.tar.gz
cd bind-9.10.-P2
sudo ./configure --sysconfdir=/etc/bind --with-libtool
sudo make
sudo make install

configure的参数视自己具体情况而定。主要有这么几个:

  • --prefix=/usr/local:named的默认位置就是这里,可以不写,如果放其他目录下要写。
  • --sysconfdir:我习惯把所有配置文件放在/etc/bind下面,就加上--sysconfdir,如果不加的话,name.conf默认在/etc下面,很乱。
  • --with-libtool:据说加上之后能让编译出来的文件是.so而非.a,占用空间较小。不过我加上这个参数之后make编译会报错,我对这种编译方式不是很熟,所以就放弃了。
  • --enable-threads:很多网页上介绍了这个参数,其实没必要,带这个参数是让BIND以多线程方式启动,默认线程数等于CPU核心数。现在这个参数是默认的。
  • --without-openssl:如果不想要安装openssl,需要使用这个参数。

装完之后,为了启动方便和安全性(其实就是为了启动方便),我们最好给BIND建立用户,然后弄个启动脚本。
建立bind用户:

groupadd bind
useradd -g bind -d /usr/local/sbin bind

注意这里的-d是用户主目录。我们这里是默认安装的BIND,named和rndc都是安装在/usr/local/sbin中的。包括我后面写的自动启动脚本中,有很多地方写到这个目录,如果指定了别的目录,或者以后BIND默认安装到其他目录了,也需要修改(话说,apt方式是默认装在/usr/sbin中,从别的地方拿来的启动脚本不能用我也是各种尴尬,后来各种改)。

好了,最后是BIND的启动脚本:

下面这个脚本放在 /etc/init.d/bind9:

#!/bin/sh -e

### BEGIN INIT INFO
# Provides: bind9
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Should-Start: $network $syslog
# Should-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Short-Description: Start and stop bind9
# Description: bind9 is a Domain Name Server (DNS)
# which translates ip addresses to and from internet names
### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin # for a chrooted server: "-u bind -t /var/lib/named"
# Don't modify this line, change or create /etc/default/bind9.
OPTIONS=""
RESOLVCONF=no test -f /etc/default/bind9 && . /etc/default/bind9 test -x /usr/local/sbin/rndc || exit . /lib/lsb/init-functions
PIDFILE=/var/run/named/named.pid check_network() {
if [ -x /usr/bin/uname ] && [ "X$(/usr/bin/uname -o)" = XSolaris ]; then
IFCONFIG_OPTS="-au"
else
IFCONFIG_OPTS=""
fi
if [ -z "$(/sbin/ifconfig $IFCONFIG_OPTS)" ]; then
#log_action_msg "No networks configured."
return
fi
return
} case "$1" in
start)
log_daemon_msg "Starting domain name service..." "bind9" modprobe capability >/dev/null >& || true # dirs under /var/run can go away on reboots.
mkdir -p /var/run/named
chmod /var/run/named
chown root:bind /var/run/named >/dev/null >& || true if [ ! -x /usr/local/sbin/named ]; then
log_action_msg "named binary missing - not starting"
log_end_msg
fi if ! check_network; then
log_action_msg "no networks configured"
log_end_msg
fi if start-stop-daemon --start --oknodo --quiet --exec /usr/local/sbin/named \
--pidfile ${PIDFILE} -- $OPTIONS; then
if [ "X$RESOLVCONF" != "Xno" ] && [ -x /sbin/resolvconf ] ; then
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.named
fi
log_end_msg
else
log_end_msg
fi
;; stop)
log_daemon_msg "Stopping domain name service..." "bind9"
if ! check_network; then
log_action_msg "no networks configured"
log_end_msg
fi if [ "X$RESOLVCONF" != "Xno" ] && [ -x /sbin/resolvconf ] ; then
/sbin/resolvconf -d lo.named
fi
pid=$(/usr/local/sbin/rndc stop -p | awk '/^pid:/ {print $2}') || true
if [ -z "$pid" ]; then # no pid found, so either not running, or error
pid=$(pgrep -f ^/usr/local/sbin/named) || true
start-stop-daemon --stop --oknodo --quiet --exec /usr/local/sbin/named \
--pidfile ${PIDFILE} -- $OPTIONS
fi
if [ -n "$pid" ]; then
sig=
n=
while kill -$sig $pid >/dev/null; do
if [ $n -eq ]; then
echo "waiting for pid $pid to die"
fi
if [ $n -eq ]; then
echo "giving up on pid $pid with kill -0; trying -9"
sig=
fi
if [ $n -gt ]; then
echo "giving up on pid $pid"
break
fi
n=$(($n+))
sleep
done
fi
log_end_msg
;; reload|force-reload)
log_daemon_msg "Reloading domain name service..." "bind9"
if ! check_network; then
log_action_msg "no networks configured"
log_end_msg
fi /usr/local/sbin/rndc reload >/dev/null && log_end_msg || log_end_msg
;; restart)
if ! check_network; then
log_action_msg "no networks configured"
exit
fi $ stop
$ start
;; status)
ret=
status_of_proc -p ${PIDFILE} /usr/local/sbin/named bind9 >/dev/null || ret=$?
exit $ret
;; *)
log_action_msg "Usage: /etc/init.d/bind9 {start|stop|reload|restart|force-reload|status}"
exit
;;
esac exit

注意里面的named和rndc的目录位置!

下面这个脚本放在 /etc/default/bind9:

# run resolvconf?
RESOLVCONF=no # startup options for the server
OPTIONS="-u bind"

如果之前没有建立bind用户,只想用root启动,那么这里最后一行写成

OPTIONS=""

启动脚本写好之后,最后用

sudo chmod  /etc/init.d/bind9

更改权限,然后就可以用

sudo service bind9 start|stop|restart|status

来控制bind了,而不用每次named启动再kill进程。

好啦,就酱。

BIND简易教程(0):在Ubuntu下源码安装BIND(其实跟前面的教程没太大关系)的更多相关文章

  1. ubuntu 下源码安装Postgreql pgAdmin3

    一.安装 PostgreSQL 1.安装相关依赖,在终端下执行: sudo apt-get install zlib1g-dev    sudo apt-get install libreadline ...

  2. ubuntu下源码安装wget

    1.背景 ubuntu18.04 64bit 2.安装方法如下: 2.1.获取源码 curl -o wget-1.20.tar.gz ftp://ftp.gnu.org/gnu/wget/wget-1 ...

  3. CentOS 7下源码安装MySQL 5.7

    网上说linux安装mysql服务分两种安装方法: ①源码安装,优点是安装包比较小,只有几十M左右,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: ②使用官方编译好的二进制文件安装,优点 ...

  4. 在 CentOS 下源码安装 Xen

    http://www.vpsee.com/2010/04/install-xen-on-centos-from-source/ 在 CentOS 源码编译安装 Xen 的过程和在 Debian 上编译 ...

  5. centos 6x系统下源码安装mysql操作记录

    在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...

  6. CentOS下源码安装Apache2.4+PHP5.4+MySQL5.5

    一.准备(把所有的源文件放在‘/home/yuanjun’目录下) apr http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz apr-util ...

  7. 在ConoHa上Centos7环境下源码安装部署LNMP

    本文记录了从源码,在Centos 7上手动部署LNMP环境的过程,为了方便以后对nginx和mariadb进行升级,这里采用yum的方式进行安装. 1.建立运行网站和数据库的用户和组 groupadd ...

  8. CentOS7 下源码安装 python3

    CentOS 7 下源码安装 python3   在CentOS7下,默认安装的是python2.7:为满足项目要求,安装python3 的方法如下:   1. 首先安装python3.6可能使用的依 ...

  9. CentOS7.3环境下源码安装httpd

    CentOS7.3环境下源码安装httpd 本文在CentOS7.3下,源码安装apache服务httpd2.4. 1.下载好源码安装包 [root@localhost ~]#ll total 625 ...

随机推荐

  1. ExtJs6解决添加和修改Form共用一个form的隐藏域的id的取消传值

    问题重现:修改不会有问题,id会绑定之前的grid,有具体数字 添加有问题,因为id是空,传的是绑定值的话会显示“类名-1”,从int类型变成了string类型,后台会出错 这是EduQuestion ...

  2. Web后台模拟前端post(带NTLM验证)

    using System.Data; using System.Net; using System.IO; using System.Net.Http; using System.Web; using ...

  3. AngularJS的基础知识

    一.AngularJS指令与表达式 [AngularJS常用指令]1.ng-app:声明Angular所管辖的区域,一般写在body或HTML上,原则上一个页面只有一个.2.ng-model:把元素值 ...

  4. 02.ToString()方法详解

    ToString()使用方法汇总(C#) C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 ...

  5. VMware下安装Linux(Centos)步骤

    VMware下安装Linux(Centos)步骤 准备步骤:(安装软件教程采用 VMware 9 .Centos6.5 为例) 启动VMware的画面 点击File--->New Virtua ...

  6. https加解密过程

    前前后后,看了许多次关于https加解密过程的相关文档资料,一直似懂非懂.这次,终于理解了,还画了个图,做个记录. 知识点 1.对称加密:双方用同一个密码加解密.如des,aes 2.非对称加密:双方 ...

  7. java 错误: 未报告的异常错误Exception; 必须对其进行捕获或声明以便抛出

    import java.io.FileInputStream; import java.util.Properties; import java.sql.Connection; import java ...

  8. 爬虫之lxml - etree - xpath的使用

    # 解析原理: # - 获取页面源码数据 # - 实例化一个etree对象,并且将页面源码数据加载到该对象中 # - 调用该对象的xpath方法进行指定标签定位 # - xpath函数必须结合着xpa ...

  9. 申请微信小程序步骤

    一.注册 注册网址:https://mp.weixin.qq.com/ 选择账号类型:选择 小程序 注册账号 填写邮箱密码并激活:未注册过公众平台.开放平台.企业号.未绑定个人号的邮箱. 填写主体信息 ...

  10. 软件项目技术点(7)——在canvas上绘制自定义图形

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 图形种类 目前我们软件可以绘制出来的形状有如下这几种,作为开发者我们一直想支持用户可以拖拽的类似word里面图形库,但目前还没有找到比 ...