[gPXE] Convert TFTP boot to gPXE

Gene Cumm gene.cumm at gmail.com
Fri Aug 19 21:49:32 EDT 2011


On Fri, Aug 19, 2011 at 15:53, Andrew Bobulsky <rulerof at gmail.com> wrote:
> Ben,
>
> Not entirely sure what the problem is there.  In my experience, 150
> megs or so should come down within 20 seconds on gigabit when using
> the undionly.kpxe build.  The best suggestion that I have is to try
> monitoring the download from the server end, if possible.  If your
> webserver doesn't let you easily do that in real time, I can suggest
> HFS.  It's a very small Windows app that makes a great HTTP File
> Server in a pinch: http://www.rejetto.com/hfs/
>
> Otherwise, perhaps someone else may have an idea :)
>
> Cheers,
> Andrew Bobulsky

1) What about Wireshark on the server?  This would be especially handy
if something else by chance is interfering (although unlikely)

2) Why not a middle of the road file (say 14 MiB but 10-20 would
suffice nicely)?

3) Is your initrd completely uncompressed?  If so, look into what
decompression your kernel supports (recent kernels can even support XZ
compressed initrds).

4) Does it eventually load that initrd or does it eventually just
fail?  What HTTP daemon?  Tried using your web browser to ensure you
can appropriately download it (including a post-download check like
sha1sum)?

5) By "bigger blocksize", are you thinking the data size that each
period character represents?  I know PXELINUX changed in the last year
or so to a much larger block size per period character.

-- 
-Gene

> On Fri, Aug 19, 2011 at 3:19 PM, Ben Francis <wirelessben at gmail.com> wrote:
>> Dimitri,
>>
>> The same initrd works when I boot over TFTP using pxelinux.0, but it doesn't
>> work from the web directory, so I think the initrd is good. Thanks for
>> archlinux link.
>>
>> Andrew, I tried loading the initrd first before the kernel, i.e.
>>
>> gPXE> dhcp net0
>> DHCP (net0 mac-address).... ok
>> gPXE> initrd http://ip-addres/gpxe/initrd
>> .............................................................................................................
>> .....................................................................................................................................................
>> .....................................................................................................................................................
>> .......................(20 lines of this)
>>
>> is the result for about ten minutes now. Same problem.
>>
>> The initrd IS a huge file at 143MB, but my network downloads that size file
>> over tftp in about a minute. gPXE was loading the 1.4 MB vmlinuz file in one
>> second, so it seems gPXE knows how to download a file quickly.
>>
>> Can the initrd command take parameters like a bigger blocksize, say 4096?
>>
>> Ben
>>
>> On Fri, Aug 19, 2011 at 6:08 PM, DiP <aspamkiller at yandex.ru> wrote:
>>>
>>> I think you have to check your initrd.
>>> For me wiki.archlinux.org directions have been very usefull in that way.
>>> Look at the "Network boot NFS root" article.
>>> I hope my working configuration will be usefull for you:
>>>
>>> dd if=/srv/mixer/boot/gpxe-1.0.1-gpxe.usb of=/dev/<flash_card>
>>>
>>> for booting client from that flashcard (I use it for clients that cannot
>>> boot from network)
>>>
>>> dhcpd.conf
>>>
>>> allow booting;
>>> allow bootp;
>>> group{
>>>        option domain-name "home";
>>>        option domain-name-servers 192.168.0.254;
>>>        server-name "server.home";
>>>        next-server 192.168.0.254;
>>>        if exists dhcp-parameter-request-list {
>>>                option dhcp-parameter-request-list = concat(option
>>>                dhcp-parameter-request-list,d0,d1,d2,d3); }
>>>        host mixer {
>>>                hardware ethernet 00:30:4f:12:d9:a6;
>>>                fixed-address 192.168.0.51;
>>>                option routers 192.168.0.254;
>>>                site-option-space "pxelinux";
>>>                option pxelinux.magic f1:00:74:7e;
>>>                option pxelinux.configfile "pxelinux.cfg/default";
>>>                option pxelinux.pathprefix "http://server.home/";
>>>                filename "http://server.home/boot.txt";
>>>        }
>>> }
>>>
>>> /srv/mixer/boot/boot.txt
>>>
>>> #!gpxe
>>> echo Greetings!
>>> kernel http://server.home/vmlinuz-linux  rootfstype=nfs root=/dev/nfs
>>> nfsroot=192.168.0.254:/srv/mixer,v3,rsize=16384,wsize=16384 ip=::::::dhcp
>>> initrd http://server.home/initramfs-linux.img boot
>>>
>>> /etc/exports
>>>
>>> /srv/mixer 192.168.0.0/24(rw,fsid=0,no_root_squash,no_subtree_check,async)
>>>
>>> and I have working archlinux installation in /srv/mixer/
>>>
>>> from nginx.conf
>>>
>>>    server {
>>>      listen 192.168.0.254;
>>>      server_name server.home;
>>>      charset utf-8;
>>>      access_log logs/tftp.access.log;
>>>      root /srv/mixer/boot;
>>>      autoindex on;
>>>    }
>>>
>>>
>>> If you want to boot your client from the standard network card ROM you
>>> have to change
>>>
>>>        filename "http://server.home/boot.txt";
>>>        to
>>>        filename "http://server.home/gpxelinux.0";
>>> so the BIOS of the card will boot gpxelinux, who will get paramethers from
>>> pxelinux.cfg/default where contents is:
>>>
>>> default linux
>>> label linux
>>> kernel http://server.home/vmlinuz-linux
>>> append initrd=http://server.home/initramfs-linux.img rootfstype=nfs
>>> root=/dev/nfs nfsroot=192.168.0.254:/srv/mixer,v3,rsize=16384,wsize=16384
>>> ip=::::::dhcp
>>>
>>> I placed all those files and dirs, eg pxelinux.cfg/ boot.txt gpxelinux.0
>>> in the /srv/mixer/boot folder.
>>>
>>> //Dimitri
>>>
>>> On Fri, 19 Aug 2011 15:30:40 +0000
>>> Ben Francis <wirelessben at gmail.com> wrote:
>>>
>>> > I have a netboot system that works over TFTP.  It consists of vmlinuz
>>> > and
>>> > initrd.
>>> >
>>> > I want to convert it to gPXE so it will boot across subnets.
>>> >
>>> > So I put the files on a web server and tried to test from the gPXE
>>> > command
>>> > line:
>>> >
>>> > *gPXE> kernel http://ip-address/gpxe/vmlinuz
>>> > *
>>> > That command works. However,
>>> >
>>> > *gPXE> initrd http://ip-address/gpxe/initrd
>>> > *
>>> > just slowly fills up the screen with periods. I tried using the
>>> > *append *command
>>> > from the working pxelinux setup:
>>> >
>>> > *append ramdisk_blocksize=4096 initrd=/gpxe/initrd root=/dev/ram0
>>> > ramdisk_size=144000000 console=ttyS3 splash=silent vga=791
>>> > *
>>> > but gpxe doesn't have append.
>>> >
>>> > The initrd is about 143MB.
>>> >
>>> > What to do?
>>> >
>>> > Ben


More information about the gPXE mailing list