Pxe实现无人值守安装操作系统
我们管理机房时当购进一批新的服务器后我们都要给它安装一个系统,但是假如机房里机器数量很多,我们一台一台的去安装而且还得去一个一个选选项这样很浪费时间而且也很麻烦,所以我们就想能不能实现我们只把机器接上电源后他们就可以自动安装系统,实现无人值守安装。今天我们就来实现这样的一个功能
环境:
操作系统CentOs release 6.4
需要搭建的服务:ftp、dfcp、tftp-server、system-config-kickstart
我们先把yum的安装环境构建一下
所以我们只需要CentOS-Media.repo就可以了
[root@localhost yum.repos.d]# rm CentOS-Base.repo
rm: remove regular file `CentOS-Base.repo'? Y
[root@localhost yum.repos.d]# rm CentOS-Debuginfo.repo
rm: remove regular file `CentOS-Debuginfo.repo'? Y
[root@localhost yum.repos.d]# rm CentOS-Vault.repo
rm: remove regular file `CentOS-Vault.repo'? Y
我们再来配置一下 CentOS-Media.repo
[root@localhost yum.repos.d]# vim CentOS-Media.repo
19 gpgcheck=1
20 enabled=0
21 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
我们把第二十行的enabled=0改成enabled=1,保存退出。
接下来我们先把主服务器的换将搭建好,我们需要ftp、dfcp、tftp-server、system-config-kickstart
[root@localhost yum.repos.d]# yum install vsftpd -y
[root@localhost yum.repos.d]# yum install dhcp tftp-server system-config-kickstart
配置dhcp
这几个安装完成后,我们需要把这些服务都配置一下,我们先来配置DHCP服务,dhcp服/务的配置文件在 /etc/dhcp/dhcpd.conf
[root@localhost yum.repos.d]# vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
~
我们把/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample下的内容读取到这个配置文件中
在底行命令模式下 :r /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
模板配置文件就都输入到了我们的dhcp的配置文件中了,我们在配置文件改动一下
//////////要注意命令后边儿的分号
配置tftp
TFTP是简单文件传输协议,是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
我们通过rpm工具查看tftp的安装目录
[root@localhost ~]# rpm -ql tftp-server
/etc/xinetd.d/tftp
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-0.49
/usr/share/doc/tftp-server-0.49/CHANGES
/usr/share/doc/tftp-server-0.49/README
/usr/share/doc/tftp-server-0.49/README.security
/usr/share/doc/tftp-server-0.49/README.security.tftpboot
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot //tftp的根目录,我们上传或下载文件都是从这里开始
我们可以看到一个/etc/xinetd.d/tftp这说明这是独立守护进程并且还是依赖于超级守护进程的,所以我们要到/etc/xinetd.d 下找tftp
[root@localhost ~]# ll /etc/xinetd.d/tftp
-rw-r--r--. 1 root root 518 Sep 23 2011 /etc/xinetd.d/tftp
[root@localhost ~]# vim /etc/xinetd.d/tftp
13 server_args = -s /var/lib/tftpboot
14 disable = yes //把yes改成no
15 per_source = 11
16 cps = 100 2
修改之后我们需要启动这个超级守护进程
[root@localhost ~]# service xinetd start
Starting xinetd: [ OK ]
开机启动
[root@localhost ~]# chkconfig xinetd on
接下来我们进tftp的根目录,我们刚刚看到的 /var/lib/tftpboot/
[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# ll
total 0
我们的客户机动态通过dhcp服务器获得了ip之后又知道了我们的next-server tftp服务器就该发送请求到我们的tftp目录下来获取资源,我们既然做的是基于网络的系统安装,那得有内核有驱动程序等等,这些东西又从哪里得来呢,从光盘上。
[root@localhost ~]# ls /media/cdrom/isolinux/
TRANS.TBL grub.conf isolinux.cfg vesamenu.c32 boot.cat initrd.img memtest vmlinuz boot.msg isolinux.bin splash.jpg
其中vmlinuz就是内核,initrd.img 是驱动。我们把它拷贝到tftp的目录下
[root@localhost tftpboot]# cp /media/cdrom/isolinux/vmlinuz ./
[root@localhost tftpboot]# cp /media/cdrom/isolinux/initrd.img ./
[root@localhost tftpboot]# ll
total 35684
-r--r--r--. 1 root root 32491856 Apr 19 00:19 initrd.img
-r-xr-xr-x. 1 root root 4043888 Apr 19 00:09 vmlinuz
刚刚我们配置dhcp时添加了一行 filename “pxelinux.0” 这是启动pxe的驱动这个文件光盘里没有我们得安装一个叫syslinux的软件
[root@localhost tftpboot]# yum install syslinux
然后我们在/usr/share/syslinux/目录下可以看到这个pxelinux.0这个文件我们把它拷贝到tftp目录下
[root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 ./
Pxe的驱动有了,但是我们还缺少一个配置文件。我们来创建一个名为pxelinux.cfg的目录然后再在里边儿创建一个引导系统的groub引导程序。
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cd pxelinux.cfg/
[root@localhost pxelinux.cfg]# cp /media/cdrom/isolinux/isolinux.cfg default //为什么文件名设置为default请听后边儿分解
[root@localhost pxelinux.cfg]# ll
total 4
-r--r--r--. 1 root root 936 Apr 19 01:37 default
到这里我们的tftp服务器就算是配置完毕了接下来我们配置一下vsftp
配置vsftp
[root@localhost ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@localhost ~]# chkconfig vsftpd on //开机启动ftp
[root@localhost ~]# cd /var/ftp
[root@localhost ftp]# cp -r /media/cdrom/. ./ & //把系统拷贝ftp目录下,& 后台运行
[1] 1936
[root@localhost ftp]# jobs //查看后台运行
[1]+ Running cp -i -r /media/cdrom/. ./ &
ftp服务器这样就配置完了。
我们还得考虑一点,机房这么多机器它们得有主机名吧!并且还得是不一样的。所以我们得编写个脚本来给这些主机自动分配个名字,并且还不能把机器都搞混了。刚好我们给每个机器都自动分配的有地址,我们可以让ip地址的第四段来做主机名,这样我们也就知道哪个ip对应哪个主机了。
[root@localhost ~]# ifconfig eth0 |grep 'inet\>'
inet addr:192.168.3.100 Bcast:192.168.3.255 Mask:255.255.255.0
我们要把那个100给取出来,也就是截取第二列
[root@localhost ~]# ifconfig eth0 |grep 'inet\>' |awk '{print $2}'
addr:192.168.3.100
然后我们可以把最后一个 . 前面的都不要,这样就只剩100了
[root@localhost ~]# STRING=`ifconfig eth0 |grep 'inet\>' |awk '{print $2}'`
[root@localhost ~]# echo $STRING
addr:192.168.3.100
[root@localhost ~]# echo ${STRING##*.}
100
主机名对应的文件
[root@localhost ~]# ll /etc/sysconfig/network
-rw-r--r--. 1 root root 46 Apr 17 21:31 /etc/sysconfig/network
[root@localhost ~]# vim /etc/sysconfig//network
NETWORKING=yes
HOSTNAME=localhost.localdomain
但是我们的客户机的IP地址是自动获得的,我们的主机名不能随着ip地址变化而变化,所以我们要把客户机的IP地址改成静态的编写一个脚本1.sh
[root@localhost ~]# vim 1.sh
#!/bin/bash
STRING=`ifconfig eth0 |grep "inet\>" |awk '{print $2}'`
NUM=${STRING##*.}
sed -i -e "s@HOSTNAME.*@HOSTNAME=station$NUM.a.com@" /etc/sysconfig/network
sed -i -e "s@BOOTPROTO.*@BOOTPROTO=static\nIPADDR=192.168.3.$NUM\nNETMASK =255.255.255.0@" /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# bash 1.sh
NETWORKING=yes
HOSTNAME=station100.a.com
DEVICE=eth0
HWADDR=00:0c:29:7e:17:21
TYPE=Ethernet
UUID=0caaf039-3eaa-4f46-b274-47e7d5de4f58
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.3.100
NETMASK=255.255.255.0
IPADDR=192.168.3.100
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
IPV6INIT=no
USERCTL=no
脚本执行正确没有问题,我们把dhcp服务启动起来
[root@localhost ~]# service dhcpd start
Starting dhcpd: [ OK ]
[root@localhost ~]# chkconfig dhcpd on
我们把tftp也启动起来
[root@localhost ~]# service xinetd start //因为tftp是依赖于超级守护进程
Starting xinetd: [ OK ]
[root@localhost ~]# chkconfig xinetd on
tftp启动起来了也正常
我们切换到/var/ftp目录下,光盘下的文件都已经拷贝了进来,现在只缺少一个ks.cfg
[root@localhost ~]# cd /var/ftp
[root@localhost ftp]# ll
total 320
-r--r--r--. 1 root root 14 Apr 19 01:42 CentOS_BuildTag
dr-xr-xr-x. 3 root root 4096 Apr 19 01:42 EFI
-r--r--r--. 1 root root 212 Apr 19 01:42 EULA
-r--r--r--. 1 root root 18009 Apr 19 01:42 GPL
dr-xr-xr-x. 2 root root 253952 Apr 19 01:46 Packages
-r--r--r--. 1 root root 1354 Apr 19 01:46 RELEASE-NOTES-en-US.html
-r--r--r--. 1 root root 1706 Apr 19 01:46 RPM-GPG-KEY-CentOS-6
-r--r--r--. 1 root root 1730 Apr 19 01:46 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r--. 1 root root 1730 Apr 19 01:46 RPM-GPG-KEY-CentOS-Security-6
-r--r--r--. 1 root root 1734 Apr 19 01:46 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r--. 1 root root 3380 Apr 19 01:46 TRANS.TBL
dr-xr-xr-x. 3 root root 4096 Apr 19 01:43 images
dr-xr-xr-x. 2 root root 4096 Apr 19 01:43 isolinux
drwxr-xr-x. 2 root root 4096 Feb 19 2013 pub
dr-xr-xr-x. 2 root root 4096 Apr 19 01:46 repodata
现在就只剩下ks.cfg了,我们通过启动Kickstart Configurator来设置ks.cfg
[root@localhost ftp]# system-config-kickstart //启动Kickstart Configurator
(一)
(二)
(三)
(四)
(五)
(六)
Authentication 项默认不改
(七)
(八)
Display Configuration 选项默认
(九)
(十)
Pre-Installtion Script 选项默认
(十一)
Post-Installtion Script (后安装脚本)
我们把刚刚编写测试通过的那个脚本给复制到这里边儿
(十二)
保存退出
[root@localhost ~]# ls
1.sh Documents Music Public Videos install.log ks.cfg
Desktop Downloads Pictures Templates anaconda-ks.cfg install.log.syslog loganalyzer-3.6.5.tar.gz
现在root目录下有了ks.cfg文件
我们把这个文件也放到/var/ftp目录下
[root@localhost ~]# cp ks.cfg /var/ftp
现在有了ks.cf文件,客户机还不知道ks.cfg的位置,我们通过配置pxelinux.0的配置文件来告诉它们ks.cfg的位置,pxelinux.0的配置文件为/var/lib/tftpboot/pxelinux.cfg/default
[root@localhost ~]# cd /var/lib/tftpboot/pxelinux.cfg/
[root@localhost pxelinux.cfg]# ll
total 4
-r--r--r--. 1 root root 936 Apr 19 01:37 default
[root@localhost pxelinux.cfg]# vim default
1 default vesamenu.c32 修改为 default linux 即直接指向linux选项
2 #prompt 1 把#去掉
3 timeout 600 等待时间为秒我们设置为6
4
5 display boot.msg
6
7 menu background splash.jpg
8 menu title Welcome to CentOS 6.4!
9 menu color border 0 #ffffffff #00000000
10 menu color sel 7 #ffffffff #ff000000
11 menu color title 0 #ffffffff #00000000
12 menu color tabmsg 0 #ffffffff #00000000
13 menu color unsel 0 #ffffffff #00000000
14 menu color hotsel 0 #ff000000 #ffffffff
15 menu color hotkey 7 #ffffffff #ff000000
16 menu color scrollbar 0 #ffffffff #00000000
17
18 label linux
19 menu label ^Install or upgrade an existing system
20 menu default //这就是我们刚刚为什么要把这个文件名设置为default
21 kernel vmlinuz
22 append initrd=initrd.img 追加一句 ks=ftp://192.168.3.100/ks.cfg
23 label vesa
24 menu label Install system with ^basic video driver
强制保存退出! :wq!
到这里我们所有的文件就都已经配置好了,我们直接安装一台主机测试一下,我们在虚拟机上做测试,新建一个虚拟机,一切模拟现实环境。注意:不要选择使用本地dhcp服务将ip地址分配给虚拟机否则客户机不能从我们的服务器上分配我们设定的地址而且不能找到tftp和ftp上的文件,网卡我们也要选择成仅主机模式。
这是我们新建的虚拟机
安装完成
以后如果我们遇到这种需要同时安装多台机器时就可以使用这种基于网络的pxe无人值守安装,我们只需要把机器都打开电源就可以实现自动安装了!