zoukankan      html  css  js  c++  java
  • PXE配置手记(Linux)

    服务器端: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,大功告成!
  • 相关阅读:
    socket 断线重连
    openwrt lan/wan口自动翻转
    单总线通讯协议
    关于Feign的Fallback处理
    Linux查找占用的端口,并杀死进程
    springCloud--admin监控使用
    解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi'错误的问题
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    Shell中[和[[的异同
    Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
  • 原文地址:https://www.cnblogs.com/cute/p/4936363.html
Copyright © 2011-2022 走看看