*导言:*
已经或未来将从事Linux系统运维工作的读者,经常会遇到一些机械式的重复的工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。常规的办法有什么?
光盘安装系统==》一个服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数。用USB外置光驱,插来插去也醉了。
U盘安装系统==》还是同样的问题,要一台一台服务器插U盘。
网络安装系统(ftp、http、nfs)==》这个方法不错,只要服务器能联网就可以装系统了,但是还是需要一台台服务器去敲键盘点鼠标。时刻想偷懒的我们,有没有更好的方法!
一、 *kickstart自动化安装简介*
1. \PXE******简介****
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。
2. *PXE的工作过程*
1) PXE Client向DHCP发送请求
PXE Clieln从自己的PXE网卡启动,通过PXEBootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。
2) DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的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文件下载回来后,通过该文件找到0S Server,并按照该文件的配置请求下载安装过程需要的软件包。
0S Serve和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。
3. *批量装机软件介绍*
Redhat系主要有两种Kickstart和Cobbler
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置,它可以为PXE安装、重新安装和使用Xen、KVM或VMware执行虚拟客户机的安装创建配置文件,它主要适用于RedHat系Linux,但你可以配置一个PXE服务器启动各种非RPM系的启动镜像,如Knoppix和其他Debian变种。如Ubuntu。
Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成,如Puppet。Cobbler有一个命令行界面,一个Web界面,也提供了若干个API访问选项。
4. *系统环境准备*
[root@kickstart ~]# uname -r
2.6.32-504.el6.x86_64
[root@kickstart ~]# /etc/init.d/iptables status
iptables:未运行防火墙。
[root@kickstart ~]# getenforce
Disabled
*注意:添加两块网卡*
系统使用双网卡模拟真实服务器,外网卡采用NAT模式,内网卡采用LAN区段模式。不要使用桥接模式,因为稍后我们会搭建DHCP服务器,在同一局域网多个DHCP服务会有冲突。
VMware的dhcp服务也关闭掉,防止干扰
5. *安装DHCP服务器*
DHCP服务简介
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息.并能够提升地址的使用率。
DHCP服务安装配置
root@kickstart ~]# yum install dhcp -y
[root@kickstart ~]# rpm -ql dhcp
[root@kickstart ~]# vi /etc/dhcp/dhcpd.conf
default-lease-time 21600;
max-lease-time 43200;
ddns-update-style none;
ignore client-updates;
next-server 192.168.80.100;
filename "pxelinux.0";
subnet 192.168.80.0 netmask 255.255.255.0 {
range 192.168.80.150 192.168.80.200;
option subnet-mask 255.255.255.0;
option routers 192.168.80.2;
option domain-name-servers 192.168.80.2;
}
*注释:*
default-lease-time 21600; #设置默认的IP租用期限
max-lease-time 43200; #设置最大的IP租用期限
ddns-update-style none; #设置与DHCP服务相关联的DNS数据动态更新模式,实际的DHCP应用中很少用的该参数,将值设为none即可
ignore client-updates; #不允许客户机更新DNS记录
next-server 192.168.80.100; #TFTP Server 的IP地址;
filename "pxelinux.0"; #pxelinux 启动文件位置;
subnet 192.168.80.0 netmask 255.255.255.0 {
range 192.168.80.150 192.168.80.200;
option subnet-mask 255.255.255.0;
option routers 192.168.80.2;
}
[root@kickstart ~]# /etc/init.d/dhcpd restart
[root@kickstart ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:52113 0.0.0.0:* LISTEN 917/sshd
tcp 0 0 :::52113 :::* LISTEN 917/sshd
udp 0 0 0.0.0.0:67 0.0.0.0:* 49746/dhcpd
本来软件装完后都要加入开机自启动,但这个Kickstart系统就不能开机自启动,而且用完后服务都要关闭,防止未来重启服务器自动重装系统了。
[root@kickstart ~]# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth0 #指定监听网卡
[root@kickstart ~]# /etc/init.d/dhcpd restart
[root@kickstart ~]# tailf /var/log/messages #查看日志
May 3 19:38:42 backup dhcpd: Listening on LPF/eth0/00:0c:29:ed:2e:5f/192.168.80.0/24
May 3 19:38:42 backup dhcpd: Sending on LPF/eth0/00:0c:29:ed:2e:5f/192.168.80.0/24
6. *安装TFTP服务*
TFTP简介
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
TFTP是一个传输文件的简单协议,它基于UDP协议而实现。此协此计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
http://baike.baidu.com/view/23881.htm
TFTP安装配置
[root@kickstart ~]# yum install tftp-server -y
[root@kickstart ~]# vim /etc/xinetd.d/tftp
disable = no #仅仅将此处的yes改为no
[root@kickstart ~]# /etc/init.d/xinetd restart
[root@kickstart ~]# netstat -lntup #查看是否开启69端口
7. *配置HTTP服务*
可以用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。
[root@kickstart ~]# yum install httpd -y
[root@kickstart ~]# sed -i '277i ServerName 127.0.0.1:80' /etc/httpd/conf/httpd.conf
[root@kickstart ~]# /etc/init.d/httpd start
不管怎么弄,只要把安装光盘内容能通过web发布即可。因为是演示,如果复制镜像就有点浪费时间。但生产环境就一定要复制了,光盘读取速度有限。
mkdir /var/www/html/centos66
[root@kickstart ~]# mount /dev/cdrom /var/www/html/centos66
mount: block device /dev/sr0 is write-protected, mounting read-only
访问http://192.168.80.107/centos66/验证配置是否正确
8. *配置支持PXE的启动程序*
PXE引导配置(bootstrap)
[root@kickstart ~]# yum install syslinux -y
[root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。
[root@kickstart ~]# cp /var/www/html/centos66/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
[root@kickstart ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg #新建一个pxelinux.cfg目录,存放客户端的配置文件。
[root@kickstart ~]# cp /var/www/html/centos66/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
9. *PXE配置文件default*
此处可以配合虚拟机演示讲解default文件。新建一个虚拟机,注意内存需要给IG。使用双网卡。打开电源后,显示如下,可以看到有两块网卡,前面在DHCP配置了监听ethl的10.0.100/24网段,因此第一块是获取不到IP地址的,可以看到那一行不停转圈,直到超时。使用ESC可以提前终止。
[root@kickstart ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default centos6.6 #这里选择none为默认安装方式,文本方式为text;图形方式为#default linux
prompt 1 #显示’boot:’提示符。为’0’时则不提示,将会直接启动’default‘参数中指定的内容。
timeout 10 #用户输入之前的超时时间,单位为1/10秒
display boot.msg
F1 boot.msg #按下F1键后显示的文件。注意路径:默认为/tftpboot
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label nfstall
kernel vmlinuz
append ks=nfs:192.168.80.107:/data/kickstart/ks.cfg initrd=initrd.img
label centos6.6
kernel vmlinuz
append ks=http://192.168.80.107/ks.cfg ksdevice=eth0 initrd=initrd.img
label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
label local
localboot 1
label memtest86
kernel memtest
append –
10. *创建ks.cfg文件*
通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。使用这种kickstart,只需事先定义好一个kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。
生成ks.cfg文件的三种方法:
方法l、每安装好一台centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。该文件默认位于/root/anaconda-ks.cfg
方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为:redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5)
方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。
ks.cfg文件详解
ks.cfg文件大致分为3段
*命令段*:键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
*软件包段:*
%packages
@groupname 指定安装的包组
package_name 指定安装的包
-package_name 指定不安装的包
在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
*脚本段(可选)*
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
[root@backup ~]# vim /var/www/html/ks.cfg
# Kickstart file automatically generated by anaconda.
install #表示安装系统而不是升级
text #文本方式安装
url --url=http://192.168.80.107/centos66 #http的安装方式;nfs的安装方式为:nfs --server=192.168.80.107 --dir=/data/sys
lang zh_CN.UTF-8 #字符集设置
keyboard us #键盘布局
zerombr
network --device eth0 --bootproto=dhcp --noipv6 --hostname centos6 #网络设置,主机名设置
rootpw 123456 #root用户名密码。可以使用明文,安装完后变成加密状态。使用加密的方式:rootpw --iscrypted $6$gJbc4GVU$M4q5y9BVOLjllKcC8HCXSOc7DFzGSVw
firewall --disabled #关闭防火墙
authconfig --enableshadow --enablemd5 #系统认证信息
selinux --disabled #关闭selinux
timezone --utc Asia/Shanghai #设置系统时间
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #系统引导相关信息
# not guaranteed to work
clearpart --all --initlabel #清除所有分区
part /boot --fstype ext3 --size=200
part swap --size=1000
part / --fstype ext3 --size=10000
part /data --fstype ext3 --size=1 --grow
reboot
%packages
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
sgpio
device-mapper-persistent-data
systemtap-client
wget
%post
wget -O /tmp/base_youhua.sh http://192.168.80.107/base_youhua.sh
/bin/bash /tmp/base_youhua.sh
%end
二、 *cobbler部署*
1. *安装*
yum install cobbler cobbler-web dhcp tftp-server pykickstart httpd -y
/etc/init.d/httpd restart
/etc/init.d/cobblerd start
[root@nfs ~]# cobbler check #检查出现如下错误,需要重启cobbler
xmlrpclib.Fault: <Fault 1: "<class 'cobbler.cexceptions.CX'>:'login failed'">
[root@nfs ~]# cobbler check #检查发现如下错误
1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work. This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
2 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
3 : change 'disable' to 'no' in /etc/xinetd.d/tftp
4 : some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely. Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.
5 : change 'disable' to 'no' in /etc/xinetd.d/rsync
6 : file /etc/xinetd.d/rsync does not exist
7 : debmirror package is not installed, it will be required to manage debian deployments and repositories
8 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
9 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
针对逐条修改:
[root@nfs ~]# openssl passwd -1 -salt 'random-phrase-here' '123456' #获取密码加盐密文
$1$random-p$mzxQ/Sx848sXgvfwJCoZM0
[root@nfs ~]# vim /etc/cobbler/settings
next_server: 192.168.80.106 #pxe位置
server: 192.168.80.106 #cobbler地址
manage_dhcp: 1 #让cobbler管理dhcp
default_password_crypted: "$1$random-p$mzxQ/Sx848sXgvfwJCoZM0"
[root@nfs ~]# vim /etc/xinetd.d/tftp # change 'disable' to 'no'
[root@nfs ~]# vim /etc/xinetd.d/rsync # change 'disable' to 'no'
[root@nfs ~]# /etc/init.d/xinetd restart
[root@nfs ~]# /etc/init.d/cobblerd restart
配置dhcp服务
[root@nfs ~]# vim /etc/cobbler/dhcp.template
修改/etc/cobbler/dhcp.template,此文件是cobbler管理dhcp的模板和/etc/dhcp/dhcpd.conf文件,两个配置内容一样,仅修改模板文件即可
[root@nfs ~]# cobbler check
The following are potential configuration items that you may want to fix:
1 : file /etc/xinetd.d/rsync does not exist #可以不管
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
3 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
提示说debmirror没安装。如果不是安装 debian之类的系统,此提示可以忽略。fencing tools也可以不装
[root@nfs ~]# cobbler sync 同步配置模板
11. *配置cobbler*
mkdir /mnt/ios
mount /dev/cdrom /mnt/ios/
[root@nfs ~]# cobbler import --path=/mnt/ios --name=CentOS6.6 --arch=x86_64 #上传镜像
[root@nfs ~]# ls /var/www/cobbler/ks_mirror/ #上传镜像存放位置
CentOS6.6-x86_64 config
[root@nfs ~]# cobbler distro list #查看导入源库列表:
Cobbler常用命令详解:
Ø cobbler check #检查cobbler配置(主要用于检查cobbler配置是否有错.)
Ø cobbler sync #同步配置到dhcp/pxe和数据目录(注,同步cobbler配置到数据目录中,更改某些配置后得执行一下,同步一下配置)
Ø cobbler list #列出所有的cobbler元素
Ø cobbler import #导入安装的系统镜像
Ø cobbler report #列出各元素的详细信息
Ø cobbler distro #查看导入的发行版系统信息
Ø *cobbler profile* #查看配置信息
Ø cobbler system #查看添加的系统信息
Ø cobbler reposync #同步yum仓库到本地
ks文件存放位置,默认使用sample_end.ks
[root@nfs ~]# ls /var/lib/cobbler/kickstarts/
创建ks.cfg文件
vim /var/lib/cobbler/kickstarts/centos6.6.cfg
# Kickstart file automatically generated by anaconda.
install
text
#url --url=http://192.168.80.107/centos66
url --url=$tree
lang zh_CN.UTF-8
keyboard us
zerombr
#network --device eth0 --bootproto=dhcp --noipv6 --hostname centos6
$SNIPPET('network_config')
rootpw --iscrypted $default_password_crypted
#rootpw --iscrypted $6$uR1AOUmjImGbbSv0$g2fSM
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# not guaranteed to work
clearpart --all --initlabel
part /boot --fstype ext3 --size=200
part swap --size=1000
part / --fstype ext3 --size=10000
part /data --fstype ext3 --size=1 --grow
reboot
%pre
$SNIPPET('log_ks_pre')
$SNIPPET('kickstart_start')
$SNIPPET('pre_install_network_config')
# Enable installation monitoring
$SNIPPET('pre_anamon')
%end
%packages
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
sgpio
device-mapper-persistent-data
systemtap-client
%end
查看配置(可以指定某个镜像配置)
[root@nfs kickstarts]# cobbler profile report
Name : CentOS6.6-x86_64
TFTP Boot Files : {}
Comment :
DHCP Tag : default
Distribution : CentOS6.6-x86_64
Enable gPXE? : 0
Enable PXE Menu? : 1
Fetchable Files : {}
Kernel Options : {}
Kernel Options (Post Install) : {}
Kickstart : /var/lib/cobbler/kickstarts/sample_end.ks
Kickstart Metadata : {}
修改配置
[root@nfs ~]# cobbler profile edit --name=CentOS6.6-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos6.6.cfg
如果系统是centos7.x版本,网卡名不是ethx,需要通过修改内核参数来修改
[root@nfs ~]# cobbler profile edit --name=CentOS6.6-x86_64 --kopts='net.ifnames=0 biosdivname=0'
[root@nfs ~]# cobbler profile report #查看已经修改的参数
Kernel Options : {'biosdivname': '0', 'net.ifnames': '0'}
Kickstart : /var/lib/cobbler/kickstarts/centos6.6.cfg
同步配置模板
[root@nfs ~]# cobbler sync
然后进行网络启动安装
12. *自动化定制安装*
[root@nfs ~]# cobbler system add --name=liwenbin --mac=00:0C:29:DC:80:5A --profile=CentOS6.6-x86_64 --ip-address=192.168.80.200 --subnet=255.255.255.0 --gateway=192.168.80.2 --interface=eth0 --static=1 --hostname=cobber.example.com --name-servers="114.114.114.114,8.8.8.8"
[root@nfs ~]# cobbler system list 查看
liwenbin
直接从网络启动安装
\cobbler*** *web配置文件****
[root@nfs ~]# ls /etc/httpd/conf.d/cobbler
访问cobbler界面:https://192.168.80.106/cobbler_web
用户名密码默认都是cobbler,如果想自定义可以修改如下配置文件
[root@nfs ~]# tail -n 4 /etc/cobbler/users.conf #设置用户权限
[admins]
admin = ""
cobbler = ""
[root@nfs ~]# cat /etc/cobbler/users.digest #设置用户密码
cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3
发表评论