由于服务器的增多,安装一些新的系统,导致增加了很多工作量,使用pxe+kickstart的结合可以方便,省心的完成需要的操作。

PXE和kickstart的基本原理。

PXE:不是安装方式,只是一种引导方式。分为C/S两端。

kickstart:无人安装值守安装,通过提前填写一些参数,生成一个ks.cfg文件。安装者只需要提供ks.cfg的地方,然后让系统去找安装程序。结束安装。

结合方式:

1,http+tftp+dhcp

2,nfs+tftp+dhcp

3,ftp+tft+dhcp

下面以http+tftp+dhcp为例详解。

上图解释:

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装

1)安装DHCP,并且配置。

文字+图像并存。
yum -y install dhcp
cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {--》定义的网段
range 192.168.1.50 192.168.1.100;--》IP地址范围
option routers 192.168.1.253;--》网关
option subnet-mask 255.255.255.0;--》掩码
option domain-name "station106.magelinux.com";--》域名
option domain-name-servers 202.106.0.20; --》DNS地址
next-server 192.168.1.110;--》tftp的地址,这里是我本机的地址。
filename "pxelinux.0";--》相当于一个引导文件。

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_LINUX_02

启动:
[root@station106 p_w_picpaths]# /etc/init.d/dhcpd restart
Shutting down dhcpd:                                       [  OK  ]
Starting dhcpd:                                            [  OK  ]
查看端口:
[root@station106 p_w_picpaths]# ss -unl
State      Recv-Q Send-Q                                   Local Address:Port                                     Peer Address:Port
UNCONN     0      0                    *:*                              *:67
UNCONN     0      0                    *:*                               *:68
68是dhcpd的服务器端口。
67是dhcpd的客户端端口。
查看dhcp的租出去的Ip和租约时间。

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装_03

查看客户端获取IP地址的时候返回的状态请求和回应。

[root@station106 p_w_picpaths]# tail -f /var/log/boot.log
Feb 10 15:27:20 station106 dhcpd: Copyright 2004-2010 Internet Systems Consortium.
Feb 10 15:27:20 station106 dhcpd: All rights reserved.
Feb 10 15:27:20 station106 dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Feb 10 15:27:20 station106 dhcpd: Wrote 0 class decls to leases file.
Feb 10 15:27:20 station106 dhcpd: Wrote 0 deleted host decls to leases file.
Feb 10 15:27:20 station106 dhcpd: Wrote 0 new dynamic host decls to leases file.
Feb 10 15:27:20 station106 dhcpd: Wrote 3 leases to leases file.
Feb 10 15:27:20 station106 dhcpd: Listening on LPF/eth0/00:0c:29:0a:aa:bb/192.168.1.0/24

2)安装tftp服务。

yum -y install xinetd tftp-server tftp
xinetd是一个服务器的守护进程。
tftp主要是让客户端下载引导文件用的。端口号69。
安装xinetd因为tftp是由xinetd服务管理的。
/etc/xinetd.d/服务--》需要配置的服务都在这个路径下。

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_http+tftp+dhcp的PXE+K_04

[root@station106 ~]# chkconfig tftp on开机启动
[root@station106 ~]# chkconfig --list tftp
tftp            on
service xinetd status默认是启动的。
ss -unl | grep ":69"查看tftp端口。

3)创建安装树。

mkdir /media/cdrom
mkdir /var/www/html/centos6
mount /dev/cdrom /media/cdrom
mount --bind /media/cdrom /var/www/html/centos6/ —》绑定上。url访问的时候用。
service httpd start启动httpd服务。注明(启动的时候时间微长,因为第一次需要解析host文件去,警告信息忽略即可,不收影响。)
ss -untl | grep ":80"查看httpd的端口号。

4)复制用于启动的内核文件。

cp /media/cdrom/p_w_picpaths/pxeboot/vmlinuz /var/lib/tftpboot--》内核文件
cp /media/cdrom/p_w_picpaths/pxeboot/initrd.img /var/lib/tftpboot--》引导文件
cp /media/cdrom/isolinux/boot.msg /var/lib/tftpboot--》
cp /media/cdrom/isolinux/vmsamenu.c32 /var/lib/tftpboot
cp /media/cdrom/isolinux/splash.jpg /var/lib/tftpboot
cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/
这里可能syslinux不存在,如果不在安装下面的包。
yum -y install syslinux
cp /media/cdrom/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default
这里可以做测试了。新建一个虚拟机,网卡调成同一个网段即可。但是安装不会自动化,还需要手动安装。pxe只是一个引导文件。自动化安装还需要结合kickstart。下面继续介绍。

vim /var/lib/tftpboot/pxelinux.cfg/default

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_http+tftp+dhcp的PXE+K_05

5)配置kickstart文件。

配置有两种方式。
第一种用模板。
第二种安装 yum -y install system-config-kickstart 。
我这里使用的是第一种模板。模板提供到下面。
cp anaconda-ks.cfg /var/www/html/
mv anaconda-ks.cfg ks.cfg
vim ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install《--》安装
url --url=http://192.168.1.61/centos6  《--》 光盘路径
#cobbler/ks_mirror/centos-6.4-x86_64/
lang en_US.UTF-8 《--》  语言
keyboard us  《--》 键盘
network --onboot yes --device eth0 --bootproto dhcp --noipv6《=》开机自动启动,不开启ipv6
rootpw  --iscrypted $1$iRHppr42$VMesh73wBqhUTjKp6OYOD.《--》 密码
# Reboot after installation
reboot  《-------------------------》重启
firewall --disabled 《------------------》 防火墙禁用
authconfig --useshadow  --passalgo=sha512
selinux --disabled   (selinux禁用)
timezone Asia/Shanghai (时区)
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet 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 --all
clearpart --all 《-------------------》 清除磁盘
zerombr  《---------》放入到位桶。
#part /boot --fstype=ext4 --size=200
#part pv.008002 --size=61440
#volgroup vg0 --pesize=8192 pv.008002
#logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
#logvol swap --name=swap --vgname=vg0 --size=2048
#logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
#logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480
part /boot --fstype=ext4 --size=200    《-----------》分区boot200M
part pv.008002 --size=61440   《-----------》 物理机60G
volgroup vg0 --pesize=8192 pv.008002  《-------》卷组8G
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
logvol swap --name=swap --vgname=vg0 --size=2048
logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480
repo --name="CentOS"  --baseurl=http://192.168.1.61/centos6  《-》访问路径
#cobbler/ks_mirror/centos-6.4-x86_64/ --cost=100
#repo --name="Fedora EPEL"  --baseurl=http://172.16.0.1/fedora-epel/6/x86_64/ --cost=1000
%packages   选择的安装包
@Base
@Core
@base
@basic-desktop
@chinese-support
@client-mgmt-tools
@core
@desktop-platform
@fonts
@general-desktop
@graphical-admin-tools
@legacy-x
@network-file-system-client
@perl-runtime
@remote-desktop-clients
@x11
ibus-table-cangjie
ibus-table-erbi
ibus-table-wubi
lftp
%end          下面是执行完成后的的脚本
%post
echo -e 'Mage Education Learning Services\nhttp://www.shunzi.com\n' >> /etc/issue 进系统的时候的界面
sed -i '1,$s@id:[0-9]:initdefault:@id:3:initdefault:@g' /etc/inittab   开机直接进入到图形模式
[ ! -d /root/.ssh ] && mkdir /root/.ssh && chmod og=--- /root/.ssh
cat >> /root/.ssh/authorized_keys << EOF
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlmq1z0G/7wbGuSUewfXlFnwzqCg/myqTi/AwP8LP+JJ49xzIKMzpeWXHD8RWIf5RlDzo+6N7uPK5O22x/QtMosi0egz4shavEJeUkO0EH+KygXXgBIGuMWmAsL+yzbgWXT9H3zdzXi/qWcrBeBv2nYB5mpYSf7o0xqdhCst1MTfcYLD8qxvkwC8RiqBA/1u9N6jeDFbHO+UzZYYCr9zgk9uz4Rrhb9BU7c1GhjUCgRwBDAuo47IHw/OT6KS9lb8lT2R/ujVoDARy/eOhw8cAFXo+QcvzNSW2qKf/Qo21uR/wz2u9SRV0lvUDNSvC2PYtR+iPlDwHY81md430yiNf9w== root@server.magelinux.com
EOF
# Enable funcd
sed -i 's@certmaster=.*@certmaster = 172.16.0.1@g' /etc/certmaster/minion.conf
/sbin/chkconfig funcd on
# Set the hostname
ClientName=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F. '{print $NF}'`
sed -i "s@HOSTNAME=.*@HOSTNAME=client$ClientName.magelinux.com@g" /etc/sysconfig/networks
# set puppet agent
sed -i '/\[main\]/a server=server.magelinux.com' /etc/puppet/puppet.conf
/sbin/chkconfig puppet on
# set hosts
echo '172.16.0.1  server.magelinux.com server' >> /etc/hosts
%end
这里操作基本完成。
继续第二次测试安装。这次完全不用手动了。直接安装完成。需要等待。

错误信息:

 

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装_06

原因是没有读取的权限。ks.cfg文件。

chmod +r ks.cfg。这样既可解决。

错误:路径错误:

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_LINUX_07

这是由于路径和IP的问题。根据自己的配置修改。

我这里的解决办法如下:

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_http+tftp+dhcp的PXE+K_08

错误:磁盘初始化错误信息。

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_http+tftp+dhcp的PXE+K_09

解决办法:vim ks.cfg 

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装_10加上这两行,就会自动跳过了。

故障遇到的比较多。

解决完后,就一路顺利安装了。

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装_11

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装_12

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_自动化安装_13

LINUX下基于http+tftp+dhcp的PXE+Kickstart自动化安装_LINUX_14

等待大概10多分钟就可以看到登陆界面了。自动化安装完成。

PS:

    安装时注意防火墙状态。如果不关闭,就开放对应的端口。

    关闭/etc/init.d/iptables stop

    注意selinux。disable状态就行。