利用kickstart实现pxe的自动化安装
kickstart是一个利用Anconda工具实现服务器自动化安装的方法;通过生成的kickstart配置文件ks.cfg,服务器安装可以实现从裸机到全功能服务的的非交互式(无人值守式)安装配置;ks.cfg是一个简单的文本文件,文件包含Anconda在安装系统及安装后配置服务时所需要获取的一些必要配置信息(如键盘设置,语言设置,分区设置等);Anconda直接从该文件中读取必要的配置,只要该文件信息配置正确无误且满足所有系统需求,就不再需要同用户进行交互获取信息,从而实现安装的自动化;但是配置中如果忽略任何必需的项目,安装程序会提示用户输入相关的项目的选择,就象用户在典型的安装过程中所遇到的一样。一旦用户进行了选择,安装会以非交互的方式(unattended)继续。
PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000,linux等。
二、pxe自动安装linux 案例
案例拓扑:
案例要求:配置步骤:要求使用kickstart 和 pxe并利用dhcp 、ftp、tftp、yum 服务器 自动化安装linux,安装过后更改主机名为station+ip地址最后一字节数字+a.com; 并将第一次获得的ip 地址作为其静态ip地址。
本案例需要安装的服务器有:
FTP 服务器:用来存放系统安装源文件;
DHCP服务器:用来为客户机分配地址;
TFTP服务器:用来存放pxe的驱动和配置;
YUM 服务器:kickstart的配置时的数据包选择以及软件的安装;
配置本地yum 服务器:
复制/etc/yum.repos.d/rhel-debuginfo.repo 文件为 server.repo
编辑server.repo,并新建Server,Cluster,ClusterStorage,VT仓库
新建挂载点,挂载光驱
测试yum安装是否正确
安装vsftpd 服务
安装DHCP服务
修改dhcp的配置文件
该文件默认为空,需将模本文件内容拷贝到该文件
新建作用域,10.106.108.0
安装TFTP服务
查看TFTP是否已经安装
查看tftp-server安装位置
修改tftp配置文件
重新启动tftp服务,由于tftp为依赖超级守护进程的进程,所以要启动xinetd
四个服务安装完毕,将其设置为开机自启动,其中tftp依赖超级守护进程,自动启动
拷贝光盘的系统文件到ftp目录/var/ftp/pub下
客户机要从tftp服务器上下载配置和驱动,位置在 /tftpboot 下,但默认为空,需从其他位置拷贝驱动和文件
为pxe新建目录 pxelinux.cfg
拷贝安装时的提示文件isolinuxcfg到pxelinux.cfg目录下,并改名为default
下面安装 system-config-kickstart,用来产生ks.cfg文件
启动kickstart
配置kickstart(只有在yum配置正确的情况下才能显示) :
更改主机名为pc+ip地址最后一字节数字; 并将第一次获得的ip 地址作为其静态ip地址例如:pc-101。
将kickstart生成的ks.cfg文件复制到ftp目录下,以便于网络安装。
修改ks.cfg文件,使其安装时省去输入串号
安装时会提示输入串号,在ks.cfg文件中插入key --skip 可省略输入串号。
编辑/etc/dhcpd.conf,next-server:指明tftp服务器的ip地址;filename:pxe的驱动文件
编辑default文件(原名为pxelinux.cfg),指出ks.cfg文件的位置和出口网卡。
修改超时时间,默认为600秒
配置完毕,下面测试无人值守安装linux,不用光驱,不用本地引导。
三、测试
登录后,机器名为pc-100,ip地址最后一字节也为100
查看主机名:
查看/etc/sysconf/network-scripts/ifcfg-eth0文件,已将动态获得IP更改为静态ip
附:本案例中用到的后安装shell
#!/bin/bash
var=`ifconfig eth0 |grep -i bcast |awk '{print $2}'`
NUM=`echo ${var##*.}`
sed -i "s/HOSTNAME.*$/HOSTNAME=pc-$NUM/" /etc/sysconfig/network
STATICIP=`echo $var|awk -F ":" '{print $2}'`
sed -i "s/BOOTPROTO.*$/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPADDR=$STATICIP" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETMASK=255.255.255.0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
转载于:https://blog.51cto.com/jialiang10086/951634