zoukankan      html  css  js  c++  java
  • kickstark无人值守安装

    现在我们为服务器安装系统,如果只是少数几台,传统的光盘、u盘等安装方法,完全可以满足需求。但运维人员的工作环境动辄几十台上百台,这就需要kickstart、cobbler等无人值守安装了。

    本篇博文简单描述kickstart的配置过程

    一、kickstart原理及组件

    1.1、kickstart包含的组件

    • PXE
    • DHCP:
      • 分配IP
      • 告诉客户端tftp的地址
    • TFTP
      • pxelinux引导文件------来自syslinux包
      • 内核------来自光盘
      • 启动环境文件 ------来自光盘
    • httpd
      • 光盘镜像
      • ks.cfg文件

    1.2、kickstart原理描述

    二、环境约定

    • 主机名:kickstart
    [root@linux-node2 ~]# hostname
    linux-node2.example.com
    [root@linux-node2 ~]# hostnamectl set-hostname kickstart
    [root@linux-node2 ~]# hostname
    kickstart
    View Code
    • IP地址:10.0.0.102 172.16.1.102
    • 关闭SELinux、firewalld
    • 配置PS1,[u@h W]$ 改成 [u@h w]$
    • 安装软件包:dhcp tftp-server httpd bash-completion* wireshark

    三、dhcp组件

    3.1、配置dhcp

    [root@kickstart dhcp]# yum -y install dhcp 
    [root@kickstart yum.repos.d]# cd /etc/dhcp/
    
    [root@kickstart dhcp]# vim dhcpd.conf 
    #
    # DHCP Server Configuration file.
    #   see /usr/share/doc/dhcp*/dhcpd.conf.example
    #   see dhcpd.conf(5) man page
    #
    subnet 172.16.1.0 netmask 255.255.255.0 {
      range 172.16.1.150 172.16.1.254;
      option subnet-mask 255.255.255.0;
      default-lease-time 21600;
      max-lease-time 43200;
      next-server 172.16.1.102;
      filename "/pxelinux.0";
    }
    
    [root@kickstart dhcp]# systemctl start dhcpd.service  
    [root@kickstart dhcp]# systemctl is-enabled dhcpd.service
    disabled
    View Code

      

    3.2、验证dhcp

    [root@kickstart ~]# ss -lntup|grep dhcp
    udp    UNCONN     0      0         *:67                    *:*                   users:(("dhcpd",pid=1678,fd=7))
    View Code

      

    四、httpd组件

    4.1、安装及挂载

    • 为了方便,直接将光盘挂载到http中
    [root@kickstart CentOS7]# yum -y install httpd  
    [root@kickstart tftpboot]# cd /var/www/html/
    [root@kickstart html]# mkdir CentOS7
    [root@kickstart CentOS7]# mount /dev/cdrom /var/www/html/CentOS7
    mount: /dev/sr0 is write-protected, mounting read-only
    [root@kickstart CentOS7]# ls /var/www/html/CentOS7
    CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL
    View Code

      

    五、安装配置tftp

    5.1、tftp安装启动

    [root@kickstart dhcp]# yum -y install tftp-server
    
    [root@kickstart dhcp]# systemctl start tftp.service
    
    [root@kickstart dhcp]# ss -lntup|grep tftp         
    udp    UNCONN     0      0        :::69                   :::*                   users:(("in.tftpd",pid=1993,fd=0),("systemd",pid=1,fd=24))
    View Code

      

    5.2、把需要的文件放到tftp目录

    5.2.1、pxelinux.0

    [root@kickstart ~]# yum install syslinux
    [root@kickstart ~]# rpm -ql syslinux|grep -w pxelinux.0
    /usr/share/syslinux/pxelinux.0
    [root@kickstart ~]# cd /var/lib/tftpboot
    [root@kickstart tftpboot]# cp /usr/share/syslinux/pxelinux.0 ./
    [root@kickstart tftpboot]# ls
    pxelinux.0
    View Code

      

    5.2.2、镜像、内核文件

    • 将光盘中相应文件放入tftp目录
    [root@kickstart CentOS7]# cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/
    
    [root@kickstart CentOS7]# ll /var/lib/tftpboot/
    total 58152
    -r--r--r-- 1 root root     2048 May  4  2018 boot.cat
    -rw-r--r-- 1 root root       84 May  4  2018 boot.msg
    -rw-r--r-- 1 root root      281 May  4  2018 grub.conf
    -rw-r--r-- 1 root root 52893200 May  4  2018 initrd.img
    -rw-r--r-- 1 root root    24576 May  4  2018 isolinux.bin
    -rw-r--r-- 1 root root     3032 May  4  2018 isolinux.cfg
    -rw-r--r-- 1 root root   190896 Nov  6  2016 memtest
    -rw-r--r-- 1 root root    26759 Nov 12 01:58 pxelinux.0
    -rw-r--r-- 1 root root      186 Oct  1  2015 splash.png
    -r--r--r-- 1 root root     2215 May  4  2018 TRANS.TBL
    -rw-r--r-- 1 root root   152976 Nov  6  2016 vesamenu.c32
    -rwxr-xr-x 1 root root  6224704 Apr 21  2018 vmlinuz
    
    [root@kickstart CentOS7]# mkdir -p pxelinux.cfg
    [root@kickstart CentOS7]# cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    
    [root@kickstart CentOS7]# tree /var/lib/tftpboot/
    /var/lib/tftpboot/
    ├── boot.cat
    ├── boot.msg
    ├── grub.conf
    ├── initrd.img
    ├── isolinux.bin
    ├── isolinux.cfg
    ├── memtest
    ├── pxelinux.0
    ├── pxelinux.cfg
    │   └── default
    ├── splash.png
    ├── TRANS.TBL
    ├── vesamenu.c32
    └── vmlinuz
    View Code

      

    5.2.3、修改default文件

    • 修改default文件,我习惯在修改前备份
    • 修改前备份
    [root@kickstart pxelinux.cfg]# cd /var/lib/tftpboot/pxelinux.cfg
    
    [root@kickstart pxelinux.cfg]# ls
    default  default.bak
    
    [root@kickstart pxelinux.cfg]# vim default
    default ks
    prompt 0
    
    label ks
      kernel vmlinuz
      append initrd=initrd.img ks=http://172.16.1.102/ks_config/CentOS7-ks.cfg net.ifnames=0 biosdevname==0 ksdevice=eth1
    View Code

      

    六、编写ks.cfg文件

    6.1、创建或上传ks.cfg文件

    按照default文件中规定好的路径,创建 CentOS7-ks.cfg 文件

    [root@kickstart pxelinux.cfg]# cd /var/www/html/
    
    [root@kickstart html]# mkdir -p ks_config  
    [root@kickstart html]# cd ks_config
    [root@kickstart html]# touch CentOS7-ks.cfg
    View Code

    6.2编写或修改ks.cfg文件

    • 编写ks.cfg文件的过程中遇到了一些坑,描述如下:

    1. ks.cfg文件里不要加注释,否则会提示某个命令没有参数之类的
    2. 一开始挂载的最小系统安装的光盘,不包含文件中写的各种包和包组,所以提示找不到这些东西

    • 首先生成密码,注意要替换掉源文件中的相应内容

    [root@kickstart ~]# python -c 'import crypt; print (crypt.crypt("123456"))'    
    $6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1

    • 这里贴一下有问题的ks.cfg文件,如下,因为是从老师的博客下载的,很多语句后面有注释,所以就出现了如上描述的第一条错误、、
    [root@kickstart ks_config]# vim CentOS7-ks.cfg
    
    install               ## 告知这是一次安装程序
    url --url=http://172.16.1.102/CentOS7/     ## 通过ftp或http从远程服务器安装的地址
    text                 ## 使用文本模式安装
    lang en_US.UTF-8        ## 设置安装过程中使用的语言字符集
    keyboard us       ## 设置系统键盘类型为us
    zerombr            ## 清除mbr引导信息
    bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"        --location=mbr  ## 指定引导记录被写入的位置  
                    --driveorder=sda     ## 指定在BIOS引导顺序中居首的驱动器
    --append="crashkernel=auto rhgb quiet"  ## 指定内核参数,要指定多个参数空格分隔,为通过网络的kickstart安装以及所安装的系统配置联网信息。
    network  --bootproto=static --device=eth0 --gateway=10.0.0.2 --ip=10.0.0.200 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate
    network  --bootproto=static --device=eth1 --ip=172.16.1.200 --netmask=255.255.255.0 --activate
    network  --hostname=Cobbler      ## 以上是静态配置ip网络信息的写法
    #network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7    ## 动态配置ip网络信息的写法和配置主机名
    timezone --utc Asia/Shanghai        ## 设置时区为亚洲上海
    authconfig --enableshadow --passalgo=sha512          ## 系统认证信息,这里要是写密文密码需加  设置密码加密方式为sha512 启用shadow文件
    rootpw  --iscrypted $6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1    ## 加密的root密码
    clearpart --all --initlabel          ## 清空分区,清空所有分区
    part /boot --fstype xfs --size 1024   ## 为分区设置文件系统类型为xfs,size设置大小
    part swap --size 1024
    part / --fstype xfs --size 1 --grow   ## grow把剩余容量都给这个分区
    firstboot --disable        ## 协助配置服务器的重要信息
    selinux --disabled         ## 关闭selinux
    firewall --disabled        ## 关闭防火墙
    logging --level=info       ## 设置日志级别
    reboot        ## 设置安装完成后重启,必须存在
    
    %packages            ## 这一部分是要安装的一些包
    @^minimal
    @compat-libraries
    @debugging
    @development
    tree
    nmap
    sysstat
    lrzsz
    dos2unix
    telnet
    wget
    vim
    bash-completion
    %end
    
    %post            ## 安装后执行的命令,如果要一键化搭建集群,这里可以执行写好的shell或ansible剧本进行搭建
    systemctl disable postfix.service
    %end
    View Code

    6.3、检查ks.cfg文件可用性

    如果不能确认ks.cfg文件的可用性,可用以下方法检查,这个工具可以给出故障行和具体的故障描述

    [root@kickstart ks_config]# yum install pykickstart
    [root@kickstart ks_config]# ksvalidator CentOS7-ks.cfg
    View Code

    6.4、修改后的ks.cfg

    # Kickstart Configurator for CentOS 7 by yao zhang
    install
    url --url=http://172.16.1.102/CentOS7/
    text
    lang en_US.UTF-8
    keyboard us
    zerombr            ## 清除mbr引导信息
    bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location=mbr  --driveorder=sda --append="crashkernel=auto rhgb quiet" 
    network  --bootproto=static --device=eth0 --gateway=10.0.0.2 --ip=10.0.0.200 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate
    network  --bootproto=static --device=eth1 --ip=172.16.1.200 --netmask=255.255.255.0 --activate
    network  --hostname=Cobbler
    #network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7
    timezone --utc Asia/Shanghai
    authconfig --enableshadow --passalgo=sha512
    rootpw  --iscrypted $6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1
    clearpart --all --initlabel
    part /boot --fstype xfs --size 1024
    part swap --size 1024
    part / --fstype xfs --size 1 --grow
    firstboot --disable
    selinux --disabled
    firewall --disabled
    logging --level=info
    reboot
    
    %packages
    @^minimal
    @compat-libraries
    @debugging
    @development
    tree
    nmap
    sysstat
    lrzsz
    dos2unix
    telnet
    wget
    vim
    bash-completion
    %end
    
    %post
    systemctl disable postfix.service
    %end
    View Code

    七、设置完毕,检查、验证

    7.1、开启httpd服务,验证相关文件是否齐全

    • 开启httpd服务,然后验证
    • 一定要先验证这些文件是不是都在html下,否则装机的时候也还是会提示找不到
    • 如果http由内网提供,就一定要在内网环境验证
    • 比如本文档的设置,就必须在172网段环境下验证,因为之前的配置都是在这个网段进行的
    • 可以在其他设备通过linux命令行验证,比如curl方法

    [root@kickstart ks_config]# systemctl start httpd.service 
    View Code

    7.2、新建虚拟机,验证是否可以正常装机

  • 相关阅读:
    C++解决单纯形表
    VS2010 MFC Excel(3)
    VS2010 MFC Excel(1)
    VS2010 MFC 读取Excel(2)
    读取数量不定的输入数据
    牛顿插值
    连接数据库
    雅克比迭代
    NOIP模拟 24
    NOIP模拟 23
  • 原文地址:https://www.cnblogs.com/Go-Spurs-Go/p/10272614.html
Copyright © 2011-2022 走看看