From f897ee2a5f2cd3cb2e2853aa5dc246d1b345ff38 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Thu, 9 Mar 2017 11:20:24 -0800 Subject: [PATCH] Continuing network boot documentation updates Removing untested network boot configurations. Breaking down large steps to be more granular. Ensuring greater language consistency. --- source/_static/images/pxe.png | Bin 24006 -> 20461 bytes source/_static/images/pxe.svg | 156 ------------- source/_static/images/pxe.vsdx | Bin 0 -> 27841 bytes source/network_boot.rst | 416 ++++++++++++++------------------- 4 files changed, 177 insertions(+), 395 deletions(-) delete mode 100644 source/_static/images/pxe.svg create mode 100644 source/_static/images/pxe.vsdx diff --git a/source/_static/images/pxe.png b/source/_static/images/pxe.png index 6f2eb8495bcaa682b1f63cdb07b4fc49d995979e..a4ad77a9c565633fb75467719bf17581702e8765 100644 GIT binary patch literal 20461 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�te-c`<*%mXDT?hdaU$AT(YXIZ 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Page-1 - - - - Rectangle.15 - Public Network - - - - - - - Public Network - - Rectangle.14 - Private Network - - - - - - - Private Network - - Rectangle.6 - Switch - - - - - - - - - - Switch - - Rectangle - PXE Server - - - - - - - - - - PXE Server - - Rectangle.13 - Switch - - - - - - - - - - Switch - - Sheet.16 - - Rectangle.2 - PXE Client - - - - - - - - - - PXE Client - - Rectangle.3 - PXE Client - - - - - - - - - - PXE Client - - - Dynamic connector - - - - Dynamic connector.18 - - - - Dynamic connector.19 - - - - Dynamic connector.21 - - - - diff --git a/source/_static/images/pxe.vsdx b/source/_static/images/pxe.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..7692dd58bedd729528a4e24ff84234f0432e0e02 GIT binary patch literal 27841 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 TB?GOofxdd6RX8c*zs~+2j-JyU literal 0 HcmV?d00001 diff --git a/source/network_boot.rst b/source/network_boot.rst index 2b4a4932..9bf8b75f 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -3,53 +3,58 @@ Network Booting ################ -Clear Linux* Project for Intel® Architecture is bootable from a pre-boot execution -environment (PXE) using UEFI. PXE is an industry standard for describing the -client-server interaction to network boot software using DHCP and TFTP protocols. -One use of this environment is to automatically install an operating system. +Clear Linux* Project for Intel® Architecture is bootable from a pre-boot +execution environment (PXE). PXE is an industry standard for describing the +client-server interaction to network boot software using DHCP and TFTP +protocols. One use of this environment is to automatically install an operating +system. -Using an extension of PXE known as iPXE adds support for additional protocols such -as HTTP, iSCIS, ATA over Ethernet (AoE), and Fiber Channel over Ethernet (FCoE). -iPXE can also be used to enable network booting computers that lack built-in PXE -support. This guide covers how to perform an iPXE boot using: UEFI, a private network, -and network address translation (NAT). Figure 1 illustrates the assumed network topology. +Using an extension of PXE known as `iPXE`_ adds support for additional protocols +such as HTTP, iSCIS, ATA over Ethernet (AoE), and Fiber Channel over Ethernet +(FCoE). iPXE can also be used to enable network booting computers that lack +built-in PXE support. -.. figure:: _static/images/pxe.png - :align: center - :alt: Figure 1: PXE network topology - - Figure 1: PXE network topology +This guide covers how to perform an iPXE boot using network address translation +(NAT). Preparations ============ -Before performing an iPXE boot, verify the following: +Before performing an iPXE boot, verify the following preparations have been +made: +* Your PXE server has an ethernet/LAN boot option * Your PXE server has at least two network adapters -* Your PXE server and PXE clients are connected to a switch -* Your PXE server is connected to a network -* If applicable, your PXE server has secure boot disabled +* Your PXE server is connected to a public network +* Your PXE server and PXE clients are connected to a switch on a private network +* Your PXE server has secure boot disabled .. note:: - A switch sets up a private network. Using a private network allows for greater control of which - traffic is exposed to PXE clients by isolating them on their own network. + Secure boot needs disabled because the UEFI binaries for booting the Clear + Linux* Project for Intel® Architecture are not signed. -.. note:: +Your computer and network setup should be the same as what is depicted in figure +1. - Secure boot needs disabled because the UEFI binaries for booting the Clear Linux* Project for - Intel® Architecture are not signed. +.. figure:: _static/images/pxe.png + :alt: Figure 1: NAT network topology + + Figure 1: NAT network topology Configuration ============= -The below steps have been automated during the installation of the `Ister Cloud Init Service`_ to quickly enable a bulk -provisioning setup. Before running the installation scripts, modify ``parameters.conf`` with your specific configurations. +The below steps have been automated during the installation of the `Ister Cloud +Init Service`_ to quickly enable a bulk provisioning setup. Before running the +installation scripts, modify ``parameters.conf`` with your specific +configurations. Step 1 ------ -Define variables that are used to parameterize the rest of the configuration of an iPXE boot. +Define variables that are used to parameterize the configuration of an iPXE +boot. .. code-block:: console @@ -64,23 +69,23 @@ Define variables that are used to parameterize the rest of the configuration of pxe_subnet_mask_ip=255.255.255.0 pxe_subnet_bitmask=24 - Step 2 ------ -Add the ``pxe-server`` bundle to your system. This has all of the software needed run a PXE -server. +Add the ``pxe-server`` bundle to your system. This has all of the software +needed run a PXE server. .. code-block:: console swupd bundle-add pxe-server - - Step 3 ------ -Download the latest network-bootable release of the Clear Linux* Project for Intel® Architecture and create an iPXE boot script. The iPXE boot script tells the PXE client which files to use for network booting the latest release. +Create an iPXE hosting directory, download the latest network-bootable release +of the Clear Linux* Project for Intel® Architecture, and extract the files. +Ensure that the initial ramdisk file is named ``initrd`` and the kernel file is +named ``linux``, which is a symbolic link to the actual kernel file. .. code-block:: console @@ -89,18 +94,29 @@ Download the latest network-bootable release of the Clear Linux* Project for Int curl -o /tmp/clear-pxe.tar.xz https://download.clearlinux.org/current/clear-$(curl https://download.clearlinux.org/latest)-pxe.tar.xz tar -xJf /tmp/clear-pxe.tar.xz -C $ipxe_root ln -sf $(ls $ipxe_root | grep 'org.clearlinux.*') $ipxe_root/linux + +Step 4 +------ + +Create an iPXE boot script. The iPXE boot script is used during an iPXE boot +to direct the PXE client to the files for network booting the latest +release. Use the same names you gave to the initial ramdisk and kernel files. + +.. code-block:: console + cat > $ipxe_root/ipxe_boot_script.txt << EOF #!ipxe kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug tsc=reliable no_timer_check noreplace-smp rw initrd=initrd initrd initrd boot - EOF + EOF -Step 4 +Step 5 ------- -The ``pxe-server`` bundle comes with a lightweight nginx web server. Create a configuration file for -the web server which will serve iPXE content to PXE clients. +The ``pxe-server`` bundle comes with a lightweight web server known as +``nginx``. Create a configuration file for ``nginx`` to serve the latest release +to PXE clients. .. code-block:: console @@ -116,24 +132,22 @@ the web server which will serve iPXE content to PXE clients. } EOF - -Step 5 +Step 6 ------- -Start the nginx web server and enable startup on boot +Start ``nginx`` and enable startup on boot. .. code-block:: console systemctl start nginx systemctl enable nginx - - -Step 6 +Step 7 ------ -Enable chainloading by placing a copy of iPXE firmware on a TFTP server. Chainloading allows -machines with both BIOS and UEFI implementations to boot using iPXE. +The ``pxe-server`` bundle comes with iPXE firmware images which allow computers +without an iPXE implementation to perform an iPXE boot. Create a TFTP hosting +directory and populate it with the iPXE firmware images. .. code-block:: console @@ -141,26 +155,44 @@ machines with both BIOS and UEFI implementations to boot using iPXE. mkdir -p $tftp_root ln -sf /usr/share/ipxe/ipxe-x86_64.efi $tftp_root/ipxe-x86_64.efi ln -sf /usr/share/ipxe/undionly.kpxe $tftp_root/undionly.kpxe + +Step 8 +------ + +The ``pxe-server`` bundle comes with a lightweight TFTP server known as +``dnsmasq``. Create a configuration file for ``dnsmasq`` to serve iPXE firmware +images to PXE clients over TFTP. + +.. code-block:: console + cat > /etc/dnsmasq.conf << EOF enable-tftp tftp-root=$tftp_root EOF +Step 9 +------ + +Enable ``dnsmasq`` to start automatically on boot. + +.. code-block:: console + systemctl enable dnsmasq .. note:: - ``dnsmasq`` is a lightweight implementation of a DNS server, a DHCP server, and a TFTP server. It - is only being enabled now to start automatically on boot and not started because it's DNS server - conflicts with the DNS stub listener offered by systemd-resolved. + At this point in the configuration process, ``dnsmasq`` is only + being enabled to start automatically on boot and not started because its DNS + server conflicts with the DNS stub listener offered by ``systemd-resolved``. -Step 7 +Step 10 ------- -Configure a DNS server for PXE clients on the private network. Set the DNS server to listen on a -dedicated IP address. PXE clients on the private network can then use this IP address for DNS resolution. Disable the -DNS stub listener included with systemd-resolved to avoid a conflict with the DNS server offered by -``dnsmasq``. +The ``pxe-server`` bundle comes with a lightweight DNS server known as +``dnsmasq``. Set ``dnsmasq`` to listen on a dedicated IP address. PXE clients +on the private network will then use this IP address for DNS resolution. +Disable the DNS stub listener included with ``systemd-resolved`` to avoid a +conflict with the DNS server offered by ``dnsmasq``. .. code-block:: console @@ -174,21 +206,34 @@ DNS stub listener included with systemd-resolved to avoid a conflict with the DN listen-address=$pxe_internal_ip EOF +.. note:: + + ``dnsmasq`` is a lightweight implementation of a DNS server, a DHCP server, + and a TFTP server. For the purposes of this guide, the DHCP server included + with ``dnsmasq`` is not being used. + +.. note:: + + Using DNS server provided by ``dnsmasq`` allows ``systemd-resolved`` to + dynamically update the list of DNS servers for the private network from the + public network. In effect, this creates a pass-through DNS server which + relies on DNS servers listed in ``/etc/resolv.conf``. + +Step 11 +------- + +Start ``dnsmasq`` and avoid conflicts with ``systemd-resolved``. + +.. code-block:: console + systemctl stop systemd-resolved systemctl restart dnsmasq systemctl start systemd-resolved -.. note:: - - Using the DNS server provided by ``dnsmasq`` so that the list of DNS servers identified by systemd-resolved - for the network connection can be dyanmically updated for the PXE clients on the private network. In effect, this creates a proxy DNS server. - -Step 8 +Step 12 ------ -Assign a static IP address to the network adapter for the private network. systemd-networkd will try to always -use DHCP for all network adapters, so this functionality nees disabled prior to assinging a static -IP address. +Assign a static IP address to the network adapter for the private network. .. code-block:: console @@ -213,12 +258,33 @@ IP address. systemctl restart systemd-networkd +.. note:: -Step 9 + By default, ``systemd-networkd`` uses DHCP for all network adapters. This + functionality needs disabled prior to assigning a static IP address. As a + consequence, this also disables DHCP functionality for the network adapter + connected to the public network. This network adapter needs to have this + functionality explicitly re-enabled. + +Step 13 ------- -Configure a DHCP server to dyanmically allocate IP addresses to PXE clients on the private network. -Create a file where the DHCP server can maintain the leased IP addresses. +The ``pxe-server`` bundle comes with a full implementation of a DHCP server +compliant to the specifications defined by the Internet Systems Consortium +(ISC), known as ``dhcpd``. Configure ``dhcpd`` to dynamically allocate IP +addresses to PXE clients on the private network. The following configuration +provides the following important functions: + +* Enables ``dhcpd`` to be iPXE-aware with `iPXE-specific options`_ +* Directs PXE clients without an iPXE implementation to the TFTP server for + acquiring architecture-specific iPXE firmware images to allow them to perform + an iPXE boot +* Is only active on the network adapter which has an IP address on the defined + subnet +* Directs PXE clients to the DNS server +* Directs PXE clients to the PXE server for routing via NAT +* Divides the private network into two pools of IP addresses, one for network + booting and another for usage after boot; each with their own lease times .. code-block:: console @@ -266,7 +332,7 @@ Create a file where the DHCP server can maintain the leased IP addresses. class "PXE-Chainload" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; - + next-server $pxe_internal_ip; if exists user-class and option user-class = "iPXE" { filename "http://$pxe_internal_ip/ipxe_boot_script.txt"; @@ -283,14 +349,14 @@ Create a file where the DHCP server can maintain the leased IP addresses. authoritative; option routers $pxe_internal_ip; option domain-name-servers $pxe_internal_ip; - + pool { allow members of "PXE-Chainload"; range $pxe_subnet.128 $pxe_subnet.253; default-lease-time 600; max-lease-time 3600; } - + pool { deny members of "PXE-Chainload"; range $pxe_subnet.2 $pxe_subnet.127; @@ -300,37 +366,38 @@ Create a file where the DHCP server can maintain the leased IP addresses. } EOF +.. note:: + + There are three providers of a DHCP server on the system at this point: + ``systemd-networkd``, ``dnsmasq``, and ``dhcpd``. ``dhcpd`` is used because it + is maintained by ISC and is more flexible for iPXE booting. + +Step 14 +------- + +Create a file where ``dhcpd`` can record the IP addresses that it hands out to +PXE clients. + +.. code-block:: console + mkdir -p /var/db touch /var/db/dhcpd.leases +Step 15 +------- + +Start ``dhcpd`` and enable startup on boot. + +.. code-block:: console + systemctl enable dhcp4 systemctl restart dhcp4 -This ensures that either iPXE image (``undionly.kpxe`` for BIOS or ``ipxe.efi`` -for EFI) is handed out only when the DHCP request comes from a legacy PXE client -or from a UEFI client, respectfully. Once iPXE loads, the DHCP server will direct it to -boot from options configured in your ``http://my.web.server/real_boot_script.txt`` -file. - -.. note:: - - There are three places in which a DHCP server can be used: systemd-networkd, dnsmasq, and dhcpd. - Using dhcpd because it's part of ISC and is more flexible for iPXE booting. - -.. note:: - - Include iPXE-specific options from http://www.ipxe.org/howto/dhcpd in your DHCPD - -.. note:: - - By defining only one subnet with the correct range, the DHCP server will be bound only to the interface - and service requests for the private network. - -Step 10 +Step 16 ------- -Configure NAT so that traffic from the private network can be routed externally. This effectively -turns the PXE server into a router. +Configure NAT so that traffic from the private network can be routed to the +public network. This effectively turns the PXE server into a router. .. code-block:: console @@ -341,160 +408,31 @@ turns the PXE server into a router. systemctl enable iptables-restore.service systemctl restart iptables-restore.service +.. note:: + + The firewall MASQUERADEs, or translates, packets to make them appear as if + they are coming from the PXE server. This hides the PXE clients from the + public network. + +Step 17 +------- + +Tell the Linux kernel to forward network packets on to different interfaces. +Otherwise, NAT will not work. + +.. code-block:: console + mkdir -p /etc/sysctl.d echo net.ipv4.ip_forward=1 > /etc/sysctl.d/80-nat-forwarding.conf echo 1 > /proc/sys/net/ipv4/ip_forward +Step 18 +------- -.. note:: - - The firewall MASQUERADEs, or translates packets to make them appear as if they are coming - from the PXE server. This hides the PXE clients from the network. - -.. note:: - - Tell the Linux kernel to forward network packets on to different interfaces. Otherwise - NAT will not work. - -PXE + GRUB -========== - -Another option for network booting Clear Linux* OS for Intel Architecture is to -use the GRUB bootloader to boot in UEFI mode. The bootloader will get its files -over TFTP; it does not require having another service to host the network boot -artifacts. The following sets up up a PXE using the GRUB bootloader environment -and Clear Linux OS for Intel Architecture, but the configuration options should -apply elsewhere. - -First, add the ``pxe-server`` bundle to your system with: - -.. code-block:: console - - # swupd bundle-add pxe-server +Power on the PXE client and watch it boot the latest release of the Clear Linux* +Project for Intel® Architecture. -DHCP configuration ------------------- - -Add the following content to your :file:`/etc/dhcpd.conf` file: - -.. code-block:: console - - allow booting; - allow bootp; - - # Set up a class so you can give out an IP only for devices is attempting network boot. - { - match if substring(option vendor-class-identifier, 0, ; - next-server 192.168.1.1; - grubx64. - } - - # private network, in case you are able to run your own network wide DHCP service. - # Works when the machine you are network booting has two network interfaces, - # one connected to the private PXE boot network and the other connected to an external - # network. - subnet 192.168.1.0 netmask 255.255.255.0 { - pool { - allow members - range 192.168.1.100 192.168.1.200; - } - } - - -Where ``192.168.1.1`` is set to the address your TFTP server is using, and ``grubx64.efi`` is set -to the name of your grub bootloader file. - -The subnet being used in this example is private; if the DHCPD service you use applies to your -entire network, modify the configuration as needed. Also, if multiple devices (including those -not using UEFI) are being supported by this DHCPD service, adding the following logic will allow -selection of the filename fetched from the client: - -.. code-block:: console - - if exists client-arch and option client-arch = 9 { - # client-arch = 9 (64-bit EFI) - filename "grubx64.efi"; - } elsif exists client-arch and option client-arch = 6 { - # client-arch = 6 (32-bit EFI) - filename "grubx32.efi"; - } else { - # client-arch = 0 (Standard PC BIOS) - filename "pxelinux.0"; - } - -Next, create an empty :file:`/var/db/dhcp.leases` file and start the dhcpd service with: - -.. code-block:: console - - # mkdir -p /var/db - # touch /var/db/dhcp.leases - # systemctl start dhcp4.service - - -GRUB configuration ------------------- - -Create the GRUB bootloader file (:file:`grubx64.efi`) with the following -command; it will create the file in your current directory. - - -.. code-block:: console - - # grub-mkimage -O x86_64-efi -o grubx64.efi all_video boot btrfs cat - chain configfile echo efifwsetup efinet ext2 fat font gfxmenu gfxterm - gzio halt hfsplus iso9660 jpeg linuxefi loadenv loopback lvm mdraid09 - mdraid1x minicmd multiboot multiboot2 normal part_apple part_msdos - part_gpt password_pbkdf2 png reboot search search_fs_uuid search_fs_file - search_label serial sleep syslinuxcfg test tftp usbserial_pl2303 - usbserial_ftdi xfs - - -Next, a GRUB configuration file (:file:`grub.cfg`) should contain the -following content: - -.. code-block:: console - - set pager=1 - - export menuentry_id_option - - function load_video { - if [ x$feature_all_video_module = xy ]; then - insmod all_video - else - insmod efi_gop - insmod efi_uga - insmod ieee1275_fb - insmod vbe - insmod vga - insmod video_bochs - insmod video_cirrus - fi - } - - terminal_output console - if [ x$feature_timeout_style = xy ] ; then - set timeout_style=menu - set timeout=5 - else - set timeout=5 - fi - - menuentry 'Clear Linux Installation' --class gnu-linux --class gnu --class os { - load_video - set gfxpayload=keep - insmod gzio - insmod part_gpt - insmod ext2 - linuxefi /linux - initrdefi /initrd - } - -Where the Linux kernel is named ``linux`` and the initrd ``initrd``. - - -.. _TFTP: http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf -.. _iPXE website: http://boot.ipxe.org/ .. _iPXE: http://ipxe.org/ -.. _Ister Cloud Init Service: https://github.com/gtkramer/ister-cloud-init-svc \ No newline at end of file +.. _Ister Cloud Init Service: https://github.com/gtkramer/ister-cloud-init-svc +.. _iPXE-specific options: http://www.ipxe.org/howto/dhcpd#ipxe-specific_options