Version 4 (modified by 18 years ago) ( diff ) | ,
---|
Go back —> Documentation —> Orbit-PXE
Loading Orbit-PXE
Whether you are imaging a node, saving a node image or doing inventory control Orbit nodes get orbit-pxe image loaded first into RAM. The way this is accomplished is by having the PXE server make a symbolic link of the node's IP address in hex to the orbit-pxe configuration file on the TFTP server. By default PXE configuration is to have the node boot off its local hard disk.
/tftpboot/pxelinux.cfg/default
default harddisk label harddisk localboot 0
When orbit-pxe is to be loaded the nodehandler first tells the PXE server to set the symbolic link up to the orbit-pxe configuration. It does this by issuing an http GET request to the the following URL:
http://pxe:5012/pxe/setBootImage?img=<image name>&node=<node ID>&ip=<ip address of node>
The PXE server in turn then creates a symbolic link for the respective IP address in hex. For example, if the node has an IP address of 10.18.1.2 (the case of sandbox8, node1-2) the respective IP address in hex is 0x0A.12.01.12 and as such its symbolic links' filename will be 0A120112.
/tftpboot/pxelinux.cfg/0A120112 —> orbit-2.0.0
DEFAULT boel LABEL boel KERNEL linux-orbit-pxe-2.6.20.4 APPEND rw init=/sbin/init initrd=initramfs-orbit-pxe-2.0.0.gz console=tty0 console=ttyS0,9600 DISPLAY message.txt PROMPT 1 TIMEOUT 1
The specific version of orbit-pxe that is to be symlinked to is controlled by the nodehanlder. After the symbolic link request the nodehandler will the reboot the node and based on this example the node will then load linux-orbit-pxe-2.6.20.4 with initramfs-orbit-pxe-2.0.0.gz as its initramfs cpio archive. The kernel then boots and finally calls /etc/init.d/rcS:
#!/bin/sh NETDEV_0="eth0" NETDEV_DHCP="eth1" UDHCPC_SCRIPT="/etc/udhcp.script" UDHCPC="/sbin/udhcpc" IP_CONFIG="/bin/ip" mount -t proc proc /proc # Get network up $IP_CONFIG link set $NETDEV_0 up $IP_CONFIG link set $NETDEV_DHCP up $UDHCPC -i $NETDEV_DHCP -s $UDHCPC_SCRIPT cat /.orbit_image # Start nodeagent nodeagent&
After this nodeagent will just wait until nodehandler issues it further commands.