使用pxe网络安装linux操作系统

在工作中是不是有这样的烦恼?单位一次性采购大量服务器需要进行初始化安装与配置,但是如果每台机器都是手动安装的话费时费力。并且还得放下手中的工作完成这么一件枯燥的活,并且大大降低了工作效率。那么有没有一种办法能让安装物理机的操作系统能跟自动化快速化呢?答案是:这个必须有的!

所以这一期我打算初步的给大家一个好的方案来执行快速模板化的方式安装centos(其他linux版本均有网络安装的iso镜像),对的就是使用pxe的方式来网络安装centos!那么什么叫做pxe?并且这个和网络安装操作系统有啥关联?

PXE概述:

PXE 全称为Preboot execute environment 域引导执行环境;能够实现通过网卡引导到PXE (通过DHCP获取地址)访问文件共享服务器(TFTP)请求一些启动OS的基本文件之后通过kickstart文件指向的http或者ftp的地址进行网络自动化安装。服务器网卡肯定都带有pxe所以大家也无需检测网卡是否带有pxe!

PXE执行流程:

pxe01

附:这个图片不是自己创作,手滑给他搞了一个水印不好意思哈!

说的这么好听那么如何使用网卡中的pxe client来网络执行安装centos呢?

使用PXE安装centos7前期准备:

这边我使用了两台虚拟机来演示如何网络安装centos7,其中一台作为给pxe引导安装的主机,地址为172.16.1.30 还有一台自己新建一个(嘿嘿)!

172.16.1.30主机需要安装的包:

首先需要在主机上安装dhcp服务器,并且别忘了关闭你虚拟化软件的dhcp以防止冲突,随后还得在主机上安装tftp服务器。tftp trivialfile transfer protocol 学过CCNA或者网络的同学都知道,这个是一种提供小型的ftp服务(简单的文件传输服务)协议多数用在嵌入式环境中(如路由器交换机更新操作系统或者拷贝配置文件使用!)基于UDP文件传输,监听端口69/udp!

安装dhcp并且配置:

yum install dhcp #安装dhcp的包
[root@localhost ~] vi /etc/dhcp/dhcpd.conf #打开配置文件,但是你会发现里面是空的,但是有个提示说模板文件在/usr/share/doc/dhcp-版本号/dhcpd.conf.example 所以我们还得首先打开模板文件看看!

关于dhcp模板配置文件常用选项解释:

option domain-name 搜索域的域名
option domain-name-servers dhcp 关于dhcp搜索域地址
default-lease-time 租约期限
max-lease-time 最大租约期限
subnet 标记为网络分配地址
netmask 子网掩码
rause 分配的地址范围
option routers 网关分配

注意:配置文件可以定义全局定义和子定义,如果定义在全局配置的话请定义在开头,如果是定义为某个分配的dhcp地址段中的请在subnet之中!不过一般使用X86平台的dhcp服务器其实都是用在做网络引导的。

安装pxe引导的基本配置文件内容(可复制,但是要进行修改!)

subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.100 172.16.1.150;
option routers 172.16.1.1;
default-lease-time 600;
max-lease-time 7200;
filename “pxelinux.0”;
server-name “172.16.1.30”;
}

对了还有dhcp的日志文件,日志文件位置通常在/var/lib/dhcpd中有ipv6和ipv4的日志。如果单位的路由器或者三层交换机能够支持提供dhcp服务并且还支持提供filename和server-name的可以直接使用硬件设备就无需在x86服务器上折腾了!

安装tftp并且配置:

[root@localhost ~] yum install tftp-server tftp
#随后我们打开相关配置文件并且修改一个选项即可!
[root@localhost ~] vi /etc/xinetd.d/tftp
#我们将这个选项从yes改为no:disable = no

这样前期的步骤差不多就算搞定了,接下来我们还需要安装httpd、挂载iso镜像文件、搞定prelinux等文件放置在tftp中、启动服务即可!

安装httpd、挂载iso镜像文件:

[root@localhost ~] yum install httpd
[root@localhost ~] mount /dev/cdrom /media/ #挂载光驱!
mount: /dev/sr0 is write-protected, mounting read-only
#如果是专门提供pxe服务器可以在/etc/fstab中写一下以便于每次开机都能自动挂载
[root@localhost ~] cd /var/www/ #进入httpd默认网站目录
[root@localhost www] ln -s /media/ centos7 #添加一条链接
#随后进入/etc/httpd/conf/httpd.conf中修改document root改为:DocumentRoot "/var/www/"就算搞定了!
#对了还有这边也要修改<Directory "/var/www/centos7">将原来的html改为centos7目的就是为了能够执行options中的indexes!

将基本引导和内核文件放置在tftp中

tftp默认共享的目录在:/var/lib/tftpboot 我的建议就是不要修改默认路径…因为这样比较折腾一般用于网络安装的服务器都是淘汰的x86主机或者直接用pc机代替。

第一步拷贝pxelinux.0文件,默认在/usr/share/syslinux/prelinux.0 如果没有安装yum install syslinux即可安装完毕以后再拷贝。我这边走的自虐模式centos7都是最小化安装的所有肯定没有!下面是执行步骤:

[root@localhost ~] yum install -y syslinux #首先安装syslinux
[root@localhost ~]# cd /usr/share/syslinux 
[root@localhost syslinux]# cp pxelinux.0 /var/lib/tftpboot/ #拷贝文件到tftp目录

第二步拷贝iso镜像文件到tftp中让其能最小化启动:

[root@localhost ~] cd /media/images/pxeboot/ #首先进入这里拷贝文件
[root@localhost pxeboot] cp vmlinuz initrd.img /var/lib/tftpboot/ #拷贝这些文件...这些应该是启动界面
[root@localhost pxeboot] cd /media/isolinux/ #再进入这个文件夹
[root@localhost isolinux] cp vesamenu.c32 boot.msg splash.png /var/lib/tftpboot/ #将这三个文件拷贝过去
[root@localhost isolinux] cd /var/lib/tftpboot/ #回到tftp的共享目录
[root@localhost tftpboot]# mkdir pxelinux.cfg #创建这个文件夹
[root@localhost tftpboot]# cd - #再回去
/media/isolinux
[root@localhost isolinux]# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default #拷贝文件到新创建的文件夹
#拷贝完这些文件这个阶段就算结束了!

配置kickstart文件,并将文件放入到网站的根目录中!

首先说说什么是kickstart:简单的理解为是自动化安装的配置文件,此文件详细描述了安装的包组、IP地址、UTC详情、root的初始密码、是否新建用户等信息。这样网络引导执行网络安装之后就能参照这个文件随后进行自动化安装无需人工参与!

kickstart文件可以自己创建(需安装system-config-kickstart.noarch工具),也可以复制系统文件直接修改。文件在/root/anaconda-ks.cfg。推荐新手可以安装图形化工具操作方便,但是对于老手来说可以简单修改一下符合你要求的anaconda-ks文件就能直接使用无需从头创建!

首先我就说说使用root家目录下面的anaconda-ks.cfg文件的常用选项(我直接把自己的配置文件复制下来):

#version=DEVEL
# System authorization information
auth –enableshadow –passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot –enable
ignoredisk –only-use=sda
# Keyboard layouts
keyboard –vckeymap=us –xlayouts=’us’
# System language
lang en_US.UTF-8
#上面的使一些基本信息,需要修改的内容之后系统语言了,其实也不用修改,你只需要找到安装最满意的一次即可!

# Network information
network –bootproto=static –device=enp0s3 –gateway=172.16.1.1 –ip=172.16.1.30 –nameserver=223.6.6.6 –netmask=255.255.255.0 –ipv6=auto –activate
network –hostname=localhost.localdomain

#上面的是网络内容,这个必须要修改否则直接使用IP地址会冲突,或者直接将network-bootproto改为dhcp也就完事了!

# Root password
rootpw –iscrypted $6$IAsfVUM/aUXaa7fD$eRL2gyDdZPF1RA7RWnFeche4PmxhC9NIF8FNQiFYv.VXRL45LUjtwGJtQ/KlnM//GjSkmEWjkdjdsfjhsdfjkhfpua1.zb.
#上面的内容是root的密码,原版文件是加密的,不过你可以擦掉写上自己的密码(不安全建议安装完毕以后即使修改)
# System services
services –disabled=”chronyd”
# System timezone #修改时区的内容
timezone Asia/Shanghai –isUtc –nontp
user –groups=wheel –name=XXXXX –password=$6$53asBVonhJvgmmtwXXXXXXXXXXXXXXXXXXXXXXXmiinQa1Kk52OaR7qRHIpfVUy0WVVbaFeTzXLm8ubwpHteUzCqcAy2Mnx8i2qIA10 –iscrypted –gecos=”XXXXX” #从user开始到–gecos就是添加一个新的用户和是否为系统用户等信息,其实这个可以暂时擦掉,毕竟可以安装完毕以后修改
# System bootloader configuration #关于bootloader启动项修改,就是开机后交给哪个磁盘
bootloader –append=” crashkernel=auto” –location=mbr –boot-drive=sda
# Partition clearing information
clearpart –none –initlabel
# Disk partitioning information #分区的相关信息,默认单位为MB
part / –fstype=”xfs” –ondisk=sda –size=25600 #从左到右以此为:XX分区、文件系统类型、属于哪个磁盘、大小
part swap –fstype=”swap” –ondisk=sda –size=1999
part /boot –fstype=”xfs” –ondisk=sda –size=286
part /var –fstype=”xfs” –ondisk=sda –size=2833
%packages
@^minimal #这个是执行最小化安装的包组!
@core
kexec-tools

%end

%addon com_redhat_kdump –enable –reserve-mb=’auto’

%end

其实复制anaconda-ks.cfg的文件只需要修改一点点内容即可无需自己进行填写!如果对定制化比较高的可以使用图形界面进行操作!下面介绍使用图形界面创建kickstart文件:

[root@localhost ~] yum install system-config-kickstart.noarch
#安装包组,文件安装完约181mb大小
[root@localhost ~] yum groupinstall "x window system" #还得安装图形包组
[root@localhost ~] system-config-kickstart #打开即可进行设置!

pxe02

可以进行重新配置,也可以加载刚刚我提到过的anaconda-ks.cfg进行修改。随后修改完毕保存。关于加载、修改、保存在这边可以执行:

pxe03

看到上图了不?打开一个文件(或者使用ctrl+o)可以打开一个kickstart文件。如果弄好了保存可以在save中(ctrl+s)进行保存!

注意:如何你安装完毕以后打开system-config-kickstart之后出现的画面里面的文字全是方块的,说明你最小化安装centos时(自虐的人才会最小化安装)没有安装相对的字体包!执行yum install fontforge就行了!

别忘了把ks文件复制到httpd的网站根目录即可!

修改pxelinux.cfg中的default文件

终于快结束了,不过在这一步骤可以分为两派:

A:使用ks文件作为模板进行自动安装

B:不使用ks文件只需要网络引导后自己进行手动选择安装;至于两个选项如何选择看你们自己的咯!

首先在文件中找到这么一段话:

label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

看到最后的append了吗?这个意思简单描述就是安装之前寻找哪个启动文件和如何安装!

如果选择A选项就这么修改:append initrd=initrd=initrd.img [inst.repo=http://172.16.1.30/centos7] ks=http://172.16.1.30/ks.cfg #注:[]内的内容是可选的请别无脑复制…
如果选择B选项就这么修改:append initrd=initrd.img inst.repo=http://172.16.1.30/centos7

注意:如果提示这个文件only read用root用户修改相应权限即可!

最后启动所有服务:

别忘了启动dhcp、tftp、httpd服务否则怎么安装?

[root@localhost pxelinux.cfg] systemctl start dhcpd
[root@localhost pxelinux.cfg] systemctl start tftp
[root@localhost pxelinux.cfg] systemctl start httpd

查看主机是如何从pxe引导进行安装:

首先创建一个虚拟机并且把pxe放在boot的最前面 | 在虚拟机bios中修改,接下来我们观看A方案的结果:

pxe04

在之前会提示在获取dhcp以及使用pxe,不过太快了我没截下图片…随后会通过网络检查景象是否完整已经加载一些内容后进入熟悉的安装界面,但是还没等你操作就自动进行到安装了:

pxe05

B方案的结果:

pxe06

机智的我终于截下图片了…接下来可能加载有点慢!

pxe07

之后就能更改SOFTWARE中的安装地址了,使用网络安装可以改为其他地址!

pxe部分终于讲完了,看来实现步骤还有点多。但是对于pxe加载引导的话只能使用一个模板对企业进行安装,而且只支持一个操作系统的安装。对于企业来说通常肯定需要N个模板和多种操作系统的安装!那么如何让多操作系统和多个ks模板文件同时生效让我们选择安装呢?这个我从下一篇开始说。

Comments

Leave a Reply

Your email address will not be published. Name and email are required