服务器端:RHEL5(静态IP 192.168.1.101)
源Gentoo系统:服务器上的Gentoo系统就来自于它,编译内核也是在这台机器上执行的
无盘客户端:网卡是 AMD PCnet32 支持PXE启动。系统是位于RHEL5上的Gentoo,通过PXE启动
实验主要有几下几个步骤:

  • 编译Gentoo内核
  • 配置DHCP服务器
  • 配置TFTP服务器
  • 配置NFS
  • PXE启动Gentoo

1. 编译Gentoo内核
1) 配置内核选项
我使用的是2.6.30的内核,make menuconfig 后要配置以下几个选项(注意都要选为built-in,不能是module):
Network support
  Network options
    TCP/IP networking
      IP kernel level autoconfiguration
        IP: DHCP support
File systems
  Network File Systems
NFS client support
NFS client support for NFS version 3
NFS client support for the NFSv3 ACL protocol extension
      Root file system on NFS
Device Drivers
  Network device support
    Ethernet (10 or 100Mbit) --->
      选择无盘客户端机器的网卡驱动(查看系统配置可以用lspci)
2) 编译内核
(内核2.6)# make && make modules_install
3) 安装内核
新编译的内核在 arch/i386/boot/bzImage,稍后会被传到服务器上的 /tftpboot 目录下
2. 在RHEL5上配置DHCP服务器
DHCP 服务器用来给无盘客户机分配IP地址,并告诉他服务器上 bootloader 文件的路径。我的 /etc/dhcpd.conf 如下:

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample 
#
ddns-update-style interim;
ignore client-updates; subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.128 192.168.1.254;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers  192.168.1.1;
option domain-name-servers 192.168.1.1;
filename "pxelinux.0";
next-server 192.168.1.101;
}

注意这里的filename是个相对路径,相对于 /tftpboot,所以filename如果指定成为"/tftpboot/pxelinux.0"会有问题

方便起见,我这里将DHCP在runlevel 3 4 5中都设为自动启动。或者也可以手动启动,运行

# service dhcpd start

3. 配置TFTP服务器

1) 安装TFTP

Redhat自带TFTP的RPM包,直接安装即可。要设成开机启动,需要改一下 /etc/xined.d/tftp 配置文件,将disable设成no

server_args = -s /tftpboot 是tftp服务器的根目录,我这里使用默认的 /tftpboot。之后的bootloader,bootloader的配置文件以及Gentoo内核都将放在这个目录下

2) 安装pxelinux.0及其配置

pxelinux.0是一个bootloader,类似于grub,通过它来load kernel,我们可以在它的配置文件中指定内核的位置和内核的启动参数

安装及配置都在 /tftpboot 目录下操作,配置好的 /tftpboot 目录结构如下:

kernel-2.6.30-gentoo-r8

pxelinux.0

pxelinux.cfg/default

kernel-2.6.30-gentoo-r8是编译好的Gentoo内核

pxelinux.0是syslinux的一个文件,可以从 syslinux-/core/pxelinux.0 拷过来,syslinux可以从这里获得

pxelinux.cfg/default是pxelinux的配置文件

Pxelinux会以IP地址的16进制表示来搜索配置文件,如果没找到去除最低一位继续找。如果所有匹配都失败,就使用default文件。

举例来说:

192.168.0.15 16进制表示是 C0A8000F.

它会搜索下面的配置文件,最先找到的会被使用。

pxelinux.cfg/C0A8000F

pxelinux.cfg/C0A8000

pxelinux.cfg/C0A800

pxelinux.cfg/C0A80

pxelinux.cfg/C0A8

pxelinux.cfg/C0A

pxelinux.cfg/C0

pxelinux.cfg/C

pxelinux.cfg/default

我的default文件内容如下:

label linux
kernel ../kernel-2.6.30-gentoo-r8
append root=/dev/nfs ip=dhcp nfsroot=192.168.1.101:/nfsroot rw

关于 pxelinux.cfg/default 的详细配置信息可以参考syslinux的文档。这里

第一行label后面必须是linux,跟其他的名字会找不到。用DEFAULT不受此限制

第二行指定了kernel的位置

第三行指定了一系列启动参数

root=/dev/nfs -- 指定root filesystem的挂载方式是NFS

ip=dhcp -- 指定kernel通过DHCP获取IP地址

nfsroot=192.168.1.101:/nfsroot -- 指定root filesystem位于服务器上的/nfsroot

rw -- 指定以可读写的方式挂载root filesystem

/nfsroot目录是NFS server export的目录,可以在server上配置NFS的时候指定

这 里还碰到了一点问题,我一开始在启动选项里没有加rw,启动的时候会报错readonly filesystem。kernel启动的时候默认是以ro的方式挂载root,但按理说执行INIT脚本的时候会再一次以rw方式mount的,不知道 为什么这一步没有执行,最后还是在kernel的启动选项里加了rw。

4. 配置NFS

1) 启动并配置NFS

RHEL5在系统服务里自带了NFS。为方便起见,我在run level 3 4 5里都添加了nfs为自启动

编辑/etc/exports文件

我的exports文件如下:

/nfsroot 192.168.1.0/24(rw,no_root_squash)

/nfsroot -- 指定要export的目录

192.168.1.0/24 -- 指定网络上可以mount该目录的IP range

(rw,no_root_squash) - rw指定可读写的权限,no_root_squash保证client上的root用户NFS mount后对该目录具有root权限(因为无盘客户端启动的时候是以root用户进行NFS mount,如果没有该选项,root用户NFS mount后会被映射成nobody用户)

这里还需要注意的是,在192.168.1.0/24和(rw,no_root_squash)之间不能有空格。这个也费了我很大功夫troubleshoot,一开始mount后怎么都是只读,后来发现原来这中间不可以有空格。

2) 拷贝Gentoo的根目录到RHEL5上

配好NFS后就可以把Gentoo的文件系统tar+scp到服务器RHEL5上的/nfsroot了

这里有两点要注意的:

i) /dev/console必须存在,不然会出现错误"unable to open initial console",可以通过下面的命令创建/dev/console

# mknod /nfsroot/dev/console c 5 1

ii) /proc目录必须存在

3) 修改无盘客户端的/etc/fstab文件

我的文件内容如下所示:

192.168.1.101:/nfsroot/  /  nfs  noatime,rw 0 1
none   /proc  proc  defaults 0 0

4) 去掉旧网卡信息

由于我的无盘客户端和源Gentoo系统是不同的机器,所以要将源Gentoo系统的旧网卡信息删除

修改文件192.168.1.101:/nfsroot/etc/udev/rules.d/70-persistent-net.rules,删除和旧的MAC地址有关的信息。

5) 配置无盘客户端的网络

修改文件192.168.1.101:/nfsroot/etc/conf.d/net,添加

config_eth0=( "noop" )

这是告诉系统直接用kernel启动时拿到的IP地址。如果这里配的是DHCP或是静态的地址,启动的时候会停在Starting eth0

5. PXE启动Gento

好了,令人兴奋的时刻到了!PXE启动无盘客户机,不久后出现提示login,大功告成!

PXE配置手记(Linux)的更多相关文章

  1. PXE批量部署linux操作系统

    前言 在实际生产环境中,有时候我们会碰到为几十上百甚至上千台服务器安装Linux操作系统的需求,如果我们还是常规的去使用移动介质逐台安装,显然是一件低效又令人抓狂的事情,那要安装到何年何月啊?这对于我 ...

  2. FastDFS、nginx配置手记

    第一部分   FastDFS介绍 1.FastDFS是什么 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能 ...

  3. Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016

    Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Att ...

  4. 手动配置Ubuntu Linux系列3-缺省网关和主机名

    上一篇讲到[原创]手动配置Ubuntu Linux的DHCP客户端,这里再说一下配置静态IP地址的方法.   仍然是编辑 interfaces文件.   $ sudo vi /etc/network/ ...

  5. Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)

    Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)   关于LAMP的各种知识,还请大家自行百度谷歌,在这里就不详细的介绍了,今天主要是介绍一下在Centos下安装,搭建一 ...

  6. 配置VirtualBox Linux系统与Windows共享文件

    手动方式配置VirtualBox Linux系统与Windows共享文件 首先,要安装VirtualBox自带的扩展工具,这个ISO可以在虚拟主机安装目录下找到. 将这个文件Copy到你的Linux主 ...

  7. CentOS-6.6下Tomcat-7.0安装与配置(Linux)

    CentOS-6.6下Tomcat-7.0安装与配置(Linux) 一.认识tomcat Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目, ...

  8. CentOS 6.6下JDK1.7安装与配置(Linux)经典入门详解案例

    最近用的linux较多,在网站找了一些关于linux环境下jdk安装的教程,过程是有的但是好多细节都没有表现出来,所以我花了点时间总结了一下,希望对大家都有帮助... CentOS下JDK1.7安装与 ...

  9. 高度可配置的 Linux 内存守护程序 Nohang!

    导读 Nohang 是一个 Linux 守护程序,也是一个高度可配置的 OOM(内存溢出)阻止工具,适用于 Linux 系统,能够有效地防止内存不足的情况. 部分功能特性 具有良好注释的配置文件,配置 ...

随机推荐

  1. Android图片的合成示例

    package com.example.demo; import android.os.Bundle; import android.app.Activity; import android.grap ...

  2. FastJson-fastjson的简单使用(alibaba)

    原文章:http://blog.csdn.net/glarystar/article/details/6654494 原作者:张星的博客 maven配置: <dependency> < ...

  3. C语言结构体和指针

    指针也可以指向一个结构体,定义的形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: struct stu{ char *name; //姓名 int num; //学号 ...

  4. Windows下POSIX线程编程(pThread)环境搭建

    系统: Windows 编辑器:codeblocks13.12 1. 简介: Windows有一个叫 POSIX Threads for Win32 的开源项目给出了一个功能比较完善的Windows下 ...

  5. java的两种冒泡算法

    所谓的冒泡算法,就是给数组进行排序,可以根据以小到大的顺序,也可以根据以小到大的顺序,在数组的封装类java.util.Arrays通过sort方法进行按升序的排序.那不用类的话怎么进行呢? 思路一: ...

  6. IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE

    本文转载至 http://blog.csdn.net/u014011807/article/details/40187737 在本卷你可以学到什么? 采用四种方法设计应用于各种场合的音频播放器: 基于 ...

  7. 【IE兼容问题】记一次Manifest因为jquery版本不同导致的兼容问题解决方案X-UA-Compatible

    最近在调试一个jquery插件Manifest 测试过程中发现IE一直不能完全展示这个插件,只显示了一个textbox文本框 IE下的bug的效果图 其他浏览器正常的效果图 跟踪原因,IE下jquer ...

  8. Web编辑器的使用

    1.复制web编辑器到你的项目中的表现层(UI) 2.添加引用:FredCK.FCKeditorV2.dll到你的项目中来 3.页面中加引用 <%@ Register TagPrefix=&qu ...

  9. 【分享】Linux(Ubuntu)下如何自己编译JDK

    最近在看<深入理解 Java 虚拟机>这本书.里面提到了如何手动编译JDK,于是就试了试. 在编译的过程中,遇到了一些问题.上网一搜,发现了一篇很好的文章,跟大家分享一下:ubuntu 1 ...

  10. C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等

    C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...