美文网首页linux学习
实现cobbler+pxe自动化装机

实现cobbler+pxe自动化装机

作者: 任总 | 来源:发表于2018-08-22 08:56 被阅读91次

    前言:

    pxe和cobbler自动化安装系统,都要依赖于dhcp、tftp、httpd服务的开启所以首先我们要了解这些服务。


    客户端PXE安装过程

    一 、dhcp服务

    1、dhcp协议

    • 动态主机配置协议是一个局域网的网络协议控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
    • 与dhcp功能相同是dnsmasq

    2、续租请求:

    • 通常主机会在50%时候续租一次时长

    • 在找不到server时候,时间到75%时候续租一次时长

    • 在找不到server时候,时间到87.5%时候续租一次时长

    • 续租时长:单播给服务器

    情况一: dhcp request 告诉服务器再租一次
    dhcp ack 服务器返回同意续租

    情况二: dhcp request 告诉服务器再租一次
    dhcp nak 服务器拒绝续租

    3、dhcp服务

    • dhcpd可以提供dhcp服务和(dhcrelay)dhcp中继服务

    4、dhcp的安装

    [root@vs ~]# yum -y -install dhcp安装
    [root@vs ~]# cd /etc/dhcp/
    [root@vs dhcp]# ls
    dhclient.d  dhclient-exit-hooks.d  dhcpd6.conf  dhcpd.conf  scripts 
    [root@vs dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf -f
    cp:是否覆盖"./dhcpd.conf"? y
    [root@vs dhcp]# vim dhcpd.conf
    
    # dhcpd.conf
    #
    # Sample configuration file for ISC dhcpd
    #
    
    # option definitions common to all supported networks...
    option domain-name "hehe.com";#定义选项
    option domain-name-servers 192.1681.6;#dhcp服务器地址
    
    default-lease-time 3600;#默认租约期限
    max-lease-time 7200;#最长租约期限
    
    ..................
    subnet 192.168.1.0 netmask 255.255.255.0 {
     range 192.168.8.8 192.168.8.50 #起始地址
    }
    }定义子网和作用域
    
    ................
    host passacaglia {
      hardware ethernet 0:0:c0:5d:bd:95;#根据主机名那台主机绑定分配ip地址
      filename "vmunix.passacaglia";
      server-name "toccata.fugue.com";
    }
    
    host fantasia {
      hardware ethernet 08:00:07:26:c0:a5;#根据名mac主机绑定分配ip地址
    option roulers 192.168.1.1 #指定网关
    fixed-address 192.168.1.6;
    }
    其他不用的配置行注释掉,用.,$s/^[^#]/#/g行首非#号添加#
    [root@vs ~]systemctl start dhcpd.service#启动服务
    [root@vs ~]# less /var/lib/dhcpd/dhcpd.leases#查看分发出去的客户机租约
    
    

    其他配置:
    filename:指明引导文件名称
    例如: filename"pxelinux.0";
    next-server:指明引导所在的服务器主机的ip地址
    例如: next-server 192.168.1.6;

    • 客户端命令:dhclient
      -d 运行在前台

    二、tftp服务

    1、tftp定义

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

    2、tftp作用

    通过tfrp server加载 (bootloader,kernel,initrd)

    3、安装

    [root@vs ~]# yum -y install tftp-server tftp#安装tftp和tftp服务
    

    三、httpd服务和syslinux

    1、httpd服务提供yum repository下载路径和kickstart文件提供安装配置
    2、syslinux是一个的引导加载程序,需要他的pxelinux.0文件。
    3、PXE安装
    * PXE: preboot excution environment
    * 首先 由dhcp分配给主机ip,netmask,gw,dns,通过tfrp server加载(bootloader,kernel,initrd),然后到yum repository可以通过 (ftp,http,nfs),由kickstart自动应答文件提供安装配置,完成自动化安装。

    四、CentOS6的pxe自动化安装示例:

    [root@bogon ~]# yum install dhcp tftp-server tftp syslinux vsftpd -y#安装pex所需的程序包
    [root@bogon ~]# cd /etc/dhcp #切换目录
    [root@bogon dhcp]# ls
    dhclient.d  dhclient-exit-hooks.d  dhcpd6.conf  dhcpd.conf
    [root@bogon dhcp]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample  ./dhcpd.conf
    #拷贝配置文件
    cp: overwrite `./dhcpd.conf'? y
    [root@bogon dhcp]# vim dhcpd.conf#编辑dhcp配置文件
    .........
    # option definitions common to all supported networks...
    option domain-name "hehe.com";
    option domain-name-servers 192.168.3.133; #dhcp服务器地址
    
    default-lease-time 600;  #默认租期
    max-lease-time 7200;
    ..........
    log-facility local7;
    ..............
    subnet 192.168.3.0 netmask 255.255.255.0 { #定义子网
           range 192.168.3.3 192.168.3.20;  #地址范围
            filename "pxelinux.0";      #引导文件
            next-server 192.168.3.133;
    }
    [root@bogon dhcp]# service dhcpd configtest #语法检查
    Syntax: OK
    [root@bogon dhcp]# service dhcpd start #启动dhcp服务
    Starting dhcpd:                                            [  OK  ]
    [root@bogon dhcp]# vim /etc/xinetd.d/tftp   #编辑超级守护进程里面的tftp设置
    
    tftp设置
     [root@bogon dhcp]# chkconfig dhcpd on #开机自动启动dhcp服务
    [root@bogon dhcp]# service xinetd restart #重启超级守护进程
    Stopping xinetd:                                           [FAILED]
    Starting xinetd:                                           [  OK  ]
    [root@bogon dhcp]# chkconfig xinetd on #开机自动启动超级守护进程
    [root@bogon dhcp]# ss -unl
    State       Recv-Q Send-Q           Local Address:Port             Peer Address:Port 
    UNCONN      0      0                            *:67                          *:*    #dhcp服务已经启动 
    UNCONN      0      0                            *:68                          *:*     
    UNCONN      0      0                            *:69                          *:*  #超级守护进程已启动
    [root@bogon ~]# cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/ #拷贝pxelinux文件
    [root@bogon ~]# tftp 192.168.3.133   #测试tftp下载服务
    tftp> get pxelinux.0
    tftp> quit
    [root@bogon ~]# ls
    anaconda-ks.cfg  install.log         meun    pxelinux.0
    
    [root@bogon ~]# mkdir /media/cdrom #创建光盘挂载目录
    [root@bogon ~]# mount -r /dev/cdrom /media/cdrom   #挂载光盘
     [root@bogon ~]# ls /media/cdrom   #查询光盘内容
    
    [root@bogon ~]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/#拷贝光盘文件
    [root@bogon ~]# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/#拷贝光盘文件
    [root@bogon ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/#创建目录
    [root@bogon ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default#拷贝启动引导文件
    [root@bogon ~]# chmod +w  /var/lib/tftpboot/pxelinux.cfg/default #修改写入权限
    [root@bogon ~]# vim /var/lib/tftpboot/pxelinux.cfg/default #编辑
    default vesamenu.c32
    #prompt 1
    timeout 600
    
    display boot.msg
    
    menu background splash.jpg   #颜色背景配置段
    menu title Welcome to CentOS 6.9!
    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 autoinst
      menu label ^Auto Install CentOS   #新建自动安装项
      menu default
      kernel vmlinuz
      append initrd=initrd.img ks=ftp://192.168.3.133/pub/centos6.cfg #指明ks地址
    
    ............
    [root@bogon ~]# mkdir /var/ftp/pub/centos   #创建仓库存放目录
    [root@bogon ~]# mount --bind /media/cdrom/ /var/ftp/pub/centos  #绑定挂载cdrom到新创建仓库目录
    [root@bogon ~]# ls /var/ftp/pub/centos/  #测试
    
    [root@bogon ~]# vim anaconda-ks.cfg  #编辑ks
    
    #platform=x86, AMD64, 或 Intel EM64T
    #version=DEVEL
    # Firewall configuration
    firewall --disabled
    # Install OS instead of upgrade
    install
    url --url = "ftp://192.168.3.133/pub/centos"
    lang en_US.UTF-8
    keyboard us
    # Root password
    rootpw 123456
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use text mode install
    text
    # System keyboard
    keyboard us
    # System language
    lang en_US
    # SELinux configuration
    selinux --disabled
    # Do not configure the X Window System
    skipx
    # Installation logging level
    logging --level=info
    
    key --skip
    
    # Reboot after installation
    reboot
    # System timezone
    timezone  Asia/Shanghai
    # Network information
    network  --bootproto=dhcp --device=eth0 --onboot=on
    # System bootloader configuration
    bootloader --location=mbr
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all --initlabel 
    # Disk partitioning information
    part swap --fstype="swap" --size=1024
    part / --fstype="ext4" --grow --size=1
    
    %packages
    @base
    @compat-libraries
    @core
    @debugging
    @development
    @server-policy
    @workstation-policy
    python-dmidecode
    sgpio
    device-mapper-persistent-data
    systemtap-client
    %end
    [root@bogon ~]# cp anaconda-ks.cfg /var/ftp/pub/centos6.cfg
    [root@bogon ~]# service vsftpd start#启动vsftpd服务
    
    Starting vsftpd for vsftpd:                                [  OK  ]
    [root@bogon ~]# ss -unl     #查看tftp启动在69号端口
    
    
    
    

    客户端启动安装测试:


    自动获取地址

    五、CentOS7的pxe自动化安装示例:

    第一步准备tftp server:

    [root@vs ~]# yum -y install tftp-server tftp安装tftp和tftp服务
    
    [root@vs ~]# systemctl start tftp #启动
    
    [root@vs ~]# tftp 192.168.1.6 #登录tftp测试
    
    tftp> status#查询信息
    
    Connected to 192.168.1.6.
    
    Mode: netascii Verbose: off Tracing: off Literal: off
    
    Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
    
    tftp> quit#退出
    
    默认的文件目录:/var/lib/tftpboop/把文件放在这里
    

    第二步准备dhcp服务器:

    安装dhcpd服务

    
    [root@vs dhcp]# vim dhcpd.conf#编辑dhcpd配置文件
    
    option domain-name "hehe.com";
    
    option domain-name-servers 192.168.1.6;#dhcp服务器地址
    
    option routers 192.168.1.6;#默认路由
    
    default-lease-time 600;
    
    max-lease-time 7200;
    
    ..................
    
    log-facility local7;
    
    .......................
    
    subnet 192.168.1.0 netmask 255.255.255.0 {
    
     range 192.168.1.80 192.168.1.90;#地址池
    
     filename "pxelinux.0";#配置文件名称
    
     next-server 192.168.1.6; #tftp服务器地址
    
    }
    
    [root@vs ~]# systemctl start dhcpd  #启动dhcp服务
    
    [root@vs ~]# ss -unl
    
    State Recv-Q Send-Q Local Address:Port     Peer Address:Port             
    
    UNCONN 0 0 *:67 *:*   #端口已启动       
    

    第三步准备yum仓库

    安装httpd服务

    
    [root@samba-105 ~]# yum -y install httpd #安装httpd
    [root@samba-105 ~]# mkdir /var/www/html/centos/7/x86_64 -pv创建目录
    [root@samba-105 ~]# mount -r /dev/cdrom  /var/www/html/centos/7/x86_64 #挂载光盘上的文件
    [root@samba-105 ~]# systemctl start httpd.service启动httpd
    
    
    web访问镜像目录
    [root@samba-105 ~]# mkdir /var/www/html/kickstarts/ #创建ks目录
    
    [root@samba-105 ~]# cp anaconda-ks.cfg /var/www/html/kickstarts/centos7.cfg
    
    [root@samba-105 ~]# vim /var/www/html/kickstarts/centos7.cfg #编辑ks应答文件
    
    #platform=x86, AMD64, or Intel EM64T
    #version=DEVEL
    # Firewall configuration
    firewall --disabled
    # Install OS instead of upgrade
    install
    #Use network installation
    url --url="http://http://172.16.15.105/centos/7/x86_64/"
    # Root password
    rootpw --iscrypted $1$lgzpzCCE$Y6xpvPBLom/J4zAipUjfr.  ##此密码为123.com
    # System authorization information
    auth useshadow passalgo=sha512
    # Use graphical install
    graphical
    firstboot disable
    # System keyboard
    keyboard us
    # System language
    lang en_US
    # SELinux configuration
    selinux disabled
    # Installation logging level
    logging level=info
    # System timezone
    timezone Europe/Amsterdam
    # System bootloader configuration
    # Reboot afer installing
    reboot  ##一定要有此 选项否则操作系统安装完后不会自动重启。
    ######
    bootloader location=mbr
    clearpart --all --initlabel
    part swap --asprimary --fstype="swap" --size=1024
    part /boot --fstype xfs --size=300
    part pv.01 --size=1 --grow
    volgroup root_vg01 pv.01
    logvol / --fstype xfs --name=lv_01 --vgname=root_vg01 --size=1 --grow
    %packages    ###要安装的包
    @^minimal
    @core
    acpid
    iputils
    man
    net-tools
    ntp
    ntpdate
    parted
    vim-enhanced
    wget
    %end   ###以%end结尾
    #%addon com_redhat_kdump --disable --reserve-mb='auto' 
    #%end
    %post #--nochroot --log=/mnt/sysimage/var/log/ks.post01.log
    mkdir /root/test
    %end
    [root@samba-105 ~]# yum -y install syslinux  #安装syslinux
    
    [root@samba-105 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #拷贝文件
    
    [root@samba-105 ~]# cp /var/www/html/centos/7/x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/   #拷贝文件
    
    [root@samba-105 ~]# cp /usr/share/syslinux/{chain.c32,menu.c32,memdisk,mboot.c32} /var/lib/tftpboot/   #拷贝文件
    
    [root@samba-105 ~]# cd /var/lib/tftpboot/
    
    [root@samba-105 tftpboot]# mkdir pxelinux.cfg #创建引导配置文件
    
    [root@samba-105 tftpboot]# cd pxelinux.cfg
    
    [root@samba-105 pxelinux.cfg]# vim default #创建启动时候菜单
    
     LABEL linux
     MENU LABEL Install CentOS 7 x86_64
    KERNEL vmlinuz
    APPEND initrd=initrd.img inst.repo=http://172.16.15.105/centos/7/x86_64
    
     LABEL linux_autoinst  #自动安装选项
     MENU LABEL Install CentOS 7 x86_64
    KERNEL vmlinuz
    APPEND initrd=initrd.img inst.repo=http://172.16.15.105/centos/7/x86_64 #安装时候使用的yum仓库ks=http://172.16.15.105/kickstarts/centos7.cfg #ks文件位置  
    
    

    客户端测试安装:


    自动获取ip地址
    启动安装引导界面

    六、cobbler自动化装机

    1、cobbler

    • Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。

    • Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。

    • cobbler集成的服务有;

    PXE服务支持
    DHCP服务管理
    DNS服务管理(可选bind,dnsmasq)
    电源管理
    Kickstart服务支持
    YUM仓库管理
    TFTP(PXE启动时需要)
    Apache(提供kickstart的安装源,并提供定制化的kickstart配置)

    2、cobbler的三个层次:

    distro:不同的发行版系统
    profile:不同配置的同一发行版系统
    system:不同ip地址同一配置的同一发行版系统

    3、安装配置

    安装:cobbler安装yum仓库是epel源

     [root@vs ~]#yum -y  install cobbler dhcp tftp-server tftp httpd   #安装服务
    [root@vs ~]# useradd user1#创建用户
     [root@vs ~]# echo "123" | passwd  --stdin user1#添加密码
     [root@vs ~]# tail -1 /etc/shadow#查询密码
    user1:$6$tFcPsnxL$zoUdRFzeBCSbAgIOfFepsR4UI2uyUJCfoSe9cWCttpbGiHHWZI5sASzfrDf.y0wn.UhXMmN76t1GaGkc4uESu0:17754:0:99999:7:::
    [root@vs ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/cobbler/loaders/ #复制文件到cobbler目录
    
    [root@vs ~]# vim /etc/cobbler/settings
         server: 192.168.1.6 #修改成可以访问外网的ip地址
          next_server: 192.168.1.6 #修改成可以访问外网的ip地址
    default_password_crypted: "$6$tFcPsnxL$zoUdRFzeBCSbAgIOfFepsR4UI2uyUJCfoSe9cWCttpbGiHHWZI5sASzfrDf.y0wn.UhXMmN76t1GaGkc4uESu0"#修改用户密码
    [root@vs ~]# systemctl start dhcpd#启动dhcp服务
     [root@vs ~]# systemctl start tftp#启动tftp服务
    [root@vs ~]# systemctl  start  rsyncd#同步启动
    [root@vs ~]# systemctl start httpd#启动httpd服务
    [root@vs ~]# systemctl  start  cobblerd#cobbler启动
    [root@vs ~]# cobblerd check#配置检查
    [root@vs ~]# cobblerd sync
    [root@vs ~]# vim /etc/cobbler/settings#编辑配置文件
    

    使用cobbler管理dhcp、dns、tftp、rsync启用或停止,这里我们都是默认为0,不使用cobbler管理这些服务,我们自己手动管理。


    cobbler管理配置

    cobbler使用格式

    [root@vs ~]# cobbler  #cobbler使用格式
    usage
    =====
    cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ... 
            [add|edit|copy|getks*|list|remove|rename|report] [options|--help]
    cobbler <aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink> [options|--help]
    [root@vs ~]# cobbler distro add --help#添加一个发行版系统
    --name=NAME           Name (Ex: Fedora-11-i386) #指明发行版名字
    --kernel=KERNEL       Kernel (Absolute path to kernel on filesystem)发行版特定的内核
      --initrd=INITRD       Initrd (Absolute path to kernel on filesystem)特定的inittrd
    --arch=ARCH           Architecture (valid options:
                            i386,x86_64,ia64,ppc,ppc64,ppc64le,s390,arm)指明此发行版的平台架构
    [root@vs ~]# cobbler import --help #导入光盘镜像方式,自动生成一个distro
    Usage: cobbler import [options]
    
    Options:
      -h, --help            show this help message and exit
      --arch=ARCH           OS architecture being imported平台架构
      --breed=BREED         the breed being imported
      --os-version=OS_VERSION
                            the version being imported
      --path=PATH           local path or rsync location
      --name=NAME           name, ex 'RHEL-5'对应的导入的名字
      --available-as=AVAILABLE_AS
                            tree is here, don't mirror
      --kickstart=KICKSTART_FILE
                            assign this kickstart file
      --rsync-flags=RSYNC_FLAGS
                            pass additional flags to rsync
    
    • 当使用命令时候,cobbler将把挂载的光盘内容自动复制到/var/www/html/目录下,因此要确保磁盘空间充足
    [root@vs ~]# cobbler import --name="CentOS-7.0_x86_64" --path=/media/cdrom
    task started: 2018-08-12_150622_import
    task started (id=Media import, time=Sun Aug 12 15:06:22 2018)
    .................
    *** TASK COMPLETE ***
    [root@vs ~]# cobbler distro list#查询已生成的distro
       CentOS-7.0-x86_64
    [root@vs ~]# cobbler profile list#查询已生成的profile,但此时没有kiskstart
    [root@vs ~]# cobbler sync#同步配置
    [root@vs ~]# systemctl restart cobblerd
    
       CentOS-7.0-x86_64
    
    • 测试安装,此时profile并没有kiskstart文件,但cobbler会自动提供一个最小化安装的kiskstart文件,并完成安装
    cobbler测试安装
    • 注意:


      安装过程中碰到的内存小问题,安装过程会卡主,最后超时失败
      测试安装系统主机必须要配置大于等于2G的内存,官方文档这么说的,否则会导致安装失败,这个坑我掉进去很久才爬出来。

    安装cobbler错误:

    查看导入列表,如果报如下内容,需要重启cobbler,并执行cobbler get-loaders.

    xmlrpclib.Fault: <Fault 1: "cobbler.cexceptions.CX:'login failed'">

    ~]# systemctl restart cobblerd

    ~]# cobbler get-loaders

    相关文章

      网友评论

        本文标题:实现cobbler+pxe自动化装机

        本文链接:https://www.haomeiwen.com/subject/mjhvvftx.html