专栏首页奕知伴解Linux自动化安装

Linux自动化安装

前言

为了面对安装大量的相同的操作系统,我们需要掌握如何快速,并且自动的将新的虚拟机安装上对应的操作系统。

对于Linux来说,我们通常使用PXE+KickStart的方式进行操作系统的自动化安装。那么首先需要先了解一下KickStart。灵活使用以后,可以用Cobbler进行部署

PXE+Kickstart介绍

KickStart工作原理

KickStart是Linux的一种无人职守的安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg的文件;这样在后面安装过程中当出现要求填写参数的情况时,安装程序会首先去查找 KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,那么就完全不需要人工干预,安装程序会根据ks.cfg中设置的选项自动进行安装,并通过设置重启选项来重启系统,并结束安装。那么如何让服务器开机就开始自动安装操作系统呢,我们要借助开机启动选项,比如从PXE启动。

PXE工作原理

不管是服务器还是普通的PC机都支持多种启动方式,例如从硬盘、从U盘、从网络启动。而PXE是服务器开机启动的一种方式,也可以称之为网卡启动,因为进行PXE安装的必要条件是计算机上的网卡要支持PXE,即网卡中必须要有 PXE Client,不过不用担心基本上我们常见的服务器都支持这种方式。首先我们需要了解下PXE的工作方式:PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。PXE协议分为 Client 和 Server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器用来给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。

PXE+Kickstart工作流程

下图显示了PXE+Kickstart的工作流程

1.PXE Client发送DHCP请求到DHCP Server

2.DHCP Server提供相关信息包括IP地址和TFTP服务器的位置,以及要下载的文件。

3.PXE Client请求TFTP Server。

4.TFTP Server响应请求并将文件发送给PXE Client

5.PXE Client去下载对应的Kickstart文件,并根据Kickstart文件中的内容开始进行安装

6.安装操作系统。

准备服务程序

需要用到SYSLinux引导服务、DHCP服务、vsftpd文件传输服务(或httpd网站服务)、TFTP服务以及KickStart应答文件。

制作本地Yum仓库

下面我们就要准备先手动来通过PXE+Kickstart来实现自动化的系统安装,那么首先需要有一个YUM仓库,而且是本地的。下面我就拿CentOS 7为例:

准备安装源

安装需要软件包

安装EPEL源

[root@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

我们使用HTTP的方式作为YUM仓库的安装源,需要首先安装Apache,其中createrepo 是一个对rpm 文件进行索引建立的工具。

[root@linux-node1 ~]# yum install -y httpd createrepo
[root@linux-node1 ~]# systemctl start httpd.service

下载iso镜像

[root@linux-node1 ~]# cd /usr/local/src
# wget https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso

创建yum仓库

[root@linux-node1 ~]# mount -o loop /usr/local/src/CentOS-7-x86_64-DVD-1908.iso /mnt/

如果你使用VMWare Workstation创建虚拟机的时候设置了ISO镜像,可以不用下载,直接挂载使用。

[root@linux-node1 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only

在默认Apache的家目录下创建目录

[root@linux-node1 ~]# mkdir /var/www/html/CentOS-7-x86_64
[root@linux-node1 ~]# cp -a /mnt/* /var/www/html/CentOS-7-x86_64/

准备Kickstart安装文件

[root@linux-node1 ~]# cd /var/www/html/CentOS-7-x86_64/
[root@linux-node1 CentOS-7-x86_64]# vim CentOS-7-x86_64.cfg
#Kickstart Configurator by liuluanyi
#platform=x86, AMD64, or Intel EM64T
#System  language
lang en_US
#System keyboard
keyboard us
#Sytem timezone
timezone Asia/Shanghai
#Root password
rootpw --iscrypted $1$example$I.i3m26O7QYNja8p5Cj9.0
#Use text mode install
text
#Install OS instead of upgrade
install
#Use NFS installation Media
url --url=http://192.168.80.11/CentOS-7-x86_64
#System bootloader configuration
bootloader --location=mbr --driveorder=sda --append="net.ifnames=0 biosdevname=0"
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype=xfs --size=1024
part swap --asprimary --fstype="swap" --size=1024
part / --fstype=xfs --size=1 --grow
#System authorization infomation
auth  --useshadow  --enablemd5
#Network information
network --bootproto=dhcp --device=eth0 --onboot=on --activate
# Reboot after installation
reboot
#Firewall configuration
firewall --disabled
#SELinux configuration
selinux --disabled
#Service configuration
services --disabled=postfix
#Do not configure XWindows
skipx
#Package install information
%packages
@ base
@ core
bash-completion
sysstat
ntp
lrzsz
openssl-devel
zlib-devel
OpenIPMI-tools
screen
%end

上述的rootpw可以使用下面命令生成:

[root@linux-node1 ~]# openssl passwd -1 -salt 'password' '123456'
$1$password$7ZK8mMeLGXxbNPeJEFJOU0

上述cfg文件的一些参数解释:

  • url:值为我自有的镜像地址
  • text:使用text模式安装而不加载GUI
  • 分区:分为3个区
  • swap:1GB
  • boot:1GB
  • /:剩下的空间
  • packages:最小化安装(core)并安装wget与curl
  • addon:关闭kdump
  • post:
  • text: 使用文本模式安装。
  • zerombr: 清除mbr引导信息。
  • bootloader: 系统引导相关配置。
  • rootpw: root密码
  • part: 磁盘分区。
  • --fstype= :为分区设置文件系统类型.有效的类型为ext2,ext3,swap和xfs。
  • --size= : 以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。
  • --grow: 告诉分区使用所有可用空间(若有),或使用设置的最大值。

配置TFTP-Server

我们已经了解了PXE+Kickstart的原理,那么我们需要准备相关dhcp、tftp-server等。

安装配置tftp-server

[root@linux-node1 ~]# yum install -y tftp-server xinetd
[root@linux-node1 ~]# vim /etc/xinetd.d/tftp
disable                 = no(修改为no)

准备安装需要的文件

[root@linux-node1 ~]# yum install -y syslinux
[root@linux-node1 ~]# mkdir /var/lib/tftpboot/pxelinux
[root@linux-node1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux
[root@linux-node1 ~]# cp /mnt/isolinux/* /var/lib/tftpboot/pxelinux
[root@linux-node1 ~]# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/

在上述的isolinux文件文件作用:

  • chain.c32:引导系统
  • mboot.c32:通过内存引导
  • memdisk:将内存模拟为磁盘
  • menu.c32:菜单文件
  • pxelinux.0:引导程序,用于加载kernel和initrd
  • vmlinuz:内核
  • initrd.img:虚拟根文件

在tftpboot下创建pxelinux.cfg目录

[root@linux-node1 ~]# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
[root@linux-node1 ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux/pxelinux.cfg/default

修改default配置,指定网站安装的kickstart文件

[root@linux-node1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
…省略…
#在label linux上面增加自动化安装的配置
label ks
  menu label ^Auto Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img ip=dhcp inst.repo=http://192.168.80.11/CentOS-7-x86_64/ inst.ks=http://192.168.80.11/CentOS-7-x86_64/CentOS-7-x86_64.cfg net.ifnames=0 biosdevname=0

因为我是通过网络进行自动安装,需要在“inst.ks”中指定kickstart生成的自动安装配置文件。因为我有自建的源镜像,所以地址如上。

配置DHCP Server

如果是自身网卡开启了DHCP功能,建议关闭。否则地址分配得到的是自身网卡DHCP分配的网段,或者分配不成功。

[root@linux-node1 ~]# yum install -y dhcp
[root@linux-node1 ~]# /bin/cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@linux-node1 ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "liuluanyi.com";
option domain-name-servers 192.168.80.2;
#请删除其他的subnet配置
subnet 192.168.80.0 netmask 255.255.255.0 {
     range dynamic-bootp 192.168.80.90 192.168.80.100;
     option subnet-mask              255.255.255.0;  #设置子网掩码
option routers                  192.168.80.2;    #设置网关
     next-server                     192.168.80.11;   #设置TFTP-Server地址
     filename                        "pxelinux/pxelinux.0";   #设置TFTP需要下载的文件
}

启动httpd、tftp和dhcpd服务

[root@linux-node1 ~]# systemctl start xinetd.service dhcpd.service httpd.service

检查服务是否启动

[root@linux-node1 ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1112/master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      949/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1112/master
tcp6       0      0 :::22                   :::*                    LISTEN      949/sshd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1487/dhcpd
udp        0      0 0.0.0.0:69              0.0.0.0:*                           974/xinetd

自动化安装和流程总结

现在就可以新创建一台虚拟机来进行测试了,记着选择网卡启动。DHCP后,就可以看到安装页面。我们刚才添加的Auto Install CentOS 也可以看到了。

下面我们可以来总结下PXE+KickStart的安装流程了:需要经历以下的过程:

1.网卡上的PXE芯片有512字节,存放了DHCP和TFTP的客户端。

2.启动计算机选择网卡启动。

3.PXE上的DHCP客户端会向DHCP服务器,申请IP地址

4.DHCP服务器分配给它IP地址的同时通过以下字段,告诉pxe,TFTP的地址和它要下载的文件

next-server 192.168.80.11;
filename "pxelinux.0";

5.pxelinux.0告诉PXE要下载的配置文件是pxelinux.cfg目录下面的default

6.pxe下载并依据配置文件的内容下载启动必须的文件,并通过ks.cfg配置内容开始系统安装。

本文分享自微信公众号 - 奕知伴解(yzbjchat),作者:刘銮奕

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Windows server 2012 AD DS 搭建步骤

    无法委派DNS服务器提示,不用管他,因为我们还没有创建DNS服务器,之后系统会自己创建DNS服务器

    刘銮奕
  • 思科 | 基本的Zone间策略

    刘銮奕
  • ELK6.4.3+redis5.0.6部署

    Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组键(字段或属性的名称)和...

    刘銮奕
  • python 类切片的实现

    A multi-dimensional Vector class, take 3

    用户5760343
  • 《七天数据埋点之旅》第七天 埋点实战

    本节是实战环节,以极客时间app安卓端为例,综合运用前面介绍的知识点,来解构埋点设计。虽然极客时间还有服务号、小程序、PC端、IOS端等形式,但过程大同小异,不...

    木东居士
  • 【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果

    Sb_Coco
  • 什么是SAP S/4HANA的extension flow

    Suppose I have extended MARA with the following field, how could I know whether ...

    Jerry Wang
  • go语言读取csv文件并输出的方法

    本文实例讲述了go语言读取csv文件并输出的方法。分享给大家供大家参考。具体实现方法如下: package main import ( "encodi...

    李海彬
  • 【解决方案】VS2013外部工具中添加ildasm.exe

    Jackson0714
  • 家具建材行业电商平台解决方案

    2017年我国家具建材行业竞争激烈,行业一段时间内仍会处于大调整、大整合的关键时期。所以整个市场是较为低迷的状态,2018年上半年,全国的家具建材市场总体来说是...

    数商云

扫码关注云+社区

领取腾讯云代金券