Difference between revisions of "PXE"

From ArchWiki
Jump to: navigation, search
(NFS: ic template)
(Post-boot: more pkg template? I think so)
Line 175: Line 175:
 
=== Post-boot ===
 
=== Post-boot ===
  
Unless you want all traffic to be routed through your PXE server (which won't work anyway unless you [[Simple Stateful Firewall|set it up properly]]), you'll want to kill dnsmasq and get a new lease on the install target, as appropriate for your network layout.
+
Unless you want all traffic to be routed through your PXE server (which won't work anyway unless you [[Simple Stateful Firewall|set it up properly]]), you'll want to kill {{pkg|dnsmasq}} and get a new lease on the install target, as appropriate for your network layout.
  
 
  # systemctl stop dnsmasq.service
 
  # systemctl stop dnsmasq.service
  
For sysvinit users:
+
For {{pkg|sysvinit}} users:
  
 
  # rc.d stop dnsmasq
 
  # rc.d stop dnsmasq
  
You can also kill darkhttpd; the target has already downloaded the root filesystem, so it's no longer needed. While you're at it, you can also unmount the installation image:
+
You can also kill {{pkg|darkhttpd}}; the target has already downloaded the root filesystem, so it's no longer needed. While you're at it, you can also unmount the installation image:
  
 
  # umount /mnt/archiso
 
  # umount /mnt/archiso

Revision as of 07:09, 1 October 2012

Summary help replacing me
Detailed guide to booting official installation media via PXE.
Related
Diskless network boot NFS root
Diskless network boot NBD root

The Preboot eXecution Environment allows you to boot the installation media using a network interface (with an appropriate option-rom that supports PXE on the target), independent of any storage devices.

Preparation

Archiso makes it fairly trivial to use the official install media directly to set up PXE booting and, unlike earlier methods (archboot), does not require any modification and can be used as-is.

Download the latest official install media from your favorite mirror.

$ wget http://hive.ist.unomaha.edu/archlinux/iso/latest/archlinux-2012.09.07-dual.iso
--2012-09-21 22:06:37--  http://hive.ist.unomaha.edu/archlinux/iso/latest/archlinux-2012.09.07-dual.iso
Resolving hive.ist.unomaha.edu... 2620:d5:0:22bb::dead:beef, 137.48.187.208
Connecting to hive.ist.unomaha.edu|2620:d5:0:22bb::dead:beef|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 411041792 (392M) [application/x-iso9660-image]
Saving to: ‘archlinux-2012.09.07-dual.iso’

100%[====================================================================================>] 411,041,792  109MB/s   in 3.6s   

2012-09-21 22:06:41 (109 MB/s) - ‘archlinux-2012.09.07-dual.iso’ saved [411041792/411041792]

Next mount the image:

# mkdir -p /mnt/archiso
# mount -o loop,ro archlinux-2012.09.07-dual.iso /mnt/archiso

Server setup

Network

Bring up your wired NIC, and assign it an address appropriately.

# ip l s eth0 up
# ip a a 192.168.0.1/24 dev eth0

DHCP + TFTP

You'll need both a DHCP and TFTP server to configure networking on the install target and to facilitate the transfer of files between the PXE server and client; dnsmasq does both, and is extremely easy to set up.

Install dnsmasq:

# pacman -S dnsmasq
resolving dependencies...
looking for inter-conflicts...

Targets (1): dnsmasq-2.63-1

Total Download Size:    0.14 MiB
Total Installed Size:   0.36 MiB

Proceed with installation? [Y/n] 
:: Retrieving packages from extra...
 dnsmasq-2.63-1-x86_64    141.6 KiB   108M/s 00:00 [###############] 100%
(1/1) checking package integrity                   [###############] 100%
(1/1) loading package files                        [###############] 100%
(1/1) checking for file conflicts                  [###############] 100%
(1/1) checking available disk space                [###############] 100%
(1/1) installing dnsmasq                           [###############] 100%

Configure dnsmasq:

# vim /etc/dnsmasq.conf
port=0
interface=eth0
bind-interfaces
dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-boot=/arch/boot/syslinux/pxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
enable-tftp
tftp-root=/mnt/archiso

Start dnsmasq:

# systemctl start dnsmasq.service

For those still using sysvinit:

# rc.d start dnsmasq

HTTP

Due recent changes in archiso, it is now possible to boot from HTTP (archiso_pxe_http initcpio hook) or NFS (archiso_pxe_nfs initcpio hook); among all alternatives, darkhttpd is by far the most trivial to setup (and the lightest-weight).

First, install darkhttpd:

# pacman -S darkhttpd
resolving dependencies...
looking for inter-conflicts...

Targets (1): darkhttpd-1.8-2

Total Download Size:    0.01 MiB
Total Installed Size:   0.04 MiB
Net Upgrade Size:       0.00 MiB

Proceed with installation? [Y/n] 
:: Retrieving packages from community...
 darkhttpd-1.8-2-x86_64    14.8 KiB  82.4M/s 00:00 [###############] 100%
(1/1) checking package integrity                   [###############] 100%
(1/1) loading package files                        [###############] 100%
(1/1) checking for file conflicts                  [###############] 100%
(1/1) checking available disk space                [###############] 100%
(1/1) installing darkhttpd                         [###############] 100%

Then start darkhttpd using our /mnt/archiso as the document root:

# darkhttpd /mnt/archiso
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: http://0.0.0.0:80/

Installation

For this portion you'll need to figure out how to tell the client to attempt a PXE boot; in the corner of the screen along with the normal post messages, usually there will be some hint on which key to press to try PXE booting first. On an IBM x3650 F12 brings up a boot menu, the first option of which is Network; on a Dell PE 1950/2950 pressing F12 initiates PXE booting directly.

Boot

Looking at /var/log/messages.log on the PXE server will provide some additional insight to what exactly is going on during the early stages of the PXE boot process:

# grep dnsmasq /var/log/messages.log
Sep 22 15:59:19 helios dnsmasq-dhcp[2544]: DHCPDISCOVER(eth1) 00:1a:64:6a:a2:4d 
Sep 22 15:59:19 helios dnsmasq-dhcp[2544]: DHCPOFFER(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
Sep 22 15:59:23 helios dnsmasq-dhcp[2544]: DHCPREQUEST(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
Sep 22 15:59:23 helios dnsmasq-dhcp[2544]: DHCPACK(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/pxelinux.0 to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/whichsys.c32 to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_choose.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/ifcpu64.c32 to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_both_inc.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_head.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe32.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe64.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_tail.cfg to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/vesamenu.c32 to 192.168.0.110
Sep 22 15:59:23 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110

After you load pxelinux.0 and archiso.cfg via TFTP, you'll (hopefully) be presented with a syslinux boot menu with several options, two of which are of potential usefulness to us.

Select either

Boot Arch Linux (x86_64) (HTTP)

or

Boot Arch Linux (i686) (HTTP)

depending on your CPU architecture.

Next the kernel and initramfs (appropriate for the architecture you selected) will be transferred, again via TFTP:

Sep 22 15:59:30 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/vmlinuz to 192.168.0.110
Sep 22 15:59:32 helios dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/archiso.img to 192.168.0.110

If all goes well, you should then see activity on darkhttpd coming from the PXE-target; at this point the kernel would be loaded on the PXE-target, and in init:

1348347586 192.168.0.110 "GET /arch/aitab" 200 678 "" "curl/7.27.0"
1348347587 192.168.0.110 "GET /arch/x86_64/root-image.fs.sfs" 200 107860206 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/x86_64/usr-lib-modules.fs.sfs" 200 36819181 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"

After the root filesystem is downloaded via HTTP, you'll eventually end up at a root zsh prompt with that fancy grml config.

Post-boot

Unless you want all traffic to be routed through your PXE server (which won't work anyway unless you set it up properly), you'll want to kill dnsmasq and get a new lease on the install target, as appropriate for your network layout.

# systemctl stop dnsmasq.service

For sysvinit users:

# rc.d stop dnsmasq

You can also kill darkhttpd; the target has already downloaded the root filesystem, so it's no longer needed. While you're at it, you can also unmount the installation image:

# umount /mnt/archiso

At this point you can follow the official installation guide.

Alternate Methods

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: verify (Discuss in Talk:PXE#)

As implied in the syslinux menu, there are several other alternatives:

NFS

You will need to setup a NFS server with the root export at the root of your mounted installation media--that would be /mnt/archiso if you followed the earlier sections of this guide.

NBD

Install nbd and configure it:

# vim /etc/nbd-server/config
[generic]
[archiso]
    readonly = true
    exportname = /dev/disk/by-label/ARCH_201208

See Also