PXE自动安装linux系统
PXE全称是:Preboot Excution Environment 预启动执行环境是由Intel公司研发的基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统 PXE可以引导和安装Windows,linux等多种操作系统,这里只讲到了Linux系统
安装具体流程如下:
1.安装所需的必要软件包并开启对应的服务
2.准备安装源
3.准备自动应答文件,并放到可以被访问到的地方
4.配置DHCP服务并启动
5.将必要的文件复制到相关目录
6.修改启动菜单,以及一些其他的配置文件
7.启动测试
安装必要软件
软件安装全部使用yum进行安装,如果没有yum源的请自行配置。
执行以下命令安装相关软件并启动服务,DHCP由于需要另外修改配置文件先跳过
yum install httpd dhcp syslinux tftp-server
systemctl start httpd tftp.socket
systemctl enable dhcpd tftp.socket httpd
使用ss -tan 确认TCP80端口已开启
使用ss -unl 确认UDP69端口已开启
准备安装源
本次实验我们通过HTTP作为安装源,将我们准备好的安装镜像挂载到HTTP目录下可以访问即可。具体目录是/var/www/html/ 为了方便扩展还可以在此目录下建立几个文件夹,以存放不同版本的系统文件。
在主机使用浏览器访问http://192.168.11.2/Centos/7 确认可以看到挂载的安装文件
准备自动应答文件
系统安装完成后默认在root家目录有一个叫anaconda-ks.cfg的文件,可以直接修改这个文件。这里直接修改anaconda-ks.cfg文件。其中以#开头的行表示注释,如果你没有修改过此文件中的内容,那么应该内容如下(中文为后加):
#platform=86, AMD64, or Intel EM64T #version=DEVEL # System authorization information auth --useshadow --passalgo=sha512 # Install OS instead of upgrade#选择升级还是安装,install是安装,upgrade是升级 install # Use CDROM installation media#安装介质,这里是需要修改的地方 cdrom # Use text mode install#使用图形安装还是文字界面,通常自动安装我们不需要图形 text # Firewall configuration#防火墙选项,通常选择关闭 firewall --disabled firstboot --disable ignoredisk --only-use=sda # Keyboard layouts # old format: keyboard us # new format: keyboard --vckeymap=us --xlayouts='' # System language lang en_US.UTF-8 # Network information#安装后网络配置信息,可以将onboot改为on,也可以顺便指定一个hostname network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate network --hostname=localhost.localdomain # Reboot after installation#安装之后重启 reboot # Root password# root账号密码,此处的密码是加密后的密码 rootpw --iscrypted $1$HwDDpzbI$JcacPj2.QTbRQgNWUP8hr1 # SELinux configuration#SELinux选项 selinux --disabled # System services services --enabled="chronyd" # Do not configure the X Window System skipx # System timezone# 时区 timezone Asia/Shanghai # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda #Clear the Master Boot Record #zerombr #清除MBR # Partition clearing information #clearpart --all --initlabel # 清空磁盘 # Disk partitioning information #以下三行是分区信息,注意根据自己的情况进行修改。size单位是MB #part swap --fstype="swap" --size=2048 #part / --fstype="xfs" --size=20480 #part /boot --fstype="xfs" --size=1024 #要安装的包@开头的是包组,没有@的是单独的包 %packages @core zsh %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end
修改以下几项:
1.安装介质即把cdrom改为以下内容
url --url="http://192.168.11.2/centos/7/"
2.防火墙和SELinux根据自己的需要选择开启或关闭
3.如果没有zerombr和clearpart --all --initlabel,手动添加如果前面有#,去掉
4.去掉分区信息前的#
5.根据自己的需要选择需要安装的包,最小化只有一个core即可
6.将文件保存之后放到可以被HTTP访问到的地方,如/var/www/html/,确保文件权限为644
7.在主机访问http://192.168.11.2/anaconda-ks.cfg 如果可以成功访问,说明此步骤OK
配置DHCP服务器
默认情况下DHCP服务在安装完成之后配置文件是空的,也因此DHCP服务必须进行一定的配置才可以启动,DHCP的服务配置文件路径是:/etc/dhcp/dhcpd.conf,通过一个示例来看一下配置文件的 格式
网段:服务器可以分配的地址的网段,可以指定多个
掩码:网段对应的掩码
默认租期:以秒为单位默认的IP地址的租期
最长租期:客户端可以请求一个租期,此项设定用于对此进行限制以秒为单位
地址池:服务器在可分配网段中可以分配的IP地址的范围
DNS:用于客户机从DHCP服务器获取的DNS地址
如下一个示例:
# 指定从DHCP服务器获取的DNS地址 option domain-name-servers 114.114.114.114 # 默认IP地址的租期 default-lease-time 600; # 最长租期 max-lease-time 7200; # subnet用来指定网段,netmask是掩码 subnet 192.168.11.0 netmask 255.255.255.0 { # 使用range指定IP地址池 range 192.168.11.3 192.168.11.124; }
next-server用来指定TFTP服务器的位置
filename用来指定要访问TFTP服务器上的哪个文件
也就是说在这里我们的DHCP服务器的配置文件是这样的
option domain-name-servers 114.114.114.114 default-lease-time 600; max-lease-time 7200; subnet 192.168.11.0 netmask 255.255.255.0 { next-server 192.168.11.2; filename "pxelinux.0"; range 192.168.11.3 192.168.11.124; }
使用systemctl start dhcpd启动dhcp服务,使用ss -unl查看67端口是会否已经开启
将相关文件复制到共享目录
TFTP的共享目录在/var/lib/tftpboot/下,考虑到灵活性依旧可以给不同版本的系统单独的目录
这里创建一个7的目录
复制光盘目录中isolinux下的initrd.img和vmlinuz到/var/lib/tftpboot/7目录下
在共享目录下创建一个名为pxelinux.cfg的文件夹并将光盘目录中isolinux下的isolinux.cfg复制到pxelinux.cfg目录下并且命名为default
将/usr/share/syslinux/menu.c32复制到/var/lib/tftpboot目录下,此文件是菜单背景文件
将/usr/share/syslinux/pxelinux.0复制到/var/lib/tftpboot目录下
如果只有一个系统,应该有5个文件两个目录,结构如下
[root@DHCP_Svr]/var/lib/tftpboot# tree . ├── 7 │ ├── initrd.img │ └── vmlinuz ├── menu.c32 ├── pxelinux.0 └── pxelinux.cfg └── default
修改default文件
#就是刚才复制到菜单文件 default menu.c32 #超时时间,就是菜单倒计时 timeout 600 display boot.msg # 启动菜单的具体配置 # menu label 用来指定菜单名称,可以自定义,^符号用来确定光标位置, # 同时其后的字母也是调到对应菜单的快捷键 # kernel指定内核文件路径,由于我们放在了文件夹中所以路径是7/vmlinuz # 指定initrd的路径,以及ks应答文件文件的路径 # 务必确保应答文件可以访问 label linux menu label ^Install CentOS 7 kernel 7/vmlinuz append initrd=7/initrd.img ks=http://192.168.11.2/anaconda-ks.cfg # 本地硬盘启动 # menu default表示此项菜单为默认菜单,由于自动安装的风险,建议将本地启动作为默认启动 label local menu default menu label Boot from ^local drive localboot 0xffff menu end