20170916 运维自动化之系统安装(二)

  • DHCP服务
  • DHCP实现
  • PXE(Preboot Excution Environment) 预启动执行环境
  • Cobbler

一、DHCP服务

  • DHCP (Dynamic Host Configuration Protocol)
    动态主机配置协议,是一种局域网协议,属于UDP协议

  • 应用:为局域网内的主机分配ip地址,同时也作为内网的管理手段

  • 使用场景:自动化安装系统,解决ipv4地址不足的问题

  • DHCP报文:共有八种报文

    • DHCP DISCOVER:客户端到服务器
    • DHCP OFFER :服务器到客户端
    • DHCP REQUEST:客户端到服务器
    • DHCP ACK :服务器到客户端
    • DHCP NAK:服务器到客户端,通知用户无法分配合适的IP地址
    • DHCP DECLINE :客户端到服务器,指示地址已被使用
    • DHCP RELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
    • DHCP INFORM:客户端到服务器,客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送Inform报文向服务器进行请求,极少用到
  • 续租:

    • 50% :租赁时间达到50%时续租,向DHCP服务器发送新的DHCP REQUEST请求。如果dhcp服务没有拒绝的理由,则回应DHCP ACK信息。当DHCP客户端收到该应答信息后,就重新开始新的租用周期
    • 87.5%:如果之前DHCP Server没有回应续租请求,等到租约期的7/8时,主机会再发送一次广播请求

*DHCP服务必须基于本地,

  • DHCP服务器一般来说应该与需要DHCP服务的客户端处于同一个网段中

  • 这是因为DHCP服务过程基于广播,而广播只能在同一个网段内传送

  • 实现跨网段的DHCP服务

    • 需要在客户机网段指定一台代理(dhcrelay:中继)负责客户机与另一个网段的DHCP服务器的通信,实现IP地址的分配
    • 符合RFC 1542 Compliant Routers标准的路由器可以直接实现中继的功能

二、DHCP实现

  • Linux DHCP协议的实现程序:dhcp, dnsmasq(包含dhcp, dns功能)

  • 端口:
    dhcp_server: 67/udp
    dhcp_client: 68/udp

  • 配置DHCP服务器端

    • DHCP服务的配置文件位于:/etc/dhcp/dhcpd.conf,打开文件后如下图:
    • 提示模板文件/usr/share/doc/dhcp*/dhcpd.conf.sample和帮助参考位置:man 5 dhcpd.conf

    • 直接赋值模板文件覆盖配置文件,在模板基础上修改配置
      cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

    • 修改配置文件:vim /etc/dhcp/dhcpd.conf
      核心配置内容包含在subnet条目中,这里的配置属于全局配置
      基本格式如下:
    subnet SUBNET_IP netmask NETMASK_IP {
      range START_IP END_START;
      其余设置项
    }
    
    • 例如:DHCP服务器本机IP为192.168.136.229,子网掩码:225.225.225.0,分配的地址库范围:192.168.136.10-192.168.136.30,则配置文件格式如下:
    subnet 192.168.136.0 netmask 225.225.225.0 {
      range 192.168.136.10 192.136.136.30
    }
    
    • 配置好后,启动dhcp服务service dhcpd start,在另一台同网段主机上可以看到被分配的ip地址,从192.168.136.10/24开始分配
    • 可以查看/var/lib/dhcpd/dhcpd.leases文件内容,查询DHCP服务器地址分配记录
  • 其它配置选项:
    filename:指明引导文件名称(用于网络安装系统)
    next-server:提供引导文件的服务器IP地址(用于网络安装系统)

  • 检查配置文件语法
    service dhcpd configtest

  • DHCP客户端(dhclient)
    自动获取的IP信息文件:/var/lib/dhclient目录下,可以看到被分配的地址、DHCP服务器、分配的租期时间等信息

三、PXE(Preboot Excution Environment) 预启动执行环境

(一)简介

  • 基于C/S架构设计
  • 支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统

(二)工作原理

  • Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client
  • Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0
  • Client执行接收到的pxelinux.0文件
  • Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
  • Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
  • Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
  • Client启动Linux内核
  • Client下载安装源文件,读取自动化安装脚本

(三)PXE自动化安装CentOS 7(CentOS7作为HTTP、DHCP、TFTP服务器)

  • (1)安装前准备关闭SELinux和防火墙,DHCP服务器设置为静态IP

  • (2)安装相关软件包httpd, tftp-server, dhcp, syslinux

    • httpd服务提供yum源服务,
    • tftp服务器为客户机提供安装系统所需的启动文件、启动菜单、内核文件、伪文件系统
    • dhcp服务器为客户机提供IP地址,并将tftp服务器的地址提供给客户机
    • 启动文件、启动菜单需要安装syslinux软件包后获得
    • 执行命令:yum install httpd tftp-server dhcp syslinux
  • (3)配置yum源服务

    • 将httpd服务设置为开机自启动:systemctl enable httpd
    • 打开httpd服务:systemctl start httpd
    • 配置yum源1:建立centos7目录mkdir -p /var/www/html/centos/7
    • 配置yum源2:复制centos7光盘文件内容至centos7目录下,这里将光盘挂载至目录下,效果与前者相同,实际中应该复制至硬盘,保证系统安装执行效率
      mount /dev/sr0 /var/www/html/centos/7
  • (4)准备kickstart文件

    • 准备桌面和最小化安装两份文件,可以根据/root/anaconda-ks.cfg文件修改
      注意:使用system-config-kickstart时,CentOS7环境下可能出现无法选择软件包的情况,此时需要将yum源配置文件的首个源配置信息的源标识符改名为"development",即可正常选择软件包
    • 准备的kickstart文件:ks7.cfg为桌面安装使用,ks7-mini为最小化安装使用
      mkdir /var/www/html/ksdir 建立kickstart文件目录
      cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7.cfg 复制模板
      cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7-mini.cfg 复制模板

    • 两份kickstart文件示例如下:

    vim /var/www/html/ksdir/ks7.cfg
    #platform=x86, AMD64, or Intel EM64T
    #version=DEVEL
    # Install OS instead of upgrade
    install
    # X Window System configuration information
    xconfig  --startxonboot
    # Keyboard layouts
    # old format: keyboard us
    # new format:
    keyboard --vckeymap=us --xlayouts='us'
    # Root password
    rootpw --iscrypted $1$B2Ve3zbv$S2d5TSE.8Iwbo4o3BoRxM1
    # Use network installation
    url --url="http://192.168.136.230/centos/7"
    # System language
    lang en_US
    user --name=hellopeiyang --password=$6$vFs7gFIqwNrxjVEx$UwrqEc4BanhssQpLa./g/ySepGSRLNll65NvI/PSJuavDVQJvVXukrUmHPHDX7tVyWb4uXlyEXBTYmVD0KxLK/ --iscrypted
    # Firewall configuration
    firewall --disabled
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use text mode install
    text
    # Run the Setup Agent on first boot
    firstboot --enable
    # SELinux configuration
    selinux --disabled
    # System services
    services --disabled="chronyd"
    ignoredisk --only-use=sda
    # Network information
    network  --bootproto=dhcp --device=ens33 --onboot=on
    # Reboot after installation
    reboot
    # System timezone
    timezone Asia/Shanghai --nontp
    # System bootloader configuration
    bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all
    # Disk partitioning information
    part /app --fstype="xfs" --ondisk=sda --size=51200
    part / --fstype="xfs" --ondisk=sda --size=51200
    part swap --fstype="swap" --ondisk=sda --size=2048
    part /boot --fstype="xfs" --ondisk=sda --size=1024
    
    %post
    systemctl enable autofs
    rm -rf /etc/yum.repos.d/*
    cat > /etc/yum.repos.d/base.repo <<eof
    [base]
    name=base
    baseurl=file:///misc/cd
    gpgcheck=0
    eof
    %end
    
    %packages
    @^graphical-server-environment
    @base
    @core
    @desktop-debugging
    @dial-up
    @fonts
    @gnome-desktop
    @guest-agents
    @guest-desktop-agents
    @hardware-monitoring
    @input-methods
    @internet-browser
    @multimedia
    @print-client
    @x11
    wodim
    autofs
    %end
    
    vim /var/www/html/ksdir/ks7-mini.cfg
    #platform=x86, AMD64, or Intel EM64T
    #version=DEVEL
    # Install OS instead of upgrade
    install
    # Keyboard layouts
    # old format: keyboard us
    # new format:
    keyboard --vckeymap=us --xlayouts='us'
    # Root password
    rootpw --iscrypted $1$C8HufR6L$JuAxRzQnv7dGxVw.xDNLc0
    # Use network installation
    url --url="http://192.168.136.230/centos/7"
    # System language
    lang en_US
    user --name=hellopeiyang --password=$6$hbPuvZcl0TRrYyFG$Vb0pNhuS/uBLMpq6nbDzruRtZr0K1qGmCey6.PL3dyKA.iUvZds4JRgQ8LpzTJ.6STbuFD2Tu5xgXt68KIjrc/ --iscrypted 
    --gecos="hellopeiyang"
    # Firewall configuration
    firewall --disabled
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use text mode install
    text
    # Run the Setup Agent on first boot
    firstboot --enable
    # SELinux configuration
    selinux --disabled
    
    # System services
    services --disabled="chronyd"
    ignoredisk --only-use=sda
    # Network information
    network  --bootproto=dhcp --device=ens33 --onboot=on
    # Reboot after installation
    reboot
    # System timezone
    timezone Asia/Shanghai --nontp
    # System bootloader configuration
    bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all
    # Disk partitioning information
    part /app --fstype="xfs" --ondisk=sda --size=51200
    part / --fstype="xfs" --ondisk=sda --size=51200
    part swap --fstype="swap" --ondisk=sda --size=2048
    part /boot --fstype="xfs" --ondisk=sda --size=1024
    
    %post
    systemctl enable autofs
    rm -rf /etc/yum.repos.d/*
    cat > /etc/yum.repos.d/base.repo <<eof
    [base]
    name=base
    baseurl=file:///misc/cd
    gpgcheck=0
    eof
    %end
    
    %packages
    @^minimal
    @core
    autofs
    %end
    
    • kickstart文件的权限可能不合适,为文件的所有用户增加读权限
      chmod +r /var/www/html/ksdir/{rs7.cfg,rs7-mini.cfg}
  • (5)配置TFTP服务

    • 设置tftp服务开机自启动:systemctl enable tftp.socket
    • 开启tftp服务:systemctl start tftp.socket
  • (6)配置DHCP服务

    • 复制dhcp配置模板文件
      cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf

    • 编辑/etc/dhcp/dhcpd.conf文件,subnet字段修改后如下:

    subnet 192.168.136.0 netmask 255.255.255.0 {
            range 192.168.136.10    192.168.136.30;
            next-server 192.168.136.230;
            filename "pxelinux.0";
    }
    
    • 将dhcp服务设置为自启动:systemctl enable dhcpd
    • 启动dhcp服务:systemctl start dhcpd
  • (7)准备PXE相关文件

    • 建立PXE启动配置文件存放目录:mkdir /var/lib/tftpboot/pxelinux.cfg
    • 复制启动相关文件:
      cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
    • 复制内核, initrd文件:
      cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
    • 复制启动项设置文件(必须重命名为default):
      cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    • 文件目录结构如下:
  • (8)修改启动菜单文件

vim /var/lib/tftpboot/pxelinux.cfg/default

default menu.c32     //启动菜单风格
timeout 600 

menu title CentOS Linux 7 PXE Install

label desktop     //桌面自动安装 
  menu label Install CentOS Linux 7 ^Desktop
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.136.230/ksdir/ks7.cfg

label mini     //最小化自动安装
  menu label Install CentOS Linux 7 M^ini
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.136.230/ksdir/ks7-mini.cfg

label manual     //手动安装
  menu label Install CentOS Linux 7 ^Manual
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://192.168.136.230/centos/7

label local     //本地硬盘启动
  menu default
  menu label Boot from ^local drive
  localboot 0xffff
menu end 
  • (9)从网卡启动主机,正确进入PXE安装的启动项

(四)PXE自动化安装CentOS 6 (CentOS 6作为FTP、DHCP、TFTP服务器)

  • (1)安装前准备:关闭SELinux和防火墙,DHCP服务器设置为静态IP

  • (2)安装相关软件包vsftpd, tftp-server, dhcp, syslinux

    • 安装软件包:yum install vsftpd tftp-server dhcp syslinux
  • (3)配置yum源服务

    • 建立centos6目录:mkdir -p /var/ftp/pub/centos/6
    • 配置yum源:mount /dev/sr0 /var/ftp/pub/centos/6
    • 设置vsftpd服务为自启动:chkconfig vsftpd on
    • 启动vsftpd服务:service vsftpd start
  • (4)准备kickstart文件

    • 与自动安装CentOS7相似,准备桌面和最小化安装两份文件

    • ks6.cfg为桌面安装使用,ks7-mini为最小化安装使用
      mkdir /var/ftp/pub/ksdir 建立kickstart文件目录
      cp /root/ananconda-ks.cfg /var/ftp/pub/ksdir/ks6.cfg 复制模板
      cp /root/ananconda-ks.cfg /var/ftp/pub/ksdir/ks6-mini.cfg 复制模板

    • 两份kickstart文件示例如下:

    vim /var/ftp/pub/ksdir/ks6.cfg
    
    #platform=x86, AMD64, or Intel EM64T
    #version=DEVEL
    # Firewall configuration
    firewall --disabled
    # Install OS instead of upgrade
    install
    # Use network installation
    url --url="ftp://192.168.136.229/pub/centos/6"
    #repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
    # Root password
    rootpw --iscrypted $1$QmHn/VZt$YE/c30khjQ1i1hSHeMN8h/
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use text mode install
    text
    firstboot --disable
    # System keyboard
    keyboard us
    # System language
    lang en_US
    # SELinux configuration
    selinux --disabled
    # Installation logging level
    logging --level=info
    # Reboot after installation
    reboot
    # System timezone
    timezone  Asia/Shanghai
    # Network information
    network  --bootproto=dhcp --device=eth0 --onboot=on
    # System bootloader configuration
    bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all
    # Disk partitioning information
    part /boot --fstype="ext4" --size=1000
    part / --fstype="ext4" --size=50000
    part swap --fstype="swap" --size=2000
    part /app --fstype="ext4" --size=20000
    
    %post
    rm -rf /etc/yum.repos.d/*
    cat > /etc/yum.repos.d/base.repo <<eof
    [base]
    name=base
    baseurl=file:///misc/cd
    gpgcheck=0
    eof
    %end
    
    %packages
    @base
    @basic-desktop
    @core
    @debugging
    @desktop-debugging
    @desktop-platform
    @directory-client
    @fonts
    @general-desktop
    @graphical-admin-tools
    @input-methods
    @internet-applications
    @internet-browser
    @java-platform
    @legacy-x
    @network-file-system-client
    @office-suite
    @print-client
    @remote-desktop-clients
    @server-platform
    @server-policy
    @workstation-policy
    @x11
    abrt-gui
    certmonger
    device-mapper-persistent-data
    genisoimage
    krb5-workstation
    libXmu
    mtools
    oddjob
    pam_krb5
    pax
    python-dmidecode
    samba-winbind
    sgpio
    wodim
    %end
    
    vim /var/ftp/pub/ksdir/ks6-mini.cfg
    
    #platform=x86, AMD64, or Intel EM64T
    #version=DEVEL
    # Firewall configuration
    firewall --disabled
    # Install OS instead of upgrade
    install
    # Use network installation
    url --url="ftp://192.168.136.229/pub/centos/6"
    # Root password
    rootpw --iscrypted $1$H3QsWt7L$uezUXA.OuYFONmwP027tS.
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use text mode install
    text
    firstboot --disable
    # System keyboard
    keyboard us
    # System language
    lang en_US
    # SELinux configuration
    selinux --disabled
    # Installation logging level
    logging --level=info
    # Reboot after installation
    reboot
    # System timezone
    timezone  Asia/Shanghai
    # Network information
    network  --bootproto=dhcp --device=eth0 --onboot=on
    # System bootloader configuration
    bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all
    # Disk partitioning information
    part /boot --fstype="ext4" --size=1000
    part / --fstype="ext4" --size=50000
    part swap --fstype="swap" --size=2000
    part /app --fstype="ext4" --size=20000
    
    %post
    rm -rf /etc/yum.repos.d/*
    cat > /etc/yum.repos.d/base.repo <<eof
    [base]
    name=base
    baseurl=file:///misc/cd
    gpgcheck=0
    eof
    %end
    
    %packages
    @core
    @server-policy
    @workstation-policy
    autofs
    %end
    
    • kickstart文件的权限可能不合适,统一增加写权限
      chmod +r /var/ftp/pub/ksdir/*
  • (5)配置TFTP服务

    • 启动tftp服务:
    chkconfig tftp on     //tftp服务自启动
    service xinetd restart     //xinetd服务重启服务,为tftp服务监听端口
    
  • (6)配置DHCP服务

    • 复制dhcp配置模板文件
      cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf

    • 编辑/etc/dhcp/dhcpd.conf文件,subnet字段修改后入下:

subnet 192.168.136.0 netmask 255.255.255.0 {
        range 192.168.136.10    192.168.136.30;
        next-server 192.168.136.229;
        filename "pxelinux.0";
}
  • dhcpd服务自启动:chkconfig dhcpd on
  • 启动dhcp服务:service dhcpd start
  • (7)准备PXE相关文件

    • 建立PXE启动配置文件存放目录:mkdir /var/lib/tftpboot/pxelinux.cfg
    • 复制启动相关文件:cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot
    • 复制内核,initrd文件:
      cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
    • 复制启动项设置文件(必须重命名为default):
      cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    • 文件目录结构如下:
  • (8)修改启动菜单文件
vim /var/lib/tftpboot/pxelinux.cfg/default

default menu.c32
timeout 600 

menu title CentOS Linux 6 PXE Install

label desktop 
  menu label Install CentOS Linux 6 ^Desktop
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://192.168.136.229/pub/ksdir/ks6.cfg

label mini
  menu label Install CentOS Linux 6 M^ini
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://192.168.136.229/pub/ksdir/ks6-mini.cfg

label manual
  menu label Install CentOS Linux 6 ^Manual
  kernel vmlinuz
  append initrd=initrd.img inst.repo=ftp://192.168.136.229/pub/centos/6

label local
  menu default
  menu label Boot from ^local drive
 localboot 0xfffmenu end 
menu end 
  • (9)从网卡启动主机,正确进入PXE安装的启动项

(五)PXE自动化安装CentOS 6 和CentOS 7(CentOS 7作为HTTP、DHCP、TFTP服务器)

  • (1)安装前准备:关闭SELinux和防火墙,DHCP服务器设置为静态IP

  • (2)安装相关软件包httpd, dhcp, tftp-server, syslinux
    yum install httpd dhcp tftp-server syslinux

  • (3)配置CentOS 6和CentOS 7的源

    • 将httpd服务设置为自启动:systemctl enable httpd
    • 打开httpd服务:systemctl start httpd
  • 配置centos 7的yum源:
    mkdir -p /var/www/html/centos/6
    mount /dev/sr1 /var/www/html/centos/6
    mkdir -p /var/www/html/centos/7
    mount /dev/sr0 /var/www/html/centos/7

  • (4)准备kickstart文件
    • 调整上面两个实验中的kickstart文件,分别为ks7.cfg, ks7-mini.cfg, ks6.cfg, ks6-mini.cfg。主要调整的是远程安装路径,即usl --url=字段后面的设置
    • 将kickstart文件复制到指定目录:
      mkdir -p /var/www/html/ksdir/{6,7}
      vim /var/www/html/ksdir/6/ks6.cfg
      vim /var/www/html/ksdir/6/ks6-mini.cfg
      vim /var/www/html/ksdir/7/ks7.cfg
      vim /var/www/html/ksdir/7/ks7-mini.cfg

*(5)配置TFTP服务:

  • 设置tftp服务开机自启动:systemctl enable tftp.socket

  • 开启tftp服务:systemctl start tftp.socket

  • (6)配置DHCP服务

    • 复制dhcp配置模板文件
      cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
    • 编辑/etc/dhcp/dhcpd.conf文件,subnet字段修改后如下:
    subnet 192.168.136.0 netmask 255.255.255.0 {
            range 192.168.136.10    192.168.136.30;
            next-server 192.168.136.230;
            filename "pxelinux.0";
    }
    
    • 将dhcp服务设置为自启动:systemctl enable dhcpd
    • 启动dhcp服务:systemctl start dhcpd
  • (7)准备PXE相关文件

    • 建立PXE启动配置文件存放目录:mkdir /var/lib/tftpboot/pxelinux.cfg
    • 分别建立存放CentOS6和7的内核相关文件的目录:
      mkdir -p /var/lib/tftpboot/centos/6
      mkdir -p /var/lib/tftpboot/centos/7
    • 复制启动相关文件:cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot
    • 分别复制CentOS 6和7的内核与initrd文件至不同的目录:
      cp /var/www/html/centos/6/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos/6
      cp /var/www/html/centos/7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos/7
    • 复制启动项设置文件(必须重命名为default)
      cp /var/www/html/centos/7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    • 文件目录结构如下:
  • (8)修改启动菜单文件:
    注意CentOS6和CentOS7系统内核相关文件的不同路径需要相应修改配置文件的设置

default menu.c32
timeout 600

menu title CentOS Linux PXE Install

label desktop 7
  menu label Install CentOS Linux 7 ^Desktop
  kernel centos/7/vmlinuz
  append initrd=centos/7/initrd.img ks=http://192.168.136.230/ksdir/7/ks7.cfg

label desktop 6
  menu label Install CentOS Linux 6 D^esktop
  kernel centos/6/vmlinuz
  append initrd=centos/6/initrd.img ks=http://192.168.136.230/ksdir/6/ks6.cfg
    
label mini 7 
  menu label Install CentOS Linux 7 M^ini
  kernel centos/7/vmlinuz
  append initrd=centos/7/initrd.img ks=http://192.168.136.230/ksdir/7/ks7-mini.cfg

label mini 6
  menu label Install CentOS Linux 6 Mi^ni
  kernel centos/6/vmlinuz
  append initrd=centos/6/initrd.img ks=http://192.168.136.230/ksdir/6/ks6-mini.cfg

label manual 7
  menu label Install CentOS Linux 7 ^Manual
  kernel centos/7/vmlinuz
  append initrd=centos/7/initrd.img inst.repo=http://192.168.136.230/centos/7


label manual 6
  menu label Install CentOS Linux 6 M^anual
  kernel centos/6/vmlinuz
  append initrd=centos/6/initrd.img inst.repo=http://192.168.136.230/centos/6

label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff
menu end
  • (9)从网卡启动主机,正确进入PXE安装的启动项

可以同时安装CentOS6 和CentOS 7

四、cobbler

(一)cobbler简介

  • 功能:快速网络安装Linux系统
  • PXE的二次封装,将多种安装参数封装到一个菜单
  • 集成了PXE、DHCP、rsync、http、DNS、Kickstart、IPMI(电源管理)多种服务
  • 由Python编写
  • 提供CLI和Web管理两种方式

(二)cobbler工作流程

  • client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP
  • DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址
  • client裸机拿到ip后再向cobbler server发送请求OS引导文件的请求
  • cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port
  • client裸机通过上面告知的TFTP server地址通信,下载引导文件
  • client裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image
  • cobbler server发送请求的kickstart和os iamge
  • client裸机加载kickstart文件
  • client裸机接收os image,安装该os image

(三)cobbler相关术语

  • 发行版:
    表示一个操作系统版本,它承载了内核和initrd的信息,以及内核参数等其他数据
  • 配置文件:
    包含一个发行版、一个kickstart 文件以及可能的存储库,还包含更多特定的内核参数等其他数据
  • 系统:
    表示要配置的主机,它包含一个配置文件或一个镜像,还包含IP和MAC地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息
  • 存储库:
    保存一个yum或rsync存储库的镜像信息
  • 镜像:
    可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和initrd的对象)

(四)cobbler配置文件

  • 配置文件目录:/etc/cobbler
  • /etc/cobbler/settings:cobbler 主配置文件
  • /etc/cobbler/iso/:iso模板配置文件
  • /etc/cobbler/pxe:pxe模板文件
  • /etc/cobbler/power:电源配置文件
  • /etc/cobbler/user.conf:web服务授权配置文件
  • /etc/cobbler/users.digest:web访问的用户名密码配置文件
  • /etc/cobbler/dhcp.template:dhcp服务器的配置模板
  • /etc/cobbler/dnsmasq.template:dns服务器的配置模板
  • /etc/cobbler/tftpd.template:tftp服务的配置模板
  • /etc/cobbler/modules.conf:模块的配置文件

(五)cobbler目录

  • 数据目录
    /var/lib/cobbler/config/:用于存放distros, system, profiles 等信息配置文件
    /var/lib/cobbler/triggers/:用于存放用户定义的cobbler命令
    /var/lib/cobbler/kickstart/:默认存放kickstart文件
    /var/lib/cobbler/loaders/:存放各种引导程序
  • 镜像目录
    /var/www/cobbler/ks_mirror/:导入的发行版系统的所有数据
    /var/www/cobbler/images/:导入发行版的kernel和initrd镜像用于远程网络启动
    /var/www/cobbler/repo_mirror/:yum 仓库存储目录
  • 日志目录
    /var/log/cobbler/installing:客户端安装日志
    /var/log/cobbler/cobbler.log:cobbler日志

(六)cobbler命令

  • cobbler check:核对当前设置是否有问题
  • cobbler list:列出所有的cobbler元素
  • cobbler report:列出元素的详细信息
  • cobbler sync:同步配置到数据目录,更改配置最好都要执行下
  • cobbler reposync:同步yum仓库
  • cobbler distro:查看导入的发行版系统信息
  • cobbler system:查看添加的系统信息
  • cobbler profile:查看配置信息

(七)cobbler重要参数

  • /etc/cobbler/settings中重要的参数设置
  • default_password_crypted:"$1$gEc7ilpP$pg5iSOj/mlxTxEslhRvyp/"
  • manage_dhcp:1
  • manage_tftpd:1
  • pxe_just_once:1
  • next_server:< tftp服务器的IP 地址>
  • server:<cobbler服务器的IP 地址>

(八)cobbler相关管理

  • 下载启动菜单:cobbler get-loaders
  • 管理distro
    cobbler import --name=centos-6.9-x86_64 --path=/media/cdrom
  • 管理profile
    cobbler profile add --name=centos-6.9-x86_64-basic --distro=centos-6.9-x86_64 --kickstart=/tmp/centos-6.9-x86_64.cfg
  • 查看profiles
    cobbler profile list
  • 查看引导文件
    cat /var/lib/tftpboot/pxelinux.cfg/default
  • 同步cobbler配置
    cobbler sync

(九)cobbler实现步骤

  • 安装包,并设置服务
  • 检查配置
  • 根据上面提示修改配置
  • 下载启动相关文件菜单
  • 配置DHCP服务
  • 分别导入centos的安装源,并查看
  • 准备kickstart文件并导入cobbler
  • 测试

(十)cobbler实现Web管理

  • cobbler-web
    提供cobbler的基于web管理界面,epel源
    yum install cobbler-web
  • 认证方式
    • 定义认证方法:/etc/cobbler/modules.conf
    • 使用authn_pam模块认证cobbler_web用户
      • [authentication]块中指定module = authn_pam
      • 创建cobbler用户:useradd cobbler
      • 修改文件/etc/cobbler/users.conf
        [admins]
        admin = "cobbler"
    • 使用authn_configfile模块认证cobbler_web用户
      • [authentication]块中module=authn_configfile
      • 创建其认证文件/etc/cobbler/users.digest,并添加所需的用户
        htdigest -c /etc/cobbler/users.digest Cobbler admin
      • 注意:添加第一个用户时,使用“-c”选项,后续添加其他用户时不要再使用,cobbler_web的realm只能为Cobbler
  • Web访问cobbler

(十一)cobbler实现自主选择安装CentOS6或7系统

(1)安装cobbler并配置相关服务

yum install cobbler
systemctl enable cobblerd
systemctl start cobblerd
systemctl enable tftp
systemctl start tftp
systemctl enable httpd
systemctl start httpd

(2)执行cobbler check命令,根据提示修改设置
  • 执行cobbler check命令,反馈类似结果
  • 根据问题,修改/etc/cobbler/settings文件,修改后如下:
vim /etc/cobbler/settings
default_password_crypted: "$1$3AUU7.oO$g7Dkuzmu1uFmcp4HYRLw9."      //加密密码
next_server: 192.168.136.230     //tftp服务器IP
manage_dhcp: 1     //管理dhcp服务
server: 192.168.136.230     //cobbler服务器IP

vim /etc/cobbler/dhcp.template     //修改dhcp模板文件
subnet 192.168.136.0 netmask 255.255.255.0 {
   range dynamic-bootp        192.168.136.10 192.168.136.30;

注明:密码可以用openssl passwd -1来生成

  • 重启cobbler服务并同步配置到数据目录,同步成功结果如下
    systemctl restart cobblerd
    cobbler sync
(3)准备启动文件和菜单风格文件
  • 具备联网条件时,执行cobbler get-loaders
  • 不具备联网条件时,操作类似PXE的操作
    cp /var/lib/tftpboot/{menu.c32,pxelinux.0} /var/lib/cobbler/loaders
(4)导入yum源
  • 导入centos 7.3的yum源,/mnt/centos6为centos6的光盘挂载点
    cobbler import --path=/mnt/centos7 --name=centos7.3 --arch=x86_64
  • 导入centos 6.9的yum源,/mnt/centos6为centos6的光盘挂载点
    cobbler import --path=/mnt/centos6 --name=centos6.9 --arch=x86_64
  • 查看导入的发行版及其配置信息,确认导入成功
    cobbler distro list 查看导入的发行版信息
    cobbler profile list 查看配置信息
(5)生成kickstart文件
  • 复制CentOS 6的kickstart文件
    cp /var/www/html/ksdir/6/ks6.cfg /var/lib/cobbler/kickstarts/

  • 复制CentOS 7的kickstart文件
    cp /var/www/html/ksdir/7/ks7.cfg /var/lib/cobbler/kickstarts/

  • 删除原先导入CentOS 6的yum源时的配置信息
    cobbler profile remove --name=centos6.9-x86_64

  • 删除原先导入CentOS 7的yum源时的配置信息
    cobbler profile remove --name=centos7.3-x86_64

  • 重新生成CentOS 6的kickstart配置
    cobbler profile add --name=centos6.9_desktop --distro=centos6.9-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks6.cfg

  • 重新生成CentOS 7的kickstart配置
    cobbler profile add --name=centos7.3_desktop --distro=centos7.3-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg

  • 同步设置到数据目录
    cobbler sync

(6)从网卡启动主机,正确进入cobbler安装的启动项

推荐阅读更多精彩内容