[arch-releng] Make archiso PXE & NBD friendly (server and client mode)

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Fri Mar 19 00:35:27 CET 2010

On 03/14/2010 11:50 PM, Gerardo Exequiel Pozzi wrote:
> On 03/14/2010 06:08 PM, Dieter Plaetinck wrote:
>> On Sun, 14 Mar 2010 06:39:20 -0300
>> Gerardo Exequiel Pozzi<vmlinuz386 at yahoo.com.ar>  wrote:
>>> Hello
>>> I recently done some changes for archiso, to make it booteable via
>>> PXE (Preboot eXecution Environment) and using NBD (Network Block
>>> Device). Also a minimal server script can be launched to act as
>>> server ;)
>> cool.
> absolutelly :)
>> i always wanted support for pxe.
>> is there a specific reason to choose nbd over nfs?
> Good question. I chosed NBD instead of NFS because is really simple.
> 1) [From client side] No changes needed to [archiso] hook. Just add 
> another hook [nbd]. This hook setup a /dev/archiso pointing to 
> /dev/nbd0 (created via only one command)
> I think that doing via NFS requires:
> - nfs hook can not be used directly (archiso mount handler will be 
> over nfs mount handler)
> - mounting nfs must be under /bootmnt, and in archiso hook must skip 
> mouting /dev/archiso if booted from nfs.
> 2) [From server side] Run only one command to setup the NBD server.
> I think that doing via NFS requires:
> - setup exports, and other files.
> - launch nfs and all daemon required (rpcbind, nfs-common, nfs-server)
>>> If booted from network, there is a [nbd] hook, (based on [net]), that
>>> configures an IP address, then setup a /dev/nbd0 (via nbd-client).
>>> (and /dev/archiso will point to this device), all the rest is done by
>>> current archiso hook :) (copytoram option can be used)
>>> If booted normally, [nbd] hook does nothing. Inside the /root, there
>>> is a simple script that launches dnsmasq enabling tftp and dhcp
>>> server, finally start the nbd-server that serve the iso file via
>>> network.
>> i'm confused, this whole thing is meant for clients, right?
>> what does the tftp/dhcp server has to do with the client?
> In other words:
> - archiso with [nbd] hook, is capable to boot completelly from ethernet.
> - The [nbd] hook detects that if ip= parameter is present, the execute 
> the needed actions, if no ip= paramter does nothing.
> - The ip= parameter is automagically added via IPAPPEND 1 at syslinux 
> config (retrived from server)
> Thats all for archiso.
> OK but there is a "bonus", in my custom config (avr-toolchain). I 
> added two aditional files (pxelinux.0 pxelinux.cfg/default) and two 
> packages (dnsmasq nbd) to make this live-media capable to acts as 
> server for archiso.
> The "bonus^2" in my live-media there is one dirty script thats execute 
> dnsmasq and nbd-server.
>> also, do you think we could just merge this in archiso and always use
>> the nbd hook? (knowing that it won't do anything in 99% of the cases,
>> when people do a regular boot)
> Maybe:
> - initramfs image grows from 5M to 8M.
> - nbd hooks does nothing in normal process (there is no ip= parameter)
> An aditional work can be done if integrated in archiso:
> - if copytoram option is used, there is no need to keep nbd-client 
> connected to the server. Aditional check can be added to disconnect 
> from the server. So the live-media will be completelly independent. 
> Anyway this conection is not used at all, but to do the right things ;)
> Videos :P
> http://www.youtube.com/watch?v=aoeC2ZpGQFQ (booting normal from USB)
> http://www.youtube.com/watch?v=inJNXsTQBOA (booting from PXE)
> Comments welcomed.
> Good week ;)
All work is done, anyone interested in review the code, here is the big 
diff against master [#1].

Anyone interested in making your own iso, can be done easily since nbd 
pkg is now in [community] (Thanks to Ionut)

Steps to make your own iso (do it as root, mkarchroot is optional but I 
recommend it):

pacman -S devtools --needed
mkarchroot /tmp/somedir base
mkarchroot -r bash /tmp/somedir
nano /etc/pacman.d/mirrorlist # uncomment your prefered mirror
pacman -Sy git squashfs-tools syslinux devtools cdrkit make nbd mkinitcpio-nfs-utils --noconfirm
cd /tmp
git clone git://github.com/djgera/archiso.git -b pxe_nbd
cd archiso/archiso
make install
cd ../configs/syslinux-iso/
make # or "make net-iso" or "make core-iso"

Setup a machine that acts as PXE server for Arch Linux Live media: (easy way):
0) Boot the image in one that machine via USB or CD.
1) login as root
2) ifconfig eth0
3) /arch/archiso-pxe-server (by default will get ip from eth0)

In another machine on the same network, set the machine to boot as PXE.

Thats all, enjoy!

[#1] http://github.com/djgera/archiso/compare/master...pxe_nbd

Gerardo Exequiel Pozzi ( djgera )
KeyID: 0x1B8C330D
Key fingerprint = 0CAA D5D4 CD85 4434 A219  76ED 39AB 221B 1B8C 330D

More information about the arch-releng mailing list