红联Linux门户
Linux帮助

linux下的网络安装,配置及调试

发布时间:2006-11-15 01:18:03来源:红联作者:M-zone
一般情况下,我们都是利用软驱或光驱引导Linux后,再通过本地的光驱安装Linux。但是,这种安装方法在以下的几种情况下就不能适用:

无软驱和光驱:很多公司为了节省成本,计算机一般都不带光驱或软驱,这样就无法通过本地安装Linux;

非标准的软驱和光驱:虽然笔记本都会配置光驱,但是并不一定都是标准的IDE设备,有些是通过USB接口,有些是通过1394接口(例如Samsung的 Q10)。在Linux安装时所引导的Linux内核一般都不会带这些接口的驱动,所以也无法通过本地安装Linux;

另外,在一些场合,如机房中,有大量的计算机需要同时安装Linux,如果通过光驱的方式一个个安装,不仅效率低,也不利于维护。

笔者在工作过程中,就遇到过第二种情况。一台Samsung的Q10笔记本需要安装Redhat Linux 8.0,但是通过光驱引导后发现,安装程序无法访问光盘。针对这个问题,笔者经过查阅资料和摸索,找到了在Q10上安装Linux的方法。在下面的讨论中,如不做特别声明,都将以Q10为例,介绍如何通过PXE Bootrom来远程安装Linux。

2. 基本原理

1) 什么是PXE

PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。

PXE协议的成功运行需要解决以下两个问题:

既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置;

通过什么协议下载Linux内核和根文件系统

对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。

至于第二个问题,在PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。

这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程。

2) 工作过程

在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。

PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。

3. 步骤

有了前面的背景知识,接下来就可以正式操作了,下面按照顺序给出了操作步骤:

1) 配置DHCP Server

选用ISC dhcp-3.0,DHCP Server的配置文件是/etc/dhcpd.conf,配置文件的内容如下:

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;


class "pxeclients" {

match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";

option vendor-class-identifier "PXEClient";

vendor-option-space PXE;


# At least one of the vendor-specific PXE options must be set in

# order for the client boot ROMs to realize that we are a PXE-compliant

# server. We set the MCAST IP address to 0.0.0.0 to tell the boot ROM

# that we can't provide multicast TFTP (address 0.0.0.0 means no

# address).


option PXE.mtftp-ip 0.0.0.0;


# This is the name of the file the boot ROMs should download.

filename "pxelinux.0";

# This is the name of the server they should get it from.

next-server 192.168.0.1;

}

ddns-update-style interim;

ignore client-updates;

default-lease-time 1200;

max-lease-time 9200;

option subnet-mask 255.255.255.0;

option broadcast-address 192.168.0.255;

option routers 192.168.0.254;

option domain-name-servers 192.168.0.1,192.168.0.2;

option domain-name "mydomain.org";

subnet 192.168.0.0 netmask 255.255.255.0 {

range 192.168.0.10 192.168.0.100;

}

host q10 {

hardware ethernet 00:00:F0:6B:38:5B;

fixed-address 192.168.0.22;

}

dhcpd.conf配置文件中几个关键部分说明如下:host q10{…}定义了笔记本Q10网卡的MAC地址与IP地址的对应关系,表明DHCP Server为Q10分配一个固定的IP:192.168.0.22;filename ""指定bootstrap的文件名;netx-server指定TFTP Server的地址。其它的配置请读者参考DHCP Server的手册。

2) 配置TFTP server

选用tftp-hpa,TFTP Server的配置文件是/etc/xinetd.d/tftp,配置文件的内容如下:

service tftp

{

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -u nobody -s /tftpboot

disable = no

per_source = 11

cps = 100 2

}

这里制定了/tftpboot为TFTP Server的根目录位置。

3) 配置bootstrap

bootstrap文件在dhcpd.conf中被指定为pxelinux.0文件,放置在/tftpboot。Linux内核以及Linux根文件系统也放置在/tftpboot。pxelinux.0在执行过程中,要读配置文件,所有的配置文件都放在/tftpboot/pxelinux.cfg/目录下。由于PXElinux具有为不同的PXE Client提供不同的Linux内核以及根文件系统的功能,所以要通过不同的配置文件名来区分出不同的PXE Client的需求。比如一个PXE Client由DHCP Server分配的IP地址为192.168.0.22,那么相对应的配置文件名为/tftpboot/pxelinux.cfg/C0A80016 (注:C0A80016为IP地址192.168.0.22的十六进制表示)。如果找不到,就按照顺序C0A80016-> C0A8001-> C0A800-> C0A80-> C0A8-> C0A-> C0-> C->default查找配置文件。

/tftpboot/pxelinux.cft/C0A80001配置文件的具体内容如下:

DEFAULT install

PROMPT 1

LABEL install

KERNEL vmlinuz

APPEND initrd=initrd.img devfs=nomount ramdisk_size=16384

此配置文件指定了Linux内核以及根文件系统的名称,并给内核传递了一些参数,其中ramdisk_size参数要非常注意,它指定Linux内核启动后建立ramdisk的大小,如果设置太小,Linux的安装过程就可能无法进行。

4) 制作Linux内核/根文件系统

因为需要通过网络安装,所有选择Redhat Linux 8.0安装盘(disk #1)中E:\images\bootnet.img(光驱的盘符为E:)。bootnet.img包括Linux内核、Linux根文件系统(有安装程序在内)。用bootnet.img制作一张引导软盘,方法在DOS命令行运行E:\dosutils\rawrite E:\images\bootnet.img,根据提示制作。制作完毕后,将引导软盘中的vmlinuz(Linux内核)和initrd.img (Linux根文件系统)拷贝到Linux Server的/tftpboot下。

5) 启动DHCP Server/TFTP Server

在Linux Server上,运行service dhcpd start和service xinetd restart。

6) 启动Q10

Q10加电后,在出现Samsung公司徽标时,在左下角会提示用户按F12进入网络引导。按F12后,Q10进入网络引导过程。首先通过DHCP Server获得了IP地址,然后下载并执行bootstrap文件pxelinux.0;在执行中,读入配置文件 /tftpboot/pxelinux.cfg/C0A80016。此时屏幕上出现boot:,敲入install,就进入了Redhat Linux 8.0的网络安装界面,一切OK!
文章评论

共有 1 条评论

  1. M-zone 于 2006-11-15 01:19:50发表:

    本文以RedHat Linux 9 为例,简单介绍网络安装的方法。

    一、网络安装

    1. 安装服务器的准备:

    网络安装的服务器按照安装方式的不同,可分为3种,NFS,FTP和HTTP,安装文件的组织方式有两种,安装文件树和ISO镜像。

    关于NFS,FTP和HTTP服务器的配置,请参考其它文档,本文主要介绍安装用到的部分。

    (1) 安装文件树的准备:
    把Red Hat Linux 9 安装光盘的第一张放进光驱,在命令行输入:

    mount /mnt/cdrom

    cp -var /mnt/cdrom/RedHat /var/ftp/pub/rh9/

    umount /mnt/cdrom

    然后再对另两张光盘做同样的操作。

    安装文件树就准备好了。

    这样,我们就可以设置NFS,FTP和HTTP了。

    NFS:

    编辑/etc/exports,加入/var/ftp/pub/rh9 *(ro)

    然后启动NFS服务,service nfs start;如果已经启动NFS服务,exportfs -a或service nfs reload就可以使我们新加入的文件export出去。

    FTP:

    因为我们把iso放到了Anonymous的HOME下,所以我们只要启动vsftpd就可以了,service vsftpd start;如果已经启动了vsftpd,什么也不做就行了。

    HTTP:

    我们做一个link给iso所在的目录,ln -s /var/ftp/pub/ /var/www/html/pub

    然后启动httpd,service httpd start,如果已经启动了httpd,不用做任何事就行了。

    (2) ISO镜像的准备和安排:

    ISO镜像可以是从网上下载,也可以用安装光盘来自己制作。

    下载的可以到官方网站,也可以到速度比较好的镜像站点,根据发行版本的不同,请选择合适的网站下载。如 http://www.redhat.com为RedHat的官方网站。

    下载要注意的是一定要计算MD5。因为下载的文件较大,由于网络传输的问题,有可能使下载的文件不完整。所以计算MD5是非常必要的。

    MD5消息摘要函数(RFC 1321)是由麻省理工学院的Ronald Rivest开发的。它是其早期版本MD4(RFC 1320)的推广。MD5的输入是任意长的消息x,输出为128比特的消息摘要h(x)。(关于MD5的更多内容,请参考其它文档。) 在下载ISO时,会同时提供一个MD5SUM,里面是ISO的MD5值。在Linux上,可以用md5sum来计算ISO的MD5值,然后和MD5SUM里的值比较,如果相同,那说明你下的文件没有问题。如果不同,那你可能需要重新下载了。

    关于ISO的制作,在Linux下,可以用dd;在Windows下,可以用WinISO,NERO,EasyCD,还可以用其它的工具,就不一一列举了,我们主要介绍一下在Linux下用dd制作iso的方法。

    dd是在物理方式读写文件的,我们就用它来制作iso文件。把Red Hat Linux 9 的安装光盘延第一张放进光驱,然后在命令行输入:

    dd if=/dev/cdrom of=/root/rh9-1.iso bs=512

    然后,对另两张光盘做同样的操作,生成文件的名字分别为rh9-2.iso,rh9-3.iso。生成文件名字可以是任意的,我这样写,主要是为了好记。

    好了,不管是下载的,还是自己制作的,我们有了三个iso文件。我们把它放到/var/ftp/pub/rh9iso/下:

    mv /root/rh9-*.iso /var/ftp/pub/rh9iso/

    只有NFS方式可能用ISO来安装,所以,我们修改 /etc/exports,加入 /var/ftp/pub/rh9iso *(rw),然后同上,services nfs start,或exportfs -a或service nfs reload就可以了。

    (3) 配置dhcp服务器和DNS服务器:

    由于是网络安装,而在安装之前,机器是没有IP地址的,也就没法与服务器连通。所以,我们可以设置一台DHCP服务器来自动分配IP地址给客户机。设置DNS的目的主要是为了能够用名字来访问我们的服务器,如果没有DNS,用IP也可以。

    二、安装的启动方式:

    网络安装的启动方式有三种,软盘,光盘,网卡启动(由于现在多数网卡不带启动芯片,所以,这里我们不讨论网卡启动的问题)。

    启动软盘是通过安装光盘上的img文件制作的,在安装光盘第一张中images目录下的bootdisk.img就是启动盘的镜像文件,可能还需要drvnet.img(网卡驱动)。把第一张光盘放进光驱,找一张空白软盘放进软驱,在命令行输入:

    mount /mnt/cdrom

    dd if=/mnt/cdrom/images/bootdisk.img of=/dev/fd0

    等到命令结束,软驱灯来时,换一张软盘,输入:

    dd if=/mnt/cdrom/images/drvnet.img of=/dev/fd0

    给两张软盘分别贴好标签,以便于使用。

    启动光盘有两种,安装光盘的第一张就是启动盘,也可以自己做一张启动光盘(如果你有刻录机的话),具体做法请参考其它文档。

    三、网络安装

    (1) 软盘启动:

    把启动软盘放进软驱,启动机器,出现boot时,直接回车;

    当提示要Driver Disk时,选yes,钱后把drvnet那张盘放进软驱,回车继续;

    当提示安装方式时选一种安装方式,这里我选NFS;

    当问IP地址的获得方式,选DHCP;

    当问server name 时,输入NFS server我名字,在下面输入路径:/var/ftp/pub/rh9;

    当安装画面开始时,就和别的安装方式一样了。

    (2) 光盘启动:

    把启动光盘放进光驱,启动机器,过程同上,只是不用换盘了。

    (3) 安装光盘启动:

    启动机器,把安装光盘第一张放进光驱,在出现boot时,输入 linux askmethod,其同上。

    四、kickstart

    许多操作系统在设计时都是可以自动安装的,即不需要人工输入。这可以给管理员省去不少麻烦,尤其是在装很多台配置相同的机器的时候。

    1、ks.cfg

    ks.cfg是kickstart安装的默认配置文件,如果没有指定文件名,安装程序会在指定的目录中寻找ks.cfg文件,如果找不到,就回到人工安装方式。

    ks.cfg的生成也很简单,在每次安装完一台机器,在/root下就有一个名为anaconda-ks.cfg文件,这个文件就是一个kickstart的配置文件。不过,可能要修改一下里面的分区选项。redhat-config-kickstart就是kickstart的配置程序,它是一个图形的程序,只要按照选项一个一个选好就行了。在安装方式上输入NFS,并输入server name 和路径,最后,记得配置好以后存成一个ks.cfg文件就行了。关于ks.cfg文件中的参数,可能参考redhat的安装或管理员手册。

    把生成的ks.cfg文件copy到软盘,NFS服务器,都可以进行kickstart安装。要注意的是,bookdisk上没有那么多空间,可以把boot.msg和rescue.msg删掉,然后更改syslinux.cfg,把display boot.msg 改成 display snake.msg,把default linux 改成 default linux ks=floppy,注释掉prompt和timeout两行(用#)。

    用这张软盘启动机器,就可以自动 进行安装了。

    如果是用光盘启动,可以把ks.cfg copy到一张软盘上,把它放时软驱,在boot:下输入linux ks=floppy就可以了。

    如果把ks.cfg放在NFS Server上,就在boot:下输入 linux ks=nfs:servername:/path/to/ks.cfg 就行了。

     注意,ks.cfg所在路径必须是NFS export出来的。这样才可以访问。还有,在输入servername时,最好输入全名,比如 server.explam.com这样。小弟就因为没输全,而不知道错在哪了。