设为首页 收藏本站
查看: 468|回复: 0

[经验分享] Pxe实现无人值守安装操作系统

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-19 20:07:34 | 显示全部楼层 |阅读模式
本帖最后由 e23ewe 于 2014-4-19 20:12 编辑

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




环境:

操作系统CentOs  release 6.4

需要搭建的服务:ftp、dfcp、tftp-server、system-config-kickstart






我们先把yum的安装环境构建一下

所以我们只需要CentOS-Media.repo就可以了



[iyunv@localhost yum.repos.d]# rm CentOS-Base.repo

rm: remove regular file `CentOS-Base.repo'? Y

[iyunv@localhost yum.repos.d]# rm CentOS-Debuginfo.repo

rm: remove regular file `CentOS-Debuginfo.repo'? Y

[iyunv@localhost yum.repos.d]# rm CentOS-Vault.repo

rm: remove regular file `CentOS-Vault.repo'? Y


我们再来配置一下 CentOS-Media.repo

[iyunv@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

[iyunv@localhost yum.repos.d]# yum install  vsftpd  -y

[iyunv@localhost yum.repos.d]# yum install dhcp tftp-server system-config-kickstart




配置dhcp



这几个安装完成后,我们需要把这些服务都配置一下,我们先来配置DHCP服务,dhcp服/务的配置文件在/etc/dhcp/dhcpd.conf

[iyunv@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的安装目录

[iyunv@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

[iyunv@localhost ~]# ll /etc/xinetd.d/tftp

-rw-r--r--. 1 root root 518 Sep 23  2011 /etc/xinetd.d/tftp

[iyunv@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


修改之后我们需要启动这个超级守护进程
[iyunv@localhost ~]# service xinetd start

Starting xinetd:                                           [  OK  ]


开机启动

[iyunv@localhost ~]# chkconfig xinetd on


接下来我们进tftp的根目录,我们刚刚看到的 /var/lib/tftpboot/

[iyunv@localhost ~]# cd /var/lib/tftpboot/

[iyunv@localhost tftpboot]# ll

total 0




我们的客户机动态通过dhcp服务器获得了ip之后又知道了我们的next-server  tftp服务器就该发送请求到我们的tftp目录下来获取资源,我们既然做的是基于网络的系统安装,那得有内核有驱动程序等等,这些东西又从哪里得来呢,从光盘上。

[iyunv@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的目录下

[iyunv@localhost tftpboot]# cp /media/cdrom/isolinux/vmlinuz  ./

[iyunv@localhost tftpboot]# cp /media/cdrom/isolinux/initrd.img ./

[iyunv@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的软件

[iyunv@localhost tftpboot]# yum install syslinux


然后我们在/usr/share/syslinux/目录下可以看到这个pxelinux.0这个文件我们把它拷贝到tftp目录下

[iyunv@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0  ./


Pxe的驱动有了,但是我们还缺少一个配置文件。我们来创建一个名为pxelinux.cfg的目录然后再在里边儿创建一个引导系统的groub引导程序。



[iyunv@localhost tftpboot]# mkdir pxelinux.cfg

[iyunv@localhost tftpboot]# cd pxelinux.cfg/

[iyunv@localhost pxelinux.cfg]# cp /media/cdrom/isolinux/isolinux.cfg default    //为什么文件名设置为default请听后边儿分解

[iyunv@localhost pxelinux.cfg]# ll

total 4

-r--r--r--. 1 root root 936 Apr 19 01:37 default


到这里我们的tftp服务器就算是配置完毕了接下来我们配置一下vsftp



配置vsftp

[iyunv@localhost ~]# service vsftpd start

Starting vsftpd for vsftpd:                                [  OK  ]

[iyunv@localhost ~]# chkconfig vsftpd on           //开机启动ftp

[iyunv@localhost ~]# cd /var/ftp

[iyunv@localhost ftp]# cp -r /media/cdrom/.  ./  &   //把系统拷贝ftp目录下,& 后台运行

[1] 1936

[iyunv@localhost ftp]# jobs       //查看后台运行

[1]+  Running                 cp -i -r /media/cdrom/. ./ &




ftp服务器这样就配置完了。



我们还得考虑一点,机房这么多机器它们得有主机名吧!并且还得是不一样的。所以我们得编写个脚本来给这些主机自动分配个名字,并且还不能把机器都搞混了。刚好我们给每个机器都自动分配的有地址,我们可以让ip地址的第四段来做主机名,这样我们也就知道哪个ip对应哪个主机了。

[iyunv@localhost ~]# ifconfig eth0 |grep 'inet\>'

         inet  addr:192.168.3.100  Bcast:192.168.3.255  Mask:255.255.255.0


我们要把那个100给取出来,也就是截取第二列

[iyunv@localhost ~]# ifconfig eth0 |grep 'inet\>' |awk '{print $2}'

addr:192.168.3.100


然后我们可以把最后一个 . 前面的都不要,这样就只剩100了

[iyunv@localhost ~]# STRING=`ifconfig eth0 |grep 'inet\>' |awk '{print $2}'`

[iyunv@localhost ~]# echo $STRING

addr:192.168.3.100

[iyunv@localhost ~]# echo ${STRING##*.}

100




主机名对应的文件

[iyunv@localhost ~]# ll /etc/sysconfig/network

-rw-r--r--. 1 root root 46 Apr 17 21:31 /etc/sysconfig/network

[iyunv@localhost ~]# vim /etc/sysconfig//network



NETWORKING=yes

HOSTNAME=localhost.localdomain




但是我们的客户机的IP地址是自动获得的,我们的主机名不能随着ip地址变化而变化,所以我们要把客户机的IP地址改成静态的编写一个脚本1.sh

[iyunv@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


[iyunv@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服务启动起来

[iyunv@localhost ~]# service dhcpd start

Starting dhcpd:                                            [  OK  ]

[iyunv@localhost ~]# chkconfig dhcpd on


我们把tftp也启动起来

[iyunv@localhost ~]# service xinetd start     //因为tftp是依赖于超级守护进程

Starting xinetd:                                           [  OK  ]

[iyunv@localhost ~]# chkconfig xinetd on



tftp启动起来了也正常


我们切换到/var/ftp目录下,光盘下的文件都已经拷贝了进来,现在只缺少一个ks.cfg

[iyunv@localhost ~]# cd /var/ftp

[iyunv@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

[iyunv@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


[iyunv@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目录下



[iyunv@localhost ~]# cp ks.cfg   /var/ftp



现在有了ks.cf文件,客户机还不知道ks.cfg的位置,我们通过配置pxelinux.0的配置文件来告诉它们ks.cfg的位置,pxelinux.0的配置文件为/var/lib/tftpboot/pxelinux.cfg/default

[iyunv@localhost ~]# cd /var/lib/tftpboot/pxelinux.cfg/

[iyunv@localhost pxelinux.cfg]# ll

total 4

-r--r--r--. 1 root root 936 Apr 19 01:37 default

[iyunv@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上的文件,网卡我们也要选择成仅主机模式。

wKiom1NSVrGx7SAhAAG-zu-g9yw841.jpg






这是我们新建的虚拟机

wKioL1NSVsChWbH8AAH43v6UNCQ782.jpg
wKiom1NSVuuhKWKGAAMyIwVlCJc359.jpg
wKiom1NSVuuRTqQsAAFMch22mGk389.jpg
wKioL1NSVsOwnW-HAAGqHZt-STE455.jpg









安装完成













wKioL1NSV0qg1oJHAAKJX-uHoaU657.jpg


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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-17768-1-1.html 上篇帖子: linux 进程间通信使用共享内存 下篇帖子: 利用pxe实现centos的自动安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表