In between constructing table-based layouts in Dreamweaver (groan) in a web design class, I slipstreamed Service Pack 3 into Windows XP using only tools available in Linux. I didn’t boot into Windows once during the process (except for, obviously, booting the resulting ISO image in a VM to make sure it worked), but I did use Wine at one point.
This post isn’t going to be a how-to; rather, I will just give you a quick overview of how I did it, and let you readers fill in the gaps.
Here are the tools I used:
- Linux distro of choice (I have used both Ubuntu and Gentoo to do this, but it doesn’t really matter)
- Windows XP CD or ISO image
- Service Pack 3 redistributable
- cabextract (available as a package in Ubuntu)
- file-roller (a.k.a. GNOME’s Archive Manager)
- Wine (at least version 1.0)
- genisoimage (with geteltorito)
What I did:
- Extracted the contents of a Windows XP ISO (in your case, it may be the CD) into a directory called “xp” on my Desktop. I initially loop-mounted the ISO and copied the files out of it that way, but I later had to re-extract them with file-roller instead. The reason? If you extract the contents of the ISO with lower-case names (the loop-mounted ISO lower-cased all the filenames), the CD will not boot. Make sure they are all in uppercase.
- Extracted Service Pack 3:
mkdir ~/Desktop/sp3 && cd ~/Desktop/sp3 && cabextract ../xpsp3.exe - Ran the slipstreamer for SP3 on the files:
cd ~/sp3/update && wine update.exe /integrate:Z:\\home\\jeremy\\Desktop\\xp - Extracted the boot image from the existing Windows XP ISO. (To do this, you can either use the
geteltoritocommand, run BBIE under Wine, or follow the directions under the “Finding the CD boot image” heading on this guide.) - Made the ISO image with genisoimage. You’ll at least need the
-b(reference the boot image you extracted in the previous step),-no-emul-boot,-c,-max-iso9660-filenames,-relaxed-filenamesoptions.
If you’re lucky, you now have a Windows XP SP3 ISO.


[...] I followed this blog post (which was interesting since it’s in French), but I then found another blog post which explains it in English. The steps are as [...]
Slipstreaming SP3 onto XP install disc using linux…
As I’m fairly proud of saying, we’re an entirely Linux household (openSUSE for the non-techies and gentoo on my boxen.)
However, not having a windows machine in the house can make some things difficult (like gaming), and there’s the o…
Only change in these instructions was the line about running the slipstreamer for SP3, should be: cd ~/Desktop/sp3/i386/update && wine update.exe /integrate:Z:\\home\\jeremy\\Desktop\\xp
I guess it all depends on how you extracted it. Obviously, you will need to tweak paths for your own purposes.
You can loop-mount an ISO image with preserved uppercase filenames by specifying the “map=off” mount option for the iso9660 filesystem, eg:
sudo mount -t iso9660 -o loop,map=off windows_xp.iso /mount/directory
After that a normal cp -a from /mount/directory to the slipstreaming working directory will keep uppercase preserved.
Very helpful tip, Martin! Thankyou.
After mounting the iso with map=off the integrate failed without write permissions on the copy, so
chmod u+w -R /mnt/xp
mt, what? You’re mounting the
.isoas read-write? What the heck for?Just copy the contents of the
i386directory out of the.isoand umount it straight afterwards. Be done with it.Actually it’s not true that SP3 can’t be integrated with an original disc — I did it just fine. SP3 can’t be installed directly on an original version of XP (I hate that), but it integrates into the CD media perfectly fine.
Thanks for the guide though, I was wondering if I could do this without installing a Windows VM.
That’s interesting. I’ll have to re-check that sometime and update my post.
It goes to show that Microsoft’s decision to only allow SP3 to be applied to SP1 and SP2 was completely arbitrary. There’s probably 3 lines of code in the source that you could comment out, and it would apply beautifully to a gold XP.
I get “directories too deep (7) max is 6″
then i try rock ridge extensions and get the same thing
Hi can you help me out here – is this right?
genisoimage -b /home/josh/Desktop/image1.bin -no-emul-boot -c -max-iso-9660-filenames -relaxed-filenames -o iso /home/josh/Desktop/XP
-o meaning the type of file outputtes and followed by the directory containing the contents of what will be in the ISO?
i can’t thank you enough for this tutorial! i’m completely new to Linux and any type of command-based interface but I finally got it down. took me a few hours.. had to learn a lot. boot image must reside in the same folder as the ISO data and i had to add the -D switch.
genisoimage -b image1.bin -no-emul-boot -c -max-iso9660-filenames -relaxed-filenames -D -o ISO /home/josh/Desktop/XP
lets hope it boots!
I was getting the error “CDBOOT: Couldn’t find NTLDR” when trying to boot the cd. Adding the -N switch seemed to help. The resulting command was:
genisoimage -b image1.bin -no-emul-boot -c -max-iso9660-filenames -relaxed-filenames -D -N -o XP.iso /home/jeremiah/Desktop/XP
I don’t recall having to use that switch, but thanks for the info anyway.
I confirm Mike statement. Service Pack are cumulative security updates and Windows Updates. The latest version include the oldest update, therefore it is not necessary to update sp2 and than sp3 in windows environment, either slipstream cds. Just sp3 and it will work fine.
In fact, by chance, I happened to do that myself today. I slipstreamed SP3 straight onto a Gold image. I will update the post.
[...] Slipstreaming Windows XP with Service Pack 3 in Linux by Jeremy Visser [...]
Oops, I also had to enable Joliet extensions (-J) because I had a file that wasn’t being seen — I386/DriverLanguageMap.xml
I also had to add the -N option, thanks Jeremiah. Possibly because of a later Rev of genisoimage. I’m using Ubuntu 9.04.
You can remove bbie and wine and replace it with Linux: geteltorito -o bootsect.img /dev/cdrom
Sweet…
You’re right about
geteltorito— looks like it is shipped withgenisoimage. Thanks for the tip — I will update the article.Thanks you very much for this post. Thanks especially to Josh too for mentioning the
-Dswitch! The-Nswitch is not needed, if the--max-iso-filenamsswitch works, as this switch includes-N. But at least in recent versions of genisoimage, the switch-ctakes an argument – the file name of the boot catalog. If--max-iso-filenamesdirectly follows-c, it is read as the name of the boot catalog instead of applied as switch.I used this command line with success (after using
geteltoritoto copy the boot image toBOOT.BINin the root directory of the CD contents):