网络启动笔记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文件到硬盘上,这样我就不用拆硬盘下来……
有空也研究下网络克隆,这样装机什么的,也方便。
阅读(598) | 评论(0) | 转发(0) |