While researching large scale imaging for a new set of laptops where I work I came across FOG. This is a server based system that can be run on top of most Linux distros, although installation scripts exist for fedora and ubuntu.
FOG uses a number of open source projects and ties them all together using a really good user interface. At the lowest level clients boot using PXE from the FOG server. They then run a Kernel and us a RAM disk to contain a filesystem image. This filesystem is copied from the FOG server and is the init image.
The init image is a byte for byte copy of a basic Linux filesystem including executables, libraries and config files. This is then gunzipped to shrink the filesize.
The first thing to do is to use the gunzip tool to uncompress the image. The image can then be mounted to a point on the filesystem where it can be worked on:
mount -o loop /path/to/file /path/to/mount
To make any changes to the filesystem then the normal shell techniques can be used. To make any changes to the image where a script / executable needs to be run, then you will need to create a chroot “jail” for the filesystem.
Now to the point regarding the SIS191 ethernet adapter. The laptops I want to image all have the SIS191 ethernet card. I could use FOG to upload an image to the server from a completely prepared machine, but it would not deploy. After trying all sorts, using other live disks to mount the NFS share from the fog server and trying this I determined that the problem was definitely the ethernet card.
The fix turned out to be the MTU size. This was documented online as a problem with the driver, that the default size of 1500 caused some sort of problem. I still cannot fathom out how to change the MTU size automatically but I wrote the following simple script that changes the ethernet adaptors MTU and then launches the deployment software
ifconfig eth0 mtu 1000
fog
Please let me know if anyone knows how to add scripts to init without invoke-rc.d!


