1. 引言
一般情况下,安装Linux需要从光驱用安装光盘启动机器,然后进入交互式安装界面输入安装所需的各种配置完成安装。在下面这些情况下,这种安装方式就会暴露出缺点:
1) 机器无光驱、光驱坏了(这种情况在现实中频繁发生) 或光盘坏了,无法从光驱安装Linux。
2) 软件测试人员在搭建测试环境时,需要安装大量的centos Lniux测试机器时。这时采用手工安装方式逐台机器安装效率会很低。
3) 对IT支持人员来说,指导一个centos Lniux生手安装centos Lniux系统会耗费很多时间。日复一日重复这种工作会浪费宝贵的人力资源。
从降低商业成本和提高安装系统效率的角度出发,本文向大家介绍一种方案--基于网络的centos无人值守安装。该方案将很多安装准备工作在服务器上一次性完成,这样在客户机上安装时就不需要为每个客户机重复这些工作,节省了时间和成本,提高了效率。
在一次性的环境配置工作完毕后,该套方案能达到非常高的自动化程度:用户只需要执行很少的手工步骤即可完成安装。安装过程中的手工步骤和自动步骤如下:
1) 手工步骤:开机,选择从网络启动。如果你的方案配置得比较负责复杂灵活,也许还需要你选择安装何种系统。总之,手工步骤非常少。
2) 自动化步骤:剩余步骤,包括系统配置,硬盘分区,和程序包安装,将全部自动完成。
2. 方案介绍
这种方案需要首先设置一个启动服务器和一个安装服务器(可以配置在同一台物理机上),然后通过网络启动存放在启动服务器上的安装程序。安装程序会自动访问存放在安装服务器上的安装配置文件和安装介质来完成安装。
涉及到的技术
该方案主要应用了三种技术:
1) 在PC上从网络启动centos Lniux安装程序的PXE协议
2) centos Lniux安装程序提供的网络安装功能(即指通过网络访问安装介质)
3) centos Lniux 安装程序提供的无人值守安装功能(centos称为kickstart)
软硬件需求
要按本文介绍的方法完成自动化安装,你需要如下软硬件资源:
· 一台PC机器作为启动和安装服务器(其它架构机器也可以)
· 一台待安装的PC机器,它的网卡必须带有PXE支持
· 一个建好的局域网,上述两台机器已经连接入同一子网
· 待安装的centos Lniux安装介质
方案原理示意图
图1是网络安装环境的一个原理示意图。整个安装环境由一个局域网,和连接到该局域网的三台机器组成:启动服务器(Boot Server),安装服务器(Installation Server),和待安装机器(Client)。其中启动服务器和安装服务器可以部署在同一台物理机上。表1列出了对这些机器的软硬件要求,和其上负载的服务与数据。
该方案的实现步骤
1) 配置启动服务器
2) 配置安装服务器
3) 从网络启动机器以完成安装
步骤1)和2)只需做一次即可。对每一台需安装centos Lniux的机器,都需要在启动服务器和安装服务器中部署相应的数据,并执行一次步骤3)。
下面将带领您逐一执行这些步骤。
为了简单,我将用示例来说明如何在一台安装了 centos 5.4 的 PC 机上设置启动服务器和安装服务器,并在一台PC上安装centos5.4。
3. 步骤1:配置启动服务器
启动服务器的目的是帮助在待安装机器上启动centos Lniux 安装程序。启动服务器上需要搭建一个DHCP 服务器和一个TFTP 服务器。前者是为了给待安装机器分配IP地址,后者则是提供了一个让待安装机器下载启动镜像的途径。
配置DHCP 服务器
1) 安装DHCP服务器包(RPM包名:dhcpd)。
2) 编辑DHCP服务器配置文件 /etc/dhcp.conf。这里是一个示例:
[root@jadeshow xinetd.d]# vim /etc/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
#
option domain-name "jadeshow.com";
ddns-update-style none;
max-lease-time 7200;
server-name "bootserver";
default-lease-time 600;
allow booting;
allow bootp;
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.130;
deny unknown-clients;
}
group pxe {
filename "pxelinux.0";
host testserver { hardware ethernet 00:0C:29:2B:C1:2E; fixed-address
192.168.2.123; }
}
在这个例子中,定义的子网是 192.168.2.0/255.255.255.0。主机定义项testserver指出 IP 地址 192.168.138.30 将分配给以太网卡00:0C:29:70:24:5B(待安装机器),文件 pxelinux.0(在 TFTP 服务器的根目录中)将作为启动映像被网卡ROM里的PXE客户端载入内存并运行。
每增加一台需安装的机器,我们需在dhcpd.conf中增加一条host条目。
3) 给启动服务器配置一个IP,这个IP必须在DHCP服务器定义的子网内。
这里我们使用192.168.138.1。关于如何为centos Lniux系统配置IP地址,请查阅参考资料3。
4) 启动DHCP服务。
[root@~]# service dhcpd restart
[root@~]#chkconfig dhcpd on
2
配置TFTP服务器
1) 安装TFTP服务器包(RPM包名:tftpd)。
2) 编辑TFTP 服务器的配置文件 /etc/xinetd.d/tftp。配置文件如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
}
3) 将Linux安装程序的内核/根文件系统文件复制到 TFTP 服务器的根目录。对于每一个要被安装的Linux版本,都需要执行一次该操作。
拷贝核心和根文件系统到tftp的主目录,并且修改其相应的标示
4) 将启动镜像文件pxelinux.0复制到TFTP服务器根目录。
启动镜像pxelinux.0可以在syslinux安装包里获得。安装好syslinux安装包后,将pxelinux.0复制到TFTP服务器根目录。
[root@jadeshow xinetd.d]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
5) 编辑pxelinux.0的配置文件,以使pxelinux可以正确载入centost Linux安装程序。对于每一个要被安装的tLinux版本,都需要执行一次该操作。
启动镜像pxelinux.0文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。所有的配置文件都放在启动服务器的/tftpboot/pxelinux.cfg/目录下。pxelinux.0根据一定的规则来搜索合适的配置文件名。举例来说,对于前面为待安装机器分配的IP地址192.168.2.123(十六进制表示为C0A8027B),pxelinux.0会按如下次序搜索配置文件:
C0A88A1E > C0A88A1 > … > C0 > C > default
就是说,如果C0A8027B文件存在,它就是pxelinux.0将载入的配置文件。否则,继续往下找。如果C0A88A1文件存在,它就是pxelinux.0将载入的配置文件。如果前面的以C开头的文件都不存在,那么pxelinux.0将试图从文件default中读取配置。对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中,可以减轻配置文件维护负担。
可以将能想到的centos Lniux版本的配置都写在default文件里,以便同时支持多种centos Lniux版本,如下所示(对于具体某个 centos Lniux版本,对应的行该如何写,可以参考它安装盘里的配置文件 /isolinux/isolinux.cfg):
我们这里只要配置default就可以了,default的配置如下图.
6) 启动TFTP服务
[root@jadeshow tftpboot]# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
安装服务器在安装期间提供对 Linux 安装介质和无人值守安装配置文件的访问。安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。使用NFS协议,centos Lniux安装程序可以支持多种安装介质目录结构,尤其是支持ISO光盘镜像文件。这里我们选择使用NFS协议来访问安装介质。
配置NFS服务器
1) 准备ISO安装介质。将centos Lniux安装介质的ISO文件都放置到/netinstallr目录下。注意不要改变文件名。
[root@jadeshow /]# mkdir netinstall
[root@jadeshow /]# mv /home/\[CentOS.5.4.\].CentOS-5.4-i386-bin-DVD.iso netinstall/
[root@jadeshow /]# cd netinstall/
[root@jadeshow netinstall]# ls
[CentOS.5.4.].CentOS-5.4-i386-bin-DVD.iso
[root@jadeshow netinstall]# vim /etc/exports
/netinstall 192.168.2.0(ro,sync)
[root@jadeshow netinstall]# service nfs restart
Shutting down NFS mountd: [FAILED]
Shutting down NFS daemon: [FAILED]
Shutting down NFS quotas: [FAILED]
Shutting down NFS services: [FAILED]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
[root@jadeshow netinstall]# chkconfig nfs on
[root@jadeshow netinstall]#
· * 表示任何IP地址都可以访问该目录。为了安全的考虑,也可以指定具体的IP地址。
· ro 表示远程机器对该目录只有读权限。
· 其它选项请参考NFS手册。
4) 检测目录/instsrv是否已被正确共享
[root@jadeshow netinstall]# showmount -e 192.168.2.253
Export list for 192.168.2.253:
/netinstall 192.168.2.0
配置kickstart安装
自从 5.2 版开始, centos Lniux 开始支持一个称为 kickstart 的功能,其主要目的是为了减少安装过程中的人机交互,提高安装效率。使用这种方法,只需事先定义好一个配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
要使用 kickstart ,你必须:
1) 创建 kickstart 配置文件。
2) 部署kickstart配置文件,即将kickstart配置文件放置到安装服务器上,并在安装程序的kernel参数中指定kickstart配置文件的位置。
创建kickstart配置文件
kickstart 配置文件是一个简单的文本文件,包含一个安装项目列表。每个项目对应于一个安装选择,都用关键字标明。
有如下几种方法生成kickstart配置文件:
· centos提供了一个样例文件。在centos Lniux 文档光盘中 RH-DOCS 目录里的 sample.ks 文件。你可以基于该样例来创建你自己的配置kickstart文件。
· 每当你安装好一台centos Lniux机器,centos Lniux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。
· centos Linux提供了一个图形化的kickstart配置工具。在任何一个安装好的centos Lniux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为system-config-kickstart
本机没有安装 system-config-kickstart 可以使用yum来进行安装.
输入system-config-kickstart,图形化编写kickstart配置文件,编写完之后,默认保存在登录用户的家目录.
这里有一个kickstart配置文件样例:
[root@jadeshow ~]# cat ks.cfg
#platform=x86, AMD64, Intel EM64T
# System authorization information
auth --useshadow --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Use graphical install
graphical
# Firewall configuration
firewall --enabled --http --ftp --ssh --telnet --smtp --trust=eth0
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Installation logging level
logging --level=info
# Use NFS installation media
nfs --server=192.168.2.253 --dir=/netinstall
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# Reboot after installation
reboot
#Root password
rootpw --iscrypted $1$LR5Wi2dS$dZN.EFQPeVhkxKkRZm9D20
# SELinux configuration
selinux --enforcing
# System timezone
timezone America/New_York
# Install OS instead of upgrade
install
# X Window System configuration information
xconfig --defaultdesktop=GNOME --depth=32 --resolution=800x600
# Disk partitioning information
part /boot --bytes-per-inode=4096 --fstype="ext3" --size=100
part / --asprimary --bytes-per-inode=4096 --fstype="ext3" --size=8000
part /home --bytes-per-inode=4096 --fstype="ext3" --ondisk=/hda5 --size=300
%packages
@server-cfg
@gnome-desktop
@development-libs
@system-tools
@base
@admin-tools
@legacy-software-development
@openfabrics-enterprise-distribution
@chinese-support
@gnome-software-development
@development-tools
@mysql
@smb-server
@java-development
@legacy-software-support
@web-server
@mail-server
@editors
@dialup
@graphical-internet
@text-internet
@sql-server
@ruby
@network-server
@java
@dns-server
@ftp-server
文件中的nfs --server=192.168.2.253 --dir=/netinstall选项告诉安装程序:到服务器192.168.2.253的NFS共享目录/netinstallr/下寻找安装介质。centos Lniux安装程序足够聪明,可以识别该目录下应该被读取的ISO光盘镜像文件名,所有这里你不需要指定ISO文件名。
部署kickstart配置文件
首先我们需要把kickstart配置文件放在安装服务器上。我们把它放到/netinstallr/ks目录下。即该文件的NFS访问路径为:
nfs:192.168.2.253:/netinstallks/ks.cfg
其次,我们需要让安装程序知道我们希望它用kickstart方式安装,并告知它可以从哪里获得kickstart配置文件。这可以通过给内核添加一个参数"ks=kickstart配置文件路径"来实现。我们只需对启动服务器上的default文件做一些小修改就可以做到这点.
下面是default的配置内容:
这样在启动安装程序的时候,参数ks=nfs:192.168.138.1:/netinstallr/ks/ks.cfg会被传递给它,告诉它使用这个文件作为kickstart配置文件来进行kickstart安装。
5. 步骤3:从网络启动机器以完成安装
前面的配置工作完成后,下面我们就在待安装机器上通过网络以无人值守的方式来安装centos 54
1. 启动待安装机器,选择从网卡启动。具体方法因BIOS版本不同而异。图2是从VMWare虚拟机上得到的选择网络启动的屏幕截图。
2. 网卡中的PXE代码会联系DHCP服务器来获取IP地址以及启动镜像,然后启动镜像被载入并运行,你可以看到你自己定义的一个Linux列表如图,选择你需要安装的系统版本。
4. 安装程序会读取kickstart配置文件开始无人值守安装。安装过程中它会根据kickstart配置文件中指定的安装介质地址,安装指定的软件包。
5. 直到安装结束,你都不需要做任何工作。
6. 安装完成后,安装程序会提示你重新启动机器。重新启动机器时切记要在BIOS里改成从硬盘启动。如果仍然从光盘启动机器,又会重复前面的自动安装步骤。
6. 总结
本文介绍了一种基于网络(网络启动+网络安装)的无人值守centos Lniux安装方法。在需要安装大量机器的情况下,以及在需要提供自助安装服务的情况下,该方法可以节约大量人力。
(菜鸟写博,老鸟飞过。欢迎拍砖,深入交流!)
多吃东西多喝水,
少玩游戏少睡觉! -------珏石头
转载于:https://blog.51cto.com/gavinshaw/232589