imported>ThorstenStaerk |
imported>ThorstenStaerk |
Line 1: |
Line 1: |
− | '''PXE''' stands for '''P'''reboot E'''x'''ecution '''E'''nvironment. It is used to boot a computer using booting information from over the network.
| + | #REDIRECT [[Usb storage]] |
− | | |
− | = Overview =
| |
− | The typical PXE boot looks like this:
| |
− | # Computer ''A'' starts. Its [http://en.wikipedia.org/wiki/BIOS BIOS] is set to do a PXE boot, so booting from the [[network]]. | |
− | # Computer ''A'' acquires an IP address from [[dhcp]] server ''B''.
| |
− | # Computer ''A'' downloads its booting files ([[initrd]] and kernel) via [[tftp]] from ''B''.
| |
− | # Computer ''A'' executes the kernel just as if it had from its local [[hard disk]].
| |
− | | |
− | = How to start =
| |
− | In this example we use SUSE Linux 12.1.
| |
− | | |
− | == DHCP ==
| |
− | To allow your computers to boot from the network, they first need an IP address. So, [[set up a dhcp-server]]. Make sure /etc/dhcpd.conf contains the following lines:
| |
− | allow booting;
| |
− | allow bootp;
| |
− | authoritative; # I am the one and only here
| |
− | Make sure your "subnet" section contains the following lines:
| |
− | next-server ''192.168.0.5'';
| |
− | filename "pxelinux.0";
| |
− | Make sure you have restarted your dhcpd:
| |
− | /etc/init.d/dhcpd restart
| |
− | | |
− | == TFTP ==
| |
− | After your computers have received their IP address, they start asking for their booting file from the TFTP-server, in this case ''192.168.0.5''. So, make sure they can get it.
| |
− | * [[Install]] tftp and syslinux:
| |
− | # yast -i tftp syslinux
| |
− | * copy syslinux' pxelinux.0 to /srv/tftpboot/:
| |
− | # rpm -ql syslinux | grep pxelinux.0
| |
− | /usr/share/syslinux/gpxelinux.0
| |
− | /usr/share/syslinux/pxelinux.0
| |
− | # cp /usr/share/syslinux/pxelinux.0 /srv/tftpboot/
| |
− | * Activate the tftp server. To do this, change /etc/xinetd.d/tftp. Replace
| |
− | disable = yes
| |
− | with
| |
− | disable = no
| |
− | Then restart xinetd which hosts tftpd:
| |
− | /etc/init.d/xinetd restart
| |
− | * Test it:
| |
− | tftp ''192.168.0.5'' -c get pxelinux.0
| |
− | Test your configuration now by booting a connected computer from PXE. You should get an error message saying that the configuration file pxelinux.cfg/default has not been found.
| |
− | | |
− | == pxelinux.cfg/default ==
| |
− | Create a /srv/tftpboot/pxelinux.cfg/default like this:
| |
− | default linux
| |
− | timeout 0
| |
− | prompt 1
| |
− | display display.msg
| |
− |
| |
− | label linux
| |
− | kernel vmlinuz
| |
− | append initrd=initrd
| |
− | | |
− | * Now you must supply kernel (vmlinuz) and initrd into the tftp folder:
| |
− | cp /boot/vmlinuz /srv/tftpboot
| |
− | cp /boot/initrd /srv/initrd
| |
− | | |
− | == Change initial ramdisk ==
| |
− | If you now want to change the initrd to actually do something, you can do it like this:
| |
− | cd /srv/tftpboot
| |
− | mkdir tmp
| |
− | cd tmp
| |
− | cp ../initrd ./initrd.gz
| |
− | gunzip initrd.gz
| |
− | mkdir tmp2
| |
− | cd tmp2
| |
− | [[cpio]] -id < ../initrd
| |
− | Do the needed changes now in this folder. Then pack the initrd again:
| |
− | [[find]] . | cpio --create --format='newc' > ../newinitrd
| |
− | cd ..
| |
− | [[gzip]] newinitrd
| |
− | Your new [[initrd]] is now called newinitrd.gz.
| |
− | | |
− | == Basic setup ==
| |
− | The goal here is to be able to boot a Linux shell from PXE.
| |
− | | |
− | For this I took the initrd and kernel from the SUSE 12.1 install DVD and modified the initrd. I replaced /init on the initrd by /bin/bash. Then I copied busybox to /bin. Then I booted from PXE. Then I mounted /proc:
| |
− | mount -t proc proc /proc
| |
− | | |
− | = See also =
| |
− | * [http://en.wikipedia.org/wiki/Preboot_Execution_Environment Wikipedia on PXE]
| |
− | * http://www.digitalpeer.com/id/linuxnfs
| |
− | * http://www.jukie.net/bart/blog/nfsroot-on-debian
| |
− | | |
− | [[Category:Networking]]
| |
− | [[Category:Boot]]
| |
− | [[Category:Guides]]
| |