From a43d72d802c984501448b7deadb009bcdf87c4f6 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Wed, 8 Mar 2017 15:02:26 -0800 Subject: [PATCH 1/8] Focusing network booting article on NAT Some of the instructions provided code that was not clear or did not work on the latest version of Clear Linux. The documentation is being updated to close these gaps. --- source/_static/images/pxe.png | Bin 0 -> 24006 bytes source/_static/images/pxe.svg | 156 ++++++++ source/network_boot.rst | 649 ++++++++++++++-------------------- 3 files changed, 412 insertions(+), 393 deletions(-) create mode 100644 source/_static/images/pxe.png create mode 100644 source/_static/images/pxe.svg diff --git a/source/_static/images/pxe.png b/source/_static/images/pxe.png new file mode 100644 index 0000000000000000000000000000000000000000..6f2eb8495bcaa682b1f63cdb07b4fc49d995979e GIT binary patch literal 24006 zcmdVCXIN8f6E+$^KqDGOBPa@rC>jgckgbGfK@=%MsL~V#E7*Y$LNTDCqM%~KfGA)> zQ&4)hA<_gX3WTQ8drcrYvsM7nckl1~{LZ^y+M2#R7b0t3?p;V&I$J~hIB1kN4M(!|6RE^dJj)9f|&YhW-h{b!Ea3d83a zPJ7JGVK56;ApaN8J|NeP!B|>o@6<4Iw(6+i#L5j(eh!TixoQhUF3wfICM;(<^6KMH z-zHHZtNg)->WA`fzWz2~d9O+MUcd@@&s#Pt%+mIl$2=d{tMo3vTlPT1-sM(DeVUv) z&;6`s*ZPhaQBs)OA7i_zxv+crQ$AZ3)YRWU@@@% zR-DcgncSJOvS;IB)VOUf_|sHQUt$KgYr&ACM75dAoQ6&xU+E#j5>L*6^bzUH+X_{t zURr)j;iibt-S#&g%fBzU{%ODF^%FY8l_f_X96K!0XEyU(!t}(* z#Hd%-oeZ9rP@3IVZQtP1&DB#I(NiH!*ULGI6Fa(e$HI>`I5A<&L0z2K&5RFDt~O3> zJDw38?oT6Vh*Z!GFc_tfD?c;JIL`e7R?7};-_njI9>rmV^i1_k;(Ei#&aUttToP35p&D z^@V6mS>_>=2`yGv{9Z2T29_&=ELU;W6GD5WXt;*>A{ANC{7vizW%eQVdj-{9sn$n8S(4s5R`St}~KbX3Z=6DsOedh}JEAf3|Dge1>{z zm#2lyp_xR*B<^*=EHK=MoH?-54nM*+cY20mFelaLcDUnDsvC^H5Y06)5N`F1kIBh& zjdNY=e1upnlRU8UZPxs7HPQi^rnt^Xd=A@p4H$@28_!oJ`Qd2Kx#i@;DFfN0J>>3D z`G8B@0smT8(M9?RRYLJ49S)BG=uqUusz4eS_fEb1ufTf^JO zI7gP@VIdQF2KV`>$i^h@b8vJi{hjBm_YtRiF8sK8+X`EMFww6b0ff;wQ`$gSZlj*f zj4z2zBR0-LqbM<2GQGz`K2x$W&O)iHz zS_5NKORS^M^+Y^zB~o4NNnSE6_IdU_1!B4t)j7Ykq9Rjepv0o$mH6n}^j`xKCe((# z9wg_U#G2T2?jerc;`jS@=c3yFjB5Kcs%^6TGi)119UoxtC10L96e}&K=C&mgD>rk8 z3qB)>p_zAS%SrYcrcE2qh@Ci8V&Qm~WIM1qE>9%=DV7!?YC=2NPi=D`(Y{*5WICm} z)hAXfOf#XgwO?ZYiOJbEBbL(gy;b8@#tH!mmcJk-PGDC8hXnsZRBB&M#rH}puSk8I z!rf7Uam2r(zFk$671(BLNl{zKjN>xYC=VRQ3R`fe#Kx30HtwwL74aqe9o$T!!8Dk^wbF*95{c^#_sE+McV#9xV zcga`ss0;p#mrO^ZqB2|h&yd;vnnAF^J$^-~G|VAjLP@Je1H;>J!?!IQPa7|zC|5@2 zw7w4WuXa7LNoZHgj;x>T)DJYh#o6DtT5l($a8-=5i3{)FkhoIqWj%KOKyZUaK+ydd zN;ajtO(99{nQ_5zb95VxFrO~;iVzhYz&9VUyII*S3cJvd_>g1XsxkeudU(m|8JzXu zSS^~#txuUu9a80}$($st-`A~@O3XOdyk^^-_%G7R-FpoNlj7Vtr8Mf>D?Ra=#sdH~!4*W52fe_#*o>tGyiBL-++#_zTEB95t z9(4U8OQJpg8vYTYr}RjK%+vib|WyyoDO0HA6*pPvOgBr{69hc(fHg=asEa zvojjC*C`c?ayOlCMAMRD?J_0Rm#}|??0?f3gB?*jbZ1XS?qi?OVWzRaAkA@mEN^aD zU@z{8PTEX$3jSW$0B4l#D06C>$Eo_c0uh<>`D*DrvE(#P41y-&#w~N}my(P;UF&wU zOlSj{ckijmB-smAT-C%!3A`K13-G{+8VLuEp3`cxzVBvfeMKW&pEkRZXeOZ95YEdog!Nw&&lN3HJq)9uTax zzG>pbV${Mgil5beeyYB`Nw!%u1gHXmI~OytN+GMbppFFxgs~V4`DGN#RXXedgL3bu zQ36*4>t1sc@3cklyLCoj)$N-ZtkxCF1Gj|CK25o@Y%r@BvTc{vw5j<(w8&Z*aL#w> zX)BhcA*Lzv|CS8jTEKIY9!pC?GOY)gQ|(*%XHr{q5dm#BBB*tVfOYv#e`Rb=Q+to` z5Fsk!$8pQ$p{(;2LYn|E9Hj0RumLzyK)F&*R7~hKC=>d}p@-yf>+&^e$q+Lh? zH6h{S!R`pTJ=b3mMx&X69T{5xfg<^^3Pq7idl�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/network_boot.rst b/source/network_boot.rst index 053a1881..2b4a4932 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -1,285 +1,310 @@ .. _network_boot: -Network booting +Network Booting ################ -Network booting is an important feature that every data center should have; -it can be used, among other things, to install an operating system. To do this, -a :abbr:`Pre-boot eXecution Environment (PXE)` is defined upon a foundation of -industry-standard Internet protocols and services, namely TCP/IP, DHCP, and -`TFTP`_. +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 uses UEFI to boot, so your target -machine should be UEFI-capable. At present, the UEFI binary is not signed, so -be sure to disable secure boot. +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. +.. figure:: _static/images/pxe.png + :align: center + :alt: Figure 1: PXE network topology -Network Setup Options -===================== + Figure 1: PXE network topology -There are two basic network configurations: +Preparations +============ -* Place all of your nodes behind a :abbr:`Network Address Traversal (NAT)`, or -* Connect one node to your regular network and the other to a switch - connecting all your machines. This option requires at least two network - interfaces (dual NIC). +Before performing an iPXE boot, verify the following: -Note that lack of (or incorrectly-configured) NAT can expose your cluster to external -networks. NAT allows you to control the traffic that goes to the external network. +* 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 -A script for NAT setup can be found on this `gist`_. Be sure -to export the DOMAIN and DNS variables to be the domain name of your internal -network (example.com) and whatever DNS servers you want to use (8.8.8.8 and -8.8.4.4 DNS can work for some situations). +.. 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. -Network Topologies -================== +.. note:: -Dual NIC --------- + Secure boot needs disabled because the UEFI binaries for booting the Clear Linux* Project for + Intel® Architecture are not signed. -.. code-block:: console - - +----------+ - | External | - | Network | - +----------+-----------+----------------+----------------+ - | | | | - | | | | - +----------+ +----------+ +----------+ +----------+ - | Network | | PXE | | PXE | | PXE | - | Boot | | Boot | | Boot | | Boot | - | Server | | Client | | Client | | Client | - +----------+ +----------+ +----------+ +----------+ - | | | | - | | | | - +----------+-----------+----------------+----------------+ - | Internal | - | Network | - +----------+ - -NAT ---- - -.. code-block:: console - - +----------+ - | External | - | Network | - +----------+ - | - | - +----------+ +----------+ +----------+ +----------+ - | Network | | PXE | | PXE | | PXE | - | Boot | | Boot | | Boot | | Boot | - | Server | | Client | | Client | | Client | - +----------+ +----------+ +----------+ +----------+ - | | | | - | | | | - +----------+-----------+----------------+----------------+ - | Internal | - | Network | - +----------+ - -Dual-NIC setup information will be added in the future. This guide currently -only covers NAT setup. - - -PXE + iPXE -=========== - -To retrieve data through other protocols such as HTTP, iSCSI, :abbr:`ATA over Ethernet -(AoE)`, or :abbr:`Fiber Channel over Ethernet (FCoE)`, an open source network boot -firmware called **iPXE** was created. iPXE provides a full PXE implementation, -enhanced with additional features. It can be used to enable network booting from -computers that lack built-in PXE support. - -Clear Linux* Project for Intel Architecture can be configured to do network -booting via HTTP, with the help of iPXE. The following sets up an iPXE -environment using Clear Linux OS for Intel Architecture; these configuration -options can also be applied elsewhere. +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. Step 1 ------ -Add the ``pxe-server`` bundle to your system; this has all the bits to run a PXE -server. +Define variables that are used to parameterize the rest of the configuration of an iPXE boot. .. code-block:: console - # swupd bundle-add pxe-server + web_root=/var/www + ipxe_root=$web_root/ipxe + tftp_root=/srv/tftp + + external_iface=eno1 + internal_iface=eno2 + pxe_subnet=192.168.1 + pxe_internal_ip=$pxe_subnet.1 + pxe_subnet_mask_ip=255.255.255.0 + pxe_subnet_bitmask=24 + Step 2 ------ -Configure the ``tftpd`` service using ``dnsmasq``. To do this, populate the -:file:`/etc/dnsmasq.conf` file with the following entries: +Add the ``pxe-server`` bundle to your system. This has all of the software needed run a PXE +server. .. code-block:: console - # cat << EOF > /etc/dnsmasq.conf - enable-tftp - tftp-root=/srv/tftp/ - EOF + swupd bundle-add pxe-server + + Step 3 -------- +------ -Copy the :file:`/usr/share/ipxe/undionly.kpxe` (legacy) and -:file:`/usr/share/ipxe/ipxe-x86_64.efi` files, and place them in your TFTP -directory. - -You can also download the ``undionly.kpxe`` (legacy) and ``ipxe.efi`` (EFI) -files from the `iPXE website`_. +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. .. code-block:: console - # mkdir /srv/tftp/ - # cp /usr/share/ipxe/undionly.kpxe /srv/tftp/undionly.kpxe - # cp /usr/share/ipxe/ipxe-x86_64.efi /srv/tftp/ipxe.efi - -**Note**: If booting with a 32-bit UEFI, copy the -:file:`/usr/share/ipxe/ipxe-i386.efi` file instead. + rm -rf $ipxe_root + mkdir -p $ipxe_root + 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 + 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 Step 4 ------- -Start the dnsmasq service with: +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. .. code-block:: console - # systemctl start dnsmasq.service + mkdir -p /etc/nginx + cat > /etc/nginx/nginx.conf << EOF + server { + listen 80; + server_name localhost; + location / { + root $ipxe_root; + autoindex on; + } + } + EOF + Step 5 ------- -The kernel (linux), initramfs (initrd) and the iPXE scripts are transported via -HTTP. Download the Linux kernel and initrd files, and put them in the http -server root ``/var/www/pxe/``. +Start the nginx web server and enable startup on boot .. code-block:: console - # mkdir -p /var/www/pxe/ - # version=$(curl https://download.clearlinux.org/latest) - # curl -o /var/www/pxe/clear-${version}-pxe.tar.xz https://download.clearlinux.org/current/clear-${version}-pxe.tar.xz - # tar -xJf /var/www/pxe/clear-${version}-pxe.tar.xz -C /var/www/pxe/ && rm /var/www/pxe/clear-${version}-pxe.tar.xz - # unset version + systemctl start nginx + systemctl enable nginx + + Step 6 -------- +------ -Create an iPXE script named ``ipxe_boot_script.txt`` under the http server root -:file:`/var/www/pxe/`. +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. .. code-block:: console - # cat << EOF > /var/www/pxe/ipxe_boot_script.txt - #!ipxe - - kernel linux quiet rdinit=/usr/lib/systemd/systemd-bootchart initcall_debug tsc=reliable no_timer_check noreplace-smp rw initrd=initrd - initrd initrd - boot - EOF + rm -rf $tftp_root + 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 + cat > /etc/dnsmasq.conf << EOF + enable-tftp + tftp-root=$tftp_root + EOF -If your kernel is not already named ``linux``, either rename the kernel or create a symlink. + systemctl enable dnsmasq -.. code-block:: console +.. note:: - # kernel=$(find /var/www/pxe/ -name 'org.clearlinux.*') - # ln -s ${kernel} /var/www/pxe/linux - # unset kernel + ``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. Step 7 ------- -Create a configuration file for the http service (nginx in this example) to -serve the kernel, initramfs, and ipxe_boot_script in -:file:`/etc/nginx/nginx.conf` with the following: +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``. .. code-block:: console - # mkdir /etc/nginx/ - # cat << EOF > /etc/nginx/nginx.conf - server { - listen 80; - server_name hostname; - server_name_in_redirect off; - location / { - root /var/www/pxe; - autoindex on; - index index.html index.htm; - } - } - EOF + mkdir -p /etc/systemd + cat > /etc/systemd/resolved.conf << EOF + [Resolve] + DNSStubListener=no + EOF + + cat >> /etc/dnsmasq.conf << EOF + listen-address=$pxe_internal_ip + EOF + + 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 -------- +------ -Start the nginx service: +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. .. code-block:: console - # systemctl start nginx.service + mkdir -p /etc/systemd/network + + ln -sf /dev/null /etc/systemd/network/80-dhcp.network + + cat > /etc/systemd/network/80-external-dynamic.network << EOF + [Match] + Name=$external_iface + [Network] + DHCP=yes + EOF + + cat > /etc/systemd/network/80-internal-static.network << EOF + [Match] + Name=$internal_iface + [Network] + DHCP=no + Address=$pxe_internal_ip/$pxe_subnet_bitmask + EOF + + systemctl restart systemd-networkd + Step 9 ------- -To use PXE chainloading, set up ISC DHCPD to first assign ``undionly.kpxe`` to any -legacy PXE clients, and to then assign boot configuration to iPXE clients. Do this -by telling ISC DHCPD to make the assignments based on the DHCP user class. Here’s -one way to do this using the :file:`/etc/dhcpd.conf` file: +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. .. code-block:: console - allow booting; - allow bootp; - DHCPDARGS="interface"; - - # Set up a class to assign an "IP only" to devices attempting network boot. - class "pxeclients" { - match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; - next-server 192.168.1.1; - if exists user-class and option user-class = "iPXE" { - filename "http://my.web.server/ipxe_boot_script.txt"; - } elsif exists client-arch and option client-arch = 9 { - # client-arch = 9 (64-bit EFI) - filename "ipxe.efi"; - } else { - # client-arch = 0 (Standard PC BIOS) - filename "undionly.kpxe"; - } - } - - # Private subnet, in case you aren't 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.0.0 netmask 255.255.0.0 { - pool { - # These IPs will only be asigned to PXE clients - allow members of "pxeclients"; - range 192.168.1.150 192.168.1.254; - } - - # If you are not doing the NAT setup do not add the following to this - # section. These IPs will be assigned to the hosts when they boot and - # after they have been installed - range 192.168.1.2 192.168.1.149; - default-lease-time 600; - max-lease-time 7200; - option subnet-mask 255.255.0.0; - option broadcast-address 192.168.255.255; - option routers 192.168.1.1; - # If your external network runs its own DNS servers then replace the - # following with those - option domain-name-servers 8.8.8.8, 8.8.4.4; - # You can leave this change this or remove it. It changes the FQDNs - # of your hosts. So host bob can be accessed (from this machine) at - # bob.example.com - option domain-name "example.com"; - } + cat > /etc/dhcpd.conf << EOF + option space ipxe; + option ipxe-encap-opts code 175 = encapsulate ipxe; + option ipxe.priority code 1 = signed integer 8; + option ipxe.keep-san code 8 = unsigned integer 8; + option ipxe.skip-san-boot code 9 = unsigned integer 8; + option ipxe.syslogs code 85 = string; + option ipxe.cert code 91 = string; + option ipxe.privkey code 92 = string; + option ipxe.crosscert code 93 = string; + option ipxe.no-pxedhcp code 176 = unsigned integer 8; + option ipxe.bus-id code 177 = string; + option ipxe.bios-drive code 189 = unsigned integer 8; + option ipxe.username code 190 = string; + option ipxe.password code 191 = string; + option ipxe.reverse-username code 192 = string; + option ipxe.reverse-password code 193 = string; + option ipxe.version code 235 = string; + option iscsi-initiator-iqn code 203 = string; + option ipxe.pxeext code 16 = unsigned integer 8; + option ipxe.iscsi code 17 = unsigned integer 8; + option ipxe.aoe code 18 = unsigned integer 8; + option ipxe.http code 19 = unsigned integer 8; + option ipxe.https code 20 = unsigned integer 8; + option ipxe.tftp code 21 = unsigned integer 8; + option ipxe.ftp code 22 = unsigned integer 8; + option ipxe.dns code 23 = unsigned integer 8; + option ipxe.bzimage code 24 = unsigned integer 8; + option ipxe.multiboot code 25 = unsigned integer 8; + option ipxe.slam code 26 = unsigned integer 8; + option ipxe.srp code 27 = unsigned integer 8; + option ipxe.nbi code 32 = unsigned integer 8; + option ipxe.pxe code 33 = unsigned integer 8; + option ipxe.elf code 34 = unsigned integer 8; + option ipxe.comboot code 35 = unsigned integer 8; + option ipxe.efi code 36 = unsigned integer 8; + option ipxe.fcoe code 37 = unsigned integer 8; + option ipxe.vlan code 38 = unsigned integer 8; + option ipxe.menu code 39 = unsigned integer 8; + option ipxe.sdi code 40 = unsigned integer 8; + option ipxe.nfs code 41 = unsigned integer 8; + + 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"; + } + elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007" or substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008" or substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009" { + filename "ipxe-x86_64.efi"; + } + elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000" { + filename "undionly.kpxe"; + } + } + + subnet $pxe_subnet.0 netmask $pxe_subnet_mask_ip { + 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; + default-lease-time 3600; + max-lease-time 21600; + } + } + EOF + + mkdir -p /var/db + touch /var/db/dhcpd.leases + + 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 @@ -287,185 +312,49 @@ or from a UEFI client, respectfully. Once iPXE loads, the DHCP server will direc boot from options configured in your ``http://my.web.server/real_boot_script.txt`` file. -Note. +.. note:: -``192.168.1.1`` is set to the address your TFTP server is using. + 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. -``my.web.server`` is set to the address your web server is using. +.. note:: -``DHCPDARGS`` is set to the interface you are using. + Include iPXE-specific options from http://www.ipxe.org/howto/dhcpd in your DHCPD -If you are doing a NAT setup then you need to set ``interface`` to the interface -connected to the internal network. +.. 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 ------- -There are several DHCP options specific to `iPXE`_ which are -not recognized by the standard ISC DHCPD installation. To add suport for these -options, add the following to the top of your :file:`/etc/dhcpd.conf`: +Configure NAT so that traffic from the private network can be routed externally. This effectively +turns the PXE server into a router. .. code-block:: console - ################################################### - # iPXE-specific options # - # Source: http://www.ipxe.org/howto/dhcpd # - ################################################### - option space ipxe; - option client-arch code 93 = unsigned integer 16; - option ipxe-encap-opts code 175 = encapsulate ipxe; - option ipxe.priority code 1 = signed integer 8; - option ipxe.keep-san code 8 = unsigned integer 8; - option ipxe.skip-san-boot code 9 = unsigned integer 8; - option ipxe.syslogs code 85 = string; - option ipxe.cert code 91 = string; - option ipxe.privkey code 92 = string; - option ipxe.crosscert code 93 = string; - option ipxe.no-pxedhcp code 176 = unsigned integer 8; - option ipxe.bus-id code 177 = string; - option ipxe.bios-drive code 189 = unsigned integer 8; - option ipxe.username code 190 = string; - option ipxe.password code 191 = string; - option ipxe.reverse-username code 192 = string; - option ipxe.reverse-password code 193 = string; - option ipxe.version code 235 = string; - option iscsi-initiator-iqn code 203 = string; - # Feature indicators - option ipxe.pxeext code 16 = unsigned integer 8; - option ipxe.iscsi code 17 = unsigned integer 8; - option ipxe.aoe code 18 = unsigned integer 8; - option ipxe.http code 19 = unsigned integer 8; - option ipxe.https code 20 = unsigned integer 8; - option ipxe.tftp code 21 = unsigned integer 8; - option ipxe.ftp code 22 = unsigned integer 8; - option ipxe.dns code 23 = unsigned integer 8; - option ipxe.bzimage code 24 = unsigned integer 8; - option ipxe.multiboot code 25 = unsigned integer 8; - option ipxe.slam code 26 = unsigned integer 8; - option ipxe.srp code 27 = unsigned integer 8; - option ipxe.nbi code 32 = unsigned integer 8; - option ipxe.pxe code 33 = unsigned integer 8; - option ipxe.elf code 34 = unsigned integer 8; - option ipxe.comboot code 35 = unsigned integer 8; - option ipxe.efi code 36 = unsigned integer 8; - option ipxe.fcoe code 37 = unsigned integer 8; - option ipxe.vlan code 38 = unsigned integer 8; - option ipxe.menu code 39 = unsigned integer 8; - option ipxe.sdi code 40 = unsigned integer 8; - option ipxe.nfs code 41 = unsigned integer 8; + iptables -t nat -F POSTROUTING + iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE + systemctl enable iptables-save.service + systemctl restart iptables-save.service + systemctl enable iptables-restore.service + systemctl restart iptables-restore.service -Step 11 -------- + 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 -Create an empty :file:`/var/db/dhcpd.leases` file. -.. code-block:: console +.. note:: - # mkdir /var/db/ - # touch /var/db/dhcpd.leases + 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. -Step 12 -------- - -If you are doing the NAT setup skip this we will do it at the end. - -Start the dhcp service: - -.. code-block:: console - - # systemctl start dhcp4.service - -Step 13 -------- - -From here on out we are doing NAT specific steps. Set your external and -internal network interface names to variables for convenience. - -.. code-block:: console - - # export external_iface=eno0 - # export internal_iface=eno1 - -Disable auto-starting dhcp for all interfaces - -.. code-block:: console - - # mkdir -p /etc/systemd/network/ - # cd /etc/systemd/network/ - # ln -s /dev/null 80-dhcp.network - -Set your external and internal network interfaces to behave accordingly. You -may need to change the external.network if the external network is not going to -assign this machine an IP via dhcp. The internal network address corresponds to -the settings in dhcpd.conf - -.. code-block:: console - - # cat << EOF > 80-external-dynamic.network - [Match] - Name=$external_iface - [Network] - DHCP=yes - EOF - # cat << EOF > 80-internal-static.network - [Match] - Name=$internal_iface - [Network] - Address=192.168.1.1/16 - EOF - -Step 14 -------- - -Configure iptables to forward all traffic coming from inside the NAT to the -external network. Without this swupd will not be able to connect to the -internet. - -.. code-block:: console - - # cat << EOF > ~/natrules - *nat - :PREROUTING ACCEPT [5077:516379] - :INPUT ACCEPT [5054:514369] - :OUTPUT ACCEPT [147:7526] - :POSTROUTING ACCEPT [114:5508] - :PROXY - [0:0] - -A POSTROUTING -o $external_iface -j MASQUERADE - COMMIT - *filter - :INPUT ACCEPT [338542:30287508] - :FORWARD ACCEPT [168279:154877988] - :OUTPUT ACCEPT [49875:536021461] - -A FORWARD -i $external_iface -o $internal_iface -m state --state RELATED,ESTABLISHED -j ACCEPT - -A FORWARD -i $internal_iface -o $external_iface -j ACCEPT - -A FORWARD -j REJECT --reject-with icmp-host-prohibited - COMMIT - EOF - # iptables-restore ~/natrules - # for unitfile in $(cd /usr/lib/systemd/system/; ls ip*) - do - systemctl enable ${unitfile} - systemctl start ${unitfile} - done - -Tell the kernel to forward packets. Without this the above rules do nothing. - -.. code-block:: console - - # echo 1 > /proc/sys/net/ipv4/ip_forward - # echo net.ipv4.ip_forward=1 > /etc/sysctl.conf - -Step 15 -------- - -Restart all your networking. If you did something wrong then you may loose -connection if you are working over ssh. - -.. code-block:: console - - # systemctl restart systemd-networkd - # systemctl restart dhcp4.service +.. note:: + Tell the Linux kernel to forward network packets on to different interfaces. Otherwise + NAT will not work. PXE + GRUB ========== @@ -501,7 +390,7 @@ Add the following content to your :file:`/etc/dhcpd.conf` file: grubx64. } - # Private subnet, in case you are able to run your own network wide DHCP service. + # 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. @@ -605,33 +494,7 @@ following content: Where the Linux kernel is named ``linux`` and the initrd ``initrd``. -TFTP configuration ------------------- - -Clear Linux OS for Intel Archiecture uses ``dnsmasq`` to provide the tftpd -service. It requires the following entries exist in :file:`/etc/dnsmasq.conf`: - -.. code-block:: console - - enable-tftp - tftp-root=/srv/tftp/ - -The Linux kernel and initrd files can be downloaded from - https://download.clearlinux.org/current/ (with a name like - ``clear-$version-pxe.tar.xz``) as a compressed tar file containing two - clearly-labeled files that should be moved to the tftp root (``/srv/tftp/``, - per the tftp server configuration), as ``linux`` and ``initrd`` respectively. - The bootloader :file:`grubx64.efi` and its configuration file -:file:`grub.cfg` should also be placed in the tftp root ``/srv/tftp/``. - -Now start the tftp service with this command: - -.. code-block:: console - - systemctl start dnsmasq.service - - .. _TFTP: http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf -.. _gist: https://gist.github.com/pdxjohnny/d6945910bf7bed962438bf64e70a6a40 .. _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 From f897ee2a5f2cd3cb2e2853aa5dc246d1b345ff38 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Thu, 9 Mar 2017 11:20:24 -0800 Subject: [PATCH 2/8] 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 From 52fcf25dca560a72f1b56bd0f35a5f38458b0a2f Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Thu, 9 Mar 2017 11:41:44 -0800 Subject: [PATCH 3/8] Point users to the correct configuration script --- source/network_boot.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/network_boot.rst b/source/network_boot.rst index 9bf8b75f..08d77e33 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -46,9 +46,9 @@ 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. +Init Service`_ with ``configure-ipxe.sh`` to quickly enable a bulk provisioning +setup. Before running the installation scripts, modify ``parameters.conf`` with +your specific configurations. Step 1 ------ From 11c30ce07e9f4e634ff5600c69fd29cec1a4bd30 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Fri, 10 Mar 2017 15:56:46 -0800 Subject: [PATCH 4/8] Updating figures and links --- source/_static/images/network-boot.png | Bin 0 -> 13168 bytes source/_static/images/network-boot.vsdx | Bin 0 -> 28247 bytes source/_static/images/pxe.png | Bin 20461 -> 0 bytes source/_static/images/pxe.vsdx | Bin 27841 -> 0 bytes source/network_boot.rst | 6 +++--- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 source/_static/images/network-boot.png create mode 100644 source/_static/images/network-boot.vsdx delete mode 100644 source/_static/images/pxe.png delete mode 100644 source/_static/images/pxe.vsdx diff --git a/source/_static/images/network-boot.png b/source/_static/images/network-boot.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9239dbd57883c27d0a049e886f6b005adcf4f1 GIT binary patch literal 13168 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 z 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 literal 0 HcmV?d00001 diff --git a/source/_static/images/pxe.png b/source/_static/images/pxe.png deleted file mode 100644 index a4ad77a9c565633fb75467719bf17581702e8765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20461 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 TB?GOofxdd6RX8c*zs~+2j-JyU diff --git a/source/network_boot.rst b/source/network_boot.rst index 08d77e33..7eb9a29d 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -1,7 +1,7 @@ .. _network_boot: Network Booting -################ +*************** Clear Linux* Project for Intel® Architecture is bootable from a pre-boot execution environment (PXE). PXE is an industry standard for describing the @@ -37,7 +37,7 @@ made: Your computer and network setup should be the same as what is depicted in figure 1. -.. figure:: _static/images/pxe.png +.. figure:: _static/images/network-boot.png :alt: Figure 1: NAT network topology Figure 1: NAT network topology @@ -434,5 +434,5 @@ Project for Intel® Architecture. .. _iPXE: http://ipxe.org/ -.. _Ister Cloud Init Service: https://github.com/gtkramer/ister-cloud-init-svc +.. _Ister Cloud Init Service: https://github.com/clearlinux/ister-cloud-init-svc .. _iPXE-specific options: http://www.ipxe.org/howto/dhcpd#ipxe-specific_options From 8bff2662645692e611641afedf43b1097e201381 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Fri, 10 Mar 2017 17:01:13 -0800 Subject: [PATCH 5/8] Adding information flow diagram for PXE booting --- source/_static/images/network-boot-flow.png | Bin 0 -> 30580 bytes source/_static/images/network-boot-flow.vsdx | Bin 0 -> 30736 bytes ...{network-boot.png => network-boot-setup.png} | Bin ...etwork-boot.vsdx => network-boot-setup.vsdx} | Bin source/network_boot.rst | 15 ++++++++++----- 5 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 source/_static/images/network-boot-flow.png create mode 100644 source/_static/images/network-boot-flow.vsdx rename source/_static/images/{network-boot.png => network-boot-setup.png} (100%) rename source/_static/images/{network-boot.vsdx => network-boot-setup.vsdx} (100%) diff --git a/source/_static/images/network-boot-flow.png b/source/_static/images/network-boot-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad68c764e310ab68c27e6f881fbb7747c226b54 GIT binary patch literal 30580 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 literal 0 HcmV?d00001 diff --git a/source/_static/images/network-boot.png b/source/_static/images/network-boot-setup.png similarity index 100% rename from source/_static/images/network-boot.png rename to source/_static/images/network-boot-setup.png diff --git a/source/_static/images/network-boot.vsdx b/source/_static/images/network-boot-setup.vsdx similarity index 100% rename from source/_static/images/network-boot.vsdx rename to source/_static/images/network-boot-setup.vsdx diff --git a/source/network_boot.rst b/source/network_boot.rst index 7eb9a29d..38ab6da0 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -37,7 +37,7 @@ made: Your computer and network setup should be the same as what is depicted in figure 1. -.. figure:: _static/images/network-boot.png +.. figure:: _static/images/network-boot-setup.png :alt: Figure 1: NAT network topology Figure 1: NAT network topology @@ -45,10 +45,15 @@ Your computer and network setup should be the same as what is depicted in figure Configuration ============= -The below steps have been automated during the installation of the `Ister Cloud -Init Service`_ with ``configure-ipxe.sh`` to quickly enable a bulk provisioning -setup. Before running the installation scripts, modify ``parameters.conf`` with -your specific configurations. +Configuration for performing an iPXE boot has been automated during the +installation of the `Ister Cloud Init Service`_ with ``configure-ipxe.sh`` to +quickly enable a bulk provisioning setup. Before running the configuration script, modify ``parameters.conf`` with your specific configurations. +Figure 2 depicts the information flow that the configuration script enables. + +.. figure:: _static/images/network-boot-flow.png + :alt: Figure 2: PXE information flow + + Figure 2: PXE information flow Step 1 ------ From d8f3676ec517d84e9e229f2b58ad9d4e42fc27f2 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Fri, 10 Mar 2017 17:28:51 -0800 Subject: [PATCH 6/8] Using the same numbering scheme as other documents --- source/network_boot.rst | 537 ++++++++++++++++++---------------------- 1 file changed, 241 insertions(+), 296 deletions(-) diff --git a/source/network_boot.rst b/source/network_boot.rst index 38ab6da0..c3346702 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -17,8 +17,8 @@ built-in PXE support. This guide covers how to perform an iPXE boot using network address translation (NAT). -Preparations -============ +Prerequisites +============= Before performing an iPXE boot, verify the following preparations have been made: @@ -55,44 +55,34 @@ Figure 2 depicts the information flow that the configuration script enables. Figure 2: PXE information flow -Step 1 ------- +#. Define variables that are used to parameterize the configuration of an iPXE boot. -Define variables that are used to parameterize the configuration of an iPXE -boot. + .. code-block:: console -.. code-block:: console + web_root=/var/www + ipxe_root=$web_root/ipxe + tftp_root=/srv/tftp - web_root=/var/www - ipxe_root=$web_root/ipxe - tftp_root=/srv/tftp + external_iface=eno1 + internal_iface=eno2 + pxe_subnet=192.168.1 + pxe_internal_ip=$pxe_subnet.1 + pxe_subnet_mask_ip=255.255.255.0 + pxe_subnet_bitmask=24 - external_iface=eno1 - internal_iface=eno2 - pxe_subnet=192.168.1 - pxe_internal_ip=$pxe_subnet.1 - pxe_subnet_mask_ip=255.255.255.0 - pxe_subnet_bitmask=24 +#. Add the ``pxe-server`` bundle to your system. This has all of the software + needed run a PXE server. -Step 2 ------- + .. code-block:: console -Add the ``pxe-server`` bundle to your system. This has all of the software -needed run a PXE server. + swupd bundle-add pxe-server -.. code-block:: console +#. 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. - swupd bundle-add pxe-server - -Step 3 ------- - -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 + .. code-block:: console rm -rf $ipxe_root mkdir -p $ipxe_root @@ -100,14 +90,11 @@ named ``linux``, which is a symbolic link to the actual kernel file. 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. -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 + .. code-block:: console cat > $ipxe_root/ipxe_boot_script.txt << EOF #!ipxe @@ -116,326 +103,284 @@ release. Use the same names you gave to the initial ramdisk and kernel files. boot EOF -Step 5 -------- +#. 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. -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 -.. code-block:: console - - mkdir -p /etc/nginx - cat > /etc/nginx/nginx.conf << EOF - server { - listen 80; - server_name localhost; - location / { - root $ipxe_root; - autoindex on; + mkdir -p /etc/nginx + cat > /etc/nginx/nginx.conf << EOF + server { + listen 80; + server_name localhost; + location / { + root $ipxe_root; + autoindex on; + } } - } - EOF + EOF -Step 6 -------- +#. Start ``nginx`` and enable startup on boot. -Start ``nginx`` and enable startup on boot. + .. code-block:: console -.. code-block:: console + systemctl start nginx + systemctl enable nginx - systemctl start nginx - systemctl enable nginx +#. 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. -Step 7 ------- + .. code-block:: console -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. + rm -rf $tftp_root + 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 -.. code-block:: console +#. 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. - rm -rf $tftp_root - 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 + .. code-block:: console -Step 8 ------- + cat > /etc/dnsmasq.conf << EOF + enable-tftp + tftp-root=$tftp_root + EOF -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. +#. Enable ``dnsmasq`` to start automatically on boot. -.. code-block:: console + .. code-block:: console - cat > /etc/dnsmasq.conf << EOF - enable-tftp - tftp-root=$tftp_root - EOF + systemctl enable dnsmasq -Step 9 ------- + .. note:: -Enable ``dnsmasq`` to start automatically on boot. + 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``. -.. code-block:: console +#. 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``. - systemctl enable dnsmasq + .. code-block:: console -.. note:: + mkdir -p /etc/systemd + cat > /etc/systemd/resolved.conf << EOF + [Resolve] + DNSStubListener=no + EOF - 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``. + cat >> /etc/dnsmasq.conf << EOF + listen-address=$pxe_internal_ip + EOF -Step 10 -------- + .. note:: -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``. + ``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. -.. code-block:: console + .. note:: - mkdir -p /etc/systemd - cat > /etc/systemd/resolved.conf << EOF - [Resolve] - DNSStubListener=no - EOF + 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``. - cat >> /etc/dnsmasq.conf << EOF - listen-address=$pxe_internal_ip - EOF +#. Start ``dnsmasq`` and avoid conflicts with ``systemd-resolved``. -.. note:: + .. code-block:: console - ``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. + systemctl stop systemd-resolved + systemctl restart dnsmasq + systemctl start systemd-resolved -.. note:: +#. Assign a static IP address to the network adapter for the private network. - 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``. + .. code-block:: console -Step 11 -------- + mkdir -p /etc/systemd/network -Start ``dnsmasq`` and avoid conflicts with ``systemd-resolved``. + ln -sf /dev/null /etc/systemd/network/80-dhcp.network -.. code-block:: console + cat > /etc/systemd/network/80-external-dynamic.network << EOF + [Match] + Name=$external_iface + [Network] + DHCP=yes + EOF - systemctl stop systemd-resolved - systemctl restart dnsmasq - systemctl start systemd-resolved + cat > /etc/systemd/network/80-internal-static.network << EOF + [Match] + Name=$internal_iface + [Network] + DHCP=no + Address=$pxe_internal_ip/$pxe_subnet_bitmask + EOF -Step 12 ------- + systemctl restart systemd-networkd -Assign a static IP address to the network adapter for the private network. + .. note:: -.. code-block:: console + 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. - mkdir -p /etc/systemd/network +#. 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: - ln -sf /dev/null /etc/systemd/network/80-dhcp.network + * 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 - cat > /etc/systemd/network/80-external-dynamic.network << EOF - [Match] - Name=$external_iface - [Network] - DHCP=yes - EOF + .. code-block:: console - cat > /etc/systemd/network/80-internal-static.network << EOF - [Match] - Name=$internal_iface - [Network] - DHCP=no - Address=$pxe_internal_ip/$pxe_subnet_bitmask - EOF + cat > /etc/dhcpd.conf << EOF + option space ipxe; + option ipxe-encap-opts code 175 = encapsulate ipxe; + option ipxe.priority code 1 = signed integer 8; + option ipxe.keep-san code 8 = unsigned integer 8; + option ipxe.skip-san-boot code 9 = unsigned integer 8; + option ipxe.syslogs code 85 = string; + option ipxe.cert code 91 = string; + option ipxe.privkey code 92 = string; + option ipxe.crosscert code 93 = string; + option ipxe.no-pxedhcp code 176 = unsigned integer 8; + option ipxe.bus-id code 177 = string; + option ipxe.bios-drive code 189 = unsigned integer 8; + option ipxe.username code 190 = string; + option ipxe.password code 191 = string; + option ipxe.reverse-username code 192 = string; + option ipxe.reverse-password code 193 = string; + option ipxe.version code 235 = string; + option iscsi-initiator-iqn code 203 = string; + option ipxe.pxeext code 16 = unsigned integer 8; + option ipxe.iscsi code 17 = unsigned integer 8; + option ipxe.aoe code 18 = unsigned integer 8; + option ipxe.http code 19 = unsigned integer 8; + option ipxe.https code 20 = unsigned integer 8; + option ipxe.tftp code 21 = unsigned integer 8; + option ipxe.ftp code 22 = unsigned integer 8; + option ipxe.dns code 23 = unsigned integer 8; + option ipxe.bzimage code 24 = unsigned integer 8; + option ipxe.multiboot code 25 = unsigned integer 8; + option ipxe.slam code 26 = unsigned integer 8; + option ipxe.srp code 27 = unsigned integer 8; + option ipxe.nbi code 32 = unsigned integer 8; + option ipxe.pxe code 33 = unsigned integer 8; + option ipxe.elf code 34 = unsigned integer 8; + option ipxe.comboot code 35 = unsigned integer 8; + option ipxe.efi code 36 = unsigned integer 8; + option ipxe.fcoe code 37 = unsigned integer 8; + option ipxe.vlan code 38 = unsigned integer 8; + option ipxe.menu code 39 = unsigned integer 8; + option ipxe.sdi code 40 = unsigned integer 8; + option ipxe.nfs code 41 = unsigned integer 8; - systemctl restart systemd-networkd + class "PXE-Chainload" { + match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; -.. note:: - - 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 -------- - -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 - - cat > /etc/dhcpd.conf << EOF - option space ipxe; - option ipxe-encap-opts code 175 = encapsulate ipxe; - option ipxe.priority code 1 = signed integer 8; - option ipxe.keep-san code 8 = unsigned integer 8; - option ipxe.skip-san-boot code 9 = unsigned integer 8; - option ipxe.syslogs code 85 = string; - option ipxe.cert code 91 = string; - option ipxe.privkey code 92 = string; - option ipxe.crosscert code 93 = string; - option ipxe.no-pxedhcp code 176 = unsigned integer 8; - option ipxe.bus-id code 177 = string; - option ipxe.bios-drive code 189 = unsigned integer 8; - option ipxe.username code 190 = string; - option ipxe.password code 191 = string; - option ipxe.reverse-username code 192 = string; - option ipxe.reverse-password code 193 = string; - option ipxe.version code 235 = string; - option iscsi-initiator-iqn code 203 = string; - option ipxe.pxeext code 16 = unsigned integer 8; - option ipxe.iscsi code 17 = unsigned integer 8; - option ipxe.aoe code 18 = unsigned integer 8; - option ipxe.http code 19 = unsigned integer 8; - option ipxe.https code 20 = unsigned integer 8; - option ipxe.tftp code 21 = unsigned integer 8; - option ipxe.ftp code 22 = unsigned integer 8; - option ipxe.dns code 23 = unsigned integer 8; - option ipxe.bzimage code 24 = unsigned integer 8; - option ipxe.multiboot code 25 = unsigned integer 8; - option ipxe.slam code 26 = unsigned integer 8; - option ipxe.srp code 27 = unsigned integer 8; - option ipxe.nbi code 32 = unsigned integer 8; - option ipxe.pxe code 33 = unsigned integer 8; - option ipxe.elf code 34 = unsigned integer 8; - option ipxe.comboot code 35 = unsigned integer 8; - option ipxe.efi code 36 = unsigned integer 8; - option ipxe.fcoe code 37 = unsigned integer 8; - option ipxe.vlan code 38 = unsigned integer 8; - option ipxe.menu code 39 = unsigned integer 8; - option ipxe.sdi code 40 = unsigned integer 8; - option ipxe.nfs code 41 = unsigned integer 8; - - 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"; - } - elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007" or substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008" or substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009" { - filename "ipxe-x86_64.efi"; - } - elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000" { - filename "undionly.kpxe"; - } - } - - subnet $pxe_subnet.0 netmask $pxe_subnet_mask_ip { - 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; + next-server $pxe_internal_ip; + if exists user-class and option user-class = "iPXE" { + filename "http://$pxe_internal_ip/ipxe_boot_script.txt"; + } + elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007" or substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008" or substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009" { + filename "ipxe-x86_64.efi"; + } + elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000" { + filename "undionly.kpxe"; + } } - pool { - deny members of "PXE-Chainload"; - range $pxe_subnet.2 $pxe_subnet.127; - default-lease-time 3600; - max-lease-time 21600; + subnet $pxe_subnet.0 netmask $pxe_subnet_mask_ip { + 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; + default-lease-time 3600; + max-lease-time 21600; + } } - } - EOF + EOF -.. note:: + .. 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. + 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. -Create a file where ``dhcpd`` can record the IP addresses that it hands out to -PXE clients. + .. code-block:: console -.. code-block:: console + mkdir -p /var/db + touch /var/db/dhcpd.leases - mkdir -p /var/db - touch /var/db/dhcpd.leases +#. Start ``dhcpd`` and enable startup on boot. -Step 15 -------- + .. code-block:: console -Start ``dhcpd`` and enable startup on boot. + systemctl enable dhcp4 + systemctl restart dhcp4 -.. code-block:: console +#. 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. - systemctl enable dhcp4 - systemctl restart dhcp4 + .. code-block:: console -Step 16 -------- + iptables -t nat -F POSTROUTING + iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE + systemctl enable iptables-save.service + systemctl restart iptables-save.service + systemctl enable iptables-restore.service + systemctl restart iptables-restore.service -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. + .. note:: -.. code-block:: console + 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. - iptables -t nat -F POSTROUTING - iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE - systemctl enable iptables-save.service - systemctl restart iptables-save.service - systemctl enable iptables-restore.service - systemctl restart iptables-restore.service +#. Tell the Linux kernel to forward network packets on to different interfaces. + Otherwise, NAT will not work. -.. note:: + .. code-block:: console - 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. + 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 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 -------- - -Power on the PXE client and watch it boot the latest release of the Clear Linux* -Project for Intel® Architecture. +#. Power on the PXE client and watch it boot the latest release of the Clear Linux* + Project for Intel® Architecture. .. _iPXE: http://ipxe.org/ From 065c8b0f3da840401322d744149f862d1761f97f Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Mon, 13 Mar 2017 11:25:59 -0700 Subject: [PATCH 7/8] Making documentation consistent --- source/_static/images/network-boot-flow.vsdx | Bin 30736 -> 0 bytes source/_static/images/network-boot-setup.vsdx | Bin 28247 -> 0 bytes source/network_boot.rst | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 source/_static/images/network-boot-flow.vsdx delete mode 100644 source/_static/images/network-boot-setup.vsdx diff --git a/source/_static/images/network-boot-flow.vsdx b/source/_static/images/network-boot-flow.vsdx deleted file mode 100644 index 85a05169cc8842fff57e345e841b0c2ce7690820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30736 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 diff --git a/source/_static/images/network-boot-setup.vsdx b/source/_static/images/network-boot-setup.vsdx deleted file mode 100644 index 35200fcf09164892e4ff9ee8aac4f64382cc6d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28247 zcmeFY!*$5cW@v1%7PoHb6l2JY2Vc{$ry5Ucf-+`z|=lH7x}pChVcb2sQsRENuIyZW5khz5_#D zqZu_|-4n2oF00O){&Meavy`~omaO+2un&7Pn@iZ-Yg1gdp_BXY-EwxIfrcwkZ8J8?ON1vmur6L`VCt`~PM5|6p+ci|f@%Q?f(< zVp#l7(237cF?XBb<;z_I6etm?$pS48-kz6fZMWu~^js@O zp=;~0NUBq)Drbp})IUt-8lYHBrp3`tyr*UustkzLuzNOsmKpU8M_1dA&1ahv<&s$J2ZpIG(bE zJGw}aZo#SroUov~_z}bBYRY+k1NGmjLY?;4L;FiqHaGwP>faTv7ETs+boK^jCQko( z|5uHSR*|vWaOCorbCDDamCfeI=l=C z3to)d=fU)7>gsC$oLI7oW;_4_A8yt)41^bfdUWM)t?ca}QC)R#CKtrj89FG)Ob3)m zk@AXL7LGJ-ZeT`}ScuTjNSwey6srL;n@U)=)A(7uGa>wAFiRn>Jp}dEKe_>7Wrg*^G)rU zEBD^rd+*hYb1rNey~fR{gSNjXGjHvU!ReX39GKg0Jozhg6efCs(vXV|exWq$0RBQHfk)D!I zqjgGKDRd?F;YF#nV$W*}AB@SX$`m`7u4i~cw2pzAS}(=6tSBX!?}_6biwKzSVegp5 zeWCgNg|to!9@+rp*gEhQ+3Hi418XbwT{>Gz%DR=`b&;|jMfV5uT+}Vbc{M;pWz@)1 z-XaSu-|`gvcPEMaZ;<}8NEzE1x!C;OcK(Z{|0r0+i365@6P55? z$am1X*DtPLCCTF*$^5mXUjT%4HVRVIB%~JKy;7Hn?d=`MB(A|{H}1{aJ{!yr{3-?s0uL9>4pE^WjEb-Wel&v0~0q)Wxh zlmq~I_L@<0X1PaY!EAV4!W4A>&lb!v{hFL!Ir4~EdLvft;~JmXs_6U2+8#HQaozqmXwZMH1pf}+ ze`cZo4B>w~|2ux#b8}FG^e|xeUHe?g+d6FUM2)U&25Jl76gtj~If! zdcD5xAtKxj@p1|RYt01oo6PU$DBHDXJBT1E$mC7M;ZVEc^yfFFefx$~_zTxekg7zK z=~gr3loPWUFf5ct$1^-B`c!cv6V}&5?8%?4JmU{m{<;~4*(k{lm;Bm$8A(6a`!*8E zw=E5n<7H<+(XKaGC){B)>4)`HZ?ZZ=bOFmf+A8z-e|`Gzxfdu91$+6g#pLf_hUDK~ z+ZZ@Gn>aer{iomm&#!-b-kdmPIm8bm@*46zl#9FZaqWQ8Fmfgf%y_7GZ?PBDIr)WjxYh)0j<#R6=gwWc-QhdDo!ez|Tn zKIRL1=`CmYJ@hhrI{sUc3Y%v)8;4-NG*?K$5@m9b-Xp*8AY(0M8R*a6I<0}V9%dG4 z^bGZpDdf@VSa{RfIo>};)a?2cP#vTE1&q;pYXC* zECg8ft2at2+I*b~*cJ%S?ESfK4wTvEhLA#Oguk0{>B`sUF zXx6A&ogUZip(z|G6j#wl$YtH+s5TKES};N%g)NmQ5uJ^}I`RMl`OcSrNabaj<;!DzeaVW+YWlW#?7GG9%bHh$B#j4# z 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 diff --git a/source/network_boot.rst b/source/network_boot.rst index c3346702..645f91b6 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -1,7 +1,7 @@ .. _network_boot: Network Booting -*************** +############### Clear Linux* Project for Intel® Architecture is bootable from a pre-boot execution environment (PXE). PXE is an industry standard for describing the @@ -38,7 +38,7 @@ Your computer and network setup should be the same as what is depicted in figure 1. .. figure:: _static/images/network-boot-setup.png - :alt: Figure 1: NAT network topology + :alt: NAT network topology Figure 1: NAT network topology @@ -51,7 +51,7 @@ quickly enable a bulk provisioning setup. Before running the configuration scri Figure 2 depicts the information flow that the configuration script enables. .. figure:: _static/images/network-boot-flow.png - :alt: Figure 2: PXE information flow + :alt: PXE information flow Figure 2: PXE information flow From adc976db81c098e7ab50d7215675522ba005fa47 Mon Sep 17 00:00:00 2001 From: Rodrigo Caballero Date: Tue, 14 Mar 2017 10:02:43 -0600 Subject: [PATCH 8/8] Edit language and markup. Edited the language to increase readability and clarity. Implemented the available substitutions and added markup for files and abbreviations. Signed-off-by: Rodrigo Caballero --- source/network_boot.rst | 482 +++++++++++++++++++++------------------- 1 file changed, 254 insertions(+), 228 deletions(-) diff --git a/source/network_boot.rst b/source/network_boot.rst index 645f91b6..7d9efd3b 100644 --- a/source/network_boot.rst +++ b/source/network_boot.rst @@ -3,299 +3,304 @@ Network Booting ############### -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. +|CLOSIA| can boot from a :abbr:`PXE (pre-boot execution environment)`. PXE +is an industry standard which describes the client-server interaction to +network boot software using the DHCP and TFTP protocols. One possible 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. +The PXE extension known as `iPXE`_\* adds support for additional protocols +such as HTTP, iSCIS, :abbr:`AoE (ATA over Ethernet)`, and +:abbr:`FCoE (Fiber Channel over Ethernet)`. iPXE can also be used to enable +network-booting computers which lack built-in PXE support. -This guide covers how to perform an iPXE boot using network address translation -(NAT). +This guide covers how to boot |CL| with iPXE using +:abbr:`NAT (network address translation)`. Prerequisites ============= -Before performing an iPXE boot, verify the following preparations have been +Before booting with iPXE, ensure 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 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 +* Your PXE server has an ethernet/LAN boot option. +* Your PXE server has at least two network adapters. +* 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 the secure boot option disabled. .. note:: - Secure boot needs disabled because the UEFI binaries for booting the Clear - Linux* Project for Intel® Architecture are not signed. + The secure boot option must be disabled because the UEFI binaries used to + boot the |CLOSIA| are not signed. -Your computer and network setup should be the same as what is depicted in figure -1. +The required computer and network setup are depicted in figure 1. .. figure:: _static/images/network-boot-setup.png - :alt: NAT network topology + :alt: NAT network topology - Figure 1: NAT network topology + Figure 1: NAT network topology Configuration ============= -Configuration for performing an iPXE boot has been automated during the -installation of the `Ister Cloud Init Service`_ with ``configure-ipxe.sh`` to -quickly enable a bulk provisioning setup. Before running the configuration script, modify ``parameters.conf`` with your specific configurations. -Figure 2 depicts the information flow that the configuration script enables. +The configuration to boot using iPXE has been automated with the +:file:`configure-ipxe.sh` script which ran during the installation of the +`Ister Cloud Init Service`_, thus quickly enabling a bulk provisioning +setup. Before running the configuration script, modify +:file:`parameters.conf` with your specific configurations. + +Figure 2 depicts the information flow enabled by the configuration script. .. figure:: _static/images/network-boot-flow.png - :alt: PXE information flow + :alt: PXE information flow - Figure 2: PXE information flow + Figure 2: PXE information flow -#. Define variables that are used to parameterize the configuration of an iPXE boot. +#. Define the variables used to parameterize the configuration of an iPXE + boot. .. code-block:: console - web_root=/var/www - ipxe_root=$web_root/ipxe - tftp_root=/srv/tftp + web_root=/var/www + ipxe_root=$web_root/ipxe + tftp_root=/srv/tftp - external_iface=eno1 - internal_iface=eno2 - pxe_subnet=192.168.1 - pxe_internal_ip=$pxe_subnet.1 - pxe_subnet_mask_ip=255.255.255.0 - pxe_subnet_bitmask=24 + external_iface=eno1 + internal_iface=eno2 + pxe_subnet=192.168.1 + pxe_internal_ip=$pxe_subnet.1 + pxe_subnet_mask_ip=255.255.255.0 + pxe_subnet_bitmask=24 -#. 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 bundle has all the + packages needed run a PXE server. .. code-block:: console - swupd bundle-add pxe-server + swupd bundle-add pxe-server -#. 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. +#. Create an iPXE hosting directory. .. code-block:: console rm -rf $ipxe_root mkdir -p $ipxe_root - 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 -#. 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. +#. Download the latest network-bootable release of |CL|, and extract the + 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 + 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 -#. 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. + .. important:: + + Ensure that the initial ramdisk file is named :file:`initrd` and + the kernel file is named :file:`linux`, which is a symbolic link to the + actual kernel file. + +#. Create an iPXE boot script. During an iPXE boot, the iPXE boot script + directs the PXE client to the files needed to network-boot the latest + release. Use the names given to the initial ramdisk and kernel + files. .. code-block:: console - mkdir -p /etc/nginx - cat > /etc/nginx/nginx.conf << EOF - server { - listen 80; - server_name localhost; - location / { - root $ipxe_root; - autoindex on; + 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 + +#. The ``pxe-server`` bundle contains a lightweight web-server known as + ``nginx``. Create a configuration file for ``nginx`` to serve the latest + release to PXE clients. + + .. code-block:: console + + mkdir -p /etc/nginx + cat > /etc/nginx/nginx.conf << EOF + server { + listen 80; + server_name localhost; + location / { + root $ipxe_root; + autoindex on; + } } - } - EOF + EOF #. Start ``nginx`` and enable startup on boot. .. code-block:: console - systemctl start nginx - systemctl enable nginx + systemctl start nginx + systemctl enable nginx -#. 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. +#. The ``pxe-server`` bundle contains 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 - rm -rf $tftp_root - 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 + rm -rf $tftp_root + 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 -#. 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. +#. The ``pxe-server`` bundle contains 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 + cat > /etc/dnsmasq.conf << EOF + enable-tftp + tftp-root=$tftp_root + EOF #. Enable ``dnsmasq`` to start automatically on boot. .. code-block:: console - systemctl enable dnsmasq + systemctl enable dnsmasq .. note:: - 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``. + At this point in the configuration process, ``dnsmasq`` is only being + enabled to start automatically on boot but it is not started because + its DNS server conflicts with the DNS stub listener of + ``systemd-resolved``. -#. 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``. +#. Set ``dnsmasq`` to listen on a dedicated IP address. PXE clients on the + private network will use this IP address for DNS resolution. Disable + the DNS stub listener included with ``systemd-resolved`` to avoid a + conflict with the ``dnsmasq`` DNS server. .. code-block:: console - mkdir -p /etc/systemd - cat > /etc/systemd/resolved.conf << EOF - [Resolve] - DNSStubListener=no - EOF + mkdir -p /etc/systemd + cat > /etc/systemd/resolved.conf << EOF + [Resolve] + DNSStubListener=no + EOF - cat >> /etc/dnsmasq.conf << EOF - listen-address=$pxe_internal_ip - EOF + cat >> /etc/dnsmasq.conf << EOF + 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. + ``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:: + .. important:: - 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``. + Using the ``dnsmasq`` DNS server allows ``systemd-resolved`` to + dynamically update the list of DNS servers for the private network from + the public network. This setup effectively creates a pass-through DNS + server which relies on the DNS servers listed in ``/etc/resolv.conf``. #. Start ``dnsmasq`` and avoid conflicts with ``systemd-resolved``. .. code-block:: console - systemctl stop systemd-resolved - systemctl restart dnsmasq - systemctl start systemd-resolved + systemctl stop systemd-resolved + systemctl restart dnsmasq + systemctl start systemd-resolved #. Assign a static IP address to the network adapter for the private network. .. code-block:: console - mkdir -p /etc/systemd/network + mkdir -p /etc/systemd/network - ln -sf /dev/null /etc/systemd/network/80-dhcp.network + ln -sf /dev/null /etc/systemd/network/80-dhcp.network - cat > /etc/systemd/network/80-external-dynamic.network << EOF - [Match] - Name=$external_iface - [Network] - DHCP=yes - EOF + cat > /etc/systemd/network/80-external-dynamic.network << EOF + [Match] + Name=$external_iface + [Network] + DHCP=yes + EOF - cat > /etc/systemd/network/80-internal-static.network << EOF - [Match] - Name=$internal_iface - [Network] - DHCP=no - Address=$pxe_internal_ip/$pxe_subnet_bitmask - EOF + cat > /etc/systemd/network/80-internal-static.network << EOF + [Match] + Name=$internal_iface + [Network] + DHCP=no + Address=$pxe_internal_ip/$pxe_subnet_bitmask + EOF systemctl restart systemd-networkd .. note:: - 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. + By default, ``systemd-networkd`` uses DHCP for all network adapters. + This functionality must be disabled prior to assigning a static IP + address. Consequently, DHCP functionality for the network adapter + connected to the public network is also disabled. Thus, this functionality must be explicitly re-enabled for the network adapter. -#. 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 +#. The ``pxe-server`` bundle contains a full DHCP server implementation + compliant with the specifications defined by the + :abbr:`ISC (Internet Systems Consortium)` known as ``dhcpd``. Configure + ``dhcpd`` to dynamically allocate IP addresses to PXE clients on the + private network. .. code-block:: console - cat > /etc/dhcpd.conf << EOF - option space ipxe; - option ipxe-encap-opts code 175 = encapsulate ipxe; - option ipxe.priority code 1 = signed integer 8; - option ipxe.keep-san code 8 = unsigned integer 8; - option ipxe.skip-san-boot code 9 = unsigned integer 8; - option ipxe.syslogs code 85 = string; - option ipxe.cert code 91 = string; - option ipxe.privkey code 92 = string; - option ipxe.crosscert code 93 = string; - option ipxe.no-pxedhcp code 176 = unsigned integer 8; - option ipxe.bus-id code 177 = string; - option ipxe.bios-drive code 189 = unsigned integer 8; - option ipxe.username code 190 = string; - option ipxe.password code 191 = string; - option ipxe.reverse-username code 192 = string; - option ipxe.reverse-password code 193 = string; - option ipxe.version code 235 = string; - option iscsi-initiator-iqn code 203 = string; - option ipxe.pxeext code 16 = unsigned integer 8; - option ipxe.iscsi code 17 = unsigned integer 8; - option ipxe.aoe code 18 = unsigned integer 8; - option ipxe.http code 19 = unsigned integer 8; - option ipxe.https code 20 = unsigned integer 8; - option ipxe.tftp code 21 = unsigned integer 8; - option ipxe.ftp code 22 = unsigned integer 8; - option ipxe.dns code 23 = unsigned integer 8; - option ipxe.bzimage code 24 = unsigned integer 8; - option ipxe.multiboot code 25 = unsigned integer 8; - option ipxe.slam code 26 = unsigned integer 8; - option ipxe.srp code 27 = unsigned integer 8; - option ipxe.nbi code 32 = unsigned integer 8; - option ipxe.pxe code 33 = unsigned integer 8; - option ipxe.elf code 34 = unsigned integer 8; - option ipxe.comboot code 35 = unsigned integer 8; - option ipxe.efi code 36 = unsigned integer 8; - option ipxe.fcoe code 37 = unsigned integer 8; - option ipxe.vlan code 38 = unsigned integer 8; - option ipxe.menu code 39 = unsigned integer 8; - option ipxe.sdi code 40 = unsigned integer 8; - option ipxe.nfs code 41 = unsigned integer 8; + cat > /etc/dhcpd.conf << EOF + option space ipxe; + option ipxe-encap-opts code 175 = encapsulate ipxe; + option ipxe.priority code 1 = signed integer 8; + option ipxe.keep-san code 8 = unsigned integer 8; + option ipxe.skip-san-boot code 9 = unsigned integer 8; + option ipxe.syslogs code 85 = string; + option ipxe.cert code 91 = string; + option ipxe.privkey code 92 = string; + option ipxe.crosscert code 93 = string; + option ipxe.no-pxedhcp code 176 = unsigned integer 8; + option ipxe.bus-id code 177 = string; + option ipxe.bios-drive code 189 = unsigned integer 8; + option ipxe.username code 190 = string; + option ipxe.password code 191 = string; + option ipxe.reverse-username code 192 = string; + option ipxe.reverse-password code 193 = string; + option ipxe.version code 235 = string; + option iscsi-initiator-iqn code 203 = string; + option ipxe.pxeext code 16 = unsigned integer 8; + option ipxe.iscsi code 17 = unsigned integer 8; + option ipxe.aoe code 18 = unsigned integer 8; + option ipxe.http code 19 = unsigned integer 8; + option ipxe.https code 20 = unsigned integer 8; + option ipxe.tftp code 21 = unsigned integer 8; + option ipxe.ftp code 22 = unsigned integer 8; + option ipxe.dns code 23 = unsigned integer 8; + option ipxe.bzimage code 24 = unsigned integer 8; + option ipxe.multiboot code 25 = unsigned integer 8; + option ipxe.slam code 26 = unsigned integer 8; + option ipxe.srp code 27 = unsigned integer 8; + option ipxe.nbi code 32 = unsigned integer 8; + option ipxe.pxe code 33 = unsigned integer 8; + option ipxe.elf code 34 = unsigned integer 8; + option ipxe.comboot code 35 = unsigned integer 8; + option ipxe.efi code 36 = unsigned integer 8; + option ipxe.fcoe code 37 = unsigned integer 8; + option ipxe.vlan code 38 = unsigned integer 8; + option ipxe.menu code 39 = unsigned integer 8; + option ipxe.sdi code 40 = unsigned integer 8; + option ipxe.nfs code 41 = unsigned integer 8; - class "PXE-Chainload" { + class "PXE-Chainload" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server $pxe_internal_ip; @@ -308,9 +313,9 @@ Figure 2 depicts the information flow that the configuration script enables. elsif substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000" { filename "undionly.kpxe"; } - } + } - subnet $pxe_subnet.0 netmask $pxe_subnet_mask_ip { + subnet $pxe_subnet.0 netmask $pxe_subnet_mask_ip { authoritative; option routers $pxe_internal_ip; option domain-name-servers $pxe_internal_ip; @@ -328,61 +333,82 @@ Figure 2 depicts the information flow that the configuration script enables. default-lease-time 3600; max-lease-time 21600; } - } - EOF + } + EOF - .. note:: + This configuration provides the following important functions: - 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. + * 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. -#. Create a file where ``dhcpd`` can record the IP addresses that it hands out to - PXE clients. + .. important:: + + 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. + +#. Create a file where ``dhcpd`` can record the IP addresses it hands + out to PXE clients. .. code-block:: console - mkdir -p /var/db - touch /var/db/dhcpd.leases + mkdir -p /var/db + touch /var/db/dhcpd.leases #. Start ``dhcpd`` and enable startup on boot. .. code-block:: console - systemctl enable dhcp4 - systemctl restart dhcp4 + systemctl enable dhcp4 + systemctl restart dhcp4 -#. 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. +#. Configure NAT to route traffic from the private network to the public + network, effectively turning the PXE server into a router. .. code-block:: console - iptables -t nat -F POSTROUTING - iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE - systemctl enable iptables-save.service - systemctl restart iptables-save.service - systemctl enable iptables-restore.service - systemctl restart iptables-restore.service + iptables -t nat -F POSTROUTING + iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE + systemctl enable iptables-save.service + systemctl restart iptables-save.service + 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. + The firewall masquerades or translates packets to make them appear as + coming from the PXE server. Thus, it hides the PXE clients from the + public network. -#. Tell the Linux kernel to forward network packets on to different interfaces. - Otherwise, NAT will not work. +#. 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 + 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 -#. Power on the PXE client and watch it boot the latest release of the Clear Linux* - Project for Intel® Architecture. +#. Power on the PXE client and watch it boot the latest release of the + |CLOSIA| + +Congratulations you have successfully installed and configured PXE network-booting for |CL|. -.. _iPXE: http://ipxe.org/ -.. _Ister Cloud Init Service: https://github.com/clearlinux/ister-cloud-init-svc -.. _iPXE-specific options: http://www.ipxe.org/howto/dhcpd#ipxe-specific_options +.. _iPXE: + http://ipxe.org/ + +.. _Ister Cloud Init Service: + https://github.com/clearlinux/ister-cloud-init-svc + +.. _iPXE-specific options: + http://www.ipxe.org/howto/dhcpd#ipxe-specific_options