iPXE discussion forum
[SOLVED] RE: iPXE & WDS [Prestaged: false] - Printable Version

+- iPXE discussion forum (https://forum.ipxe.org)
+-- Forum: iPXE user forums (/forumdisplay.php?fid=1)
+--- Forum: General (/forumdisplay.php?fid=2)
+--- Thread: [SOLVED] RE: iPXE & WDS [Prestaged: false] (/showthread.php?tid=7242)



[SOLVED] RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-20 10:04

Hi!

I`am trying to boot to an WDS Server. But the WDS Server rejects it. Directly from from pxe (without iPXE) it works.

Code:
dhcp
set wdsserver ?:?:?:?
set alternatetftp ?:?:?:?
set net0/dhcp-server {wdsserver}
set net0/filename wdsbnp.com
set net0/gateway {wdsserver}
set net0/next-server {wdsserver}
set net0/user-class PXEClient

chain tftp://{alternatetftp}/boot/wdsbnp32.com

This works, WDNBP is loaded, and then it tries to load the pxeboot.n12 where it stucks...


On the WDS-Server i have the following Event:
EVENT ID: 4096
PRESTAGED: false


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-20 15:10

some more details.....

PXE ----> WDS = OK!
iPXE ----> WDS = FALSE!
PXE ----> PXELINUX ---->iPXE --> WDS = FALSE!

Every time the same problem. I have also tried to boot directly with autoboot from the ipxe.iso, same problem.

[Image: 3x7j4zs6gvdn.jpg]


RE: iPXE & WDS [Prestaged: false] - BAUR-ITCS - 2014-03-21 17:32

Hi, funny, I just ran into the same problem today.

What solved it for me was performing the steps listed under "If you are using WDS without SCCM 2007" at
http://windowsdeployments.net/how-to-speed-up-pxe-boot-in-wds-and-sccm/ :

On the WDS server find the file default.bcd in the \REMOTEINSTALL\Boot\x86 folder (This was the folder you setup when you configured WDS)
Copy default.bcd from the \REMOTEINSTALL\Boot\x86 folder to the local C:\ drive
Then from a command line type: Bcdedit -store c:\default.bcd -set {68d9e51c-a129-4ee1-9725-2ab00a957daf} ramdisktftpblocksize 16384
Make a copy of the original \REMOTEINSTALL\Boot\x86\default.bcd file by changing the extension to default.bcd.backup
Copy the c:\default.bcd back to it’s original location at \REMOTEINSTALL\Boot\x86
Now repeat steps 1 thru 5 for the \REMOTEINSTALL\Boot\amd64\default.bcd
Then on the WDSServer from a command prompt type: Sc control wdsserver 129

Though for good measure, I manually stopped and started the WDSServer in addition to that.

In short, the client doesn't *stop* at the TFTP boot stage for pxeboot.n12, it just becomes incredibly slow due to a wrong tftp packet size. I saw that as the NIC activity indicator kept flashing although there was no other traffic to be expected on the network I was testing it on.

Currently, I'm using the following parameters to boot in addition to applying the above fix:
dhcp ; set 252:string \Boot\BCD ; imgexec tftp://${next-server}/Boot\x86\wdsnbp.com

Note that there are ways to make this work with x86 and x64 by turning this into a script and changing it like this:

cpuid --ext 29 && set arch x64 || set arch x86
dhcp
set 252:string \Boot\BCD
imgexec tftp://${next-server}/Boot\${arch}\wdsnbp.com

I will now try if applying the patch above also allows for running ipxe without passing any parameters.

-Stefan


RE: iPXE & WDS [Prestaged: false] - BAUR-ITCS - 2014-03-21 20:39

(2014-03-21 17:32)BAUR-ITCS Wrote:  I will now try if applying the patch above also allows for running ipxe without passing any parameters.

And tadaa, it does. You don't need to pass any funny options to ipxe after applying the WDS-server-side patch as described above.

-Stefan


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-22 13:49

Ok, i will try the patch on Monday. That makes sense at all, because normal PXE was working very well :-)

Does it works normal only over PXE?

We have an WDS with RPK running over here....

big thanks!!!!!


RE: iPXE & WDS [Prestaged: false] - BAUR-ITCS - 2014-03-22 16:49

(2014-03-22 13:49)KingBonecrusher Wrote:  Does it works normal only over PXE?

I haven't seen any negative side effects from that patch when not using iPXE, but then again, I'm not a production user of WDS, I only have a test environment.

My guess is that something in the WDS code that gets loaded and executed via PXE sets the TFTP packet size to a useful, high value, but only if it hasn't been set before, and iPXE sets that before transferring control (this is my theory; I haven't looked at the iPXE source to verify that that is what's actually happening).

(2014-03-22 13:49)KingBonecrusher Wrote:  We have an WDS with RPK running over here....

Not sure what RPK is, care to explain?

-Stefan


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-22 18:37

Quote:Not sure what RPK is, care to explain?

RPK is Refurbisher Preinstallation Kit. Nice Frontend for managing images, drivers etc...


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-24 07:12

Very sad, hasn`t solved my problem. It stucks at the same position :-(


RE: iPXE & WDS [Prestaged: false] - BAUR-ITCS - 2014-03-24 08:13

(2014-03-24 07:12)KingBonecrusher Wrote:  Very sad, hasn`t solved my problem. It stucks at the same position :-(

Did you only try the solution I quoted in my message, or did you follow the link I posted and check the other options listed there, too?

As I've never seen RPK, maybe it's a SCCM in disguise, so one of the fixes listed for the WDS + SCCM works for you?

-Stefan


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-24 12:59

I have only WDS, no SCCM. I have applied the patches to the bcd files. I have used your code...

Code:
dhcp
set 252:string \Boot\BCD
imgexec tftp://${next-server}/Boot\${arch}\wdsnbp.com

Normally i have loaded the wdsnbp.com from an alternate server, direct loading fails instantly.... :huh!

Ipxe show the following error code:


(Error code 3d1260)

->
Error: Inappropriate I/O control operation


case TFTP_ERR_ILLEGAL_OP: return -ENOTTY;


RE: iPXE & WDS [Prestaged: false] - BAUR-ITCS - 2014-03-24 23:01

Don't use

Code:
dhcp
set 252:string \Boot\BCD
imgexec tftp://${next-server}/Boot\${arch}\wdsnbp.com

a) I only used that during my experiments, but it doesn't do any good.
b) you're missing the part that populates {$arch}, so it is bound to fail*.

Either pass no parameters to iPXE at all or use what you previously used, I'd say.

-Stefan

* that part would be
Code:
cpuid --ext 29 && set arch x64 || set arch x86
which was run before dhcp in the sample I took it from, however, any line before the imgexec one should do.


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-24 23:44

Hi Stefan

Yes, sure ;-)

I know, but if the file is not found, you get an file not found message instead of 3d1260, even if the path is wrong or with non existent variables.

It seems that the wds-tftp rejects ipxe request completely.

I`ve tried:
Code:
dhcp
set net0/next-server ${next-server}
imgexec tftp://${next-server}/Boot\x64\wdsnbp.com

I`ve compiled a debug version, maybe this gives me a hint...


RE: iPXE & WDS [Prestaged: false] - BAUR-ITCS - 2014-03-24 23:52

(2014-03-24 23:44)KingBonecrusher Wrote:  It seems that the wds-tftp rejects ipxe request completely.

Not in general, as iPXE and WDS work as expected in my test environment.

Are you sure it isn't related to you using literal backslashes? I'm rather sure I saw examples that used %5C instead.

Also, in the picture you posted at the beginning of the thread, you're loading a wdsbnp.com from the x86 directory, then you try to TFTP pxeboot.n12 from the x64 directory. Seems a bit odd to me.

Maybe your best bet is to use iPXE interactively and go through the steps manually, possibly with tcpdump on the wire, to see what's actually happening "behind the scenes".

-Stefan


[SOLVED] RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-25 09:04

Hi Stefan!

It must be an issue with iPXE.

It works now, but not with iPXE, i`am using pxelinux and pxechn.c32! First try, SUCCESS!!

Code:
LABEL wdschk
menu label WINDOWS DEPLOYMENT SERVER
  KERNEL pxelinux.cfg\modules\ifcpu64.c32
  APPEND wds64 -- wds32

label wds32
menu label wds32
menu hide
     KERNEL pxelinux.cfg\modules\pxechn.c32
     APPEND xx.xx.xx.xx::boot\x86\wdsnbp.com -W

label wds64
menu label wds64
menu hide
     KERNEL pxelinux.cfg\modules\pxechn.c32
     APPEND xx.xx.xx.xx::boot\x64\wdsnbp.com -W

It works like it should.... :-)


RE: iPXE & WDS [Prestaged: false] - BloodFox - 2014-03-29 02:57

(2014-03-24 12:59)KingBonecrusher Wrote:  I have only WDS, no SCCM. I have applied the patches to the bcd files. I have used your code...

Code:
dhcp
set 252:string \Boot\BCD
imgexec tftp://${next-server}/Boot\${arch}\wdsnbp.com

Normally i have loaded the wdsnbp.com from an alternate server, direct loading fails instantly.... :huh!

Ipxe show the following error code:


(Error code 3d1260)

->
Error: Inappropriate I/O control operation


case TFTP_ERR_ILLEGAL_OP: return -ENOTTY;

i got this error too, and i know why:
iPXE send TFTP Request is this: /Boot\${arch}\wdsnbp.com
the "/" is reason, WDS TFTP dosn't locate "/", but "\" or "" is ok

so, modify source code tftp.c

static int tftp_send_rrq ( struct tftp_request *tftp ) {
const char *path = tftp->uri->path;

modify to:

static int tftp_send_rrq ( struct tftp_request *tftp ) {
const char *path = tftp->uri->path + 1;

BTW: i'm sorry, my english is very poor. Sad


RE: iPXE & WDS [Prestaged: false] - KingBonecrusher - 2014-03-31 09:42

(2014-03-29 02:57)BloodFox Wrote:  
(2014-03-24 12:59)KingBonecrusher Wrote:  I have only WDS, no SCCM. I have applied the patches to the bcd files. I have used your code...

Code:
dhcp
set 252:string \Boot\BCD
imgexec tftp://${next-server}/Boot\${arch}\wdsnbp.com

Normally i have loaded the wdsnbp.com from an alternate server, direct loading fails instantly.... :huh!

Ipxe show the following error code:


(Error code 3d1260)

->
Error: Inappropriate I/O control operation


case TFTP_ERR_ILLEGAL_OP: return -ENOTTY;

i got this error too, and i know why:
iPXE send TFTP Request is this: /Boot\${arch}\wdsnbp.com
the "/" is reason, WDS TFTP dosn't locate "/", but "\" or "" is ok

so, modify source code tftp.c

static int tftp_send_rrq ( struct tftp_request *tftp ) {
const char *path = tftp->uri->path;

modify to:

static int tftp_send_rrq ( struct tftp_request *tftp ) {
const char *path = tftp->uri->path + 1;

BTW: i'm sorry, my english is very poor. Sad

I will try it! Could be the problem!

But at all, take a look on pxechn.c32, works really nice here!