本章Blog相关Linux知识点


作为中小公司的运维,经常会遇到一些机械式的重复工作。如何进行批量一次大批量部署服务器安装?方法: Kickstart (PXE+DHCP+TFTP+HTTP)  或  Cobbler

批量装机软件介绍:

Redhat系通主要有两种方式:Kickstart和Cobbler。

    Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

    Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成。

什么是PXE:

    PXE,全名Pre-boot Execution Environment,预启动执行环境;

    简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,并降低使用者的门槛。而kickstart实现方式依赖于PXE环境。

    通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;

    由Intel和Systemsoft公司于1999年9月20日公布的技术;运行在Client/Server的工作模式;   

    PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;

    PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。

PXE工作流程图:

    image.png

1、PXE Client向DHCP发送请求 PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以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所在位置,根据该位置请求下载该文件。

6、客户端安装操作系统 将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。 OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。   

    在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行部署在在PXE Server端。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。

PXE必要条件:

1、pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序

2、pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中

    DHCP服务器必须能够除未pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置)

    TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务

3、使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议

PXE工作流程图:

    image.png

PXE环境安装DHCP


动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议,使用UDP协议工作,DHCP使用统一端口作为BOOTP:服务器端使用67/udp,客户端使用68/udp。主要有两个用途:用于内部网络或网络服务供应商自动分配IP地址给用户;用于内部网络管理员作为对所有电脑作中央管理的手段。

DHCP协议的工作流程:

    客户端在局域网广播DHCPDISCOVER报文,请求获得ip地址、网关、dns地址 等信息;DHCP服务器收到DHCPDISCOVER报文后 ,发送DHCPOFFER 报文进行响应 ;客户端收到DHCPOFFER报文后,发送DHCPREQUEST 报文进行请求 ;最终DHCP 服务器发送 DHCPACK报文进行确认 。

DHCP配置文件dhcp.conf 分为4段:

    1、DHCP属性段: log-facility  定义日志等级

    2、全局属性段: 使用option 关键字定义

    3、子网分配段: 使用subnet  来定义          

    4、主机配置段: 使用host来定义 

[root@PXE pxelinux.cfg]# vi /etc/dhcp/dhcpd.conf 
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "itwish.cn";      # 全局定义域名
option domain-name-servers 192.168.4.150 ; # 全局定义dns 地址

default-lease-time 600;  # 全局定义默认租约期限
max-lease-time 7200;     # 全局定义最长租约期限

log-facility local7;  # 文件属性

subnet NETWORK_ADDR  netmask  NETMASK {       # 定义子网 
    range 10.254.239.10 10.254.239.20;    # 分配地址池
    option routers dns1;      
    option domain-name-servers ns.itwish.cn;  
    option domain-name "internal.example.org";
    default-lease-time 600;    
    max-lease-time 7200;       
    range dynamic-bootp 10.254.239.40 10.254.239.60;    # 定义bootp
    option broadcast-address 10.254.239.31;         # 广播地址
    next-server  192.168.4.100; # tftp服务器地址
    filename  "pxelinux.0";     # 告诉TFTP目录下的bootstarp文件
}

host passacaglia {   # 主机定义
    hardware ethernet 0:0:c0:5d:bd:95;  # 物理地址
    filename "vmunix.passacaglia";
    server-name "toccata.fugue.com"; 
    fixed-address ip;  # 固定地址
}
  • 安装DHCP:

[root@PXE ~]# yum install dhcp   # 安装dhcp server

[root@PXE ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf   # dhcpd配置文件
/etc/rc.d/init.d/dhcpd   # dhcpd启动文件
/usr/sbin/dhcpd   # 启动脚本配置文件
[root@PXE pxelinux.cfg]# vi /etc/dhcp/dhcpd.conf   # 调整配置文件
# dhcpd.conf
#
option domain-name "itwish.cn";
option domain-name-servers 192.168.4.150 ;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;  

subnet 192.168.4.0 netmask 255.255.255.0 {  # 定义子网
  range 192.168.4.10 192.168.4.100;
  option routers 192.168.4.1;
  next-server 192.168.4.150;    # 注:添加 tftp服务器地址
  filename="pxelinux.0";        #注:告诉TFTP目录下的bootstarp文件
}


#注:配置文件中以";" 号结尾 ,且需添加next-server 和filename 项
  •  启动dhcp并验证dhcpd进程是否处于监听状态:

[root@PXE ~]# chkconfig --add dhcpd

[root@PXE ~]# chkconfig dhcpd on

[root@PXE ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]

[root@PXE ~]# ps aux | grep dhcpd     # 验证dhcpd 启动
dhcpd     14087  0.0  0.1  48324  3572 ?        Ss   03:13   0:00 /usr/sbin/dhcpd -user dhcpd -group dhcpd
root      14108  0.0  0.0 103272   840 pts/0    S+   03:14   0:00 grep dhcpd

[root@PXE ~]# ss -tunl | grep 67
udp    UNCONN     0      0                      *:67                    *:*

    

PXE 环境安装 TFTP


简单文件传输协议也称小型文件传输协议(Trivial File Transfer Protocol, TFTP),工作在UDP/69 端口,是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)。

瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别

    xinetd——为那些极少接受用户请求的服务,专门提供监听功能,如 监听tftpd进程

    独立(standlone)守护进程 :能自我管理,无须xinet 提供监听服务的进程

  • 安装TFTP:

[root@PXE ~]# yum install xinetd tftp-server

[root@PXE ~]# rpm -ql tftp-server  
/etc/xinetd.d/tftp    # 配置文件路径
/var/lib/tftpboot    # 默认tftp存储目录

[root@PXE ~]# vi /etc/xinetd.d/tftp 
# default: off    
service tftp
{
        disable = no    # no 表明tftp处于启用状态 ,yes 表示tftp处于禁用状态
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot # 默认tftp存储目录
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@PXE ~]# chkconfig xinetd on

[root@PXE ~]# chkconfig tftp on

[root@PXE ~]# service xinetd start
Starting xinetd: 

[root@PXE ~]# ss -tunl | grep 69
udp    UNCONN     0      0                      *:69                    *:*

  • 使用 syslinux 提供的bootstart :

[root@PXE ~]# yum install syslinux

[root@PXE ~]# rpm -ql syslinux
/usr/share/syslinux   # pxelinux.0 文件存储目录

[root@PXE ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  
# 复制pxelinux.0到 /var/lib/tftpboot 目录 

[root@PXE boot]# mount /dev/cdrom /media/  # 挂载光盘
mount: block device /dev/sr0 is write-protected, mounting read-only
  • 配置pxelinux.cfg 文件

[root@PXE  ~]# mkdir /var/lib/tftpboot/pxelinux.cfg    # 创建pxelinux.cfg 文件夹
[root@PXE ~]# cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  
# 把isolinux.cfg引导文件拷贝到tftpd存储目录下的pxelinux.cfg文件中,并命名为default

[root@PXE ~]# vi /var/lib/tftpboot/pxelinux.cfg/default   # 修改linux内核引导文件
default vesamenu.c32     # 默认启动界面,该文件需要拷贝到tftp存储目录中。
#prompt 1
timeout 600      # 倒计时 600就是60 秒,改数字为秒数的10倍

display boot.msg  # 将额外信息写入到boot.msg文件中,该文件需要拷贝到tftp存储目录中。

menu background splash.jpg   # 菜单背景图,该文件需要拷贝到tftp存储目录中。
menu title Welcome to CentOS 6.6!   # 菜单主标题

label linux
  menu label ^Install or upgrade an PXE system    #菜单項目
  menu default            # 预设项目
  kernel vmlinuz          # 内核 vmlinuz,该文件需要拷贝到tftp存储目录中。
  append initrd=initrd.img  ks=http://192.168.4.150/ks.cfg   
# 核心参数,指定initrd 核心文件,该文件需要拷贝到tftp存储目录中。另指定ks文件目录,这儿使用的http协议
  • 把内核及根文件拷贝到tftpd存储目录 :参照上菜单配置信息,包括 vesamenu.c32,boot.msg,splash.jpg,vmlinuz,initrd.img 文件做拷贝

[root@PXE ~]# cp /media/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/   

[root@PXE ~]# cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/


linux PXE环境HTTP部署


创建kickstart文件方式:

    1、复制模板 /root/anaconda-ks.cfg ,而后使用vim编辑配置

    2、使用system-config-kickstart 来生成,建议也使用/root/anaconda-ks.cfg 作为模板来进行

    # ksvalidator   查看ks文件语法是否正确    

kickstat文件的组成部分 :

    1、命令段: 用于配置系统 ,如:install ,firewall, part,lv 等

    2、软件包段%packages;指定要安装的程序包组(@组包名)及程序包(程序包名),每行一个 ;在程序包之前加 “-”号,表示不希望安装

    3、%pre %post脚本段:安装过程开始之前、后执行的安装预备式脚本

  • httpd安装:  

[root@PXE ~]# yum install httpd

[root@PXE ~]# rpm -ql httpd
/etc/httpd    
/etc/httpd/conf/httpd.conf   # httpd 配置文件
/var/www/html     # httpd 默认存储目录

[root@PXE ~]# chkconfig httpd on

[root@PXE ~]# service httpd start
Starting httpd: 

[root@PXE ~]# ss -tunl |grep 80
tcp    LISTEN     0      128                   :::80                   :::*     

[root@PXE ~]# ps aux | grep httpd
root       1877  0.0  3.3 479948 20284 ?        Ss   08:20   0:01 /usr/sbin/httpd
apache     2184  0.0  1.6 480084  9908 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2185  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2188  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2189  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2190  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2191  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2192  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2193  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
root       3116  0.0  0.1 103324   844 pts/0    S+   19:48   0:00 grep httpd

[root@PXE ~]# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg    # 拷贝模板到/var/www/html 目录,并重命名为ks.cfg

[root@PXE ~]# chmod o+r /var/www/html/ks.cfg    # 分配权限,为pxe client引导安装使用

[root@PXE isolinux]# cp /media/* /var/www/html/centos/os/    # 拷贝安装系统

[root@PXE os]# grub-crypt     # 密码加密,使用grub-crypt 默认512位加密方式
Password: 
Retype password: 
$6$DnceMH60Kiu8TaME$ySd/QOpPtEcLnnoW36bDjb59xr1eJHGUwTTV/4MHoojT.RoXXdsLHMWJXcLCETQNRF2xITSqKHAAUNZq6df0i/
  • 以/root/anaconda.cfg 为模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg 。

repo引用格式如下图

    image.png

    针对集群的计算节点设置的,比如设置用户信息、关闭防火墙等,请根据自己需要定制,kickstart文件说明参见:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/html/installation_guide/s1-kickstart2-options 

[root@PXE ~]# vi /var/www/html/ks.cfg     # 调整配置文件
# Kickstart file automatically generated by anaconda.

#version=DEVEL
install                                           # 命令段  ,安装
url --url=http://192.168.4.150/centos/os/        # 指定网络url安装目录 
lang en_US.UTF-8                                 # 默认字体
keyboard us                                      # 键盘类型
network --onboot yes --device eth0 --bootproto dhcp  --noipv6  
# 指定开机自启,网络接口eth0 ,dhcp获取网络地址,ipv6 禁用

rootpw  --iscrypted $6$ZOGP2tA0PI/6SI/X$MlC5bJyXfP9TBN5/0vwoc6dqAqIijOQthEbAZUnIXft85Tj9n4sKWB2PfxrsVfkZ2ibqX63apu8ElmdEvBo9o/   
# root 加密密码,使用grub-crypt 生成的字符串替代

reboot         # 配置完毕后,重启内核
firewall --disabled    # 防火墙禁用
authconfig --enableshadow --passalgo=sha512  # 登录身份使用 sha1 的 512bits 加密算法
selinux --disabled     # selinux 功能禁用
timezone Asia/Shanghai # 定义上海时区 
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"   
# 定义bootloader,grub安装mbr ,安装在sda磁盘

# 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         # 清除磁盘分区表
text                     # 纯文本格式安装显示
zerombr                  # 对磁盘进行初始化

part /boot --fstype=ext4 --asprimary --size=2000  # 分区信息 ,定义boot分区 ,格式为ext4 ,大小为2G
part swap --size=4096          # 分区信息 ,定义swap分区 ,大小为4G
part pv.008003  --size=80000  # 分区信息 ,定义lv分区 pv.008003,大小为80G

volgroup vg0 --pesize=8192 pv.008003   # 分区信息 ,在lv分区pv.008003定义vg0卷组 ,pe大小为8M
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=15000
logvol /usr --fstype=ext4 --name=/usr --vgname=vg0 --size=30000
logvol /var --fstype=ext4 --name=/var --vgname=vg0 --size=20000
logvol /home --fstype=ext4 --name=/home --vgname=vg0 --size=12000

repo --name="CentOS-6.6"  --baseurl=http://192.168.4.150/centos/os/  --cost=100  
# 定义yum仓库 ,类别为bashurl ,名称为CentOS-6.6

%packages             # 包组段,安装包组及程序包
@core                 
@server-policy            
@workstation-policy
%end

[root@PXE ~]# yum -y install pykickstart  #安装ksvalidator 软件

[root@PXE ~]# ksvalidator /var/www/html/ks.cfg    # ksvalidator验证ks.cfg语法是否正确
  • ks.cfg及repo验证:

    image.png

    注:ks.cfg若不能正常打开,确认是否有读权限

    image.png

    注: 若不能显示以上连接方式,确认httpd配置文件中,是否开启相关选项。

至此,PXE服务器环境部署完成,出现问题时,一般需要查看系统日志,如:/var/log/messages, 通过日志报错信息进行解决 。  


Centos PXE环境测试,安装,启动


部署环境:vmware 虚拟机

    PXE服务器:  PXE, ip :192.168.4.150

    PXE client :    vm  

实验:

一、配置PXE client 客户端 ,网络需与PXE服务器处于同一网段 192.168.4.150 /24

image.png    

二、选择开机启动顺序,选择"Network boot from Intel E1000"

    image.png

三、pxe client获取dhcp地址后 ,获取pxelinux.cfg中配置文件

    image.png

    image.png

四、加载内核和根文件系统

    image.png

    image.png

五、安装networkmanager ,创建磁盘分区

    image.png 

    image.png

    image.png

六、检查包依赖关系,并安装程序。

    image.png

    image.png        

七、完成安装,重启 ,进入登录界面

    image.png

    image.png


至此,pxe 服务器端 部署完成 ,并成功自动化安装pxeclient 端 。