Pxe实现无人值守安装操作系统

Pxe实现无人值守安装操作系统


   我们管理机房时当购进一批新的服务器后我们都要给它安装一个系统,但是假如机房里机器数量很多,我们一台一台的去安装而且还得去一个一个选选项这样很浪费时间而且也很麻烦,所以我们就想能不能实现我们只把机器接上电源后他们就可以自动安装系统,实现无人值守安装。今天我们就来实现这样的一个功能


环境:

操作系统CentOs  release 6.4

需要搭建的服务:ftpdfcptftp-serversystem-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,保存退出。

接下来我们先把主服务器的换将搭建好,我们需要ftpdfcptftp-serversystem-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的配置文件中了,我们在配置文件改动一下

wKioL1NSVLDDVpjkAAb3Ta3Oy4g830.jpg

//////////要注意命令后边儿的分号


配置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

(一)

wKiom1NSVPWR5nQNAAM41Aw_zpw810.jpg

()

wKiom1NSVQai-2hDAAJOW0ICXKw446.jpg

(三)

wKioL1NSVPKw0BvCAALgmDeB77I107.jpg

(四)

wKiom1NSVSmT5mhUAALZO2i8IPQ094.jpg

(五)

wKioL1NSVQ6gkAbQAAJ1RZtKINA580.jpg

(六)

Authentication 项默认不改

(七)

wKiom1NSVUvxvLeBAAH_6HCFgj4162.jpg

(八)

Display Configuration 选项默认

(九)

wKioL1NSVjjx8r_KAAPxj7CmM28620.jpg

(十)

Pre-Installtion Script 选项默认

(十一)

Post-Installtion Script  (后安装脚本)

我们把刚刚编写测试通过的那个脚本给复制到这里边儿

wKioL1NSVlOwb7jMAAMkInEbm9Y738.jpg

(十二)

保存退出

wKiom1NSVpqwh6wOAAM9KUh3a8I123.jpg

[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地址分配给虚拟机否则客户机不能从我们的服务器上分配我们设定的地址而且不能找到tftpftp上的文件,网卡我们也要选择成仅主机模式。

wKiom1NSVrGx7SAhAAG-zu-g9yw841.jpg

这是我们新建的虚拟机

wKioL1NSVsChWbH8AAH43v6UNCQ782.jpg

wKiom1NSVuuhKWKGAAMyIwVlCJc359.jpg

wKiom1NSVuuRTqQsAAFMch22mGk389.jpg

wKioL1NSVsOwnW-HAAGqHZt-STE455.jpg




安装完成

wKioL1NSV0qg1oJHAAKJX-uHoaU657.jpg

以后如果我们遇到这种需要同时安装多台机器时就可以使用这种基于网络的pxe无人值守安装,我们只需要把机器都打开电源就可以实现自动安装了!


你可能感兴趣的:(系统安装,pxe自动无人值守安装)