自动化安装操作系统(Centos7+PXE+Cobbler+kickstart)

我的梦境 提交于 2020-09-30 03:42:40

一、简介

    1、PXE

        PXE称作是一种引导方式而不是安装方式似乎更加准确,PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动,但是有一个前提条件是计算机的网卡必须具有引导功能,这个网卡中要有一个PXE客户端。当计算机POST自检成功以后,BIOS把网卡中ROM的PXE客户端调入内存执行,PXE客户端通过网络中的DHCP服务器获取一个IP地址,拿到IP地址以后PXE继续引导计算机与网络中的TFTP客户端建立连接,从而从TFTP服务器中获取开机引导文件之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。

        PXE工作步骤:

        image.png

        原理分析:

            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目录下,这是系统菜单文件,格式和isolinux.cfg格式一样,功能也是类似),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。

            Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client

            Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统

            Client启动Linux内核

            Client下载安装源文件,读取自动化安装脚本


    2、Cobbler

        Cobbler 可以用来快速建立Linux网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学会。Cobbler是一个Linux服务器快速网络安装的服务,由python开发,小巧轻便(15k行python代码),可以通过PXE的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS,TFTP、RSYNC以及yum仓库、构造系统ISO镜像。

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

        Cobbler 工作步骤:

            image.png

        

    

                Server端:

        第一步,启动Cobbler服务
        第二步,进行Cobbler错误检查,执行cobbler check命令
        第三步,进行配置同步,执行cobbler sync命令
        第四步,复制相关启动文件文件到TFTP目录中
        第五步,启动DHCP服务,提供地址分配
        第六步,DHCP服务分配IP地址
        第七步,TFTP传输启动文件
        第八步,Server端接收安装信息
        第九步,Server端发送ISO镜像与Kickstart文件
        
           
        第一步,客户端以PXE模式启动
        第二步,客户端获取IP地址
        第三步,通过TFTP服务器获取启动文件
        第四步,进入Cobbler安装选择界面
        第五步,客户端确定加载信息
        第六步,根据配置信息准备安装系统
        第七步,加载Kickstart文件
        第八步,传输系统安装的其它文件
        第九步,进行安装系统


    3、kickstart

         kickstart是一个定义了Linux安装过程的配置文件,比如要在系统中使用的时区、如何对驱动器进行分区、或者应该安装哪些软件包。有了这个文件可以解放双手,让Linux安装过程按照我们预先定义的要求进行自动化安装,同时部署大量主机时十分有用。一般centos系统安装后,会在root目录下生成一个名为anaconda-ks.cfg的kickstart配置文件。Kickstart 是红帽开发的一种工具,我们可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么IP,优化什么内核参数等等。其主要有以下部分组成:

        Kickstart 安装选项,包含语言的选择,防火墙,密码,网络,分区的设置等;

        %Pre 部分,安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;

        %Package 部分,安装包的选择,可以是 @core 这样的group的形式,也可以是这样 vim-* 包的形式;

        %Post 部分,安装后执行的脚本,通常用来做系统的初始化设置。比如启动的服务,相关的设定等。


二、操作系统及软件版本

        操作系统:Centos 7:CentOS Linux release 7.5.1804 (Core)

        Cobbler:Cobbler 2.8.5

        网络: enp4s0: 172.16.30.3  

         

三、部署搭建步骤

    1、操作系统准备:

        cat /etc/redhat-release

        image.png

    关闭防火墙:

        systemctl stop firewalld        

        systemctl disable firewalld

        systemctl status firewalld

        image.png

    管理selinux 服务:(备注:改完selinux,需要重启系统才生效)

        vi /etc/sysconfig/selinux

        SELINUX=enforcing  改为:SELINUX=disabled

        image.png

    IP地址信息:

         image.png

        安装wget

        yum install -y wget

        image.png

    2、更新centos7 yum源:


         备份原来的 CentOS-Base.repo 源:

        cd /etc/yum.repos.d/

        ls

        mv CentOS-Base.repo CentOS-Base.repo.bak

        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

        image.png

        ls

        yum clean all

        yum makecache

        yum update -y

        image.png

    3、安装依赖包:

        安装httpd 服务:yum install -y httpd

        image.png

        安装dhcp服务:yum install -y dhcp

        image.png

        安装tftp服务:yum install  -y tftp-server

        image.png

    4、安装Cobbler:

        安装cobbler服务:yum install  -y cobbler

        提示没有cobbler安装包

        image.png

        更新一下yum源的包:

        wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo

        image.png

        继续安装cobbler:yum install  -y cobbler

        image.png

        安装cobbler-web服务:yum install  -y cobbler-web

        image.png

    5、安装pykicksstart:

        安装pykickstart服务:yum install  -y pykickstart

        image.png

    6、查看cobbler安装的部分文件

        rpm -ql cobbler     # 查看安装cobbler 生成的文件夹,主要分析如下:

        image.png

    7、重启相关服务:

        重启cobbler服务:systemctl start cobblerd

                                     systemctl restart cobblerd

        重启http服务:systemctl restart httpd

        添加开机自启动:systemctl enable httpd

                                   systemctl enable cobblerd 

        image.png 

    8、检查cobbler

        检查cobbler: cobbler check

        image.png

    9、根据上面检查的结果,进行逐一的配置:

       (1) 修改提供cobbler服务的主机的IP或主机名:             

        sed -i 's/^server: 127.0.0.1/server: 172.16.30.3/' /etc/cobbler/settings               #设置服务器的地址为:172.16.30.3

        grep "^server" /etc/cobbler/settings                                 #检查是否该成功

        image.png

        (2)、修改“next_server”为PXE网络上启动服务器的IP地址(这里PXE服务器和cobbler服务器是同一台):

        sed -i 's/^next_server: 127.0.0.1/next_server: 172.16.30.3/' /etc/cobbler/settings

        grep "^next_server" /etc/cobbler/settings

        image.png

        (3)、修改/etc/xinet.d/tftp文件中的disable的参数为no

        cd /etc/xinetd.d/

        ls

        cp tftp tftp.bak       #备份 tftp文件

        cd

        vim /etc/xinet.d/tftp

        disable = no

        image.png

        (4)执行cobbler get-loaders 命令:  (

        cobbler get-loaders

        image.png

        image.png

        有可能会失败,是下载一下包失败,多尝试几次。直至出现成功:

        image.png

        (5)启动rsync 服务:

        重启rsync服务:systemctl start rsyncd.service

                                systemctl restart rsyncd.service

         设置开机自启动服务:systemctl enable rsyncd.service

         image.png

        (6)、安装包用来管理debian部署和存储库,这里不需要,就不安装了

        (7)、修改cobbler中的加密密码(即为自动安装系统后的root登录密码)

        #生成加密密码openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'

        openssl passwd -1 -salt '123456' '11111111'                    # 123456  使用加密机制;    11111111   是安装系统后的root登录密码

        image.png

        vim /etc/cobbler/settings

        image.png

        (8)安装cman fence-agents(可选),电源管理功能

        yum install cman fence-agents -y

        image.png

        (9)修改一些其他的配置

        vim /etc/cobbler/settings

        manage_dhcp: 1  #用cobbler管理dhcp

        pxe_just_once: 1   #防止循环安装系统,适用于服务器第一启动选项是pxe启动

        image.png

        image.png

        (10)同步cobbler配置:

        cobbler sync

        systemctl restart cobblerd.service

        image.png

        (11)重新检测cobbler:

        cobbler check

        image.png

        #管理deban,这里不需要安装,如果需要安装deban或Ubuntu系统,需要安装

        yum install -y debmirror  

        vim  /etc/debmirror.conf

        禁用下面两个选项

        #@dists="sid";

        #@arches="i386";


    10、配置dhcp服务:

        备份dhcp.template 文件:

        cd /etc/cobbler/

        cp dhcp.template dhcp.template.bak

        ls

        cd    

        vim /etc/cobbler/dhcp.template

image.png

        vim /etc/cobbler/dhcp.template

        image.png

        同步cobbler配置:

        cobbler sync

        image.png

            重新检测cobbler

            cobbler check

            image.png

     11、设置开机自启:

            systemctl enable dhcpd

            systemctl enable rsyncd.service

            systemctl enable tftp.service

            systemctl enable httpd.service

            systemctl enable cobblerd.service

            image.png

        重启所有服务,防止有些服务没有开启:

            systemctl restart tftp.service

            systemctl restart dhcpd.service

            systemctl restart rsyncd.service

            systemctl restart httpd.service

            systemctl restart cobblerd.service

            image.png

四、挂载光盘镜像

     由于安装的文件只能识别iso挂载后的文件,不能直接识别iso镜像文件,所以需要将iso镜像挂载到服务器上,然后将挂载后的系统文件复制到其他目录以备后用。(备注:也可以根据自己的实际情况创建目录)。具体操作如下:

    1、创建存放系统镜像文件的目录 (可以根据自己的需求进行创建)

        mkdir /data1/os/                #将挂载后的系统镜像文件复制的此目录

        mkdir /data1/os/centos7.5      #将centos7.5系统挂载后的文件全部复制到此目录

        mkdir /data1/os/ubuntu16.04.06     #将Ubuntu16.04.06系统挂载后的文件全部复制到此目录

        mkdir /data1/os/ubuntu16.04.04     #将Ubuntu16.04.04系统挂载后的文件全部复制到此目录

    2、创建用户临时挂载镜像的目录:

        mkdir /data1/oscahe/                        #用于将系统镜像iso文件挂载到此目录下

    3、将系统iso镜像文件上传到服务器中(可以通过xftp工具进行上传,可以用U盘上传等方式)

            cd /data1

            ls

            image.png

    4、挂载系统iso镜像

        mount -t iso9660 -o loop /data1/CentOS-7-x86_64-DVD-1804.iso /data1/oscahe/                        #将Centos7系统挂载到/data1/oscahe目录下

        ls /data1/oscahe

        image.png

    5、将/data1/oscahe中的系统文件全部复制到镜像文件目录 /data1/os/centos7.5

        cp -rf /data1/oscahe/* /data1/os/centos7.5/

        image.png

    6、卸载系统iso镜像文件

        umount /data1/CentOS-7-x86_64-DVD-1804.iso

        ls /data1/oscahe/

        image.png


        (备注:如果想要挂载其他系统的iso镜像文件,重复上面的4    5    6 三个步骤)

    7、查询系统挂载了几个系统镜像文件

            ls /data1/os/centos7.5/

            ls /data1/os/ubuntu16.04.04

            ls /data1/os/ubuntu16.04.06

            image.png

五、导入镜像

     1、   使用以下的方法导入镜像:

        cobbler  import --path=/iso/   --name=Centos7.5    --arch=x86_64

        解释:

        --path:镜像路径

        --name: 为安装源定义一个名字,可以根据自己的喜好指定

        --arch:指定安装源是64位或32位

        下面分别导入上面上传的4个系统镜像:

        cobbler import --path=/data1/os/centos7.5 --name=Centos7.5 --arch=x86_64           #导入Centos7.5系统镜像

        image.png

        cobbler import --path=/data1/os/ubuntu16.04.04 --name=ubuntu16.04.04 --arch=x86_64                     #导入Ubuntu16.04.04系统镜像

        image.png

        cobbler import --path=/data1/os/ubuntu16.04.06 --name=ubuntu16.04.06 --arch=x86_64                     #导入Ubuntu16.04.06系统镜像

        image.png

    2、查看镜像列表:

        cobbler distro list

        image.png

    3、查看镜像存放目录

        cd /var/www/cobbler/ks_mirror/

        ls

        image.png


六、配置ks文件

    1、查看ks文件位置:

        cd /var/lib/cobbler/kickstarts/

        ls        

        image.png

    2、配置自定义ks文件,以sample_end.ks模板

        cp sample_end.ks Centos7.5-x86_64

        vim Centos7.5-x86_64        

        修改的内容如下:

        firewall --disable     #关闭防火墙

        timezone  Asia/Shanghai  #设置时区

        # autopart    #把自动分区注释,手动如下设置

        part /boot --fstype=ext4 --asprimary --size=200

        part swap --asprimary --size=1024

        part / --fstype=ext4 --grow --asprimary --size=10240

        %packages   #安装需要安装的软件包

       $SNIPPET('func_install_if_enabled')  #这里默认

       %end

    解释:

          --asprimary,强迫把分区分配为主分区,否则提示分区失败.

         --fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat

        --grow  让分区自动增长利用可用的磁盘空间,或是增长到设置的maxsize值;

        --size=  设置分区的最小值,默认单位为M,但是不能写单位;

        %packages部分,这部分选择需要安装的软件包.

        

d-i debian-installer/locale string en_US


d-i console-setup/ask_detect boolean false

d-i keyboard-configuration/toggle select No toggling

d-i keyboard-configuration/layoutcode string us

d-i keyboard-configuration/variantcode string


d-i netcfg/choose_interface select auto

d-i netcfg/get_hostname string $myhostname



d-i time/zone string US/Eastern

d-i clock-setup/utc boolean true

d-i clock-setup/ntp boolean true

d-i clock-setup/ntp-server  string ntp.ubuntu.com


d-i mirror/country string manual

d-i mirror/http/hostname string $http_server

d-i mirror/http/directory string $install_source_directory

d-i mirror/http/proxy string


d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs


d-i partman/choose_partition select finish

d-i partman/confirm boolean true

d-i partman/confirm_nooverwrite boolean true

d-i partman-auto/method string lvm

d-i partman-lvm/device_remove_lvm boolean true

d-i partman-lvm/confirm boolean true

d-i partman-lvm/confirm_nooverwrite boolean true

d-i partman-md/device_remove_md boolean true

d-i partman-partitioning/confirm_write_new_label boolean true


d-i partman-auto/choose_recipe select atomic



d-i passwd/root-login boolean true

d-i passwd/root-password-crypted password $default_password_crypted


d-i passwd/make-user boolean false


$SNIPPET('preseed_apt_repo_config')


tasksel tasksel/first multiselect standard


d-i pkgsel/include string ntp ssh wget


d-i grub-installer/grub2_instead_of_grub_legacy boolean true

d-i grub-installer/bootdev string default


d-i debian-installer/add-kernel-opts string $kernel_options_post


d-i finish-install/reboot_in_progress note



d-i preseed/early_command string wget -O- \

   http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_early_default | \

   /bin/sh -s



d-i preseed/late_command string wget -O- \

   http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_late_default | \

   chroot /target /bin/sh -s


    3、查看自动生成的自动安装文件

        第一次导入系统镜像后,cobbler会给镜像指定一个默认的kickstart自动安装文件

        (/var/lib/cobbler/kickstarts/sample_end.ks)

        cobbler list

        image.png

    4、查看安装镜像文件信息

        cobbler distro report --name=Centos7.5-x86_64

        image.png

    5、查看镜像的profile 设置

        cobbler profile report --name=Centos7.5-x86_64

        image.png

    6、编辑profile,修改关联的ks文件(指定自定义的ks文件)

        cobbler profile edit --name=Centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/Centos7.5-x86_64.ks

    7、查看profile,确认kickstart 关联文件是否被修改:

        cobbler profile report --name=Centos7.5-x86_64

        image.png

    8、同步数据

        cobbler sync

        systemctl restart cobblerd.service

       image.png 

    9、修改PXEE默认启动项

        默认情况下PXE启动的是Local(启动后会出现local和自定义CentOS7.5-x86_64两个选项,需手动,要无人工干涉,就需要修改)

    修改前:

        cd /var/lib/tftpboot/pxelinux.cfg/

        cat default

        可以修改里面的启动顺序,也可以不修改。

image.png

七、测试自动安装:

    1、将要安装系统的设备,接入到网络中,从网络启动:(不通的设备,网卡名字不同)

        image.png

    进入网络启动界面:

        image.png

        获取到DHCP服务器的地址,设备获取到IP地址:

        image.png

        获取到可安装的系统镜像:

        image.png       

        拉取安装系统的文件:

         image.png

        开始自动安装操作系统:

        image.png

        image.png

        image.png

        image.png

        image.png

        image.png

        image.png

        image.png

        以上步骤均不需手动操作,自动安装(备注:如果被安装的设备有两个网卡,需要手动选择正确的网卡。如果有多块硬盘,需要手动选择安装的盘,无亲自测试,建议安装对的时候安装一块盘,待系统安装完成后,用脚本进行挂载和格式化。)。

     此教程比较适用于自动化安装centos系统,兼容性较高。对于安装Ubuntu系统,ks文件兼容性不是很好。


参考文献如下:

    https://blog.csdn.net/yuanfangPOET/article/details/89279733

    https://blog.csdn.net/anqixiang/article/details/98050676

    https://www.cnblogs.com/linuxliu/p/7668048.html

    


        

        

        

        

        

            

        

        

            

            

            

    

        

    

        




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!