搭建PXE全自动centos系统安装环境

要安装一个操作系统,首先要理解系统的启动引导过程。要有这么几项,引导文件-比如硬盘的MBR,引导菜单-grub,虚拟系统镜像文件,操作系统内核文件,最后是各种安装包。那么怎么通过pxe来引导操作系统实现安装呢?其实支持pxe安装的网卡,内置了tftp客户端及dhcp客户端。首先从dhcp获取ip地址,同时dhcp服务器会告诉来访者通过pxe启动需要的引导文件名称及tftp服务器的IP。继而主机找到tftp服务器获取pxelinux.0引导文件,menu.c32菜单样式文件及default菜单配置文件。到这一步就可以看到启动菜单项了,接下来需要根据用户选择来加载相对应的虚拟系统镜像加载启动内核。所以tftp服务器还要有对应的initrd.img及vmlinuz内核文件。由于tftp不支持大文件,所以各种安装包及驱动要从http服务器获取。因此还要配置http服务器,挂载对应的系统iso镜像文件。那么下面来详细说明实现步骤。

1 前置条件,关闭防火墙,关闭selinu,时间同步。在此基础上安装dhcp服务

1.1 配置其中个网卡为规划的网段地址

```

[root@main html]#cat /etc/sysconfig/network-scripts/ifcfg-ens37 

DEVICE=ens37

NAME=ens37

PREFIX=24

IPADDR=10.10.10.254

BOOTPROTO=none

ONBOOT=yes

```

1.1.2 运行安装脚本,配置dhcpd配置文件,并启动dhcpd服务

```

#!/bin/bash

##DHCP ------------------------------------

##install dhcp,before start this service,be sure you have this subnet ip

yum install dhcp -y

Subnet="10.10.10.0"

NetMask="255.255.255.0"

Range="10.10.10.2 10.10.10.200"

Router="10.10.10.1"

Search="ruitais.com"

NameServer="114.114.114.114,180.76.76.76"

cat /dev/null > /etc/dhcp/dhcpd.conf

cat > /etc/dhcp/dhcpd.conf << EOF

#day=86400s

default-lease-time 86400;

max-lease-time 864000;

option domain-name "$Search";

option domain-name-servers $name-servers;



subnet $Subnet netmask $NetMask {

  range $Range;

  option routers $Router;

   filename "pxelinux.0";            ##配置pxe引导的文件名,告诉每个来获取ip的主机

   next-server 10.10.10.254;         ##配置pxe引导的tftp地址,告诉每个来访的主机

}



EOF

systemctl start dhcpd.service

systemctl enable dhcpd.service

```

 

2 配置http服务器,yum源,及应该文件

 2.1 安装yum install httpd -y 

 2.2 复制安装光盘镜像至指定目录,并挂载至http服务根下对应目录。

 ```

[root@main data]#ls

CentOS-6.10-x86_64-bin-DVD1.iso  CentOS-7-x86_64-Everything-1810.iso  //镜像文件复制到/data下。

[root@main data]#vim /etc/fstab  //编辑,在后追加两行

/data/CentOS-7-x86_64-Everything-1810.iso  /var/www/html/centos/7/ox/x86_64  iso9660 defaults 0 0 

/data/CentOS-6.10-x86_64-bin-DVD1.iso      /var/www/html/centos/6/ox/x86_64 iso9660 defaults 0 0 

[root@main data]#mount -a     //挂载iso文件

```

3 制作应答文件,放置在http服务器对应的目录,

3.1 参考安装好的系统的ks文件

[root@localhost ~]# cat /root/anaconda-ks.cfg

3.2 用system-config-kickstart生成应答文件.

yum install  system-config-kickstart -y

3.3 centos7 最小化安装应答文件参考。

```

[root@localhost ~]#cp /root/centos7_ks.cfg /var/www/html/centos/7/      //复制应答文件到对应的版本目录

[root@main html]#cat /var/www/html/centos/7/centos7_ks.cfg

#platform=x86, AMD64, or Intel EM64T

#version=DEVEL

# Install OS instead of upgrade

install

# Keyboard layouts

keyboard 'us'

# Root password

rootpw --iscrypted $1$qOLmFLxc$13.2FhiY5XL5omse2kX9y.

# Use network installation

url --url="http://10.10.10.254/centos/7/ox/x86_64/"

# System language

lang en_US

# System authorization information

auth  --useshadow  --passalgo=sha512

# Use text mode install

text

# SELinux configuration

selinux --disabled

# Do not configure the X Window System

skipx



# Firewall configuration

firewall --disabled

# Network information

network  --bootproto=dhcp --device=eth0

# Reboot after installation

reboot

# System timezone

timezone Asia/Shanghai

# System bootloader configuration

bootloader --append="net.ifnames=0" --location=mbr

# Clear the Master Boot Record

zerombr

# Partition clearing information

clearpart --all

# Disk partitioning information

part / --fstype="xfs" --size=10240

part /home --fstype="xfs" --size=20480

part /boot --fstype="xfs" --size=1024

part swap --fstype="swap" --size=4096

part /data --fstype="xfs" --size=40960



%post

mkdir /root/.ssh

cd /root/.ssh

cat > authorized_keys <

```

3.4 centos6最小化安装参考

```

[root@localhost ~]#cp /root/ks6_mini.cfg /var/www/html/centos/6/      ##复制应答文件到对应的版本目录

[root@main html]#cat /var/www/html/centos/6/ks6_mini.cfg

#version=DEVEL

install

url --url=http://10.10.10.254/centos/6/ox/x86_64/

lang en_US.UTF-8

keyboard us

network --onboot yes --device eth0 --bootproto dhcp --noipv6

rootpw --iscrypted $1$qOLmFLxc$13.2FhiY5XL5omse2kX9y.

firewall --disabled

authconfig --enableshadow --passalgo=sha512

selinux --disabled

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

# The following is the partition information you requested

# Note that any partitions you deleted are not expressed

# here so unless you clear all partitions first, this is

# not guaranteed to work

clearpart --all

zerombr

reboot

text

part /boot --fstype=ext4 --size=1024

part / --fstype=ext4 --size=50000

part /data --fstype=ext4 --size=30000

part swap --size=2048



%packages

@base

@core

autofs

%end


%post

mkdir /root/.ssh

cd /root/.ssh

cat > authorized_keys <

```

上述应答文件密码为"centos7",并且执行了安装后脚本,把root公钥文件配好,系统安装后可以直接ssh方式连接,免密登录,注意使用时替换成自己的公钥

4 制作启动引导文件,及引导菜单(包括样式及内容)

 4.1 安装tftp制作启动菜单,采用menu.c20,pexlinux.0 文件,放置在tfpt目录中.

```

[root@main 7]#yum install syslinux     //生成menu.c32及pexlinux.0文件

[root@main 7]#yum install tftp-server

[root@main 7]#systemctl start tftp.service     //启动fttp服务

[root@main 7]#cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/       //拷贝menu.c32以及pexlinux.0引导文件到tftp根目录下

[root@main 7]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

[root@main tftpboot]#pwd   

/var/lib/tftpboot

[root@main tftpboot]#ls

menu.c32  pxelinux.0

```

4.2 根据安装盘的菜单文件修改现有菜单。

```

[root@main tftpboot]# mkdir pxelinux.cfg

[root@main tftpboot]#cat pxelinux.cfg/default 
default menu.c32
timeout 600
menu title Auto Install CentOS for Ruitais
label linux7
  menu label Install ^Mini CentOS 7
  kernel centos7/vmlinuz                                                                                                                                                    
  append initrd=centos7/initrd.img ks=http://10.10.10.254/centos/7/centos7_ks.cfg

label linux6
  menu label Install  CentOS ^6 Mini
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://10.10.10.254/centos/6/ks6_mini.cfg


label local

  menu label Boot from ^local drive

  menu default

  localboot 0xffff

```

//注意事项:

kernel 字段指明内核的相对路径,路径参考点是pxelinux.0引导文件所在的目录。

append initrd 指明引导系统的虚拟镜像文件

ks 表示应答文件所在的位置,支持http路径,与http配置的ks文件路径对应

最后memu default 指明默认的选中项。



 

5.1  tftp服务器文件目录明细

```

[root@main tftpboot]#tree 

.

├── centos6

│   ├── initrd.img  //centos6的启动虚拟镜像

│   └── vmlinuz     //centos6的内核文件

├── centos7

│   ├── initrd.img  //centos7的启动虚拟镜像

│   └── vmlinuz     //centos7的内核文件

├── menu.c32        //pxe引导的菜单样式文件

├── pxelinux.0      //pxe引导文件

└── pxelinux.cfg

    └── default     //pxe菜单的配置文件

```

5.2 http服务器文件目录明细

```

[root@main html]#tree -L 5                            //根目录html
.
└── centos
    ├── 6
    │   ├── ks6_mini.cfg                              //centos6的应答文件
    │   └── ox
    │       └── x86_64                                //此目录挂载centos6的iso镜像
    │           ├── CentOS_BuildTag
    │           ├── EFI
    │           ├── EULA
    │           ├── GPL
    │           ├── images
    │           ├── isolinux
    │           ├── Packages
    │           ├── RELEASE-NOTES-en-US.html
    │           ├── repodata
    │           ├── RPM-GPG-KEY-CentOS-6
    │           ├── RPM-GPG-KEY-CentOS-Debug-6
    │           ├── RPM-GPG-KEY-CentOS-Security-6
    │           ├── RPM-GPG-KEY-CentOS-Testing-6
    │           └── TRANS.TBL
    └── 7
        ├── centos7_ks.cfg                          //centos7的应答文件
        └── ox
            └── x86_64                              //此目录挂载centos7的ios镜像
                ├── CentOS_BuildTag
                ├── EFI
                ├── EULA
                ├── GPL
                ├── images
                ├── isolinux
                ├── LiveOS
                ├── Packages
                ├── repodata
                ├── RPM-GPG-KEY-CentOS-7
                ├── RPM-GPG-KEY-CentOS-Testing-7
                └── TRANS.TBL
18 directories, 17 files

```

至此,一个自动安装系统服务就搭建完毕。

你可能感兴趣的:(centos基础)