KICKSTART无人值守安装系统

背景及原理

在工作中常常需要重复的在多台机器上安装相同的操作系统,对于这些机械式的重复 

工作可以采取利用kickstart无人值守安装操作系统来完成。

PXE,全名Pre-boot Execution Environment,预启动执行环境。通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统,是由Intel公司和Systemsoft公司于1999年9月20日公布的技术,采用Client/Server的工作模式,PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议。PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。

PXE的工作过程 

2.1 PXE Client向DHCP发送请求

PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。

2.2 DHCP服务器提供信息

DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个"提供"响应,这个"提供"响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

2.3 PXE客户端请求下载启动文件

客户端收到服务器的"回应"后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

2.4 Boot Server响应客户端请求并传送文件

当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

2.5 请求下载自动应答文件

客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

2.6 客户端安装操作系统

将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。

OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。

3、批量装机软件介绍

Redhat系主要有两种Kickstart和Cobbler。

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成,如Puppet,暂时不支持SaltStack。简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,降低使用者的门槛。

4、环境模拟

4.1 虚拟机准备一台安装好系统并进行基础优化的Linux 6.9版本系统作为服务器端,命名为server,一台没有安装任何系统的VMware空机器,命名为test。其中server具有eth0和eth1两块网卡,eth0为NAT模式,eth1为lan区段。开机后进行网卡的配置,eth0的ip可以设置为dhcp模式自动从虚拟机获取也可以设置为静态iP地址,配置该机器能够上外网;eth1的ip设置为192.168.1.254(属于192.168.1.0网段)

4.2 配置好server的两个网卡的ip并能连通外网后,执行命令开启转发功能

vim /etc/sysctl.conf —> net.ipv4.ip_forward = 1

sysctl –p #加载内核参数

iptables –F #清空iptables

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE #配置iptables转发规则

5、配置dhcp服务

yum install dhcp –y #安装dhcp服务

vim /etc/dhcp/dhcpd.conf #编辑dhcp服务的配置文件

添加以下内容

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.100 192.168.1.254;

option domain-name-servers 223.5.5.5;

option routers 192.168.1.3;

next-server 192.168.1.3;

filename “/pxelinux.0”;

default-lease-time 600;

max-lease-time 7200;

}

/etc/init.d/dhcpd restart #启动dhcp服务

6、配置tftp服务

yum install tftp-server –y #安装tftp服务

vim /etc/xinetd.d/tftp #编辑tftp服务的配置文件

修改disable内容为disable = no

/etc/init.d/xinetd start #启动tftp服务

7、配置http服务

yum install httpd –y #安装http服务

sed -i “277i ServerName 127.0.0.1:80” /etc/httpd/conf/httpd.conf(可选步骤)

/etc/init.d/httpd start #启动http服务

cd /var/www/html/

ls

mkdir centos #新建本地站点目录

ls /dev/cdrom

mount /dev/cdrom centos/ #挂载本地镜像源到网站目录

df –h #检查是否挂载

此时可以通过浏览器输入http://10.0.0.130/centos访问到镜像的本地站点目录,里面包含镜像文件安装系统所需要的各种文件

8、准备PXE开机引导文件

yum -y install syslinux #安装sysLinux软件

cd /var/lib/tftpboot/ #进入tftp根目录

cp /usr/share/syslinux/pxelinux.0 . #拷贝启动菜单程序文件

cp /var/www/html/centos/isolinux/* . #拷贝isolinux所有文件至tftpboot

ls /var/lib/tftpboot/ #查看

mkdir pxelinux.cfg #新建一个pxelinux.cfg目录,存放客户端的配置文件

cd pxelinux.cfg #进入到pxelinux.cfg目录

cp /var/www/html/centos/isolinux/isolinux.cfg default #拷贝pxe配置文件isolinux.cfg并重命名为default

vim default #配置文件default解析,可对一些字段进行自定义,并指定自动应答文件的url地址

9、将test机器开机,进行无人值守自动安装

等待片刻,就会安装完成,进行登录

10、自动应答文件ks.cfg

10.1 可以通过查看当前目录下anaconda-ks.cfg文件进行参考

Kickstart file automatically generated by anaconda.

#version=DEVEL #版本=开发

Install #安装系统途径光盘

cdrom #安装的介质

lang en_US.UTF-8 #系统的语言

keyboard us #系统键盘布局

network --onboot no --device eth0 --bootproto dhcp --noipv6 #网络的配置

rootpw --iscrypted #root密码6

tnRJPwWVl1GByCWK$1Z5h3JGSuWaYLfcc.02ASJr1bc.T/NXLy28KdSGRaSPEYB2R1TeL6pyYnPZhvQ63vTICKeUMo9WCyIqMqTiyl0

firewall --service=ssh #启用防火墙,添加ssh例外

authconfig --enableshadow --passalgo=sha512 #系统账号的认证加密方式为sha-512

selinux --enforcing #selinux的状态

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 --none

#磁盘分区信息

#part swap --asprimary --size=2048

#part / --fstype=ext4 --grow --size=200

repo --name=“CentOS” --baseurl=cdrom:sr0 --cost=100

repo以及本地安装包,centos网络安装包

%packages #包名

@base

@compat-libraries

@core

@debugging

@development

@server-policy

@workstation-policy

python-dmidecode

sgpio

device-mapper-persistent-data

systemtap-client

10.2 新建并自定义ks.cfg自动应答

Kickstart file automatically generated by anaconda.

#version=DEVEL

install

url --url=http://10.0.0.131/centos/ #url源

lang en_US.UTF-8

keyboard us

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

rootpw --iscrypted 6

np50FkEgfj1OXA85$afrVDyovBiEYURUVjrlB58T8rCn4eVGAievcTdJL6P6840rAowEobX7HplSm5uhDWZcbs3XBAgvRM0jaDI0xq1

firewall --service=ssh

authconfig --enableshadow --passalgo=sha512

selinux --enforcing

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

zerombr #清除mbr引导信息

clearpart --all –initlabel #清空分区

part /boot --fstype=ext4 --asprimary --size=200

part swap --asprimary --size=2048

part / --fstype=ext4 --grow --asprimary --size=200

reboot #安装完重启

repo --name=“CentOS” --baseurl=http://10.0.0.131/centos/ --cost=100 #url源

%packages

@base

@compat-libraries

@core

@debugging

@server-policy

@workstation-policy

python-dmidecode

sgpio

device-mapper-persistent-data

%end

10.3 开机自动进行基础优化的youhua.ks.cfg自动应答文件

Kickstart file automatically generated by anaconda.

#version=DEVEL

install

url --url=http://10.0.0.130/centos/

lang en_US.UTF-8

keyboard us

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

rootpw --iscrypted 6

np50FkEgfj1OXA85$afrVDyovBiEYURUVjrlB58T8rCn4eVGAievcTdJL6P6840rAowEobX7HplSm5uhDWZcbs3XBAgvRM0jaDI0xq1

firewall --disabled #关闭防火墙

authconfig --enableshadow --passalgo=sha512

selinux --disabled #关闭selinux

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

zerombr

clearpart --all --initlabel

part /boot --fstype=ext4 --asprimary --size=200

part swap --asprimary --size=2048

part / --fstype=ext4 --grow --asprimary --size=200

reboot

%packages

@base

@compat-libraries

@core

@debugging

@server-policy

@workstation-policy

python-dmidecode

sgpio

device-mapper-persistent-data

net-tools #安装常用软件包

vim

lrzsz

wget

tree

screen

lsof

tcpdump

%end

%post #优化开机启动项,优化ssh,优化yum源,修改主机名

echo ‘begin youhua’ >>/tmp/install.log

chkconfig|awk ‘{print 1}’|grep -Ev ‘crond|rsyslog|sshd|sysstat|network’|awk '{print "chkconfig "

0 " off"}’|bash

sed -i ‘s@#UseDNS yes@UseDNS no@g’ /etc/ssh/sshd_config

sed -i ‘/^GSSAPIAuthentication yes/d’ /etc/ssh/sshd_config

/etc/issue

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

sed -i ‘s#^HOSTNAME=.*$#HOSTNAME=oldboy#g’ /etc/sysconfig/network

%end

10.4 自动应答文件的目录

自动应答文件的目录与镜像文件的目录不相同,可以直接放在/var/www/html/下,也可以在此目录下新建一个单独存放自动应答文件的目录,不同的目录在相应的default中要相互对应

11、添加gpt分区

如果硬盘的容量超过了2T,需要采用gpt分区表,可以在自动应答文件中安装系统前加上gpt格式分区表的命令,加在优化字段前面%pre %end

%pre

parted /dev/sda mklabel gpt

%end

12、MAC地址绑定安装系统

根据实际需要,不同的机器需要安装不同系统的包组,不同的优化等等,可以通过采取绑定mac地址的方式,从而使用不同的应答文件

首先需要得到网卡的MAC地址,然后再创建一个内容与/var/lib/tftpboot/pxelinux.cfg/default文件内容相同的文件,文件名命名格式为"01-mac地址",其中mac地址字母需要改为小写,分隔符将:修改为-

做法如下cp default 01-echo 00:0C:29:48:EE:6B|tr 'A-Z' 'a-z'|tr ':' '-'

再修改该文件中的url地址为相应的自动应答文件ks.cfg地址即可

mac地址分配固定ip

vim /etc/dhcp/dhcpd.conf

host lb01{

hardware ethernet 00:50:56:27:CF:7B;

fixed-address 192.168.128.5;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值