Although I've not understood some things (like undionly or the fact that there are many dhcp requests from the pxe client) the following procedure works for me
Links
- iPXE server using Ubuntu http://blog.alainodea.com/en/ipxe-smartos
- SmartOS wiki http://wiki.smartos.org/display/DOC/PXE+Booting+SmartOS
- The iPXE site http://boot.ipxe.org
- Take a look to http://networkboot.org/
Install dhcp and tftp services
yum install dhcp.x86_64 yum install tftp-server.x86_64
Get iPXE undionly
cd /var/lib/tftpboot/curl http://cuddletech.com/IPXE-100612_undionly.kpxe > undionly.kpxe
curl http://boot.ipxe.org/undionly.kpxe > undionly.kpxe
Download iPxe
cd /root mkdir git cd git/ git clone git://git.ipxe.org/ipxe.git cd ipxe/src make make bin/ipxe.pxe cp bin/ipxe.pxe /var/lib/tftpboot/
DHCP Configuration
It is useful to configure the DHCP server to provide IP addresses only to known MAC addresses. I think it is also useful to link MAC addresses with IP addresses. So a server always get the usual IP.
Note: 192.168.56.10 is the TFTP server (may be the same server as DHCP)
vi /etc/dhcp/dhcpd.conf |
ddns-update-style none; option domain-name "my.domain"; option routers 192.168.56.1; option domain-name-servers 192.168.56.2, 192.168.56.3; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.56.0 netmask 255.255.255.0 { deny unknown-clients; next-server 192.168.56.10; host hcn2 { hardware ethernet 00:19:99:e0:87:30; fixed-address 192.168.56.20; if exists user-class and option user-class = "iPXE" { filename = "menu.ipxe"; } else { filename = "undionly.kpxe"; } } } |
Configuring iPXE
vi /var/lib/tftpboot/menu.ipxe |
#!ipxe ######## MAIN MENU ################### :start menu Welcome to iPXE's Boot Menu item item --gap -- ------------------------- Operating systems --------------- item smartos Boot SmartOS (platform-20121228T011955Z) item --gap -- ------------------------------ Utilities ------------------ item shell Enter iPXE shell item reboot Reboot item item exit Exit (boot local disk) choose --default smartos --timeout 30000 target && goto ${target} ########## UTILITY ITEMS #################### :shell echo Type exit to get the back to the menu shell set menu-timeout 0 goto start :failed echo Booting failed, dropping to shell goto shell :reboot reboot :exit exit ########## MENU ITEMS ####################### :smartos set base-url ${boot-url}/images/smartos/20130111T010112Z/platform/i86pc kernel ${base-url}/kernel/amd64/unix -v -B console=text,smartos=true module ${base-url}/amd64/boot_archive boot || goto failed goto start |
Preparing the SmartOS image
From the SmartOS wiki:There are 2 files of importance, the kernel ("unix") and the boot archive ("boot_archive"). The paths to these files are significant and should not be omitted. They should be:
- (prefix)/platform/i86pc/kernel/amd64/unix
- (prefix)/platform/i86pc/amd64/boot_archive
So:
cd /var/lib/tftpboot/ mkdir images cd images/ mkdir smartos cd smartos curl https://download.joyent.com/pub/iso/platform-latest.tgz > /tmp/platform-latest.tgz cat /tmp/platform-latest.tgz | tar xz ls | grep platform- | sort | tail -n1 platform-20130111T010112Z mv platform-20130111T010112Z 20130111T010112Z cd 20130111T010112Z/ mkdir platform mv i86pc/ platform/
Please note: change 20130111T010112Z with the current version
Configuring iptables
To allow DHCPvi /etc/sysconfig/iptables-config |
IPTABLES_MODULES="ip_conntrack_tftp" |
vi /etc/sysconfig/iptables |
-A INPUT -m udp -p udp --dport 67:68 --sport 67:68 -j ACCEPT -A INPUT -m tcp -p tcp --dport 69 -j ACCEPT -A INPUT -m udp -p udp --dport 69 -j ACCEPT |
/sbin/service iptables restart
Configuring xinetd
To enable TFTPvi /etc/xinetd.d/tftp |
... disable = no ... |
/etc/init.d/xinetd restart
https://download.joyent.com/pub/iso/platform-latest.tgz doesn't work anymore
ReplyDeletehttps://us-east.manta.joyent.com/Joyent_Dev/public/SmartOS/latest.html
is the correct url now