一、前言
安装系统经常用到的方式是通过系统光盘进行安装,然而当所要安装的服务器或者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
分享到:
相关推荐
Kickstart是一种自动化安装工具,可以实现Linux操作系统的自动化安装。Kickstart可以根据需要生成镜像文件,并实现Linux操作系统的自动化安装。 镜像文件 镜像文件是Linux集群自动化部署的关键组件。镜像文件可以...
此外,Linux还支持广泛的设备驱动和网络协议,这使得它能轻松地集成到复杂的自动化系统中,处理各种输入输出设备,如DIO PowerBUS专家型光纤放大器。这种设备可以降低布线成本,共享电源,并且能够并排排列多个放大...
2. 时间敏感网络(TSN):TSN是位于数据链路层的协议集,旨在提供实时以太网技术,用于解决工业自动化中的数据传输速率问题。 3. OPC UA与TSN融合映射:研究提出了基于实时Linux的OPC UA与TSN融合映射方法,旨在...
然后,通过Kickstart(自动化安装工具)进一步自动化整个安装过程。Kickstart配置文件包含了预定义的系统设置,如分区、软件包选择、用户账户创建等,确保每台服务器的配置一致。 在系统安装完成后,PXE部署还可以...
综上所述,通过DHCP、NFS和TFTP构建的网络安装环境,结合无人值守安装技术和PXE,可以实现Linux的高效、自动化安装。无论是对于企业级的大规模部署,还是个人用户的便捷安装需求,网络安装方案都展现出了其独特的...
### UNIX和Linux自动化管理(第二版)2009知识点概览 #### 一、书籍基本信息及版权说明 - **书名**:《Automating Linux and Unix System Administration》(中文可译为《UNIX和Linux系统自动化管理》)第二版。 - *...
### 基于Foreman的Linux自动化管理部署指南 #### 一、部署环境描述 在当前环境下,我们将在一台预装了RHEL 7.0的物理服务器上使用KVM虚拟化技术创建四个虚拟机来模拟一个小型网络环境。为了确保各虚拟机之间以及与...
在Linux环境中进行Python3的自动化工作,`pyautogui`是一个非常重要的库,它允许我们控制鼠标和键盘,实现屏幕截图以及与GUI交互等功能。在Linux系统上安装Python3和`pyautogui`可能会遇到一些挑战,特别是当使用`...
"基于Linux的企业自动化实践:服务器的构建、部署与管理" 本文概述了基于Linux的企业自动化实践,着重于服务器的构建、部署与管理。本文将探讨如何构建、部署和管理基于Linux的服务器,以实现企业自动化的目标。 ...
【基于嵌入式Linux系统的网络编程技术】 嵌入式Linux系统是将开源的Linux操作系统应用...通过这些技术,开发者能够创建高效、可靠的嵌入式网络应用,应用于各种设备和场景,如智能家居、工业自动化、移动通信设备等。
Kickstart技术是Red Hat Linux和CentOS等Linux发行版中用于自动化安装的重要工具,它允许系统管理员预先配置安装设置,从而在无需人工干预的情况下完成操作系统安装。该技术显著降低了安装过程中的工作量,并提高了...
Linux 运维笔记:自动化安装实践 Cobbler Cobbler 是一个 Linux 服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理 DHCP、DNS 等。Cobbler 可以使用命令行方式...
网络考试系统是一种基于互联网技术的新型考试模式,它改变了传统的纸质考试流程,实现了考试的自动化和数字化。在本文中,作者高树风和徐爱探讨了如何利用Linux操作系统,特别是TurboLinux,结合PHP和MySQL数据库...
脚本安装则依赖于自定义的安装脚本来自动化安装过程。映像安装则是通过预先创建的系统镜像文件,将整个系统映像分发到各个节点。在本文中,作者提出的方法是结合PXE和GHOST,利用网络克隆的方式进行系统安装。 这种...
Linux自动化运维ansible概述与常用模块 Linux自动化运维是当前IT行业中非常热门的技术方向,Ansible是自动化运维工具之一,下面我们将对Ansible的概述和常用模块进行详细介绍。 1. 自动化运维的概念 自动化运维是...
5. 嵌入式系统的应用:基于 ARM9 的嵌入式 Linux 网络通信系统可以很好地应用于各种领域,如工业自动化、医疗设备、消费电子等。 6. Linux 操作系统在嵌入式系统中的应用:Linux 操作系统广泛应用于嵌入式系统中,...
### 构建基于Linux系统的软件管理平台-自动化发布与安装 #### 1. RPM与YUM简介 在本文档中,我们将深入探讨如何利用RPM和YUM来构建一个高效且可靠的Linux平台软件管理系统,旨在实现自动化发布与部署。通过本次...
【基于Linux的自动化药房监控系统的设计】 自动化药房监控系统是现代医疗体系中的一个重要组成部分,它通过实时监测和控制药房内的环境参数,确保药品的储存条件符合严格的标准,从而保证药品的质量和安全。本设计...
在Linux自动化测试中,选择合适的工具和方法至关重要。一方面,开发者需要根据项目需求和团队技术栈来选取工具,比如,如果项目使用的是Qt框架,那么Qt Test可能是最佳选择。另一方面,为了保证测试的覆盖率和质量,...