Kickstart无人值守安装系统CentOS 7

1、概述

1.1 关于PXE

Preboot Execution Environment 翻译过来就是预启动执行环境:简称 PXE ;传统安装操作系统的方法是 CD/ROMU 盘引导,而 PXE 技术解决的是从网络引导安装系统,当然 PXE 技术不是什么新技术了,是 IntelMicrosoft1998 年定义的更大 PC98 规范的一部分。有关 PXE 规范的详细文档

1.2 关于pxe引导相关角色说明

  • PXE 作用:引导装机
  • Kickstart 作用:将安装系统的过程中通过 ks.cfg 文件中的配置信息,实现自动安装配置达到无人值守自动安装;
  • TFTP 作用:支持PXE 引导的网卡中从tftp服务器端下载 pxelinux.0 文件、vmlinuzinitrd.img 等内核引导文件;
  • DHCP 作用:PXE引导过程中获首先获取IP地址,并提供 pxelinux.0 文件位置;
  • HTTP 作用:用于下载 ks.cfg 以及系统镜像文件

通用的无人值守做法如下:

通过一台没有系统的裸机网卡支持pxe协议,开机后从dhcp 服务器获取 ippxelinux.0 文件并从 tftp 服务器上加载相关内核引导文件;同时下载 kickstartcfg 配置文件,指定系统镜像文件位置加载安装,从而实现无人值守安装!

1.3 环境准备说明

本次测试环境说明:

  • PXE 服务器:CentOS 7.6 基于VMware的虚拟机,IP:10.0.0.61,172.16.1.61
  • 外网 IP 段:10.0.0.0(可上网) 内网 IP 段:172.16.1.0(局域网)

配置服务及安装软件包如下:

DHCP        #获取IP地址,并提供pxelinux.0文件位置
TFTP            #支持PXE下载内核引导文件
HTTP        #下载ks.cfg以及系统镜像文件
Syslinux        #提供引导文件

以上所需要的软件包均通过 yum 安装

firewall和selinux临时关闭与永久关闭:

##关闭firewalld
systemctl stop firewalld
##永久关闭firewalld
systemctl disable firewalld
##检查结果
systemctl status firewalld
##临时关闭selinux
setenforce 0
##永久关闭selinux
sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux
##检查结果
grep '^SELINUX=' /etc/sysconfig/selinux

若是生产线,请开放 UDP :67、68、69 TCP :80端口。

ISO 镜像:

CentOS 7.6

2、准备

2.1 安装所需要的软件包

##yum安装
yum install dhcp tftp tftp-server syslinux httpd -y

2.2 制作安装源

1、确认 CentOS 7.6 ISO镜像文件已连接

2、挂载本地光盘制作安装源

##创建挂载点
mkdir –p /media/cdrom
##挂载CentOS7光盘
mount /dev/cdrom /media/cdrom
mkdir -p /var/www/html/centos/7/x86_64
##绑定挂载到http默认目录下
mount --bind /media/cdrom /var/www/html/centos/7/x86_64

2.3 配置kickstart的 ks.cfg文件

##创建ks目录
mkdir /var/www/html/ks
## 查看/var/www/html/ks/目录下ks.cfg文件内容
cat /var/www/html/ks/ks.cfg
#Kickstart Configurator for CentOS 7 by Mine
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
# Install OS instead of upgrade
install
# Use network installation
url --url=http://10.0.0.61/centos/7/x86_64
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
#ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'
# System language
lang zh_CN.UTF-8
# Network information
#network  --bootproto=static --device=eth0 --gateway=10.0.0.254 --ip=10.0.0.100 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate
#network  --bootproto=static --device=eth1 --ip=172.16.1.100 --netmask=255.255.255.0 --activate
network  --bootproto=dhcp --device=eth0 --onboot=off --ipv6=auto
network  --hostname=oldboy

# Root password
rootpw --iscrypted $1$oldboy$Npg9Pt9k98Mlg0ZeqHAuN1

# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel

%packages
@^minimal
@core
kexec-tools
vim
wget
httpd
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
selinux --disabled
reboot

3、配置

3.1 HTTPD服务

启动Httpd服务,并设置开机自启动与查看

##启动httpd服务
systemctl start httpd
##开机自启动
systemctl enable httpd
##查看有无端口
netstat -lntup|grep httpd

3.2 DHCP服务

1、配置dhcp服务

dhcp 配置文件在 /etc/dhcp/ 目录下,默认的配置文件没有,但我们可以在帮助文件中找到模板示例文件加以修改,模板示例路径为 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example 这里呢,为节省时间,我们直接写入即可。

cat >>/etc/dhcp/dhcpd.conf<<EOF
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.199;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 10.0.0.61;
filename "/pxelinux.0";
}
EOF
##查看结果
cat /etc/dhcp/dhcpd.conf

2、启动,设置开机自启动与查看

##启动dhcp服务
systemctl start dhcpd
##开机自启动
systemctl enable dhcpd
##查看有无端口
netstat -lntup|grep dhcpd

3.3 TFTP服务

安装好 tftp-server 软件包后 默认的数据根目录是 /var/lib/tftpboot/无须修改,只需要复制一些软件引导文件进来即可

1、相关文件准备

##引导文件
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#内核文件
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot
#引导菜单
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot
#制件引导默认文件
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cat >/var/lib/tftpboot/pxelinux.cfg/default <<EOF
default menu.c32
   prompt 5
   timeout 30
   MENU TITLE CentOS 7 PXE Menu

   LABEL linux
   MENU LABEL Install CentOS 7 x86_64
   KERNEL vmlinuz
   #APPEND initrd=initrd.img inst.repo=http://10.0.0.61/centos/7/x86_64 ks=http://10.0.0.61/ks/ks.cfg net.ifnames=0 biosdevname=0 ksdevice=eth0
   #APPEND initrd=initrd.img inst.repo=http://10.0.0.61/centos/7/x86_64 ks=http://10.0.0.61/ks/ks.cfg
   APPEND initrd=initrd.img inst.repo=http://10.0.0.61/centos/7/x86_64 ks=http://10.0.0.61/ks/ks.cfg net.ifnames=0 biosdevname=0
EOF
##查看结果
cat /var/lib/tftpboot/pxelinux.cfg/default

2、启动配置开机自启

##开机自启动
systemctl enable tftp
##启动tftp
systemctl start tftp

3、Tftp测试

/var/lib/tftpboot/ 目录文件结构

##查看结构
tree -L 2 /var/lib/tftpboot/
/var/lib/tftpboot/
├── chain.c32
├── initrd.img
├── mboot.c32
├── memdisk
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz
##测试tftp
[root@oldboyedu ~]# cd /tmp/
[root@oldboyedu /tmp]# pwd;ls
/tmp
[root@oldboyedu /tmp]# tftp 10.0.0.61
tftp> get vmlinuz
tftp> quit
[root@oldboyedu /tmp]# ls
vmlinuz 

4、测试

客服端配置

1)、选择自定义配置

Vmware软件中,单击左上角的文件,在下拉菜单中选择新建虚拟机

在弹出的新建虚拟机向导选项卡里面,选择自定义(高级)

2)、 选择虚拟机硬件兼容性

硬件兼容性一项中,选择最新的,默认即可

3)、安装客服机操作系统

我们后面要自己定制化安装CentOS系统,所以此处选择稍后安装操作系统

4)、选择客服机操作系统

此处客服机操作系统选择Linux,版本选择CentOS 64位

5)、命名虚拟机

虚拟机名称命名方法:IP+用途,位置:事先规划好的位置即可

6)、处理器配置

我们目的是测试用的,所以默认即可

7)、内存配置

内存大小,我们给2GB即可

8)、选择网络类型

为了方便学习,网络类型这项,必须选择使用网络地址转换(NAT)

9)、选择I/O控制类型

这一项,我们默认即可

10)、选择磁盘类型

这一项,我们也默认即可

11)、选择磁盘

磁盘这一项,选择创建新虚拟机磁盘,不要选择其他的。

12)、指定磁盘容量

“磁盘容量默认20G即可

13)、指定磁盘文件

保持默认即可

14)、完成创建虚拟机

此时,一台新虚拟机的硬件就全部配置完毕了,检查确认无误后,点击完成按钮,然后直接开启即可

5、检验

直接开启虚拟机,等待几秒即可

DHCP ok

PXE ok

加net.ifnames=0 biosdevname=0网卡名是改成eth0或eth1

最后测试如下

6、附录

6.1 ks文件生成的三种方式

  • 方法1
      每安装好一台 Centos 机器,Centos 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的 kickstart 配置文件来生成你自己的 kickstart 配置文件。(生成的文件名字叫 anaconda-ks.cfg 位于 /root/anaconda-ks.cfg )  
  • 方法2
      Centos 提供了一个图形化的 kickstart 配置工具。在任何一个安装好的 Linux 系统上运行该工具,就可以很容易地创建你自己的 kickstart 配置文件。kickstart 配置工具命令为 redhat-config-kickstart(RHEL3)system-config-kickstart(RHEL4,RHEL5) 。网上有很多用 CentOS 桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。
  • 方法3
      读 kickstart 配置文件的手册。用任何一个文本编辑器都可以创建你自己的 kickstart 配置文件。

6.2 ks文件配置参数说明

  • 命令段:键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
  • 软件包段:
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包

在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。

  • 脚本段(可选)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)

详解如下表所示:

关键字 含义
install 告知安装程序,这是一次全新安装,而不是升级upgrade。
url --url=" " 通过FTP或HTTP从远程服务器上的安装树中安装。
nfs 从指定的NFS服务器安装
text 使用文本模式安装。
lang 设置在安装过程中使用的语言以及系统的缺省语言
keyboard 设置系统键盘类型。
zerombr 清除mbr引导信息。
bootloader 系统引导相关配置。
--location= 指定引导记录被写入的位置。
--driveorder 指定在BIOS引导顺序中居首的驱动器
--append= 指定内核参数.要指定多个参数,使用空格分隔它们。
network 为通过网络的kickstart安装以及所安装的系统配置联网信息。
static 方法要求在kickstart文件里输入所有的网络信息。
--ip= 要安装的机器的IP地址
--gateway= IP地址格式的默认网关.
--netmask= 安装的系统的子网掩码
--hostname= 安装的系统的主机名
--onboot= 是否在引导时启用该设备
--noipv6= 禁用此设备的IPv6
--nameserver= 配置dns解析
timezone 设置系统时区。
authconfig 系统认证信息。
rootpw root密码
clearpart 清空分区。
part 磁盘分区。
--fstype= 为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat
--asprimary 强迫把分区分配为主分区,否则提示分区失败。
--size= 以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。
--grow 告诉分区使用所有可用空间(若有),或使用设置的最大值。
firstboot 负责协助配置redhat一些重要的信息。
selinux 关闭selinux。
firewall 关闭防火墙。
logging 设置日志级别。
reboot 设定安装完成后重启,此选项必须存在

6.3 DHCP配置文件说明

range 10.0.0.100 10.0.0.199;           # 可分配的起始IP-结束IP
option subnet-mask 255.255.255.0;     # 设定netmask
default-lease-time 21600;             # 设置默认的IP租用期限
max-lease-time 43200;               # 设置最大的IP租用期限
next-server 10.0.0.61;               # 告知客户端TFTP服务器的ip
filename "/pxelinux.0";                   # 告知客户端从TFTP根目录下载pxelinux.0文件

6.4 生成密码方法

[root@m01 ~]# openssl passwd -1 -salt 'oldboy' '123456'
$1$oldboy$Npg9Pt9k98Mlg0ZeqHAuN1

最新文章

  1. Touch ID 实现
  2. js this理解
  3. Windows Azure Virtual Machine (24) Azure VM支持多网卡功能
  4. smarty模板中literal标签的使用
  5. 下载uboot的调试版本到开发板的sdram中运行
  6. WPF socket通讯 UDP接收消息
  7. UVA 305 Joseph (约瑟夫环 打表)
  8. 真实经纬度(gps)转成百度坐标的js方法
  9. 二:Linux 的基本命令、VI编辑器、Linux中软件安装
  10. animation &amp; @keyframes 实现loading效果
  11. 金融量化分析【day113】:多因子选股
  12. Java容器解析系列(7) ArrayDeque 详解
  13. 数据挖掘的标准流程-CRISP-DM
  14. RMQ st算法 区间最值模板
  15. 作业-JSP简单入门
  16. Django+JWT实现Token认证
  17. Thrift 安装及使用
  18. 安装使用zookeeper
  19. 广二模拟赛 Problem A: 青春野狼不做理性小魔女的梦 解题报告
  20. 【python】网络编程-TCP协议套接字

热门文章

  1. python函数内容
  2. 远程控制服务(SSH)之Windows远程登陆Linux主机
  3. Tomcat 学习总结(1) --Servlet技术
  4. 4. Vue - 指令(Add)
  5. Vuex简介
  6. PageHelper分页(十)
  7. Python高级应用程序设计任务要求
  8. 为什么MySQL数据库要用B+树存储索引?
  9. 考试总结T2(接上次整的T1)
  10. NOIP 2011 提高组初赛错题简析