最早在机房安装服务器是自己纯手工搭bind,dhcpd,tftp,http,累死。

后来有了cobbler这个自动装机平台,就一直用cobbler,cobbler其他都好,但是有个巨大的问题,就是repo的管理,其实系统管理员一般都肯定会把CentOS的repo镜像过来,也同时会建立自己的repo,比如saltstack和hadoop等,这样在cobbler下管理这些纯外部repo就比较不灵活,cobbler也没办法强行指定外部repo,如果配了,一重启全没了。

一直在考虑轻量级的装机平台,嗯,现在用得是Dnsmasq+mrepo+syslinux+httpd,这个就简单多了。

首先安装这些软件,如果没有,加上epel的源就有了:

yum install -y dnsmasq mrepo syslinux httpd  

生成一个mac地址备用,得到52:54:f6:65:52:39,这个会用在kvm安装时用:

echo 52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')  
52:54:f6:65:52:39  

然后编辑dnsmasq.conf

vi /etc/dnsmasq.conf  
domain-needed  
bogus-priv  
no-resolv  
no-poll  
#address=/www.google.com/google.com/23.95.9.184
#AliDNS
server=223.5.5.5  
server=223.6.6.6  
# Google
server=8.8.8.8  
server=8.8.4.4

dhcp-range=172.8.2.10,172.8.2.250,30m  
dhcp-host=52:54:f6:65:52:39,linux01,172.8.2.50,net:centos6x  
dhcp-boot=net:centos6x,/centos6-x86_64/pxelinux.0  
dhcp-option=option:router,172.16.8.254  
enable-tftp  
tftp-root = /tftpboot  
log-dhcp  

配置文件中dhcp-range之上是一个简单的dns服务器了,指定了4个上游服务器,也可以作dns记录篡改,#address那行就是。 以下需要大家注意:

  • dhcp-range , dhcp地址池和租约时间
  • dhcp-host , mac,主机名,ip,所属网段(给知道mac的机器指定ip)
  • dhcp-boot , 网段,启动文件(注意,这里的路径是相对路径,相对于tftp-boot而言,所以这里全路径是/tftpboot/centos6-x86_64/pxelinux.0)
  • dhcp-option , 指定一下网关,还有很多别的参数可用
  • enable-tftp , 启动tftp
  • tftp-root , 指定tftp根目录

ok,dnsmasq就设置好了。剩下就设置mrepo就好了,我们建一个centos 6.7的repo。

vi /etc/mrepo.conf  
[main]
srcdir = /var/mrepo  
wwwdir = /var/www/mrepo  
confdir = /etc/mrepo.conf.d  
arch = x86_64  
mailto = bajie@rendoumi.com  
smtp-server = localhost  
pxelinux = /usr/share/syslinux/pxelinux.0  
tftpdir = /tftpboot

[centos6]
release = 6  
arch = x86_64  
metadata = repomd repoview  
name = Centos-$release $arch  
iso = CentOS-$release.7-$arch-bin-DVD?.iso  

mrepo是个自动管理repo的软件,比自己手动去建省事多了。

先不启动mrepo,建立好目录,下载iso放到指定目录

mkdir /tftpboot  
mkdir -p /var/mrepo/iso  
cd /var/mrepo/iso  
wget -b -t 0 http://mirror.neu.edu.cn/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso  
wget -b -t 0 http://mirrors.sina.cn/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD2.iso  

等两个iso下载好后,运行mrepo

mrepo -gvv  

mrepo都做了什么呢?
它自动将两个iso都mount出来

/var/mrepo/iso/CentOS-6.7-x86_64-bin-DVD1.iso on /var/www/mrepo/centos6-x86_64/disc1 type iso9660 (ro,loop=/dev/loop0)
/var/mrepo/iso/CentOS-6.7-x86_64-bin-DVD2.iso on /var/www/mrepo/centos6-x86_64/disc2 type iso9660 (ro,loop=/dev/loop1)

mrepo同时也把pxelinux.0/vmlunuz/initrd.img拷贝到/tftpboot去,并生成了httpd的配置文件/etc/httpd/conf.d/mrepo.conf。

注意:pxelinux.0这个文件是通用的,centos6和7通用,所以说syslinux只装一遍,然后把文件拷走就可以了。

ok, mrepo配完了。

我们生成一下pxe启动文件:

vi /tftpboot/centos6-x86_64/pxelinux.cfg/default

DEFAULT menu  
PROMPT 0  
MENU TITLE Rendoumi | http://www.rendoumi.com/  
TIMEOUT 200  
TOTALTIMEOUT 6000  
ONTIMEOUT centos6.7-x86_64

LABEL local  
        MENU LABEL (local)
        MENU DEFAULT
        LOCALBOOT -1

LABEL centos6.7-x86_64  
        kernel vmlinuz
        MENU LABEL centos6.7-x86_64
        append initrd=initrd.img text repo=http://172.8.2.1/mrepo/centos6-x86_64
        ipappend 2

MENU end  

同时要拷贝menu.c32过去,否则上面的配置无法生效

 cp /usr/share/syslinux/menu.c32 /tftpboot/centos6-x86_64/

重启httpd

service httpd restart  

启动dnsmasq:

service dnsmasq start  

一切就ok了。我们用virsh-install来装一台虚机测试

qemu-img create -f qcow2 /export/kvm/pxe.qcow2 60G  
virt-install \  
      -n pxe \
      -r 4096  \
      --disk path=/export/kvm/pxe.qcow2,format=qcow2,size=60 \
      --vcpus 4  \
      --noautoconsole \
      --pxe \
      --os-type=linux  \
      --network bridge=br0,mac=52:54:f6:65:52:39 \
      --vnc --vnclisten=0.0.0.0 --vncport=5904

注意,如果是用得kvm的虚机,用gPXE的话会有问题:

报No filename or root path specified,郁闷啊,可是在gPXE里面指定filename,就会正常启动:

那必然是dnsmasq有问题了,必须加上参数--dhcp-no-override才可以

/usr/sbin/dnsmasq -d --dhcp-no-override

这样就没问题了。

后记: 我们如果要启用自动安装,default设置如下:

LABEL centos6.7-x86_64  
        kernel vmlinuz
        MENU LABEL centos6.7-x86_64
        append initrd=initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://172.8.2.1/1.ks
        ipappend 2

给个1.ks的范例,大家下载按需编辑即可 http://www.rendoumi.com/soft/1.ks

comments powered by Disqus