首页 > 代码库 > vmware上搭建kickstart 网络安装centos6.2的过程

vmware上搭建kickstart 网络安装centos6.2的过程

前言

什么是PXE? 

PXE(Pre-boot Execution Environment,预启动执行环境)协议使计算机可以通过网络启动。协议分client和server。

  • PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。
  • PXE server 需要配置 DHCP 服务器和 TFTP 服务器。DHCP 服务器用来给 PXE client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 支持。此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。

什么是kickstart?

KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。 如安装完centos后,/root/anaconda-ks.cfg 记录了安装过程中需要人工选择的项,这个文件就是 kickstart 配置文件,可以用于其他同样配置的centos自动安装,使用方法是配置安装树里边的 isolinux.cfg

label linux
 menu label ^Install or upgrade an existing system
 menu default
 kernel vmlinuz
 #append ks=cdrom:/ks.cfg initrd=initrd.img text  // ks 文件放在安装ISO盘里
 append ks=http://192.168.0.1/ks.cfg initrd=initrd.img text // ks 文件放在服务器上
pxe 和 kickstart 技术在大规模部署的时候是必备技术

实验环境

本次实验在 vmware workstation 10 虚拟平台上进行,所有虚拟机使用的OS都是 CentOS-6.2-x86_64-minimal。实验的拓扑图如下, 共三台虚拟机,从网络安装实验角度,vm0 作为 tftp和http 服务器,上面存放要安装的系统和软件包; vm1 作为 dhcp 服务器,提供dhcp服务及响应pxe dhcp请求;vm2 是客户机。由于实验过程中,vm0和vm1都需要访问外网以便安装各种服务器,所以vm0和vm1都有2块网卡(vm1没画出来),其中eth0采用nat的方式共享物理主机的网络,通过它可以访问外网,可以在主机上用xshell等客户端连进去控制vm0和vm1

  • 按照普通从ISO文件安装系统的步骤,在vmware上安装 vm0 和 vm1, 使用的ISO 是 CentOS-6.2-x86_64-minimal.iso
  • vm0 网络配置

eth0 网络配置

DEVICE="eth0"
BOOTPROTO=dhcp
NM_CONTROLLED="yes"
ONBOOT="yes"

eth1 网络配置

DEVICE="eth1"
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NM_CONTROLLED="yes"
ONBOOT="yes"
  • vm1 网络配置

eth0 网络配置

DEVICE="eth0"
IPADDR=192.168.0.12
GATEWAY=192.168.0.1
NETMASK=255.255.255.0
NM_CONTROLLED="yes"
ONBOOT="yes"

服务器配置

准备要安装的系统

将 minimal iso 挂载到 /mnt/iso 目录备用

mkdir -p /mnt/iso
mount -o loop CentOS-6.2-x86_64-minimal.iso /mnt/iso

DHCP 服务器

在vm1上, yum install dhcp, 修改配置文件 /etc/dhcp/dhcpd.conf

ddns-update-style none;
allow booting;
allow bootp;
filename "pxelinux.0";
next-server 192.168.0.1;
subnet 192.168.0.0 netmask 255.255.255.0 {
option domain-name-servers 8.8.8.8, 192.168.0.1;
option routers 192.168.0.1;
option subnet-mask  255.255.255.0;
option broadcast-address 192.168.0.255;
default-lease-time 3600;
range dynamic-bootp 192.168.0.10 192.168.0.190;
}

chkconfig dhcpd on 重启dhcp服务, service dhcpd restart

httpd 服务器

yum -y install httpd

  • 关闭防火墙
service iptables stop 或者 iptables -t filter -F
  • 关闭 selinux
setenforce 0 或者 修改  /etc/selinux/config 确保: SELINUX=disabled
  • 配置系统

vi /etc/httpd/conf.d/pxeboot.conf ...

Alias /centos6.2 /boot-images/centos/x86_64/6.2
<Directory /centos6.2>
   Options Indexes FollowSymLinks
   Order Deny,Allow
   Deny from all
   Allow from 127.0.0.1 192.168.0.0/24
</Directory>

将ISO挂载目录里的内容全部拷贝到 http 目录里

mkdir -p /boot-images/centos/x86_64/6.2/
cp -Rv /mnt/iso /boot-images/centos/x86_64/6.2/
chmod -R o+rx /boot-images/

chkconfig httpd on service httpd restart

tftp 服务器

在vm0上,yum -y install tftp-server syslinux xinetd

  • tftp server 配置, 将 /etc/xinet.d/tftp 修改如下:
service tftp
{
       socket_type          = dgram
       protocol             = udp
       wait                    = yes
       user                    = root
       server                = /usr/sbin/in.tftpd
       server_args          = -s /var/lib/tftpboot
       disable                 = no #disable的直由yes变为no
       per_source              = 11
       cps                   = 100 2
       flags                = IPv4
}

chkconfig xinetd on service xinetd restart

  • tftp server 内容

从挂载iso的目录 /mnt/iso 拷贝需要的文件到 tftpboot 从 syslinux 安装目录拷贝 pxelinux.0 到 tftpboot

cd /var/lib/tftpboot 
cp /usr/share/syslinux/pxelinux.0 .
mkdir -p pxelinux.cfg
cp /mnt/iso/isolinux/isolinux.cfg pxelinux.cfg/default
cp /mnt/iso/isolinux/initrd.img .
cp /mnt/iso/isolinux/vmlinuz .
cp /mnt/iso/isolinux/vesamenu.c32 .

接下去修改 /var/lib/tftpboot/pxelinux.cfg/default

timeout 30 
label linux   
  menu label ^Install or upgrade an existing system  
  menu default   
  kernel vmlinuz   
  append initrdinitrd=initrd.img ks=http://192.168.0.1/centos6.2/ks.cfg  // kickstart 安装
  #append initrdinitrd=initrd.img method=http://192.168.0.1/centos6.2 // 交互安装

chmod +x /var/lib/tftpboot/pxelinux.cfg/default

  • kickstart 配置文件
cp anaconda-ks.cfg /boot-images/centos/6.2/ks.cfg 
chmod +r /boot-images/centos/6.2/ks.cfg

修改ks.cfg内容,下面是一种例子:

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
url --url=http://192.168.0.1/centos6.2
lang en_US.UTF-8
keyboard us
network --bootproto=dhcp --onboot=on --device=eth0
network --nameserver=8.8.8.8 --hostname=jiayy.com
rootpw  123456
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc America/New_York
bootloader --location=mbr --driveorder=sda --append=" rhgb crashkernel=auto quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --linux --drives=sda
part /boot --fstype=ext4 --size=500
part pv.008002 --grow --size=1
volgroup VolGroup  pv.008002
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=2048 --maxsize=5120
logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1024 --maxsize=1984
logvol /tmp --name=lv_tmp --vgname=VolGroup --grow --size=2048 --maxsize=1984

repo --name="CentOS"  --baseurl=http://192.168.0.1/centos6.2 --cost=100

%packages --nobase
@core
%end

 

客户端

新建虚拟机,注意选"稍后安装系统",如下图

 

编辑虚拟机设置-网络适配器-选自定义网络vmnet0,如下图

 

启动之后按F2进入bios,选择从网络启动,然后就会一路安装

参考

 http://my.oschina.net/lionel45/blog/111618  

http://wiki.centos.org/HowTos/NetworkInstallServer 

http://carllai.blog.51cto.com/1664997/1053292  

http://darktraining.com/linux/88/ http://javaarm.com/faces/display.xhtml?tid=2972