kickstart无人值守安装centos6

前端之家收集整理的这篇文章主要介绍了kickstart无人值守安装centos6前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、 背景介绍

现在很多企业都有这样的需求,一次安装多台服务器,常规的光盘安装即费时也费力,只能一台一台的安装,当服务器数量几十到几百台的时候,这样安装效率就大大降低了,这样就诞生了自动化部署软件,常用的有kickstartcubbler

1.1什么是PXE

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTPtrivial file transfer protocol)或MTFTP(multicasttrivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。

1.2 kickstart工作机制

1.PXE ClientDHCP发送请求

PXE Client从自己的PXE网卡启动,通过PXEBootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP

2.DHCP服务器提供信息

DHCP服务器收到客户端的请求,验证是否来至合法的PXEClient的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

3.PXE客户端请求下载启动文件

客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括pxelinux.0pxelinux.cfg/defaultvmlinuzinitrd.img文件

4.Boot Server响应客户端请求并传送文件

当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答,用以决定启动参数。BootROMTFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0pxelinux.cfg/default)default文件下载完成后,会根据文件中定义的引导顺序,启动Linux安装程序的引导内核。

5.请求下载自动应答文件

客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS,FTP,HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载文件

这里有个问题,在第2步和第5步初始化2次网络了,这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。因此PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序,从而进行两次获取IP地址过程,但IP地址在DHCP租期内是一样的。

6.客户端安装操作系统

ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。

OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。

2 环境准备

2.1 系统环境

本次以Centos 6.6为例讲解kickstart的安装过程

[root@kickstart~]#uname-a
Linuxkickstart2.6.32-504.el6.x86_64#1SMPWedOct1504:27:16UTC2014x86_64x86_64x86_64GNU/Linux
[root@kickstart~]#cat/etc/redhat-release
CentOSrelease6.6(Final)

2.2 安装syslinux软件

[root@kickstart~]#yuminstall-ysyslinux

主要需要的文件/usr/share/syslinux/pxelinux.0

3、 安装dhcp服务

3.1 安装dhcp软件

[root@kickstart~]#yuminstall-ydhcp

3.2 修改配置文件

修改配置文件/etc/dhcp/dhcpd.conf,默认配置文件为空

[root@kickstart~]#vim/etc/dhcp/dhcpd.conf
subnet192.168.18.0netmask255.255.255.0{
range192.168.18.50192.168.18.100;
optionsubnet-mask255.255.255.0;
default-lease-time21600;
max-lease-time43200;
next-server192.168.18.100;
filename"/pxelinux.0";
}

配置说明

subnet192.168.18.0netmask255.255.255.0{#定义子网和掩码
range192.168.18.50192.168.18.100;#定义dhcp分配的地址范围
optionsubnet-mask255.255.255.0;#定义分配给客户端的掩码
default-lease-time21600;#最小的dhcp租期
max-lease-time43200;#最长的dhcp租期
next-server192.168.18.100;#填写kickstart服务器的地址
filename"/pxelinux.0";#注明pxelinux.0的目录,相对tftpserver目录
}

修改dhcp监听的网卡

[root@kickstart~]#vim/etc/sysconfig/dhcpd
#Commandlineoptionshere
DHCPDARGS=eth0

3.3 启动dhcp服务

[root@kickstart~]#/etc/init.d/dhcpdstart
Startingdhcpd:[OK]
[root@kickstart~]#netstat-tlunp|grep67
tcp00127.0.0.1:250.0.0.0:*LISTEN1467/master
tcp00::1:25:::*LISTEN1467/master
udp000.0.0.0:670.0.0.0:*8437/dhcpd

4、 安装apache

4.1 安装apache软件

使用yum安装httpd,安装完成默认的程序路径文件/var/www/html

[root@kickstart~]#yum-yinstallhttpd

关掉iptablesselinux

[root@kickstart~]#/etc/init.d/iptablesstop
iptables:SettingchainstopolicyACCEPT:filter[OK]
iptables:Flushingfirewallrules:[OK]
iptables:Unloadingmodules:[OK]
[root@kickstart~]#getenforce
Permissive

启动apache软件,没有配置ServerName错误提示不用管

[root@kickstart~]#/etc/init.d/httpdstart
Startinghttpd:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,using111.175.221.58forServerName
[OK]
[root@kickstart~]#netstat-tlunp|grep80
tcp00:::80:::*LISTEN8227/httpd

4.2 挂载光盘

新建光盘加载目录,并挂载,如果是真机,则可以将光盘文件上传至服务器目录内或者使用ISO文件挂载即可

[root@kickstart~]#mkdir/var/www/html/centos6
[root@kickstart~]#mount-tiso9660/dev/sr0/var/www/html/centos6
mount:blockdevice/dev/sr0iswrite-protected,mountingread-only
[root@kickstart~]#df-h
FilesystemSizeUsedAvailUse%Mountedon
/dev/mapper/vg_centos-LogVol00
20G2.9G16G16%/
tmpfs238M0238M0%/dev/shm
/dev/sda1190M27M153M16%/boot
/dev/mapper/vg_centos-LogVol02
5.7G12M5.4G1%/db
/dev/sr04.4G4.4G0100%/var/www/html/centos6

在浏览器中输入http://192.168.18.100/centos6/正常显示的结果如下:

wKiom1fNLa7C4CzqAABj2sPhPt0377.png-wh_50

5 安装tftp

5.1安装tftp-server

使用yum安装tftp-server软件,tftp-server使用的是xinetd控制

yuminstalltftp-server�y

查看tftp-server使用的文件/var/lib/tftpboot为系统默认的安装路径

[root@kickstart~]#rpm-qltftp-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

5.2 修改配置文件

编辑tftp-server配置文件/etc/xinet.d/tftp

[root@kickstart~]#vim/etc/xinetd.d/tftp
servicetftp
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in.tftpd
server_args=-s/var/lib/tftpboot
disable=no
per_source=11
cps=1002
flags=IPv4
}

5.3 启动tftp-server

tftp-server通过xinetd控制

[root@kickstart~]#/etc/init.d/xinetdrestart
Stoppingxinetd:[Failed]
Startingxinetd:[OK]

检查启动是否成功

[root@kickstart~]#netstat-tlunp|grep69
udp000.0.0.0:690.0.0.0:*8286/xinetd

5.4 拷坝启动文件

pxelinux.0复制到tftp目录

[root@kickstart~]#cp/usr/share/syslinux/pxelinux.0/var/lib/tftpboot/
[root@kickstart~]#cp/var/www/html/centos6/isolinux/*/var/lib/tftpboot/

查看tftpboot文件内容

[root@kickstart~]#ls/var/lib/tftpboot/
boot.catgrub.confisolinux.binmemtestsplash.jpgvesamenu.c32
boot.msginitrd.imgisolinux.cfgpxelinux.0TRANS.TBLvmlinuz

新建目录pxelinux.cfg目录

[root@kickstarttftpboot]#mkdirpxelinux.cfg
[root@kickstarttftpboot]#cpisolinux.cfgpxelinux.cfg/default


编辑/var/lib/tftpboot/pxelinux.cfg/default文件,在label rescue添加一个标签,default选项移动到新添加标签

[root@kickstartpxelinux.cfg]#catdefault
defaultvesamenu.c32
#prompt1
timeout600

displayboot.msg

menubackgroundsplash.jpg
menutitleWelcometoCentOS6.6!
menucolorborder0#ffffffff#00000000
menucolorsel7#ffffffff#ff000000
menucolortitle0#ffffffff#00000000
menucolortabmsg0#ffffffff#00000000
menucolorunsel0#ffffffff#00000000
menucolorhotsel0#ff000000#ffffffff
menucolorhotkey7#ffffffff#ff000000
menucolorscrollbar0#ffffffff#00000000

labellinux
menulabel^Installorupgradeanexistingsystem
kernelvmlinuz
appendinitrd=initrd.img
labelvesa
menulabelInstallsystemwith^basicvideodriver
kernelvmlinuz
appendinitrd=initrd.imgxdriver=vesanomodeset
labelkickstart
menulabelInstallsystemwithkickstart
menudefault
kernelvmlinuz
appendinitrd=initrd.imgks=http://192.168.18.100/ks.cfg
labelrescue
menulabel^Rescueinstalledsystem
kernelvmlinuz
appendinitrd=initrd.imgrescue
labellocal
menulabelBootfrom^localdrive
localboot0xffff
labelmemtest86
menulabel^Memorytest
kernelmemtest
append-

6 生成ks.cfg文件

6.1 ks参数介绍

软件包段
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
脚本段(可选)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
install告知安装程序,这是一次全新安装,而不是升级upgrade。
url--url=""通过FTP或HTTP从远程服务器上的安装树中安装。
url--url="http://192.168.18.100/centos6/"
url--urlftp://<username>:<password>@<server>/<dir>
nfs从指定的NFS服务器安装。
nfs--server=nfsserver.example.com--dir=/tmp/install-tree
text使用文本模式安装。
lang设置在安装过程中使用的语言以及系统的缺省语言。langen_US.UTF-8
keyboard设置系统键盘类型。keyboardus
zerombr清除mbr引导信息。
bootloader系统引导相关配置。
bootloader--location=mbr--driveorder=sda--append="crashkernel=autorhgbquiet"
--location=,指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。
--driveorder,指定在BIOS引导顺序中居首的驱动器。
--append=,指定内核参数.要指定多个参数,使用空格分隔它们。
network为通过网络的kickstart安装以及所安装的系统配置联网信息。
network--bootproto=dhcp--device=eth0--onboot=yes--noipv6--hostname=CentOS6
--bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcp。bootp和dhcp被认为是相同的。
static方法要求在kickstart文件里输入所有的网络信息。
network--bootproto=static--ip=192.168.18.100--netmask=255.255.255.0--gateway=192.168.18.254--nameserver=202.103.24.68
请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。
--ip=,要安装的机器的IP地址.
--gateway=,IP地址格式的默认网关.
--netmask=,安装的系统的子网掩码.
--hostname=,安装的系统的主机名.
--onboot=,是否在引导时启用该设备.
--noipv6=,禁用此设备的IPv6.
--nameserver=,配置dns解析.
timezone设置系统时区。timezone--utcAsia/Shanghai
authconfig系统认证信息。authconfig--enableshadow--passalgo=sha512
设置密码加密方式为sha512启用shadow文件。
rootpwroot密码
clearpart清空分区。clearpart--all--initlabel
--all从系统中清除所有分区,--initlable初始化磁盘标签
part磁盘分区。
part/boot--fstype=ext4--asprimary--size=200
partswap--size=1024
part/--fstype=ext4--grow--asprimary--size=200
--fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat。
--asprimary,强迫把分区分配为主分区,否则提示分区失败。
--size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。
--grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。
firstboot负责协助配置redhat一些重要的信息。
firstboot--disable
selinux关闭selinux。selinux--disabled
firewall关闭防火墙。firewall--disabled
logging设置日志级别。logging--level=info
reboot设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt关机。


6.2 ks配置文件

系统安装完成默认的会生成当前安装的应答文件anaconda-ks.cfg,可以参照此文件

生成一个密码备用

[root@kickstart~]#grub-crypt
Password:redhat
Retypepassword:redhat
$6$7T2aV99xUqQ6RKc9$MH.mEiFWbiHenAaLdb3y0EQ2MUOrSpGqdjOC8vymtIIRsHitwSbjRTSKWOKi81p7aJsHHswYCSEXoWwaI2L2D/

ks.cfg配置文件,放置于/var/www/html目录中

install
url--url="http://192.168.18.100/centos6/"
text
langen_US.UTF-8
keyboardus
zerombr
bootloader--location=mbr--driveorder=sda--append="crashkernel=autorhgbquiet"
network--bootproto=dhcp--device=eth0--onboot=yes--noipv6--hostname=CentOS6
timezone--utcAsia/Shanghai
authconfig--enableshadow--passalgo=sha512
rootpw--iscrypted$6$7T2aV99xUqQ6RKc9$MH.mEiFWbiHenAaLdb3y0EQ2MUOrSpGqdjOC8vymtIIRsHitwSbjRTSKWOKi81p7aJsHHswYCSEXoWwaI2L2D/
clearpart--all--initlabel
part/boot--fstype=ext4--asprimary--size=800
partswap--size=1024
part/--fstype=ext4--grow--asprimary--size=200
firstboot--disable
selinux--disabled
firewall--disabled
logging--level=info
reboot
%packages
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet

%post
wget-O/tmp/optimization.shhttp://192.168.18.100/optimization.sh&>/dev/null
/bin/sh/tmp/optimization.sh
%end

6.3Dell服务器多网卡启动弹选择框

使用dell服务器进行安装时,默认会有四块网卡,em1-em4,如果在配置文件中不作设定,会弹出一个启动网卡选择框,影响自动化安装,处理办法如下:

a)编辑/var/lib/tftpboot/pxelinux.cfg/default文件

找到启动参数

appendinitrd=initrd.imgks=http://192.168.18.100/ks.cfg

改为

appendinitrd=initrd.imgksdevice=eth0ks=http://192.168.18.100/ks.cfgbiosdevicename=0


b)编辑ks.cfg文件

找到

bootloader--location=mbr--driveorder=sda--append="crashkernel=autorhgbquiet"

改为

bootloader--location=mbr--driveorder=sda--append="biosdevicename=0crashkernel=autorhgbquiet"

6.4优化脚本

可在在main函数中选择需要调和的优化函数来加载一部分

[root@kickstarthtml]#vimoptimization.sh
#!/bin/bash
#sunny
#mail:519209@qq.com

./etc/init.d/functions
functionMsg(){
if[$?-eq0];then
action"$1"/bin/true
else
action"$1"/bin/false
fi
}

#changethelimit
functionlimits(){
[`grep"addedforchange"/etc/security/limits.conf|wc-l`-eq0]&&{
cat>>/etc/security/limits.conf<<EOF
#addedforchangelimit
*hardnofile131072
*softnofile131072
*hardnproc16384
*softnproc16384
EOF
Msg"Configsystemlimits.conf"
}
}


#changesysctl.confforkernel
functionchangekernel(){
cat>/etc/sysctl.conf<<EOF
#KernelsysctlconfigurationfileforRedHatLinux
#
#Forbinaryvalues,0isdisabled,1isenabled.Seesysctl(8)and
#sysctl.conf(5)formoredetails.

#ControlsIPpacketforwarding
net.ipv4.ip_forward=0

#Controlssourcerouteverification
net.ipv4.conf.default.rp_filter=1

#Donotacceptsourcerouting
net.ipv4.conf.default.accept_source_route=0

#ControlstheSystemRequestdebuggingfunctionalityofthekernel
kernel.sysrq=0

#ControlswhethercoredumpswillappendthePIDtothecorefilename.
#Usefulfordebuggingmulti-threadedapplications.
kernel.core_uses_pid=1

#ControlstheuSEOfTCPsyncookies
net.ipv4.tcp_syncookies=1

#Disablenetfilteronbridges.
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-arptables=0

#Controlsthedefaultmaxmimumsizeofamesagequeue
kernel.msgmnb=65536

#Controlsthemaximumsizeofamessage,inbytes
kernel.msgmax=65536

#Controlsthemaximumsharedsegmentsize,inbytes
kernel.shmmax=68719476736

#Controlsthemaximumnumberofsharedmemorysegments,inpages
kernel.shmall=4294967296
net.ipv4.tcp_fin_timeout=2
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_keepalive_time=600
net.ipv4.ip_local_port_range=400065000
net.ipv4.tcp_max_syn_backlog=16384
net.ipv4.tcp_max_tw_buckets=36000
net.ipv4.route.gc_timeout=100
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_synack_retries=1
net.core.somaxconn=16384
net.core.netdev_max_backlog=16384
net.ipv4.tcp_max_orphans=16384
EOF
Msg"Configkernel"
sysctl-p
}

#setntp
functionntptime(){
[`/usr/bin/crontab-l|grep"synctime"|wc-l`-eq0]&&{
echo"#synctimeaddedbysunnyat$(date+%F)">>/var/spool/cron/root
echo'*/5****/usr/sbin/ntpdatecn.pool.ntp.org&>/dev/null'>>/var/spool/cron/root
Msg"Timesync"
}
}

#DefinedSystemStartupServicesFunctions
functionboot(){
forprogin`chkconfig--list|grep"3:on"|awk'{print$1}'|grep-vE"crond|network|rsyslog|sshd|sysstat"`
do
chkconfig$progoff
done
Msg"chkconfigforboot"
}

#stopctrl+alt+del
functionstopctl(){
[-f/etc/init/control-alt-delete.conf]&&{
sed-is/start/#start/g/etc/init/control-alt-delete.conf
}
Msg"StopCtrl+Alt+Del"
}

#Defineaddusersunny
functionadduser(){
useraddsunny
echo"123456"|passwd--stdinsunny
cat>>/etc/sudoers<<EOF
#addsudousersunny
sunnyALL=(ALL)ALL
EOF
}

#Definemainfunctions
functionmain(){
limits
sysctl
ntptime
stopctl
boot
adduser

}
main

7 测试安装

启动客户端机器,从网卡启动,检查是否能够自动化部署,如果是多台,将多台客户端和kickstart服务器接入同一台交换机上,即可实现

如果是redhat系统,部署方法类似,部署完成后可以单独执行一上优化检查脚本记录至日志文件,可以通过查看日志文件,检查部署结果

猜你在找的CentOS相关文章