自动化安装系统

批量自动安装软件介绍

kickstart
是一种无人值守的安装方式,工作原理是在安装过程中记录人工干预填写的各种参数,并生成以个名为ks.cfg(自动应答文件)的文件,如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适参数,就采用,如果没有找到,便会弹出对话框提示手动安装,
所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载,ks.cfg文件。

cobbler
集中和简化了通过网络安装操作系统需要使用到的DHCP和TFTP和DNS服务的配置,cobbler不仅有一个命令行界面,还有web界面,大大降低了使用者的入门水平,是基于kickstart的二次开发

什么是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系列系统等。

通俗来讲:PXE是预启动环境,通过网络接口启动计算机,不依赖本地存储设备,(如硬盘)或者本地已安装的操作系统,为C/S工模式,PXE客户端会调用网际协议-IP,用户数据报协议-UDP,动态主机设定协议-DHCP,小型文件传输协议-TFTP,

所以PXE是自动化安装的前提!

PXE引导相关角色说明
PXE作用: 引导装机
Kickstart作用: 将安装系统的过程中通过ks.cfg文件中的配置信息,实现自动安装配置达到无人值守自动安装;
TFTP: 支持PXE 引导的网卡中从tftp服务器端下载pxelinux.0文件、vmlinuz、initrd.img等内核引导文件;
DHCP: PXE引导过程中获首先获取IP地址,并提供pxelinux.0文件位置;
HTTP: 用于下载ks.cfg以及系统镜像文件

PEX工作流程

1.PXE客户端向DHCP服务器发送UDP广播请求ip地址
2.DHCP服务端提供相应信息。这个响应信息包含客户端分配的IP地址,pxelinux启动程序(TFTP服务器的)位置,以及配置文件
3.PXE客户端向TFTP服务器请求下载启动文件。客户端收到服务端的回应后,会回应一个帧,以请求传送启动所需要的文件,这些启动文件包括:pxelinux.0 pxelinux.cfg/default vmlinuz initrd.img等文件
4.TFTP响应并传送文件。当服务器端收到客户端的请求后,他们之间将有更多信息在客户端与服务端之间作应答,用以决定启动参数,bttorom由tftp通讯协议从boot server下载启动安装程序所必须的文件,default下载完成后,会根据该文件中定义的引导顺序,启动安装
5.PXE向http服务器请求自动应答文件。客户端通过pxrlinux.cfg/default文件成功的引导linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装系统,如果是网络安装,则会在这个时候初始化网络,并定位安装位置,接着会读取default文件中指定的自动应答文件,ks,cfg所在位置,根据该文件位置请求下载该文件
6.客户端安装操作系统。将ks.cfg文件下载回来后,通过该文件找到os server并按照指定该我就按的配置请求下载安装过程中需要的软件包,os server和客户端建立连接后将开始传输软件包

服务配置

首先关闭防火墙和selinux,并重启(针对kickstart服务端)
DHCP服务配置
  DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、网关地址、DNS服务器地址等信息,并能够提升地址的使用率。

    yum install -y dhcp
    rpm -ql dhcp |grep "dhcpd.conf" #查看配置文件位置
    subnet 172.16.221.0 netmask 255.255.255.0 {
    range 172.16.221.100 172.16.221.200; # 可分配的起始IP-结束IP
    option subnet-mask 255.255.255.0; # 设定netmask
    default-lease-time 21600; # 设置默认的IP租用期限
    max-lease-time 43200; # 设置最大的IP租用期限
    next-server 172.16.221.128; # 告知客户端TFTP服务器的ip
    filename "/pxelinux.0"; # 告知客户端从TFTP根目录下载pxelinux.0文件
    }
    systemctl start dhcpd.service #启动dhcp服务
    netstat -tunlp|grep dhcp #查看是否启动成功

  ** 本来软件装完后都要加入开机自启动,但这个Kickstart系统就不能开机自启动,而且用完后服务都要关闭,防止未来重启服务器自动重装系统了。**

TFTP服务配置
  TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

    udp协议,端口号69
    yum -y install tftp-server
    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 #由原来的yes改为no
    per_source = 11
    cps = 100 2
    flags = IPv4
    }
    systemctl start tftpd  #启动tftp服务
    netstat -tunlp|grep 69 #查看是否启动成功

  HTTP服务配置
    可以用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。

    yum -y install httpd
    sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
    systemctl start httpd
    mkdir /var/www/html/CentOS-7
    mount /dev/cdrom /var/www/html/CentOS-7/

  HTTP服务配置
    可以用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。

    yum -y install httpd
    sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
    systemctl start httpd
    mkdir /var/www/html/CentOS-7
    [root@linux-node1 ~]# mount /dev/cdrom /var/www/html/CentOS-7/ #只要把安装光盘内容能通过web发布即可
    mount: block device /dev/sr0 is write-protected, mounting read-only
    [root@linux-node1 ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda3 19G 2.4G 16G 14% /
    tmpfs 491M 16K 491M 1% /dev/shm
    /dev/sda1 190M 36M 145M 20% /boot
    /dev/sr0 3.7G 3.7G 0 100% /var/www/html/CentOS-7
    # 不管怎么弄,只要把安装光盘内容能通过web发布即可。因为是演示,如果复制镜像就有点浪费时间。但生产环境就一定要复制了,光盘读取速度有限。

    

    浏览器访问http://10.0.0.7/CentOS-6.7/检验配置是否正确。 

    

  配置支持PXE启动的程序
    syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。因为系统最小化安装是没有pxelinux.0这个文    件的,所以要安装一下

  yum -y install syslinux
  cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ tftp根目录
  # 复制启动菜单程序文件
  cp -a /var/www/html/CentOS-7/isolinux/* /var/lib/tftpboot/
  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目录,存放客户端的配置文件。
  mkdir -p /var/lib/tftpboot/pxelinux.cfg
  cp /var/www/html/CentOS-7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

虚拟机中手动安装演示

配合虚拟机演示讲解default文件。新建一个虚拟机,注意centos7.3以上内存需要给2G。,并且配置文件default里面还要修改一下

[root@linux-node1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default default vesamenu.c32 # 默认加载一个菜单 #prompt 1 # 开启会显示命令行'boot: '提示符。prompt值为0时则不提示,将会直接启动'default'参数中指定的内容。 timeout 600 # timeout时间是引导时等待用户手动选择的时间,设为1可直接引导,单位为1/10秒。 display boot.msg # 菜单背景图片、标题、颜色。 menu background splash.jpg menu title Welcome to CentOS 6.7! 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 scrollbar 0 #ffffffff #00000000 # label指定在boot:提示符下输入的关键字,比如boot:linux[ENTER],这个会启动label linux下标记的kernel和initrd.img文件。 label linux # 一个标签就是前面图片的一行选项。 menu label ^Install or upgrade an existing system menu default kernel vmlinuz # 指定要启动的内核。同样要注意路径,默认是/tftpboot目录。 #append initrd=initrd.img # 指定追加给内核的参数,initrd.img是一个最小的linux系统 append initrd=initrd.img method=http://172.16.221.128/CentOS-7/ #上面的是默认的 label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img nomodeset 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 -

注意:url方式,使用NFS的写法nfs:10.0.0.1:/data/sys/kickstart/ks.cfg

虚拟机中自动安装演示

#编写自己适合装机的ks.cfg文件
install
url --url="http://172.16.221.128/CentOS-7/" text lang en_US.UTF-8 keyboard us zerombr bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 timezone --utc Asia/Shanghai authconfig --enableshadow --passalgo=sha512 rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/ clearpart --all --initlabel #part /boot --fstype=ext4 --asprimary --size=200 part swap --size=4096 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里面也可以执行命令,后面必须加end
%post wget -O /tmp/optimization.sh http://172.16.221.128/ks-config/optimization.sh &>/dev/null /bin/sh /tmp/optimization.sh %end
关键字    含义
install    告知安装程序,这是一次全新安装,而不是升级upgrade。
url --url=" "    通过FTP或HTTP从远程服务器上的安装树中安装。
url --url="http://10.0.0.7/CentOS-6.7/"
url --url ftp://<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 rhgb quiet"
--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=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2
请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。
--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关机。
ks.cfg含义
通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。使用这种kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,
在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。

生成kickstart配置文件的三种方法: 方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg) 方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。 方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。

ks.cfg文件组成大致分为3段   命令段     键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项   软件包段
    %packages     @groupname:指定安装的包组     package_name:指定安装的包     -package_name:指定不安装的包
  脚本段(可选)
    %pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)     %post:安装系统后执行的命令或脚本(基本支持所有命令)

  整合编辑default配置文件

    # 最精简配置
    [root@linux-node1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
    default ks
    prompt 0
    label ks
    kernel vmlinuz
    #append initrd=initrd.img ks=http://10.0.0.7/ks_config/CentOS-6.7-ks.cfg # 告诉安装程序ks.cfg文件在哪里
    append initrd=initrd.img ks=http://172.16.221.128/ks-config/ks.cfg ksdevice=link #这样虚拟机会自动加载来电的网卡
    # ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth1安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。

kickstart真机如何安装

1.DEll R730服务器开机后,根据提示按F12,进行PXE启动。物理服务器有4个网卡,所以还会让选择从哪个网卡启动。 ks.cfg
2.关于kickstart分区指定特定硬盘的两篇文章 1 2
3.官方文档
4
.参考文章1 参考文章二

猜你喜欢

转载自www.cnblogs.com/p0st/p/9950156.html