I have a machine with a bootable ISO stored on it, and I have another blank machine, which I want to install the ISO on. They're both on the same LAN (attached to the same switch). How would I go about booting the blank machine from the ISO stored on my primary computer?
I think you want a means of pxe booting from ISO images. I searched for a little bit and found this article. I believe that method should work for any bootable ISO image you may have. This is another similar article.
Finally, it appears that this article discusses how to do this from a PXE (Pre-boot eXecution Environment) server you run from Windows.
Yes, it is very much possible. The type of system you can boot will depend on how said system works.
Usually, you will find that very simple systems (like DOS or Win98) and very complex systems (like modern Linux distros) are easily bootable over the network.
The way to accomplish this on the two types of systems is very different.
I'm also assuming a
dnsmasq setup on a Linux server with the tftproot in
/var/lib/tftpboot, but you should be able to adapt the instructions to any other setup.
For simple systems
For simple systems, you simply load the image (ISO) into RAM, and trick the system into believing it is an actual unit. This is done with a little help from the BIOS and a software module called memdisk.
The system you want to load over the network is freedos:
# /var/lib/tftpboot/pxelinux.cfg/default UI vesamenu.c32 PROMPT 0 TIMEOUT 0 MENU DEFAULT freedos LABEL freedos MENU LABEL FreeDOS KERNEL /syslinux/memdisk INITRD /freedos.iso iso
That's pretty much it. The first few lines are menu boilerplate; the important bits are the last four lines: load memdisk with the given ISO.
For complex systems
Modern systems with fancy stuff like good memory management and proper hardware detection pretty much ignore anything the BIOS has to say.
This renders the
memdisk approach used above pretty much useless, because if you loaded the ISO that way, once the kernel was read from the ISO and loaded into memory (this is done by the bootloader in the ISO; bootloaders do pay attention to the BIOS), the ISO data would be gone.
What do you do then? Well, you don't actually load the ISO from the network, but instead tell the system it can access the required files from there.
For Linux systems, extract the ISO contents somewhere in the tftproot and load the kernel and initrd directly, then leaving it up to them to find the root filesystem and mount it.
Here's an example using the amazing System Rescue CD. I actually extracted the whole ISO onto the root of the TFTP server, because it fit right in with my directory structure, so the kernels are in
# /var/lib/tftpboot/pxelinux.cfg/default UI vesamenu.c32 PROMPT 0 TIMEOUT 0 MENU DEFAULT sysrescd64 LABEL sysrescd64 MENU LABEL 1) SysResCD 4.2.0 (x64) KERNEL /syslinux/rescue64 APPEND setkmap=us nomodeset netboot=nbd://pxe:sysrcd.dat INITRD /syslinux/initram.igz
The most important bit here is the
APPEND line. See the
netboot= at the end? That's how the OS knows where its root filesystem is. The syntax is
I had conveniently set a DNS name
pxe for my server.
If you don't have that you would use an IP address for the server.
Also, sysresccd is one of the easiest because it uses a squashfs image for its root filesystem, which can be easily downloaded and loaded to RAM with any method. Here I use nbd; you can also use tftp, nfs and http.
For other distros, like Ubuntu, I think you can only use nfs.
For Windows systems it is a bit more complex to do. The outline is:
- Have a Windows 7 install on a shared folder on the server
- Have a full Windows PE environment on the server in your TFTP root
- Have the client machine load the WinPE over the network and press F12 to get a command prompt
- Map the shared folder with the Windows 7 install to a drive letter
- Start installation from the mapped folder
I have never tried this, and it seems it doesn't work for some people. For NT versions older than Vista I think it's not even possible. For pre-NT Windows (95, 98, ME, etc) you can use the memdisk approach, but booting those is bad for your health :-p
The Ultimate Deployment Appliance offers what you require. Their homepage describes its functionality; it's reformatted here for convenience:
What is the Ultimate Deployment Appliance?
- Unattended OS installations (Windows, Linux, ESX, Solaris) over the network set-up in minutes!
- Publish your favorite recovery/system maintenance tools over the network!
- PXE Booting, Remote Installation Services, Kickstart, Jumpstart, Autoyast in a box!
When would you use this?
- When you are trying to install a system that doesn't have a CDROM drive, but does have a network card (these days ultra-thin laptops and such don't have an optical drive)
- When you have to install an operating system on different pieces of hardware.
- When you have to install systems and want things to go automated and reproducible.
- When you go to your friends house to fix his/her computer you want to be prepared. Instead of removing all that unwanted stuff you might as well start fresh. Bring your own system (laptop?), hook it up to the messed up system with a cross-cable and start re-install the system from scratch fully unattended. Head for the fridge...
- When you need to do maintenance on your system without the need to carry around a stack of live CD's.
- When you want to do this without paying lots of money for commercial products.
How Does it work?
- Unattended Install The appliance mounts an iso file with a distribution of you favorite operating system and imports the necessary (network) boot-files. It creates a default configuration file for your automated installation and starts hosting the operating system distribution files for network booting.
- System Tool Publishing Live CD's and other tools are imported entirely to the Ultimate Deployment appliance and are published for booting over the network trough PXE.