Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167879
  • 博文数量: 36
  • 博客积分: 1466
  • 博客等级: 上尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-17 17:43
文章分类

全部博文(36)

分类: LINUX

2014-09-02 12:01:38

网络启动笔记linux版
关键字pxelinux,syslinux,openwrt,memdisk,无盘,启动


原理
    计算机开机bios自检后运行网卡的pxe程序,这段程序会通过网络中的dhcp服务器获得ip地址信息和bootloader文件名
    计算机分配到一个ip地址后就可以和其它计算机通信,根据获得的bootloader文件名从tftp服务器下载bootloader文件,并运行它。剩下的事情就是交给bootloader。bootloader或者会需要其它文件,至于它是怎么获得其它文件的,我不知道,只要道它能通过网络得到即可。等它将一切准备就绪,并下载linux内核到内存,将控制权交给linux后,linux是怎么管理文件的,这就是linux的事(通过nfs吧?还有windows无盘是怎么实现的,我就不清楚原理了)




必要条件
    从原理上可以看出,要为其它计算机提供网络启动服务,就必需一个dhcp服务器,一个tftp服务器。
    我用的是kubuntu 14.10,dhcp服务器软件是dhcpd,它的配置文件是/ect/dhcp/dhcpd.conf,内容如下:
default-lease-time 600;
max-lease-time 7200;


allow booting;




subnet 192.168.88.0 netmask 255.255.255.0 {
  range 192.168.88.3 192.168.88.253;
  option broadcast-address 192.168.88.255;
  option routers 192.168.88.254;             # our router
  option domain-name-servers 192.168.88.254; # our router, again
  next-server 192.168.88.107;
  filename "pxelinux.0"; # (this we will provide later)
}


其中最重要的是filename,它指定了bootloader文件名。




1\tftp服务器软件用的是tftpd-hpa,安装可以用如下命令
sudo apt-get install tftpd-hpa
2\建立tftpboot目录,作为服务器的目录
sudo mkdir ~/tftpboot
释放权限:(服务器目录,需要设置权限为777,chomd 777)
sudo chmod 777 ~/tftpboot
3.配置TFTP服务器
sudo gedit /etc/default/tftpd-hpa


TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/writer15/tftpboot"
TFTP_ADDRESS="[::]:69"
TFTP_OPTIONS="--secure"
其它最重要的就是TFTP_DIRECTORY,要把bootloader和它相关的文件放在这个目录里。


接下来是最重要的bootloader了,这部分资料相当少呀,只知道用的是pxelinux,它是syslinux的一部份。
从网络下载,并编译它。但是编译后,却不知怎么用,因为编译后的目录比较乱,也不知哪些文件有用,哪些没用……
查阅了网络的资料后,只能理出了个大概,因为网络上的资料都比较旧,新版的syslinux都模块化了……
但是经过不断的尝试,还是成功了。


我先卖个关子,容我去喝水回来继续/:D


syslinux编译后生成三个目录,bios,efi32,efi64,这三个目录结构上基本都一样。我需要的是bios目录下的文件,因为我的电脑还是从bios启动的(新出或者高端的主板好像现在是efi或者uefi的,好像配合操作系统,启动速度可以很快)。
将syslinux目录下几个文件复制到上面的~/tftpboot目录
bios/core/pxelinux.0
bios/com32/menu/menu.c32
bios/com32/menu/vesamenu.c32
bios/com32/elflink/ldlinux/ldlinux.c32
bios/com32/lib/libcom32.c32
bios/com32/libutil/libutil.c32
bios/memdisk/memdisk


这样一切就准备好了,剩下的只是配置pxelinux,这个不难,它的配置文件和grub差不多,相当容易,下面是我的测试配置文件
DEFAULT vesamenu.c32
MENU TITLE  HELLO-PXE
PROMPT 0
TIMEOUT 300


LABEL  Core-current.iso
    LINUX     memdisk
    INITRD    Core-current.iso
    APPEND    iso


LABEL  winpe
    LINUX     memdisk
    INITRD    winpe.iso
    APPEND    iso


LABEL  memtest86+-5.01.iso
    LINUX     memdisk
    INITRD    memtest86+-5.01.iso
    APPEND    iso




LABEL DOS98
    LINUX     memdisk
    INITRD    DOS98.IMG


LABEL plpbt.iso
    LINUX memdisk
    INITRD plpbt.iso
    APPEND iso


label openwrt
kernel openwrt-x86-generic-vmlinuz


label linux
kernel debian-installer/linux
append vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --




pxelinux相当强大,基本和grub相当,从img文件启动,从iso文件启动,从内核文件启动……


END;




后话:我研究网络启动的原因是因为想从网络启动一个系统,之后DD openwrt的ext4 img文件到硬盘上,这样我就不用拆硬盘下来……
有空也研究下网络克隆,这样装机什么的,也方便。

阅读(1075) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~