Location of the rest of the files, needed to continue Text mode (EULA and file copy part) are given as per this topic:
1. Create a small ISO containing only \I386\SETUPLDR.BIN, \I386\NTDETECT.COM and \I386\TXTSETUP.SIF for 32-bit setups. In case of 64-bit only TXTSETUP.SIF is in
2. Add these lines to your TXTSETUP.SIF in the ISO:
[SetupData] .... SetupSourcePath ="\WIN_SETUP\2000\" SetupSourceDevice=\ArcName\multi(0)disk(0)rdisk(1)partition(1) BootPath="\WIN_SETUP\2000\I386\" BootDevice="multi(0)disk(0)rdisk(1)partition(1)" ....After loading the 3 files from the ISO setup continues loading the other from BootDevice\BootPath.
3. Grub4Dos menu.lst:
title First part of 2000 setup find --set-root /WIN_SETUP/2000.ISO map --mem /WIN_SETUP/2000.ISO (0xff) savedefault 1 map (hd0) (hd1) map (hd1) (hd0) map --hook root (0xff) chainloader /I386/SETUPLDR.BIN title Second part of 2000 setup/Start from the first internal disk savedefault map (hd0) (hd1) map (hd1) (hd0) map --hook rootnoverify (hd0) chainloader (hd0)+14. Put that ISO say in \WIN_SETUP\ on the USB disk.
5. Copy the all 2000 setup files in \WIN_SETUP\2000\
6. At start of GUI mode the value of sourcepath in $winnt$.inf is "translated" to dos path, with a drive letter and is used for the rest of the GUI mode.
Default behavior is to translate this NT path to Dos path, which is used for the GUI mode. If the value is ARC path it gets translated to \device\harddiskX\partitionY\WIN_SETUP\2000\. If the value is \device\harddiskX\PartitionY\WIN_SETUP\2000\ it gets translated to U:\WIN_SETUP\2000\. This is saved as the value of dospath entry in $winnt$.inf.
Instead, use presetup.cmd and Pyron's fake setup to change 'setupsource' value to something more useful- "\??\U:\WIN_SETUP\"
U: is taken by searching in all local drives for a tag file.
Winnt.sif if present in the source folder (\WIN_SETUP\2000\I386\) is applied, migrate.inf too. The ISO file needs just the 3 files mentioned.
If txtsetup.oem is present in the ISO, alongside txtsetup.sif, it's also honored.
No files are deleted from the source folder. Msdosinitiated in sould be 0, NO, or absent in winnt.sif, as in a regular source.
Boot.ini is generated correctly and placed always on the internal disk.
Practically unlimited number of sources can be easily placed on the USB disk.
Tested successfully with USB stick on all possible Windows versions 2000-XP-2003, on virtual machines and real hardware.
The only problems I got were with USB hard disk and 64-bit versions, this could be because of the IDEtoUSB adapter I am using. At start of GUI mode partitions on USB disk do not get drive letters. Diskpart shows the disk, but no volumes are mounted from it, just the internal disk
To do list:
Find out what's going on with USB hard disks and x64 versions.
Test USB stick/disk mapped to say hd21.
Find workaround for USB sticks, seen as floppy by BIOS. Lacking hardware for this part.
Here is a very unfinished, test version of WinSetupFromUSB, which has a lot to be changed and fixed, but does the most of the required changes, if anyone want's to jump in and help testing:
Same approach might be used for loading multiple BartPEs in the USB stick/disk, no need of the ISO file, just settings in txtsetup.sif pointing where the files are to be found, not tested.
edit: (18-11-2009) Fixed locations of files in case of 64 bit versions
edit: (20-11-2009) WinSetupFromUSB download link modified
edit: (21-11-2009) WinSetupFromUSB download link modified
edit: (10-12-2009) WinSetupFromUSB download link modified
edit: (19-12-2009) WinSetupFromUSB download link modified