Guide for Linux users: How to run Windows software on your hardware… without Windows

By Joel Yliluoma, September 2018

Problem definition

You have a Linux computer that boots using GRUB2. You need to flash your BIOS, and the flashing program is provided as a Windows program.

You are researching how to find a way to install Windows on a USB stick and to boot from it.

Solution

Install software

You will need the following software:
  • wimtools, which adds support for Microsoft’s WIM-type disk images.
  • grub-imageboot, which adds support for memdisk images in GRUB2.
  • wine, for running an installer, once.

Acquire ISO image

  1. Download Active@ Boot Disk 9.4 Demo from here: http://download.lsoft.net/BootDiskDemo9-Setup.exe
  2. Use Wine to run this program. It installs the software. You can uninstall Wine after that, if you like.

You now have a ISO image file called BootDisk.ISO in: ~/.wine/dosdevices/c:/Program Files (x86)/LSoft Technologies/Active@ Boot Disk

Copy that file to safety: cp ~/'.wine/dosdevices/c:/Program Files (x86)/LSoft Technologies/Active@ Boot Disk'/BootDisk.ISO test.iso

You can now delete ~/.wine if you like.

Now, if you try to boot using that ISO image (for example, qemu-system-x86_64 -cdrom test.iso -m 256), you will quickly find out that the ISO image is not very useful, because it gets stuck on a license check screen.

Since we are not interested in the Active@ software at all, we will edit the ISO image to skip that software and just directly start a command prompt.

Modifying the ISO image

You need to install wimtools first. Follow these steps to edit the image:

  1. Mount the ISO image on some path of your choosing. For example, mkdir ~/t;sudo mount test.iso -o loop ~/t
  2. Copy the files from the mountpoint, making a read-write copy. cp -a ~/t ~/t1; chmod u+w -R ~/t1
    • You can now unmount the ISO image. sudo umount ~/t; rmdir ~/t
  3. Inside the mountpoint, there is a filesystem image. Mount this image: mkdir ~/t2;wimmountrw ~/t1/sources/boot.wim ~/t2
  4. Modify the Windows startup script inside that image. editor ~/t2/Windows/System32/startnet.cmd
    • Delete all lines that contain .exe. This includes cfg_winpe.exe and initBD.exe.
    • Save your changes.
  5. Save changes to the filesystem image, unmounting it: wimunmount ~/t2 --commit --rebuild
    • The --rebuild option is important. Without it, the resulting WIM file will be larger than the original, and it will not work.
    • If the resulting WIM file is larger than the original anyway, mount the WIM again, delete some unused exe files from ~/t2/Program\ Files/BOOTDISK/, and try again.
  6. Identify the start offset of the wim file within the ISO file: grep -aob 'MSWIM' test.iso
    • Take the second line it printed, which looks something like: 3942400:MSWIM
  7. Write the modified filesystem image into the ISO file at that position: dd if=t1/sources/boot.wim bs=3942400 seek=1 conv=notrunc of=test.iso
    • Naturally, replace the 3942400 with the number printed by grep.
    • I was not able to find any other find to rebuild the ISO image using e.g. xorriso and still have it boot. I spent quite some time trying. But this solution, while crude, works.

Installing the ISO image

  1. Copy the ISO image to GRUB’s image directory: sudo cp test.iso /boot/images/
  2. Update GRUB configuration: update-grub

Reboot

You are now ready to reboot the machine.

You will have a new boot option in GRUB menu, which starts a RAMdisk that contains a loader for Microsoft Windows v6.1, and starts up a command prompt, CMD.

You can plug in a USB stick containing your Windows-requiring tools, and run them from that command prompt. (For the USB stick, remember to use a filesystem supported by Windows, such as VFAT or NTFS.)

Other

If you need a DOS boot disk instead of Windows boot disk, follow the same steps, except take ~/.wine/dosdevices/c:/Program Files (x86)/LSoft Technologies/Active@ Boot Disk/DOS/BootDiskDos.ISO and skip modifying the ISO image. This produces a native FreeDOS boot.

Last edited at: 2018-09-23T01:49:31+03:00