Originally published at: http://www.howtogeek.com/162809/how-to-pxe-boot-an-ubuntu-image-from-windows-server-2008/
This guide explains how to configure a Windows Server 2008 machine to push out a static Ubuntu image that can be picked up by diskless terminals, so that you can have any number of machines running a fully-functional instance of Ubuntu without having a hard drive, as long as they are capable of PXE booting.
Does PXE booting allow changes to the filesystem and/or is persistent? Like (as a very basic example) if I change the wallpaper, logout, and boot from another machine (or even the same machine), will that wallpaper still be there?
Similarly, if I install a bunch of packages via apt, shutdown, and reboot, will those changes still be there? Or does the whole thing behave exactly like a live instance? As in, all and any changes are wiped on shutdown.
If you are PXE booting as shown in this tutorial, all of the changes will be wiped on shutdown. When you're booting a diskless client in this way, they're refering to a read-only image on a server to obtain their "hard-drive" and operating system. Any changes you make will be persistant as long as the machine is powered on, but because the machine cannot make changes to the actual image, when you shutdown and reboot, it grabs a clean version of the image with all of your changes wiped.
If you want to make changes persist, you need to make the changes on the image itself, which will make them available to any computer that PXE boots your image.
Perfect - exactly the sort of response I was expecting.
Expanding on this though, since its not practical to modify the image itself over and over again, couldn't something like a persistent file be created? Unetbootin has the option to create a persistent file for Ubuntu distros right on the usb drive. There's something here - http://unetbootin.sourceforge.net/diskimg/ which could possibly be used. The readme details the implementation of it, which obviously works on USB drives, but I wonder if it works for PXE booted sessions.
I guess its something I should try out.
EDIT: Looks like it'd have to be the pxelinux.cfg instead of syslinux.cfg.
I wonder if modifying this here:
append boot=casper netboot=nfs nfsroot=<Windows Server IP>:/RemoteInstall/Boot/x64/Images/UbuntuLIVE initrd=Images/UbuntuLIVE /casper/initrd.gz
and appending "persistent" at the end would work (assuming there is a casper.rw file in the root of the directory).
append boot=casper netboot=nfs nfsroot=<Windows Server IP>:/RemoteInstall/Boot/x64/Images/UbuntuLIVE initrd=Images/UbuntuLIVE /casper/initrd.gz persistent
I’m not quite sure if that would work with this method of pxebooting, as the file system that it is using is a squashfs file system.
The main complication that I think you’d find is trying to get the storage to happen over a network (I’m assuming that you’re still trying to eliminate having storage attached to the client as that is one of the main perks of this method, at least for us). Based on my quick reading of adding persistence to a liveCD, it expects some form of locally attached storage to save on, and I don’t think it would be a simple matter to change the squashfs that the livecd is currently using. If you had some form of SAN that the computer could access, then your method might work…
Personally I’d be fairly hesitant about doing this anyway, as I’m not sure how the persistent storage would work with the same image being deployed to multiple computers. I would assume that there would have to be some extra work that would need to be done to ensure that multiple machines didn’t attempt to tamper with the same data, though I could easily be wrong. It would definitely be interesting trying to implement that, but unfortunately I don’t have the means to accomplish that where I currently am or the permission to.
Depending on how many different images you needed to deploy, you could potentially make a different image for each custom deployment, but that would most likely be impractical. We didn’t have to worry about that issue, as we mainly wanted these clients to serve as terminals that users could use to RDP into various machines as needed, so there didn’t need to be any different configuration between various clients.
http://www.vercot.com/~serva/an/NonWindowsPXE3.html#linuxhow to do the same without WDS and without NFS;
just with Serva and a regular MS share