热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PXE+kickstart无人值守安装CentOS6

2019独角兽企业重金招聘Python工程师标准1.1PXE说明所谓的PXE是PrebootExecutionEnvironment的缩写,字面上的意思是开机前

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.1 PXE说明

所谓的PXE是Preboot Execution Environment的缩写,字面上的意思是开机前的执行环境。

要达成PXE必须要有两个环节:

(1)一个是客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的程序;

(2)一个是PXE服务器必须要提供至少含有DHCP以及TFTP的服务!

且其中:

  • DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;

  • TFTP则提供客户端的boot loader及kernel file下载路径。

还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

1.2 PXE流程

(1).Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将pxe环境下的Boot loader文件pxelinux.0的位置信息传送给Client。

(2).Client向PXE Server上的TFTP请求pxelinux.0,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0。

(3).Client执行接收到的pxelinux.0文件。

(4).Client向TFTP请求pxelinux.cfg文件(其实它是目录,里面放置的是是启动菜单,即grub的配置文件),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。

(5).Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client。

(6).Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统。

(7).Client加载Linux内核(启动参数已经在4中的配置文件中设置好了)。

(8).Client通过nfs/ftp/http下载系统安装文件进行安装。如果在4中的配置文件指定了kickstart路径,则会根据此文件自动应答安装系统。

1.3 部署环境说明

1.4 部署DHCP

首先安装dhcp服务端程序。

  • yum -y install dhcp

DHCP主要是提供客户端网络参数与TFTP的位置,以及boot loader的文件名。同时,我们仅针对内网来告知TFTP的相关位置,所以可以编辑/etc/dhcp/dhcpd.conf在subnet的区块内加入两个参数即可。其中PXE上专门为PXE客户端下载的boot loader文件名称为pxelinux.0。

vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 259200;
max-lease-time 518400;
option routers 172.16.10.10;
option domain-name-servers 172.16.10.10;
subnet 172.16.10.0 netmask 255.255.255.0 {range 172.16.10.11 172.16.10.100;option subnet-mask 255.255.255.0;next-server 172.16.10.10; # 就是TFTP的位置filename "pxelinux.0"; # 告知得从TFTP根目录下载的boot loader文件名
}

重启dhcp。

service dhcpd restart

1.5 部署TFTP

从流程图中可以看出,boot loader文件pxelinux.0以及内核相关的配置文件(目录pxelinux.cfg下)主要都是由TFTP来提供的!

TFTP的安装很简单,直接使用yum即可。不过要告诉客户端TFTP的根目录在哪里,这样客户端才能找到相关文件。另外要注意,TFTP是由xinetd这个super daemon所管理的,因此设定好TFTP之后,要启动的是xinetd。

  • yum install tftp-server

默认TFTP服务的根目录是/var/lib/tftpboot/,为了少写些字母,将tftp的根目录修改为/tftpboot/。修改tftp的配置文件,主要是TFTP的根目录。

vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot #重点在这里!修改tftp的根目录
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

创建tftp的根目录。

  • mkdir /tftpboot

启动TFTP并观察之:

  • /etc/init.d/xinetd restart
  • chkconfig xinetd on
  • chkconfig tftp on
  • netstat -tulnp | grep xinetd
  • Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  • udp 0 0 0.0.0.0: 69 0.0.0.0:* 2238/ xinetd

接下来的文件必须要放置于/tftpboot/目录下。

1.6 提供pxe的bootloader和相关配置文件

如果要使用PXE的开机引导的话,需要使用CentOS提供的syslinux包,从中copy两个文件到tftp的根目录/tftpboot下即可。整个过程如下:

yum -y install syslinux
cp -a /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /tftpboot/
mkdir /tftpboot/pxelinux.cfg ls -l /tftpboot/
-rw-r--r-- 1 root root 61796 Oct 16 2014 menu.c32 # 提供图形化菜单功能
-rw-r--r-- 1 root root 26759 Oct 16 2014 pxelinux.0 # boot loader文件
drwxr-xr-x 2 root root 4096 Feb 24 20:02 pxelinux.cfg # 开机的菜单设定在这里
-rw-r--r-- 1 root root 163728 Oct 16 2014 vesamenu.c32 # 也是提供图形化菜单功能,但界面和menu.c32不同

pxelinux.cfg是个目录,可以放置默认的开机选项,也可以针对不同的客户端主机提供不同的开机选项。一般来说,可以在pxelinux.cfg目录内建立一个名为default的文件来提供默认选项。

如果没有menu.c32或vesamenu.c32时,菜单会以纯文字模式一行一行显示。如果使用menu.c32或vesamenu.c32,就会有类似反白效果出现,此时可以使用上下键来选择选项,而不需要看着屏幕去输入数字键来选择开机选项。经过测试,使用vesamenu.c32比menu.c32更加好看些。

这部分设定完毕后,就是内核相关的设定了。

1.7 从安装镜像获取Linux内核文件

要安装Linux系统,必须提供内核文件,这里以64位版本的CentOS 6.6为例。

这里计划将内核相关文件放在/tftpboot/centos6.6/目录下。

既然要从安装镜像中获取内核相关文件,首先得要挂载镜像。

  • mount /dev/cdrom /test
  • mkdir /tftpboot/CentOS6.6
  • cp /test/isolinux/{vmlinuz,initrd.img} /tftpboot/CentOS6.6
  • cp /test/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

其实仅需要vmlinuz和initrd.img两个文件即可,不过这里还将isolinux.cfg这个文件拷贝出来了,这个文件里提供了开机选项,可以以它作为修改开机选项和菜单的模板,这样修改起来比较容易,也更便捷!

1.8 选项设置

修改开机配置文件isolinux.cfg。由于拷贝它的时候重命名为default,所以修改default即可。修改的地方标红色了。

vim /tftpboot/default
default vesamenu.c32 #这是必须项,或者改为menu.c32
#prompt 1
timeout 10
display ./centos6.6/boot.msg#这是为选项提供一些说明的文件
menu background splash.jpg
menu title Welcome to CentOS 6.6!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^Install your Linuxmenu default #设置默认的光标停留在此label上kernel ./centos6.6/vmlinuz#设置内核文件,注意相对路径是从tftp的根路径/tftpboot开始的
append initrd=./centos6.6/initrd.img quiet #设置init ramdom disk文件,并设置启动时文本方式启动
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesa nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -

1.9 从网卡安装系统——开机测试

设置Bios从网卡启动。

由于到这里我还没有提供Linux的安装文件,所以选择URL从互联网来获取系统安装。

由于要从互联网上获取系统安装文件,所以需要设置IP等网络参数,但要注意,这里的网络参数和前面设置的PXE网络参数是无关的,这里设置的IP仅是为了联上互联网。由于已经配置了DHCP,所以这里选择DHCP。

设置一个获取Linux系统的站点。上图设置的是163的站点。

如果没什么问题,到这里就开始进行安装直到完成了。以下是进度图片。

1.10 通过http/ftp/nfs来提供系统安装文件

现在在本地服务器上安装http或ftp或nfs来作为系统文件的来源。

首先挂载Linux的镜像光盘(前文已经挂载过了),假设挂载到/mnt目录上。

  • mount /dev/cdrom /mnt 注意,要提供的是镜像中的所有文件,而不是简单的提供一个镜像。所以将/mnt中的所有文件复制出来,假设复制到目录/install目录下。

  • mkdir /install

  • cp -a /mnt/* /install 其实也可以不用复制出来的,只需要将镜像挂载到某个目录下,只要nfs/http/ftp能够找到它就行了。

(1). 使用NFS提供安装文件

  • yum -y install rpcbind nfs-utils 启动rpcbind和nfs。

  • service rpcbind start

  • service nfs start 然后导出/install目录给需要安装系统的客户端,这里导出给整个网段。

  • exportfs -o ro,async,no_root_squash 192.168.100.0/24:/install

  • showmount -e

  • Export list for node1.longshuai.com:

  • /install 192.168.0.0/24

(2). 使用http提供安装文件

安装httpd。

  • yum -y install httpd

  • service httpd start 由于http的DocumentRoot "/var/www/html",所以系统的安装文件需要在此目录下或其子目录才能找到,假设在/var/www/html/centos6.6目录下,只需要简单的将镜像挂载到此目录即可。

  • mkdir /var/www/html/centos6.6

  • mount /dev/cdrom /var/www/html/centos6.6

(3). 使用vsftpd来提供安装文件

  • yum -y install vsftpd 由于这里仅用来提供下系统的安装文件,所以就没必要对vsftpd多多配置了,使用它最简单的匿名用户模式即可,但是匿名用户的根目录为/var/ftp,所以要将镜像挂载到此目录或此目录下的子目录下,假设放在/var/ftp/centos6.6。

  • mkdir /var/ftp/centos6.6

  • mount /dev/cdrom /var/ftp/centos6.6

(4). 测试并填写安装文件的路径地址

到此,就可以启动虚拟机来测试了。和前面的一样,直到下面这里。

对于ftp和http,直接填写即可。

ftp://192.168.100.100/centos6.6

http://192.168.100.100/centos6.6

对于NFS写这样的路径,因为在上面NFS的设定上是导出了/install目录,安装文件也是复制到此文件中的。

然后就会进入安装画面,但是这样还是有些地方需要手动指定的。无法实现非交互时无人值守的方式安装。

所以下文就介绍kickstart实现无人值守的方式。

1.11 kickstart+PXE无人值守大量部署Linux

所谓的无人值守,就是自动应答,当安装过程中需要人机交互提供某些选项的答案时(如如何分区),自动应答文件可以根据对应项自动提供答案。但是,无人值守并不完全是无人值守,在设置bios从网卡启动是必须人为设置的,且安装完系统后设置不从网卡启动也是需要人为设置的。此处之外,其他的都可以无人值守。

要配置无人值守的系统安装,需要提供安装过程中需要的各种选择,这些选择在kickstart的配置文件中,一般正常安装完Linux系统在root用户的家目录下有一个anaconda-ks.cfg,该文件的配置说明见kickstart文件详解。以下是该文件中的部分内容。

不难发现,装系统时很多选项在这里面都记录了。

那么,要使用kickstart来批量部署操作系统,就需要提供该文件。以下是我提供的配置文件/install/ks.cfg(因为我是使用NFS作为文件提供源的,所以我将其放在nfs的导出目录中,让客户端能够找到)。其中rootpw的加密密码要使用grub-crypt生成。

vim /install/ks.cfg
install
text
nfs --server=192.168.100.100 --dir=/install
#url --url=http://192.168.100.100/centos6.6
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto quiet"
lang en_US.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted
$6$x4u9sIfSQsO7ddk5$/.0Xe6tFBY0uUmFFtyvAeY9YVPtcn8zl21fFNgmAoYtepQHRYDthQ4T1ZE12kDfAT6O3oXfRb7uv214t3Bb3K1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
reboot #安装结束后重启
#make partitions
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=250
part / --fstype=ext4 --asprimary --grow --size=2000
part swap --fstype=swap --size=2000
%packages
@base
@core
@debugging
@development
@dial-up
@hardware-monitoring
@performance
@server-policy
@workstation-policy
sgpio
device-mapper-persistent-data
systemtap-client
%post #结束后做的事
cat >>etc/yum.repos.d/base.repo<[base]
name&#61;163repo
baseurl&#61;http://mirrors.163.com/centos/6/os/x86_64/
gpgcheck&#61;0
enable&#61;1
eof
sed "s/ONBOOT.*$/ONBOOT&#61;yes/" /etc/sysconfig/network-scripts/ifcfg-eth0 #设置网卡为启动
sed "s/rhgb //" /boot/grub/grub.conf #设置启动系统时不使用图形进度条方式
sed "s/HOSTNAME&#61;.*$/HOSTNAME&#61;xuexi.longshuai.com/" /etc/sysconfig/network #设置主机名
%end

然后修改defalut文件&#xff0c;让客户端能够找到ks.cfg文件。

vim /tftpboot/pxelinux.cfg/default
label linux
menu label ^Install your Linux
menu default
kernel ./centos6.6/vmlinuz
append initrd&#61;./centos6.6/initrd.img ks&#61;nfs:192.168.100.100:/install/ks.cfg quiet

如果要使用LVM的分区方式&#xff0c;参考如下&#xff1a;

part /boot --fstype ext4 --size&#61;100
part swap --fstype&#61;swap --size&#61;2048
part pv26 --size&#61;100 --grow
volgroup VG00 --pesize&#61;32768 pv26
logvol / --fstype ext4 --name&#61;LVroot --vgname&#61;VG00 --size&#61;29984
logvol /data --fstype ext4 --name&#61;LVdata --vgname&#61;VG00 --size&#61;100 --grow

如果觉得使用的方式手工写配置文件比较麻烦&#xff0c;也可以使用图形化工具来制作ks.cfg文件。在linux中用yum安装system-config-kickstart就行了&#xff08;图形化依赖于x-window&#xff09;&#xff0c;选项也有些限制&#xff08;比如分区不能使用lvm&#xff09;。

然后找台机器从网卡启动就进入安装模式了。

因为在ks.cfg中设置了安装完成后reboot&#xff0c;所以要手动去修改bios不要再从网卡启动&#xff0c;否则重启后又再次从网卡启动然后又去自动应答装系统了。当然&#xff0c;可以将reboot换成shutdown或者poweroff&#xff0c;这样装完就只是关机了&#xff0c;等开机前人为设置不从网卡启动。


转载于:https://my.oschina.net/u/3850965/blog/2050094


推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
author-avatar
活宝贝aaaaaaaaaaaaa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有