User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

en:howto:network_boot [2017/02/21 17:37] (current)
nkoranova created
Line 1: Line 1:
 +====== Booting through the network ======
  
 +PXE is a technology, which allows boot of a computer through the network. The technology can be use to run diagnostic tools, or to install an operating system through the network. It is also possible to run a whole operating system on a drive-less machine. ​
 +
 +===== Possible uses =====
 +
 +Let us start with a somewhat informal introduction.  ​
 +The household of a standard IT enthusiast is full of NAS boxes, external drives, multimedia centers and tens of terabytes of data regularly fly through his network. Unlike in previous years, CDs and DVDs are hard to find. If you are known to be an IT expert among your relatives and friends, you will find yourself supplied with "​broken",​ "​slow"​ or "​weird"​ computers and pleas to repair them. 
 +
 +And now we come to the actual issue. It is oftentimes useful to be able to boot some kind of installer or a live OS, but CDs/DVDs can't be found, the computer is an older low-end model and the manufacturer doesn'​t support a boot from a USB drive. An alternative scenario is that you are prepared, you have a supply of CDs, but the computer in question doesn'​t have a working CD drive. ​
 +
 +If these types of situations sound familiar to you, the good news is, that a boot though the network is a relatively old technology, which can also be implemented on a lot of low-end models. ​
 +
 +
 +===== Required steps =====
 +
 +Because the internal memory of the router Turris is meant mainly for the use of the OS, it's size is not adequate for saving installation images. It's necessary to connect another storage device for saving the images --- an external HDD, NAS, USB flash disk or SD card.
 +
 +If you plan to have the boot running permanently,​ it's necessary to count with the fact that this storage always has to be accessible to the OS. The boot through the network can partly be managed by the DHCP server dnsmasq, which Turris uses. The is one small complication however: if the dnsmasq doesn'​t find the given storage, it will refuse to run. The computers in the local network will not send information about the DNS server and "the Internet will stop working",​ which is very undesirable. So it's necessary to some storage ready, which the router can use at all times. ​
 +
 +The previous issue also relates to the choice of file system on the given storage medium. The given medium always has to be physically accessible and the OS has to be able to mount it during a boot. For that reason it's not so easy to operate a storage with NTFS, because the system doesn'​t know how to mount NTFS automatically. With a little effort and experimentation,​ this can be overcome using the same method, which is described in the manual for NAS - mount the drive before running dnsmasq.
 +
 +Note: If you want to mount the root file system, you can never use NTFS -- it would not be possible to set the right authorization for the data. 
 +
 +===== Automount =====
 +
 +Automatic mounting of a connected device can be set in
 +''/​etc/​config/​fstab'':​
 +
 +The file can look for example like this:
 +
 +<file txt /​etc/​config/​fstab>​
 +config global
 + option anon_swap '​0'​
 + option anon_mount '​0'​
 + option auto_swap '​1'​
 + option auto_mount '​1'​
 + option delay_root '​5'​
 + option check_fs '​1'​
 +
 +config mount
 + option enabled '​1'​
 + option uuid '​126c85e6-b7f8-4df9-b83a-25e4531f98d1'​
 + option target '/​mnt/​data'​
 +</​file>​
 +
 +The option ''​enabled''​ enables automatic mounting, ''​uuid''​ is an identification of the EXT section and ''​target''​ the location, where the disk should be mounted. Writing into ''/​dev/​sda1''​ and the like also works. ​
 +
 +<WRAP center tip 80%>
 +**TIP:** The mount can also be done in the administration interface [[ssh|LuCI]] in the tab //System / Mount points//. More information concerning this can be found in [[:​en:​howto:​nas#​Mounting the drive| the documentation for NAS]]
 +</​WRAP>​
 +
 +
 +If the service ''​fstab''​ is not enabled, enable it using this command:
 +
 +  /​etc/​init.d/​fstab enable
 +
 +===== Tuning tips =====
 +
 +If you need to test the functioning of individual components, it can be helpful to install one of the visualization tools (for example VirtualBox) to create a virtual computer, configure its network card for  bridge mode and test the boot through the network here. Rebooting a virtual computer is almost instantaneous and the whole mount can be done on one computer without the need of additional HW.
 +
 +===== General settings =====
 +
 +We will first prepare the directory structure in a folder, which we have designated on the external medium for this purpose. The folder used in the following examples is ''/​mnt/​data''​.
 +
 +  cd /mnt/data
 +  mkdir tftp tftp/images tftp/​pxelinux.cfg
 +
 +Then you need to download **Syslinux**,​ which is a set of loaders that are able to boot from various media. This also where the loader for the boot through the network PXE is found. A list of available packages can be found on [[https://​www.kernel.org/​pub/​linux/​utils/​boot/​syslinux/​|this page]]. Download the newest version in the preferred archive. ​
 +
 +Copy the following files from the Syslinux archive into ''/​mnt/​data/​tftp'':​
 +
 +  * ''​bios/​core/​pxelinux.0''​
 +  * ''​bios/​com32/​elflink/​ldlinux/​ldlinux.c32''​
 +  * ''​bios/​com32/​menu/​vesamenu.c32''​ -- graphical version of the menu
 +  * ''​bios/​com32/​menu/​menu.c32''​ -- text version of the menu
 +  * ''​bios/​com32/​lib/​libcom32.c32''​
 +  * ''​bios/​com32/​libutil/​libutil.c32''​
 +
 +Even though may look somewhat unusual, the files from the given directory structure are really copied into one directory, without keeping the structure the same. 
 +
 +It's possible to select only one of the menu versions - either ''​vesamenu.c32''​ or ''​menu.c32''​. ​
 +**Note:** The last part of the manual uses both these versions. ​
 +
 +===== Installing and configuring the required tools =====
 +
 +In addition, we will need an NFS server. Install it by activating the NAS package in the Foris interface. Alternatively from the command line (**attention**,​ this will cause the package to not be updated automatically) using the following command: ​
 +
 +  opkg install nfs-kernel-server
 + 
 +Set the sharing of the directory with the installation images in the file ''/​etc/​exports'':​
 +
 +<file txt /​etc/​exports>​
 +/​mnt/​data/​tftp/​images ​ *(ro,​async,​no_subtree_check)
 +</​file>​
 +
 +Enable and activate/ restart the installed services:
 +
 +  /​etc/​init.d/​portmap enable
 +  /​etc/​init.d/​portmap restart
 +  /​etc/​init.d/​nfsd enable
 +  /​etc/​init.d/​nfsd restart
 +
 +Finally it's necessary to edit the file ''/​etc/​config/​dhcp''​. This adds two lines to the section ''​config dnsmasq''​ and a new section -- ''​config boot''​. After these changes have been made, the file should look like this:
 +
 +<file txt /​etc/​config/​dhcp>​
 +config dnsmasq
 + option domainneeded '​1'​
 + option boguspriv '​1'​
 + option localise_queries '​1'​
 + option rebind_protection '​1'​
 + option rebind_localhost '​1'​
 + option local '/​lan/'​
 + option domain '​lan'​
 + option expandhosts '​1'​
 + option authoritative '​1'​
 + option readethers '​1'​
 + option leasefile '/​tmp/​dhcp.leases'​
 + option resolvfile '/​tmp/​resolv.conf.auto'​
 + option port '​0'​
 + option enable_tftp '​1'​
 + option tftp_root '/​mnt/​data/​tftp'​
 +
 +config boot '​linux'​
 + option filename '​pxelinux.0'​
 + option serveraddress '​192.168.1.1'​
 + option servername '​Turris'​
 +...
 +</​file>​
 +
 +The rest of the file remains unchanged. The last step is to restart the service: ​
 +
 +  /​etc/​init.d/​dnsmasq restart
 +
 +===== Preparing the image =====
 +
 +First of all we download the distribution image, which we will be installing. This manual shows how to do this using a Ubuntu distribution,​ because it is one of the major ones. **The procedure should be similar for other distributions**.
 +
 +After we have downloaded the image, we will mount it as a loop device. This command needs to be done through root:
 +
 +  mount -o loop ubuntu-14.04.1-desktop-amd64.iso /​mnt/​mountpoint/​
 +
 +The image has roughly this structure:
 +
 +  $ cd /​mnt/​mountpoint/​
 +  $ ls -l
 +  celkem 2548
 +  -r--r--r-- 1 root root     134 čec 23 00:34 autorun.inf
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:36 boot
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:36 casper
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:35 dists
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:36 EFI
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:36 install
 +  dr-xr-xr-x 1 root root   18432 čec 23 00:36 isolinux
 +  -r--r--r-- 1 root root   21426 čec 23 00:36 md5sum.txt
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:35 pics
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:35 pool
 +  dr-xr-xr-x 1 root root    2048 čec 23 00:35 preseed
 +  -r--r--r-- 1 root root     231 čec 23 00:35 README.diskdefines
 +  lr-xr-xr-x 1 root root       1 čec 23 00:35 ubuntu -> .
 +  -r--r--r-- 1 root root 2551408 dub 14  2014 wubi.exe
 +
 +The files ''​wubi.exe''​ and ''​autorun.inf''​ will not further be required and be careful about the item ''​ubuntu''​ -- it is a symbolical reference back to the present directory and when attempting to copy data, this could cause an infinite loop. The rest of the file should be copied into the directory ''/​mnt/​data/​images/''​ and into a suitably named sub-directory,​ for example ''​ubuntu-14.04-64''​. The whole command could look like this: 
 +
 +  cp -r boot casper dists EFI install isolinux md5sum.txt pics pool preseed /​mnt/​data/​tftp/​images/​ubuntu-14.04-64/​.
 +
 +===== Preparing the boot menu =====
 +
 +The first thing, which appears on the computer that is being booted, is the boot menu. What this menu can look like can be demonstrated on an advanced example with numerous levels. The example again works with an Ubuntu distribution. ​
 +
 +<file txt /​mnt/​data/​tftp/​pxelinux.cfg/​default>​
 +DEFAULT menu.c32
 +PROMPT 0
 +TIMEOUT 300
 +ONTIMEOUT local
 +MENU TITLE Turris at lair-net PXE-Boot Menu
 +
 +LABEL local
 + MENU LABEL Boot from local hard-drive
 + LOCALBOOT 0
 +
 +LABEL ubuntu
 + MENU LABEL Ubuntu
 + KERNEL menu.c32
 + APPEND pxelinux.cfg/​ubuntu.cfg
 +</​file>​
 +
 +Now let's look line by line at what the individual options mean:
 +
 +  * ''​DEFAULT menu.c32''​ -- Signifies which menu to draw. ''​menu.c32''​ for the text menu option, ''​vesamenu.c32''​ for the graphical ​ menu option. This concerns that file, which you copied from the Syslinux project.
 +  * ''​PROMPT 0''​ -- Leaves out the prompt and displays the boot menu straight away.
 +  * ''​TIMEOUT 300''​ -- Sets the duration of a timeout, during which it is possible to select a given action. (in tenths of a second, e.g. 300 = 30 seconds).
 +  * ''​ONTIMEOUT local''​ -- Constitutes a default action, which takes place when timeout runs out. As defined by the setting, the action labeled ''​local''​ takes place. ​
 +  * ''​MENU TITLE Turris PXE-Boot Menu''​ -- The title of your boot menu.
 +  * ''​LABEL local''​ -- Definition of a menu item. 
 +  * ''​MENU LABEL Boot from local hard-drive''​ -- Title under which this menu item appears. Following this is a list of actions, which should be undertaken.
 +  * ''​LOCALBOOT 0''​ -- Says to perform a boot from the local drive.
 +  * ''​LABEL ubuntu''​ -- Definition of the next item. 
 +  * ''​MENU LABEL Ubuntu''​ -- Title...
 +  * ''​KERNEL menu.c32''​ -- Commands to implement a kernel. In this case we will implement ''​menu.c32''​ again, that is we again show some menu. 
 +  * ''​APPEND pxelinux.cfg/​ubuntu.cfg''​ -- Parameters handed over to the kernel. In case of a menu kernel, there would be another configuration file here.
 +
 +The label with the title ''​ubuntu''​ leads us to the next screen. It's appearance is defined here: 
 +
 +<file txt /​mnt/​data/​tftp/​pxelinux.cfg/​ubuntu.cfg>​
 +MENU TITLE Ubuntu Images
 +
 +label ubuntu-14.04
 + MENU LABEL Ubuntu 14.04 LTS Live/​Install DVD  64-Bit
 + KERNEL images/​ubuntu-14.04-64/​casper/​vmlinuz.efi
 + APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/​mnt/​data/​tftp/​images/​ubuntu-14.04-64/​ initrd=images/​ubuntu-14.04-64/​casper/​initrd.lz
 + TEXT HELP
 +         Starts the Ubuntu 14.04 LTS Live DVD - 64-Bit
 + ENDTEXT
 +</​file>​
 +
 +  * ''​MENU TITLE Ubuntu Images''​ -- Title of the new menu. 
 +  * ''​LABEL ubuntu-14.04''​ -- Definition of a menu item.
 +  * ''​MENU LABEL Ubuntu 14.04 LTS Live/​Install DVD  64-Bit''​ -- Title for a new record.
 +  * ''​KERNEL images/​ubuntu-14.04-64/​casper/​vmlinuz.efi''​ -- Command to implement a kernel. This label already constitutes an operating system boot, that is why it will be a kernel acquired from an image.
 +  * ''​APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/​mnt/​data/​tftp/​images/​ubuntu-14.04-64/​ initrd=images/​ubuntu-14.04-64/​casper/​initrd.lz''​ -- Parameters passed onto the kernel. Because it is an actual system, it has to say, where the intramdisc is found. The remaining information is a description of  how to get data via network. **The exact parameters for the kernel will differ across distributions** and it is **suitable to look for them on the website of the given distribution**. ​
 +  * The text in between ''​TEXT HELP''​ and ''​ENDTEXT''​ is help for the given active menu item.
 +
 +A complete list of available options can be found on the [[http://​www.syslinux.org/​wiki/​index.php/​Comboot/​menu.c32|Syslinux wikipedia]].
 +
 +===== Cooperatio with network installers =====
 +
 +Some distributions,​ for example Debian, provide their own network installer. Those are usually very easy to put into operation -- the [[http://​ftp.nl.debian.org/​debian/​dists/​wheezy/​main/​installer-amd64/​current/​images/​netboot/​netboot.tar.gz|downloaded files only need to be unpacked]] into the root of the TFTP server. The installer contains all the required parts including the Syslinux files. However, it is desirable for me in particular to include the Debian installer in my menu. 
 +
 +After unpacking the network installer, it is relatively easy to find out that ''​pxelinux.cfg/​default''​ leads to the file ''​debian-installer/​amd64/​boot-screens/​syslinux.cfg'',​ which is prepared for work with the graphical version of the menu ''​vesamenu.c32''​.
 +
 +Adding the entire Debian network installer can be achieved through this item in the main menu:
 +
 +<​code>​
 +LABEL debian-netinst
 + MENU LABEL Debian netinst
 + KERNEL vesamenu.c32
 + APPEND debian-installer/​amd64/​boot-screens/​syslinux.cfg
 +</​code>​
 +
 +We assume that the network installer is unpacked into the directory ''/​mnt/​data/​tftp/​debian-installer''​.
 +
 +===== Other distributions / Complex example =====
 +
 +This section presents a manual for other distributions,​ by means of one example. No further commentary is needed here.
 +
 +<file txt /​mnt/​data/​tftp/​pxelinux.cfg/​default>​
 +DEFAULT menu.c32
 +PROMPT 0
 +TIMEOUT 300
 +ONTIMEOUT local
 +MENU TITLE Turris at lair-net PXE-Boot Menu
 +
 +LABEL local
 + MENU LABEL Boot from local hard-drive
 + LOCALBOOT 0
 +
 +LABEL tools
 + MENU LABEL Tools
 + KERNEL menu.c32
 + APPEND pxelinux.cfg/​tools.cfg
 +
 +LABEL debian-netinst-64
 + MENU LABEL Debian 7 "​Wheezy"​ netinst ​ (64-bit)
 + KERNEL vesamenu.c32
 + APPEND debian-installer/​amd64/​boot-screens/​syslinux.cfg
 +
 +LABEL debian-netinst-32
 + MENU LABEL Debian 7 "​Wheezy"​ netinst ​ (32-bit)
 + KERNEL vesamenu.c32
 + APPEND debian-installer/​i386/​boot-screens/​syslinux.cfg
 +
 +LABEL linux-mint
 + MENU LABEL Linux Mint
 + KERNEL menu.c32
 + APPEND pxelinux.cfg/​linux-mint.cfg
 +
 +LABEL ubuntu
 + MENU LABEL Ubuntu
 + KERNEL menu.c32
 + APPEND pxelinux.cfg/​ubuntu.cfg
 +</​file>​
 +
 +<file txt /​mnt/​data/​tftp/​pxelinux.cfg/​tools.cfg>​
 +MENU TITLE Tools Boot Menu
 +
 +LABEL systemrescuecd-4-tftp
 + MENU LABEL System Rescue CD 4.0.0 32-bit (TFTP)
 + KERNEL images/​systemrescuecd-4.0.0/​rescue32
 + APPEND netboot=tftp://​192.168.1.1/​images/​systemrescuecd-4.0.0/​sysrcd.dat initrd=images/​systemrescuecd-4.0.0/​initram.igz
 + TEXT HELP
 +         Starts the System Rescue CD - 32-Bit
 + ENDTEXT
 +
 +LABEL systemrescuecd-4-nfs
 + MENU LABEL System Rescue CD 4.0.0 32-bit (NFS)
 + KERNEL images/​systemrescuecd-4.0.0/​rescue32
 + APPEND netboot=nfs://​192.168.1.1:/​mnt/​data/​tftp/​images/​systemrescuecd-4.0.0 initrd=images/​systemrescuecd-4.0.0/​initram.igz
 + TEXT HELP
 +         Starts the System Rescue CD - 32-Bit
 + ENDTEXT
 +</​file>​
 +
 +<file txt /​mnt/​data/​tftp/​pxelinux.cfg/​linux-min.cfg>​
 +MENU TITLE Linux Mint Images
 +
 +LABEL linux-mint-17
 + MENU LABEL Linux Mint 17.1 Cinnamon Live/​Install DVD  64-Bit
 + KERNEL images/​mint17-cinnamon-64/​casper/​vmlinuz
 + APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/​mnt/​data/​tftp/​images/​mint17-cinnamon-64/​ initrd=images/​mint17-cinnamon-64/​casper/​initrd.lz
 + TEXT HELP
 +         Starts the Linux Mint 17 Live DVD - 64-Bit
 + ENDTEXT
 +
 +LABEL linux-mint-16
 + MENU LABEL Linux Mint 16 Cinnamon Live/​Install DVD  64-Bit
 + KERNEL images/​mint16-cinnamon-64/​casper/​vmlinuz
 + APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/​mnt/​data/​tftp/​images/​mint16-cinnamon-64/​ initrd=images/​mint16-cinnamon-64/​casper/​initrd.lz
 + TEXT HELP
 +         Starts the Linux Mint 16 Live DVD - 64-Bit
 + ENDTEXT
 +
 +</​file>​
 +
 +<file txt /​mnt/​data/​tftp/​pxelinux.cfg/​ubuntu.cfg>​
 +MENU TITLE Ubuntu Images
 +
 +LABEL ubuntu-14.04
 + MENU LABEL Ubuntu 14.04 LTS Live/​Install DVD  64-Bit
 + KERNEL images/​ubuntu-14.04-64/​casper/​vmlinuz.efi
 + APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/​mnt/​data/​tftp/​images/​ubuntu-14.04-64/​ initrd=images/​ubuntu-14.04-64/​casper/​initrd.lz
 + TEXT HELP
 +         Starts the Ubuntu 14.04 LTS Live DVD - 64-Bit
 + ENDTEXT
 +
 +</​file>​