一、前言
安装系统经常用到的方式是通过系统光盘进行安装,然而当所要安装的服务器或者PC机没有光驱(或者光驱损坏)的情况,往往会选择通过U盘进行安装。U盘安装相比于之前的光盘安装,在安装介质上有了很大的提高,这使得安装系统变得更加的方便,但是U盘安装方式并没有将操作人员从繁琐、重复的安装操作解放出来。本文介绍了一种局域网中通过网络进行系统自动化安装的方法,该方法不仅安装过程更加简单,大大减少了工作人员的手工操作,而且能够同时部署多种系统,非常方便的进行选择和安装。
本文所提到的基于网络的系统自动化安装方案主要用到了一下的几个协议和技术:
-- PXE(Preboot Execution Environment / 远程引导技术)
-- DHCP(Dynamic Host Configuration Protocol / 动态主机配置协议)
-- TFTP(Trivial File Transfer Protocol / 普通文件传输协议)
-- NFS(Network File System / 网络文件系统)
二、原理
基于网络进行系统安装的原理简单的说就是:待安装系统的客户机通过支持PXE协议的网卡在开机时想网络发送DHCP消息来获取自身的IP信息,DHCP服务器返回客户机的IP以及TFTP信息和启动文件的地址等信息,之后客户机通过启动文件开始系统的下载和安装(安装的具体操作已经提前写入了ks.conf文件,它与安装文件放在一起),可以用下图来表示具体的安装流程:
上图告诉我们在安装过程中需要一个DHCP服务器、一个启动服务器和一个安装服务器,三个服务既可以部署在多台机器上也可以部署在同一台机器上(后面将要介绍的方案就把三者集中在了一台普通的服务器内),详细的安装流程介绍如下:
第1步:待安装机器向DHCP服务器发送请求
将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE
BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
第2步:DHCP服务器提供IP、TFTP等信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE
Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
第3步:待安装机器向启动服务器请求下载启动文件
待安装机器送到服务器的"回应"之后,会回应一个帧,以请求传送启动所需要的文件,这些文件包括了:pxelinux.0、vmlinuz、initrd.img、pxelinux.cfg/default、pxelinux.cfg/list。
第4步:启动服务器回复并传送启动文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答,用以决定启动参数。BootROM由TFTP通讯协议从Boot
Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,系统会下载并读取pxelinux.cfg/list文件,操作人员需要安装list中列出的系统进行选择,启动对应选择的Linux系统并安装程序的引导内核。
第5步:待安装机器向安装服务器请求安装配置文件(ks.conf文件)
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置,也就是系统的安装文件和配置文件,因而这里需要获取到相应资源的IP和路径等信息。接着客户机会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第6步:待安装机器下载相应文件并自动安装系统(实际上根据ks.conf文件的内容,操作人员需要做简单的操作)
将ks.cfg文件下载回来后,并按照该文件的配置请求下载安装过程需要的软件包。安装服务器和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中需要将BIOS修改回从硬盘启动。
三、方案简介
1、前提条件
-- 待安装机器必须支持PXE启动
-- 待安装机器、DHCP服务器、启动服务器和安装服务器在同一个局域网中
-- 要安装的系统需要有对pxeboot的支持
2、方案介绍
将要安装的系统:
CentOS6.3
DHCP服务器、启动服务器和安装服务器所在机器信息:
IP:10.15.62.10
操作系统:CentOS6.2
待安装系统机器的信息:
MAC:1c:c1:da:ad:ac:62
IP:10.15.62.20
四、具体操作步骤
步骤1:DHCP服务的配置
1)安装DHCP服务器包
#yum -y install dhcp*
通过这个命令将会下载和安装dhcp相关的软件,当然这是在机器能够联网的前提下,如果未联网这需要提前下载DHCP相应的安装包,然后再机器上进行相应的安装,具体的安装过程请根据安装包的格式具体操作。
2)DHCP服务的配置
DHCP的配置文件位于:/etc/dhcp/dhcpd.conf (DHCP的配置文件根据版本的不同有所区别,也有可能是在/etc/dhcpd.conf或者其他相关文件中)
对于该文件,我们主要在其默认的配置的基础上做简单的配置即可,主要有两个方面需要注意:
-- rang对应的IP的范围,这个需要修改成需要安装的机器的IP或者是IP段
-- host部分,该部分将ip与相应的mac地址对应起来,待安装机器正是通过host来获取自己的ip地址的,并且该部分提供了tftp的相应信息
具体的配置如下:
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;
subnet 10.15.62.0 netmask 255.255.255.0 {
# --- default gateway
option routers 10.15.62.1;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "domain.org";
option domain-name-servers 8.8.8.8;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 10.15.62.2 10.15.62.100; # DHCP服务器的作用范围
default-lease-time 21600;
max-lease-time 43200;
group {
filename "pxelinux.0"; # TFTP信息
host ns {
next-server 10.15.62.10; # TFTP服务器的IP(这里就是本机的IP)
hardware ethernet 1c:c1:de:ed:ac:62; # 待安装机器的MAC地址
fixed-address 10.15.62.20; # 待安装机器的IP地址
}
}
}
3)DHCP服务的启动
启动命令如下:
#service dhcpd start
或者是:
#service dhcpd restart
步骤2:启动服务器的配置
启动服务的配置主要是TFTP服务器的配置和简单的文件的拷贝工作,具体的过程如下:
1) TFTP服务器的安装
在联网的情况下可用下面的命令安装:
#yum -y install tftp*
2) TFTP服务器的配置
TFTP的配置文件位于:/etc/xinetd.d/tftp
内容如下:
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
这里要注意的是,disable对应的项要变为no,这样连接才能够顺利进行,server_args对应的配置告诉我们,tftp的根目录为/tftpboot,接下来的tftp的相应的配置我们都将在给目录下进行。
3) 启动镜像文件pxelinux.0的准备和配置
要想获得这个文件,我们需要先安装syslinux这个程序,安装命令为:
#yum -y install syslinux
安装完成后,我们将在/usr/share/syslinux/中能够找到pxelinux.0这个文件,我们只需要将这个文件拷贝到tftp的根目录tftpboot中即可。
接下来,我们将要对pxelinux.0进行相应的配置,首先在tftp的根目录/tftpboot中建立一个文件夹/pxelinux.cfg,并在该文件夹中建立两个文件,分别为:default和list,其内容分别为:
default文件:
default 0
prompt 1
timeout 600
display pxelinux.cfg/list
label 0
kernel vmlinuz-centos-6.2-x86_64-bin-DVD
append ks=nfs:10.15.62.78:/netinstall/ks/ks.cfg initrd=initrd-centos-6.3-x86_64-bin-DVD.img
ramdisk_size=8192
label 1
kernel vmlinuz-centos-6.3-x86_64-bin-DVD
append ks=nfs:10.15.62.78:/netinstall/ks/ks.cfg initrd=initrd-centos-6.2-x86_64-bin-DVD.img
ramdisk_size=8192
list文件:
Choose one of the following Linux distributions for your installation:
Num Name Distribution Arch. Installation media
-------------------------------------------------------------------------
0) Centos-6.2 Centos-6.2-x86_64 x86_64 nfs://10.15.62.10/netinstall/CentOS-6.3-x86_64-bin-DVD.iso
1) Centos-6.3 Centos-6.3-x86_64 x86_64 nfs://10.15.62.10/netinstall/CentOS-6.2-x86_64-bin-DVD.iso
启动镜像pxelinux.0文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。所有的配置文件都放在启动服务器的/tftpboot/pxelinux.cfg/目录下。pxelinux.0根据一定的规则来搜索合适的配置文件名。举例来说,对于前面为待安装机器分配的IP地址192.168.138.30(十六进制表示为C0A88A1E),pxelinux.0会按如下次序搜索配置文件:
C0A88A1E > C0A88A1 > … > C0 > C > default
就是说,如果C0A88A1E文件存在,它就是pxelinux.0将载入的配置文件。否则,继续往下找。如果C0A88A1文件存在,它就是pxelinux.0将载入的配置文件。如果前面的以C开头的文件都不存在,那么pxelinux.0将试图从文件default中读取配置。对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中是个不错的主意,可以减轻配置文件维护负担。
4)initrd.img和vmlinuz文件的准备
在待安装系统的iso包找到这两个文件,注意:这里要得到的这两个文件应该是下面路径中的,不应选择CentOS-6.3-x86_64-bin-DVD\isolinux文件下的这两个文件,当然,这也与要安装的系统有关,请在安装时注意这一点。
正确的文件路径:CentOS-6.3-x86_64-bin-DVD\images\pxeboot
5) TFTP服务的启动
#service xinetd start
或者是
#service xinetd restart
步骤3:安装服务器的配置
1) NFS服务器的安装
在联网的情况下可简单的用一下的命令安装:
#yum -y install nfs*
2) NFS服务器的配置
NFS服务器的配置文件位于/etc/exports文件中,我们将其配置为:
/netinstall *(ro,sync)
这里我们确定了安装文件的位置为/netinstall,接下来安装文件以及ks.conf都将存放在这个文件夹中。
3) ISO文件的处理和拷贝
我们将CentOS-6.3-x86_64-bin-DVD.iso进行提取,然后将得到的文件全部拷贝到/netinstall中去,这样在/netinstall中文件目录如下所示:
4) ks.conf文件的准备
上图中我们已经看到了存在一个ks的文件夹,这个文件夹是在这一步创建的,里面包含一个ks.conf的文件,该文件定义了系统安装的一些选项,在我们的安装过程中该文件的内容如下所示:
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
nfs --server=10.15.62.10 --dir=/netinstall
lang en_US.UTF-8
keyboard us
network --onboot no --device eth0 --noipv4 --noipv6
rootpw --iscrypted $6$7FExARVldfT7vBrM$ZdtA35JvoA4.R6SzBaOSw5YwrDw8XgNxMjaEaY
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append=" rhgb crashkernel=auto 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 --drives=sda
#part /boot --fstype=ext4 --size=500
#part pv.008002 --grow --size=1
#volgroup vg_centos --pesize=4096 pv.008002
#logvol /home --fstype=ext4 --name=lv_home --vgname=vg_centos --grow --size=100
#logvol / --fstype=ext4 --name=lv_root --vgname=vg_centos --grow --size=1024 --maxsize=51200
#logvol swap --name=lv_swap --vgname=vg_centos --grow --size=1024 --maxsize=5920
%packages
@base
@client-mgmt-tools
@console-internet
@core
@debugging
@directory-client
@java-platform
@mysql-client
@network-file-system-client
@php
@performance
@perl-runtime
@postgresql-client
@server-platform
@server-policy
@turbogears
@web-server
@web-servlet
pax
oddjob
sgpio
certmonger
pam_krb5
krb5-workstation
perl-DBD-SQLite
certmonger
perl-CGI
%end
ks.conf文件可以根据用户的实际的需求做相应的更改,为了方便用户获取这个文件,我们推荐使用kickstart这个软件来模拟安装过程从而更加准确的得到它,其实在CentOS的安装完成也会得到这样的一个文件,也就是说,我们也可以找一个安装了CentOS的机器在它的/root文件中我们将看到一个anaconda-ks.cfg文件,可以通过修改这个文件来得到ks.conf。
kickstart的安装和使用非常简单,但是需要图形界面来进行模拟,所以建议具有图形显示功能的系统安装并进行相应的模拟操作,安装命令如下:
#yum install system-config-kickstart
具体的模拟操作的过程,请查看相应的资料。
5) NFS服务的启动和测试
启动命令:
#service nfs start
或者是
#service nfs restart
我们可以通过以下的方法进行测试:
#showmount -e 10.15.62.10 (命令)
Export list for 10.15.62.10:
/netinstall *
#exportfs -uv (命令)
/netinstall <world>(ro,wdelay,root_squash,no_subtree_check)
步骤4:系统安装
系统的安装过程主要是在系统开机时,根据提示选择通过网络进行安装,然后根据提示做简单的操作即可完成,这一点我们推荐查看参考资料中三篇文章的内容。
五、遇到的问题
以下列举出了在安装系统过程中出现的一些问题,仅供参考。
1、TFTP配置问题
报错信息:
TFTP prefix:
Unable to locate configuration file.
解决方法:
这个错误出现的原因是我们的/tftpboot文件里面的pxelinux.cfg文件夹下的文件设置有问题。报这样的错误还有一种可能是TFTP的配置文件的问题,因此应认真核对。
2、NFS无法连接问题
报错信息:
NFS Name:10.15.62.10
CentOS Dir:/netinstall/images/install.img
Mount Options:ro
That directory could bot be mounted from the server.
解决方法:
之前看到很多网上关于通过网络安装Linux系统的文章,一般都是直接将iso文件拷贝到netinstall里面就可以了,但是实践证明我们需要将iso文件提取之后再放入,这个文件的出现就是因为iso没有进行提取。
3、安装文件中repo文件的问题
报错信息:
Unable to read package metadata, This may be due ro a missing repodata directory.
Please ensure that your install tree has bee correctly generated.
解决方法:
这个问题主要有两个原因:第一个是repodata那个文件里面的文件在CentOS6.2中提取时出现了问题,文件的后缀名不见了,可以自行添加上用户名即可,这个事CentOS6.2的一个Bug,6.3版本不存在这个问题;第二个是ks.cfg文件的问题,在该文件中有如下的一行:
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
其中,baseurl应该设定为repodata的地址,我们在上面的操作中直接删除了这一行,也可自己更具nfs的设置进行更改。
六、其他
1、文中所提到的几个协议可通过一下几篇文章进行学习:
http://blog.csdn.net/andy_yf/article/details/7749246[PXE]
http://blog.csdn.net/andy_yf/article/details/7749248[DHCP]
http://blog.csdn.net/andy_yf/article/details/7749250[TFTP]
http://blog.csdn.net/andy_yf/article/details/7749253[NFS]
2、在通过该方法安装系统时,请注意要安装的系统的版本,这也有可能会出现问题。比如在本文中,之前打算安装CentOS6.2版本,但是安装完成之后总是出现一些很难解决的问题,尝试了很多次依然没有解决,所以换成了CentOS6.3,实践表明这个版本的CentOS能够正常安装和使用。
================================================
参考文献:
1.http://www.ibm.com/developerworks/cn/linux/l-autoinstl/#N100E9
2.http://houyongkai.blog.51cto.com/2256917/404775
3.http://blog.sina.com.cn/s/blog_4a8d06ce0100rpdx.html
分享到:
相关推荐
自动生成网络拓扑图,大屏可视化,web SSH(堡垒机),统计分析图表,指令下发批量执行,告警信息推送(如邮件、钉钉、微信、短信等)**。 ## **源码使用** 1.使用IDEA的话(推荐),直接打开wgcloud-server和...
「安全资讯」基于_linux_的嵌入式设备漏洞自动化分析 - 大数据 安全方案 安全集成 安全运维 Android 安全认证
本课程设计在对可信计算的体系结构、Linux的安全机制、现有的认证协议等深入研究的基础上,提出了基于Linux操作系统的用户认证与应用授权的架构,并最终完成了整个系统的搭建。本文重点分析了Kerberos认证系统与LDAP...
基于Linux的网络广告机系统设计,徐凯,洪建勋,嵌入式系统是以应用为中心、软硬件可裁剪的专用计算机系统,具有系统精简、专用性强等优点,广泛地应用于数码产品、家庭自动化系
从提高效率的角度出发,可以采用一种基于网络的安装。而且还支持无人值守安装,该方案将很多安装准备工作在服务器上一次性完成,这样在客户机上安装时就不需要为每个客户机重复这些工作,节省了时间和成本,提高了...
基于CentOS 7的Kubernetes...Kubernetes(简称K8s)具有完备的集群管理能力,它是当前被业界广泛认可和看好的Docker分布式系统解决方案,能够实现自动化资源管理、无缝动态扩容以及跨多个数据中心的资源利用率最大化。
15.Linux下Kickstart自动化安装平台构建.mp4 16.Linux下构建Rsync同步服务器.mp4 17.Linux下Shell编程实战.mp4 18.Linux Shell编程必杀技命令.mp4 19.Linux下运维利器之Shell编程.mp4 .........
基于ncurses开发配置网络图形化界面,能够进行网卡选择,配置IP地址,掩码,网关以及DNS,并且具备二次确认保存的功能。 完美自动适用于CentOS7和8,其他linux系统可能需要微调一下。
3.1.11 Kickstart自动化安装平台 编程篇 4. I Linux Shell编程 4.1.1 Shel I编程简介 4.1.2She11变量设置 4.1.3 Shell流程控制语句 4.1.4 Shell脚本案例 4.1.5Shel1数组编程 5. Linux深入篇 5.1构建 Nginx WEB服务器...
基于python+pytest+Selenium+allure,完成web自动化测试框架的搭建,并可以在jenkins上持续集成,应用于课堂派web自动化测试项目中,取得良好效果 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发...
Linux 在其2.4 内核中内置了一个基于网络层解决方案的防火墙系统—Netfilter/Iptables,它使得 用户能够很方便地在网络边界定制对数据包的各种控制,如有状态或无状态的包过滤、各种类型的网 络地址转换、流量控制及...
Manager是基于Python的 wxpython GUI(图形用户界面)开发,具备跨平台的能力,比如在Linux桌面环境,源码无须做任何改动即可直接兼容,平台支持的系统有WindowsXP、windows2000或Windows2003、 Windows7等;支持Linux2.6或...
基于php语言thinkphp3.2框架实现oa自动化办公系统。支持手机端页面。可以实现集团型多公司管理审批单据(实现方式:通过配置员工管理公司和管理部门来实现)!通过配置后还可以在企业微信上使用 软件开发设计:PHP、...
嵌入式技术正在改变传统设备的功能结构,它根本上改变了设备信息上网的方式,实现了现场设备到局域网的直接通信,这种方式必将带来控制网络新的变革基于嵌入式系统μCLinux的网络化智能节点设计方案。该方案在保证控制...
E.6.17 我安装Linux时没有遇到错误, 但是在重启动时, 我只能得到L, LI 和其他一个项目. 为什么? E.7 使用Red Hat Linux E.7.1 我不能运行我编译的任何程序, 因为 我得到一个"command not found"出错信息. 我在目录...
操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...
E.6.17 我安装Linux时没有遇到错误, 但是在重启动时, 我只能得到L, LI 和其他一个项目. 为什么? E.7 使用Red Hat Linux E.7.1 我不能运行我编译的任何程序, 因为 我得到一个"command not found"出错信息. 我在目录...
还内含了TCP/IP网络协议,很适合在服务器领域使用,而服务器主要用途之一就是进行网络通信,随着计算机办公自动化处理技术的应用与推广,网络的不断普及,传统的纸张式文件传输方式已经不再适合发展的需要,人们更...
E.6.17 我安装Linux时没有遇到错误, 但是在重启动时, 我只能得到L, LI 和其他一个项目. 为什么? E.7 使用Red Hat Linux E.7.1 我不能运行我编译的任何程序, 因为 我得到一个"command not found"出错信息. 我在目录...