#!/bin/bash
NBI=ipxe.nbi
EXE=ipxe.efi
#
# the NBI image number
# must be unique
# if you build many NBI's to be served from the same server
# they must differ by this value
#
INDEX=$RANDOM
#
# the URL to chainload after launch
# you might want to redefine this one
#
URL="http://192.168.2.100/iPXE/boot.php"
URL=$1
IMAGENAME="iPXE Bootstrap Image"
# additional flags to pass to make
OPTIONS=
if [ -d "${NBI}" ]
then
if [ -d "${NBI}.old" ]
then
rm -rf "${NBI}.old"
fi
mv "${NBI}" "${NBI}.old"
fi
#
# an empty kernel cache file can not hurt
#
mkdir -p "${NBI}/i386/x86_64"
touch "${NBI}/i386/x86_64/kernelcache"
#
# lets make ourselves a boot script if URL is specified
# and build the binary
#
if [ "$URL" != "" ]
then
SCRIPTFILE="${NBI}/embedded-ipxe-script.txt"
echo "#!/ipxe" > "${SCRIPTFILE}"
echo "ifopen && dhcp && chain $URL" >> "${SCRIPTFILE}"
echo "shell || " >> "${SCRIPTFILE}"
echo "Building with chainloading to URL $URL"
make bin-x86_64-efi/ipxe.efi "EMBED=${NBI}/embedded-ipxe-script.txt"
else
echo "Building with no chainloading"
make bin-x86_64-efi/ipxe.efi
fi
# copy the output to the right location
cp bin-x86_64-efi/ipxe.efi ${NBI}/i386/ipxe.efi
#
# we place an empty disk image file
# otherwhise OS X server wont be happy serving it
#
base64 -d > "${NBI}/NetBoot.dmg.gz" << --eof--
H4sICM2XpFQAA05ldEJvb3QuZG1nAKtgTE6QYHW2YPn39/953iM9DvpvNjNMXNJ4IZRhjSn77wrGtxf2ax8p
lGD/cN6zLmauz6lvGw0FVCV1lj/etc5ZdrWSuUfMz3tFrpppP7V5jG55mN9c1/OPoXlXZOwK/dn7H+RV2Z7/
ZHP6d+z6c6fOZm0VePzoTpKExJmWxv28d88KHK440SIwb7rxQ6UzPT335ol7XS3SCf10dOuOeffjIroM63S3
rIuff+jm96+33Tl2T9ef3H/44fN/q65KVElk95fbPb9/W/jtyZiyxXVGs00mu721kJNRc9/55lqmrueje57G
cldnbQzsX771b9Xeiaf/lc6q43xzp/Syydvw2XJMLBwCCg4NDIxDgvElaMHsZZn6n1OFB4d7iGQsiGdqDdoq
4z21plDX73+53vNl1/7bi1PF7AvRjfHXX1kn2NhX5OYolKUWFWfm59kqGeoZKCmk5iXnp2TmpdsqhYa46Voo
2dtx2Si6+DuHRAa4KhTkZBaXKASEOvl4Oiso6errOxYU5KTq67uEuCgE+HgGhygAzdDXd/VTUlDKKCkpsNLX
Ly8v10sEqdJLzs8FKSzWDyjKL0gtKqn0ARqmC9Sgl1KSogS0BmI6inOAoimZySV2XJw22amVdkWpxfmlRcmp
umn5Rdk2+iAhoAxUBURJUk52BUyG0yaxqCgRzEKogqpzLCkpykwqLUkthqsGyhQDBfPS7QwqDAxMDWz0oVyE
Lmc3v8TcVCw6fBOLS1KLFJzy80sUglKT84tSFDR8nYIUrBQMNLGY45JYkohsSgqQD2EmhedUJTqCgKsjFuCE
zAFrcHRM98SmEhuAagCrTy83zrF0LidKA/GAvhqc04GEUyCISMam1gmnDR76IGCBJupKlJNsIXGmj4g0cJx6
umBJF7qGWGKf0jQEtBqWmGmcrBU0XPyD490cQ+KNjYDuMKRCWg6E0iGZ2liiFZqWAx0JApS0nOSqb+yVTpQG
4gF9NbjiT8vO+qganOBp1zkPHFrggIiAq/exQLHBAxGi3uip3hmLk9L0oXwnXx909RAAzkDlGJ52NSkjLh5s
SclG2BItWUkWkXVs9OGVA9i4gpziEtpVHLgzCf7Awhp0oxpGNQwPDa4oRf2gcNKohlENdNJAmwqQYH0HE0PQ
4J6XHVd2fk4lAwMDCwMDE5BiYGTACpj2YBcf7ADmbj6BgXQEECusDgztGkA3gAAkbhkt9iMLAgDyzcZIzBIA
AA==
--eof--
gzip -d "${NBI}/NetBoot.dmg.gz"
#
# cat com.appleBoot.plist
#
cat > "${NBI}/i386/com.appleBoot.plist" << --eof--
Kernel Flags
root-dmg=file:///BaseSystem.dmg
--eof--
#
# cat PlatformSupport
#
cat > "${NBI}/i386/PlatformSupport.plist" << --eof--
SupportedBoardIds
Mac-031B6874CF7F642A
Mac-F2268DC8
Mac-50619A408DB004DA
Mac-F2218EA9
Mac-F42D86A9
Mac-F22C8AC8
Mac-F22586C8
Mac-AFD8A9D944EA4843
Mac-942B59F58194171B
Mac-F226BEC8
Mac-7DF2A3B5E5D671ED
Mac-35C1E88140C3E6CF
Mac-77EB7D7DAF985301
Mac-2E6FAB96566FE58C
Mac-7BA5B2794B2CDB12
Mac-031AEE4D24BFF0B1
Mac-00BE6ED71E35EB86
Mac-4B7AC7E43945597E
Mac-F22C89C8
Mac-F22587A1
Mac-942459F5819B171B
Mac-F42388C8
Mac-F223BEC8
Mac-F4238CC8
Mac-F222BEC8
Mac-F227BEC8
Mac-F2208EC8
Mac-66F35F19FE2A0D05
Mac-F4238BC8
Mac-189A3D4F975D5FFC
Mac-C08A6BB70A942AC2
Mac-8ED6AF5B48C039E1
Mac-F2238AC8
Mac-FC02E91DDD3FA6A4
Mac-6F01561E16C75D06
Mac-F60DEB81FF30ACF6
Mac-81E3E92DD6088272
Mac-F2268EC8
Mac-F22589C8
Mac-3CBD00234E554E41
Mac-F22788AA
Mac-F42C86C8
Mac-F221BEC8
Mac-942C5DF58193131B
Mac-F2238BAE
Mac-F22C86C8
Mac-F2268CC8
Mac-F221DCC8
Mac-F2218FC8
Mac-742912EFDBEE19B3
Mac-27ADBB7B4CEE8E61
Mac-F65AE981FFA204ED
Mac-F42D89C8
Mac-F22587C8
Mac-F42D89A9
Mac-F2268AC8
Mac-F42C89C8
Mac-942452F5819B1C1B
Mac-F2218FA9
Mac-F42D88C8
Mac-94245B3640C91C81
Mac-F42D86C8
Mac-4BC72D62AD45599E
Mac-F2268DAE
Mac-2BD1B31983FE1663
Mac-7DF21CB3ED6977E5
Mac-F42C88C8
Mac-94245A3940C91C80
Mac-F42386C8
Mac-C3EC7CD22292981F
Mac-942B5BF58194151B
Mac-F2218EC8
SupportedModelProperties
MacBookPro4,1
Macmini5,3
Macmini5,2
Macmini5,1
iMac10,1
MacPro4,1
MacBookPro5,2
iMac8,1
MacBookPro5,4
MacBookAir4,2
iMac11,1
MacBookPro7,1
iMac11,3
MacBookPro8,2
MacBookPro3,1
iMac13,2
iMac13,3
MacPro5,1
iMac9,1
Macmini3,1
iMac13,1
iMac12,2
iMac12,1
MacBook5,1
MacBook5,2
iMac11,2
MacBookPro5,1
Macmini6,1
Macmini6,2
MacBookAir4,1
MacBookPro11,3
MacBookPro11,2
MacBookPro11,1
MacBookPro6,2
MacBookPro10,2
MacBookPro10,1
MacBookPro5,5
MacBookPro9,2
iMac14,1
iMac14,3
iMac14,2
MacBookPro6,1
MacBookAir3,1
MacBookAir3,2
Macmini4,1
Xserve3,1
MacBookAir2,1
MacBookAir6,1
MacBooKAir6,2
MacBookAir6,2
MacBookPro8,1
MacBook7,1
MacBookPro8,3
iMac7,1
MacBookPro9,1
MacBook6,1
MacBookPro5,3
MacBookAir5,2
MacPro3,1
MacBookAir5,1
--eof--
#
# NBImageInfo par
#
cat > "${NBI}/NBImageInfo.plist" << --eof--
Architectures
i386
BackwardCompatible
BootFile
${EXE}
Description
${IMAGENAME}
Index
${INDEX}
IsDefault
IsEnabled
IsInstall
Kind
1
Language
Default
Name
${IMAGENAME}
SupportsDiskless
Type
HTTP
imageType
netboot
RootPath
NetBoot.dmg
osVersion
1.0
DisabledMACAddresses
DisabledSystemIdentifiers
iMac10,1
iMac11,1
iMac11,2
iMac11,3
iMac12,1
iMac12,2
iMac13,1
iMac13,2
iMac13,3
iMac14,1
iMac14,2
iMac14,3
iMac14,4
iMac15,1
iMac7,1
iMac8,1
iMac9,1
Mac-50619A408DB004DA
MacBook5,1
MacBook5,2
MacBook6,1
MacBook7,1
MacBookAir2,1
MacBookAir3,1
MacBookAir3,2
MacBookAir4,1
MacBookAir4,2
MacBookAir5,1
MacBookAir5,2
MacBookAir6,1
MacBookAir6,2
MacBookPro10,1
MacBookPro10,2
MacBookPro11,1
MacBookPro11,2
MacBookPro11,3
MacBookPro3,1
MacBookPro4,1
MacBookPro5,1
MacBookPro5,2
MacBookPro5,3
MacBookPro5,4
MacBookPro5,5
MacBookPro6,1
MacBookPro6,2
MacBookPro7,1
MacBookPro8,1
MacBookPro8,2
MacBookPro8,3
MacBookPro9,1
MacBookPro9,2
Macmini3,1
Macmini4,1
Macmini5,1
Macmini5,2
Macmini5,3
Macmini6,1
Macmini6,2
Macmini7,1
MacPro3,1
MacPro4,1
MacPro5,1
MacPro6,1
Xserve3,1
EnabledMACAddresses
EnabledSystemIdentifiers
--eof--
# if we have zip, lets make a zip archive to easily transfer to a server
#
if [ -x /usr/bin/zip ]
then
/usr/bin/zip -r "${NBI}.zip" "${NBI}"
echo "Output packed into '${NBI}.zip'"
else
echo "Output is in '${NBI}'"
fi
# end