pxe技术,我不会解释。只是记得要网卡,BIOS/UEFI/固件支持这个技术。vmware可以。真实服务器观看说明书,查资料。
这里用KickStart自动安装,另外还有Cobbler。
红帽网站教程:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/installation_guide/s1-kickstart2-options
没配置过这玩意,会觉得莫名其妙。
第一个文件是pxelinux.0。要让装系统的机器(下面叫它目标机器)收到这个文件需要提供两个服务——DHCP和TFTP;
首先目标机器开机后这样子,需要获取IP地址。
CentOS 6.9
[root@localhost tftpboot]# uname -a
Linux localhost.localdomain 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
需要注意一点,一个子网只能有一个DHCP服务器运行,不然会冲突,请关闭vmware自带的DHCP服务,网络连接我这里用的是NAT模式。
我们先安装dhcp,用yum装了。
yum -y install dhcp
已加载插件:fastestmirror, security
设置安装进程
Determining fastest mirrors
* base: mirrors.zju.edu.cn
* extras: mirrors.zju.edu.cn
* updates: centos.ustc.edu.cn
解决依赖关系
--> 执行事务检查
---> Package dhcp.x86_64 12:4.1.1-61.P1.el6.centos will be 安装
--> 处理依赖关系 dhcp-common = 12:4.1.1-61.P1.el6.centos,它被软件包 12:dhcp-4.1.1-61.P1.el6.centos.x86_64 需要
--> 执行事务检查
---> Package dhcp-common.x86_64 12:4.1.1-53.P1.el6.centos will be 升级
--> 处理依赖关系 dhcp-common = 12:4.1.1-53.P1.el6.centos,它被软件包 12:dhclient-4.1.1-53.P1.el6.centos.x86_64 需要
---> Package dhcp-common.x86_64 12:4.1.1-61.P1.el6.centos will be an update
--> 执行事务检查
---> Package dhclient.x86_64 12:4.1.1-53.P1.el6.centos will be 升级
---> Package dhclient.x86_64 12:4.1.1-61.P1.el6.centos will be an update
--> 完成依赖关系计算
依赖关系解决
======================================================================================================================
软件包 架构 版本 仓库 大小
======================================================================================================================
正在安装:
dhcp x86_64 12:4.1.1-61.P1.el6.centos updates 824 k
为依赖而更新:
dhclient x86_64 12:4.1.1-61.P1.el6.centos updates 323 k
dhcp-common x86_64 12:4.1.1-61.P1.el6.centos updates 145 k
事务概要
======================================================================================================================
Install 1 Package(s)
Upgrade 2 Package(s)
总下载量:1.3 M
下载软件包:
(1/3): dhclient-4.1.1-61.P1.el6.centos.x86_64.rpm | 323 kB 00:00
(2/3): dhcp-4.1.1-61.P1.el6.centos.x86_64.rpm | 824 kB 00:00
(3/3): dhcp-common-4.1.1-61.P1.el6.centos.x86_64.rpm | 145 kB 00:00
----------------------------------------------------------------------------------------------------------------------
总计 1.7 MB/s | 1.3 MB 00:00
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
正在升级 : 12:dhcp-common-4.1.1-61.P1.el6.centos.x86_64 1/5
正在安装 : 12:dhcp-4.1.1-61.P1.el6.centos.x86_64 2/5
正在升级 : 12:dhclient-4.1.1-61.P1.el6.centos.x86_64 3/5
清理 : 12:dhclient-4.1.1-53.P1.el6.centos.x86_64 4/5
清理 : 12:dhcp-common-4.1.1-53.P1.el6.centos.x86_64 5/5
Verifying : 12:dhcp-4.1.1-61.P1.el6.centos.x86_64 1/5
Verifying : 12:dhclient-4.1.1-61.P1.el6.centos.x86_64 2/5
Verifying : 12:dhcp-common-4.1.1-61.P1.el6.centos.x86_64 3/5
Verifying : 12:dhcp-common-4.1.1-53.P1.el6.centos.x86_64 4/5
Verifying : 12:dhclient-4.1.1-53.P1.el6.centos.x86_64 5/5
已安装:
dhcp.x86_64 12:4.1.1-61.P1.el6.centos
作为依赖被升级:
dhclient.x86_64 12:4.1.1-61.P1.el6.centos dhcp-common.x86_64 12:4.1.1-61.P1.el6.centos
完毕!
安完了,DHCP服务的配置文件是/etc/dhcp/dhcpd.conf。
配置它吧。
# vim /etc/dhcpd.conf
用vim打开,你就看见这些字样。
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
上面明明白白写着:仿照那个文件。
很多人英语文盲,吃亏了。很多配置文件因为系统版本的迭代作废,比如说ubuntu server 18.04的/etc/network/interfaces被一个叫netplan的替代都写在开头,又比如我们常见的init配置文件,开头也写了一堆。
在vim里要编辑这个文件应该用:r /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
读进来一堆
只要这几行,其余的用v配合d或者用dd,5dd,10dd之类的删删删,删错了按u回复。
# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
}
别急,肯定得改一改。子网的网段,子网掩码,幅度范围,域名服务器,域名,路由,广播,都填好了。
subnet 192.168.187.0 netmask 255.255.255.0 {
range 192.168.187.3 192.168.187.254;
option domain-name-servers 202.128.128.68;
option domain-name "localdomin";
option routers 192.168.187.2;
option broadcast-address 192.168.187.255;
}
改好了,这还不够,DHCP给目标机器分配完IP之后,还要发'pxelinux.0'文件呢。
括号里面添两行,别忘了分号结尾。
subnet 192.168.187.0 netmask 255.255.255.0 {
range 192.168.187.3 192.168.187.254;
option domain-name-servers 202.128.128.68;
option domain-name "localdomin";
option routers 192.168.187.2;
option broadcast-address 192.168.187.255;
filename "pxelinux.0";#文件名
next-server 192.168.187.3;#tftp服务器的IP
}
保存,启动DHCP服务;
:w
:!service dhcpd start
观看能否启动服务,打开目标机器,看看能否得到IP。
如果出现错误,请观看/var/log/messages。
示例命令: tail -40 /var/log/messages|grep dhcpd
看看错误日志,调整一下配置文件。有些是符号问题,比如用双引号,英文双引号之类。
退出编辑。
在vmware里,把它自带的DHCP关掉。
目标机器开机后是这个状态,已经获取了IP地址,但是没有TFTP服务。
安装
yum -y install tftp-server
CentOS6的tftp是通过xinetd(原来inetd的升级版)注册端口出入站。CentOS7的TFTP用tftp.socket和tftp.service。
修改配置文件/etc/xinet.d/tftp
把disable=yes一行改成=no
示例命令:sed -i -e "/disable/s/yes/no/" /etc/xinetd.d/tftp
把光碟(iso)放入,挂载复制光盘里面的一些文件到TFTP共享目录——/var/lib/tftpboot。
# mount /dev/sr0 /media/cdrom/
# cp /media/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
把xinetd启动起来。
示例命令:service xinetd start
把防火墙关闭,或者放行。
# service iptables stop
安装syslinux,并且把pxelinux.0复制到TFTP的共享目录
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
现在在目标机器上试下。
出现这个:
现在还缺一个配置文件。
在TFTP共享目录(默认/var/lib/tftproot/)建立一个pxelinux.cfg文件夹,把光碟/isolinux/isolinux.cfg复制到该文件夹里,并且改名为default。这个名字还有讲究,请看:https://www.cnblogs.com/can-H/p/6699691.html?utm_source=itdadao&utm_medium=referral
文件名字的讲究在最末尾。
# mkdir /var/lib/tftpboot/pxelinux.cfg;cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
从上图可以看出一个错误Could not find kernel image:vesamenu.c32
这时候输入linux,就能进入CentOS的文字安装界面,但是过程都需要手动完成。
为了消除这一步需要人参与的情况,通过更改default文件来解决。
把第一行的default XXXXXXX换成default centos6
在末尾加上以下这些内容
label centos6
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ks=nfs:192.168.187.3:/ks/ks.cfg
centos6可以换成别的字样,但是要跟default 后面的单词相同。(偷偷告诉你可以复制前面某些段落,稍微一改就成这样了,就改了ks=xxx这些)
这样就能自动加载了。
yum -y install nfs-utils
安装完成以后配置/etc/exports
/media/cdrom *(ro,sync)
/ks *(ro)
请学习一下NFS服务的配置办法。
左边是共享目录,右边是分享给谁,括号里是选项。
例如
/var/cloud 192.168.172.*(rw,sync,no_root_squash)
我们一定要把ks配置文件和镜像里面的文件(CentOS安装需要的文件)共享出来,并且能被目标机器读取。我这里投机取巧直接分享了光盘的挂载点,你要是也这么做,别忘了挂载光盘。在实体机上用U盘拷贝了镜像用mount -o loop方式挂载出来,可以解压到一个目录。
上面配置完成了,已经可以进入一个界面然后我们就可以手动操作安装linux系统,但是我们需要自动化。这个需要ks配置文件。
ks文件可以用system-config-kickstart做出来:https://www.linuxidc.com/Linux/2017-07/145399p2.htm
也可以手工编写:https://www.cnblogs.com/can-H/p/6699691.html?utm_source=itdadao&utm_medium=referral
https://fedoraproject.org/w/index.php?title=Anaconda/Kickstart/zh-cn&diff=378410&oldid=378310#autopart
我们这里用/root目录下的anaconda-ks.cfg文件。这个文件是你安装系统时自动生成的。
只需要改一丁点。
把cdrom这一行改掉,改成
nfs --server=192.168.172.134 --dir=/media/cdrom/
其中--server是NFS服务器的地址,--dir指定CentOS光盘里面的文件存放位置。
part分区方式,我这里偷懒了,直接用了
autopart
KS整体文件
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
nfs --server=192.168.172.134 --dir=/media/cdrom/
lang zh_CN.UTF-8
keyboard us
network --onboot yes --device eth0 --mtu=1500 --bootproto dhcp --noipv6
rootpw xinqin1218
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb rhgb quiet 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 --initlabel
autopart
#
#volgroup VolGroup --pesize=4096 pv.008002
#logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
#logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1984 --maxsize=1984
#part /boot --fstype=ext4 --size=500
#part pv.008002 --grow --size=1
repo --name="CentOS" --baseurl=nfs:192.168.172.134:/media/cdrom/ --cost=100
%packages
@Base
@Core
@base
@chinese-support
@console-internet
@core
@debugging
@directory-client
@hardware-monitoring
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
@server-policy
@workstation-policy
certmonger
device-mapper-persistent-data
krb5-workstation
oddjob
pam_krb5
pax
perl-DBD-SQLite
python-dmidecode
samba-winbind
sgpio
%end
%Package根据需要选择
现在启动dhcpd xinetd nfs 服务,重启目标机器,目标机器可以自动安装Linux。
有一步会停下,就是清空整个磁盘的选项。其余步骤都会自动化进行。
如果对本文有不满,比如命令颜色太低等等,请在评论留言。