1、 背景介绍
现在很多企业都有这样的需求,一次安装多台服务器,常规的光盘安装即费时也费力,只能一台一台的安装,当服务器数量几十到几百台的时候,这样安装效率就大大降低了,这样就诞生了自动化部署软件,常用的有kickstart和cubbler
1.1什么是PXE
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicasttrivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。
1.2 kickstart工作机制
1).PXE Client向DHCP发送请求
PXE Client从自己的PXE网卡启动,通过PXEBootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。
2).DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXEClient的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
3).PXE客户端请求下载启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
4).Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.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的安装过程
1
2
3
4
[iyunv@kickstart ~]#uname -a
Linux kickstart2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64GNU/Linux
[iyunv@kickstart ~]#cat /etc/redhat-release
CentOS release 6.6(Final)
2.2 安装syslinux软件
1
[iyunv@kickstart ~]#yum install -y syslinux
主要需要的文件为/usr/share/syslinux/pxelinux.0
3、 安装dhcp服务
3.1 安装dhcp软件
1
[iyunv@kickstart ~]#yum install -y dhcp
3.2 修改配置文件
修改配置文件/etc/dhcp/dhcpd.conf,默认配置文件为空
1
2
3
4
5
6
7
8
9
[iyunv@kickstart ~]#vim /etc/dhcp/dhcpd.conf
subnet 192.168.18.0netmask 255.255.255.0 {
range 192.168.18.50 192.168.18.100;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.18.100;
filename "/pxelinux.0";
}
配置说明
1
2
3
4
5
6
7
8
subnet 192.168.18.0netmask 255.255.255.0 { #定义子网和掩码
range 192.168.18.50 192.168.18.100; #定义dhcp分配的地址范围
option subnet-mask 255.255.255.0; #定义分配给客户端的掩码
default-lease-time 21600; #最小的dhcp租期
max-lease-time 43200; #最长的dhcp租期
next-server 192.168.18.100; #填写kickstart服务器的地址
filename "/pxelinux.0"; #注明pxelinux.0的目录,相对tftpserver目录
}
修改dhcp监听的网卡
1
2
3
[iyunv@kickstart ~]#vim /etc/sysconfig/dhcpd
# Command lineoptions here
DHCPDARGS=eth0
3.3 启动dhcp服务
1
2
3
4
5
6
[iyunv@kickstart ~]#/etc/init.d/dhcpd start
Starting dhcpd: [ OK ]
[iyunv@kickstart ~]#netstat -tlunp|grep 67
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1467/master
tcp 0 0 ::1:25 :::* LISTEN 1467/master
udp 0 0 0.0.0.0:67 0.0.0.0:* 8437/dhcpd
4、 安装apache
4.1 安装apache软件
使用yum安装httpd,安装完成默认的程序路径文件为/var/www/html
1
[iyunv@kickstart ~]#yum -y install httpd
关掉iptables和selinux
1
2
3
4
5
6
[iyunv@kickstart ~]#/etc/init.d/iptables stop
iptables: Settingchains to policy ACCEPT: filter [ OK ]
iptables: Flushingfirewall rules: [ OK ]
iptables: Unloadingmodules: [ OK ]
[iyunv@kickstart ~]#getenforce
Permissive
启动apache软件,没有配置ServerName,错误提示不用管
1
2
3
4
5
[iyunv@kickstart ~]#/etc/init.d/httpd start
Starting httpd:httpd: Could not reliably determine the server's fully qualified domain name,using 111.175.221.58 for ServerName
[ OK ]
[iyunv@kickstart ~]#netstat -tlunp|grep 80
tcp 0 0 :::80 :::* LISTEN 8227/httpd
4.2 挂载光盘
新建光盘加载目录,并挂载,如果是真机,则可以将光盘文件上传至服务器目录内或者使用ISO文件挂载即可
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@kickstart ~]#mkdir /var/www/html/centos6
[iyunv@kickstart ~]#mount -t iso9660 /dev/sr0 /var/www/html/centos6
mount: block device/dev/sr0 is write-protected, mounting read-only
[iyunv@kickstart ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos-LogVol00
20G 2.9G 16G 16% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 27M 153M 16% /boot
/dev/mapper/vg_centos-LogVol02
5.7G 12M 5.4G 1% /db
/dev/sr0 4.4G 4.4G 0 100% /var/www/html/centos6
在浏览器中输入http://192.168.18.100/centos6/ 正常显示的结果如下:
5 安装tftp
5.1安装tftp-server
使用yum安装tftp-server软件,tftp-server使用的是xinetd控制
1
yum installtftp-server –y
查看tftp-server使用的文件,/var/lib/tftpboot为系统默认的安装路径
1
2
3
4
5
6
7
8
9
10
11
[iyunv@kickstart ~]#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
5.2 修改配置文件
编辑tftp-server配置文件/etc/xinet.d/tftp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@kickstart ~]#vim /etc/xinetd.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
per_source = 11
cps = 100 2
flags = IPv4
}
5.3 启动tftp-server
tftp-server通过xinetd控制
1
2
3
[iyunv@kickstart ~]#/etc/init.d/xinetd restart
Stoppingxinetd: [FAILED]
Startingxinetd: [ OK ]
检查启动是否成功
1
2
[iyunv@kickstart ~]#netstat -tlunp|grep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 8286/xinetd
5.4 拷坝启动文件
将pxelinux.0复制到tftp目录
1
2
[iyunv@kickstart ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[iyunv@kickstart ~]#cp /var/www/html/centos6/isolinux/* /var/lib/tftpboot/
查看tftpboot文件内容
1
2
3
[iyunv@kickstart ~]#ls /var/lib/tftpboot/
boot.cat grub.conf isolinux.bin memtest splash.jpg vesamenu.c32
boot.msg initrd.img isolinux.cfg pxelinux.0 TRANS.TBL vmlinuz
新建目录pxelinux.cfg目录
1
2
[iyunv@kickstarttftpboot]# mkdir pxelinux.cfg
[iyunv@kickstarttftpboot]# cp isolinux.cfg pxelinux.cfg/default
编辑/var/lib/tftpboot/pxelinux.cfg/default文件,在label rescue前添加一个标签,将default选项移动到新添加的标签中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@kickstartpxelinux.cfg ]# cat default
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu backgroundsplash.jpg
menu title Welcometo CentOS 6.6!
menu color border 0#ffffffff #00000000
menu color sel 7#ffffffff #ff000000
menu color title 0#ffffffff #00000000
menu color tabmsg 0#ffffffff #00000000
menu color unsel 0#ffffffff #00000000
menu color hotsel 0#ff000000 #ffffffff
menu color hotkey 7#ffffffff #ff000000
menu color scrollbar0 #ffffffff #00000000
label linux
menu label ^Install or upgrade an existingsystem
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label Install system with ^basic videodriver
kernel vmlinuz
append initrd=initrd.img xdriver=vesanomodeset
labelkickstart
menu label Install system with kickstart
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.18.100/ks.cfg
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
6 生成ks.cfg文件
6.1 ks参数介绍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
软件包段
%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 设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8
keyboard 设置系统键盘类型。keyboard us
zerombr清除mbr引导信息。
bootloader 系统引导相关配置。
bootloader--location=mbr --driveorder=sda --append="crashkernel=auto rhgbquiet"
--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 --utc Asia/Shanghai
authconfig 系统认证信息。authconfig --enableshadow --passalgo=sha512
设置密码加密方式为sha512 启用shadow文件。
rootpw root密码
clearpart 清空分区。clearpart --all --initlabel
--all 从系统中清除所有分区,--initlable 初始化磁盘标签
part 磁盘分区。
part /boot--fstype=ext4 --asprimary --size=200
part swap--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,可以参照此文件
生成一个密码备用
1
2
3
4
[iyunv@kickstart ~]#grub-crypt
Password: redhat
Retypepassword:redhat
$6$7T2aV99xUqQ6RKc9$MH.mEiFWbiHenAaLdb3y0EQ2MUOrSpGqdjOC8vymtIIRsHitwSbjRTSKWOKi81p7aJsHHswYCSEXoWwaI2L2D/
ks.cfg配置文件,放置于/var/www/html目录中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
install
url--url="http://192.168.18.100/centos6/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader--location=mbr --driveorder=sda --append="crashkernel=auto rhgbquiet"
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
part swap--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.sh http://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文件
找到启动参数
1
appendinitrd=initrd.img ks=http://192.168.18.100/ks.cfg
改为
1
appendinitrd=initrd.img ksdevice=eth0 ks=http://192.168.18.100/ks.cfg biosdevicename=0
b)编辑ks.cfg文件
找到
1
bootloader--location=mbr --driveorder=sda --append="crashkernel=auto rhgbquiet"
改为
1
bootloader--location=mbr --driveorder=sda --append="biosdevicename=0 crashkernel=auto rhgb quiet"
6.4优化脚本
可在在main函数中选择需要调和的优化函数来加载一部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
[iyunv@kickstarthtml]# vim optimization.sh
#!/bin/bash
#sunny
#mail:519209@qq.com
./etc/init.d/functions
function Msg(){
if [ $? -eq 0 ];then
action "$1" /bin/true
else
action "$1" /bin/false
fi
}
#change the limit
function limits(){
[ `grep "addedfor change" /etc/security/limits.conf|wc -l` -eq 0 ] && {
cat>>/etc/security/limits.conf <<EOF
#added for changelimit
* hard nofile 131072
* soft nofile 131072
* hard nproc16384
* soft nproc16384
EOF
Msg "Configsystem limits.conf"
}
}
#change sysctl.conffor kernel
functionchangekernel(){
cat>/etc/sysctl.conf <<EOF
# Kernel sysctlconfiguration file for Red Hat Linux
#
# For binary values,0 is disabled, 1 is enabled. Seesysctl(8) and
# sysctl.conf(5) formore details.
# Controls IP packetforwarding
net.ipv4.ip_forward= 0
# Controls sourceroute verification
net.ipv4.conf.default.rp_filter= 1
# Do not acceptsource routing
net.ipv4.conf.default.accept_source_route= 0
# Controls theSystem Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whethercore dumps will append the PID to the core filename.
# Useful fordebugging multi-threaded applications.
kernel.core_uses_pid= 1
# Controls the useof TCP syncookies
net.ipv4.tcp_syncookies= 1
# Disable netfilteron bridges.
net.bridge.bridge-nf-call-ip6tables= 0
net.bridge.bridge-nf-call-iptables= 0
net.bridge.bridge-nf-call-arptables= 0
# Controls thedefault maxmimum size of a mesage queue
kernel.msgmnb =65536
# Controls themaximum size of a message, in bytes
kernel.msgmax =65536
# Controls themaximum shared segment size, in bytes
kernel.shmmax =68719476736
# Controls themaximum number of shared memory segments, in pages
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= 4000 65000
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 "Config kernel"
sysctl -p
}
#set ntp
function ntptime(){
[ `/usr/bin/crontab-l|grep "sync time"|wc -l` -eq 0] && {
echo "#sync time added by sunny at$(date +%F)" >>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdatecn.pool.ntp.org &>/dev/null' >>/var/spool/cron/root
Msg "Time sync"
}
}
# Defined SystemStartup Services Functions
function boot(){
for prog in `chkconfig --list|grep"3:on"|awk '{print $1}'|grep -vE"crond|network|rsyslog|sshd|sysstat"`
do
chkconfig $prog off
done
Msg "chkconfig for boot"
}
#stop ctrl+alt+del
function stopctl(){
[ -f /etc/init/control-alt-delete.conf ]&& {
sed -i s/start/#start/g/etc/init/control-alt-delete.conf
}
Msg "Stop Ctrl+Alt+Del"
}
#Define add usersunny
function adduser(){
useradd sunny
echo "123456"|passwd --stdinsunny
cat>>/etc/sudoers <<EOF
#add sudo user sunny
sunny ALL=(ALL) ALL
EOF
}
#Define mainfunctions
function main(){
limits
sysctl
ntptime
stopctl
boot
adduser
}
main
7 测试安装
启动客户端机器,从网卡启动,检查是否能够自动化部署,如果是多台,将多台客户端和kickstart服务器接入同一台交换机上,即可实现
如果是redhat系统,部署方法类似,部署完成后可以单独执行一上优化检查脚本记录至日志文件,可以通过查看日志文件,检查部署结果
ks.cfg,optimization.sh.zip
(620 Bytes, 下载次数: 1)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com