#!/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-- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kernel Flags</key> <string>root-dmg=file:///BaseSystem.dmg</string> </dict> </plist> --eof-- # # cat PlatformSupport # cat > "${NBI}/i386/PlatformSupport.plist" << --eof-- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>SupportedBoardIds</key> <array> <string>Mac-031B6874CF7F642A</string> <string>Mac-F2268DC8</string> <string>Mac-50619A408DB004DA</string> <string>Mac-F2218EA9</string> <string>Mac-F42D86A9</string> <string>Mac-F22C8AC8</string> <string>Mac-F22586C8</string> <string>Mac-AFD8A9D944EA4843</string> <string>Mac-942B59F58194171B</string> <string>Mac-F226BEC8</string> <string>Mac-7DF2A3B5E5D671ED</string> <string>Mac-35C1E88140C3E6CF</string> <string>Mac-77EB7D7DAF985301</string> <string>Mac-2E6FAB96566FE58C</string> <string>Mac-7BA5B2794B2CDB12</string> <string>Mac-031AEE4D24BFF0B1</string> <string>Mac-00BE6ED71E35EB86</string> <string>Mac-4B7AC7E43945597E</string> <string>Mac-F22C89C8</string> <string>Mac-F22587A1</string> <string>Mac-942459F5819B171B</string> <string>Mac-F42388C8</string> <string>Mac-F223BEC8</string> <string>Mac-F4238CC8</string> <string>Mac-F222BEC8</string> <string>Mac-F227BEC8</string> <string>Mac-F2208EC8</string> <string>Mac-66F35F19FE2A0D05</string> <string>Mac-F4238BC8</string> <string>Mac-189A3D4F975D5FFC</string> <string>Mac-C08A6BB70A942AC2</string> <string>Mac-8ED6AF5B48C039E1</string> <string>Mac-F2238AC8</string> <string>Mac-FC02E91DDD3FA6A4</string> <string>Mac-6F01561E16C75D06</string> <string>Mac-F60DEB81FF30ACF6</string> <string>Mac-81E3E92DD6088272</string> <string>Mac-F2268EC8</string> <string>Mac-F22589C8</string> <string>Mac-3CBD00234E554E41</string> <string>Mac-F22788AA</string> <string>Mac-F42C86C8</string> <string>Mac-F221BEC8</string> <string>Mac-942C5DF58193131B</string> <string>Mac-F2238BAE</string> <string>Mac-F22C86C8</string> <string>Mac-F2268CC8</string> <string>Mac-F221DCC8</string> <string>Mac-F2218FC8</string> <string>Mac-742912EFDBEE19B3</string> <string>Mac-27ADBB7B4CEE8E61</string> <string>Mac-F65AE981FFA204ED</string> <string>Mac-F42D89C8</string> <string>Mac-F22587C8</string> <string>Mac-F42D89A9</string> <string>Mac-F2268AC8</string> <string>Mac-F42C89C8</string> <string>Mac-942452F5819B1C1B</string> <string>Mac-F2218FA9</string> <string>Mac-F42D88C8</string> <string>Mac-94245B3640C91C81</string> <string>Mac-F42D86C8</string> <string>Mac-4BC72D62AD45599E</string> <string>Mac-F2268DAE</string> <string>Mac-2BD1B31983FE1663</string> <string>Mac-7DF21CB3ED6977E5</string> <string>Mac-F42C88C8</string> <string>Mac-94245A3940C91C80</string> <string>Mac-F42386C8</string> <string>Mac-C3EC7CD22292981F</string> <string>Mac-942B5BF58194151B</string> <string>Mac-F2218EC8</string> </array> <key>SupportedModelProperties</key> <array> <string>MacBookPro4,1</string> <string>Macmini5,3</string> <string>Macmini5,2</string> <string>Macmini5,1</string> <string>iMac10,1</string> <string>MacPro4,1</string> <string>MacBookPro5,2</string> <string>iMac8,1</string> <string>MacBookPro5,4</string> <string>MacBookAir4,2</string> <string>iMac11,1</string> <string>MacBookPro7,1</string> <string>iMac11,3</string> <string>MacBookPro8,2</string> <string>MacBookPro3,1</string> <string>iMac13,2</string> <string>iMac13,3</string> <string>MacPro5,1</string> <string>iMac9,1</string> <string>Macmini3,1</string> <string>iMac13,1</string> <string>iMac12,2</string> <string>iMac12,1</string> <string>MacBook5,1</string> <string>MacBook5,2</string> <string>iMac11,2</string> <string>MacBookPro5,1</string> <string>Macmini6,1</string> <string>Macmini6,2</string> <string>MacBookAir4,1</string> <string>MacBookPro11,3</string> <string>MacBookPro11,2</string> <string>MacBookPro11,1</string> <string>MacBookPro6,2</string> <string>MacBookPro10,2</string> <string>MacBookPro10,1</string> <string>MacBookPro5,5</string> <string>MacBookPro9,2</string> <string>iMac14,1</string> <string>iMac14,3</string> <string>iMac14,2</string> <string>MacBookPro6,1</string> <string>MacBookAir3,1</string> <string>MacBookAir3,2</string> <string>Macmini4,1</string> <string>Xserve3,1</string> <string>MacBookAir2,1</string> <string>MacBookAir6,1</string> <string>MacBooKAir6,2</string> <string>MacBookAir6,2</string> <string>MacBookPro8,1</string> <string>MacBook7,1</string> <string>MacBookPro8,3</string> <string>iMac7,1</string> <string>MacBookPro9,1</string> <string>MacBook6,1</string> <string>MacBookPro5,3</string> <string>MacBookAir5,2</string> <string>MacPro3,1</string> <string>MacBookAir5,1</string> </array> </dict> </plist> --eof-- # # NBImageInfo par # cat > "${NBI}/NBImageInfo.plist" << --eof-- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Architectures</key> <array> <string>i386</string> </array> <key>BackwardCompatible</key> <false/> <key>BootFile</key> <string>${EXE}</string> <key>Description</key> <string>${IMAGENAME}</string> <key>Index</key> <integer>${INDEX}</integer> <key>IsDefault</key> <true/> <key>IsEnabled</key> <true/> <key>IsInstall</key> <false/> <key>Kind</key> <integer>1</integer> <key>Language</key> <string>Default</string> <key>Name</key> <string>${IMAGENAME}</string> <key>SupportsDiskless</key> <true/> <key>Type</key> <string>HTTP</string> <key>imageType</key> <string>netboot</string> <key>RootPath</key> <string>NetBoot.dmg</string> <key>osVersion</key> <string>1.0</string> <key>DisabledMACAddresses</key> <array/> <key>DisabledSystemIdentifiers</key> <array> <string>iMac10,1</string> <string>iMac11,1</string> <string>iMac11,2</string> <string>iMac11,3</string> <string>iMac12,1</string> <string>iMac12,2</string> <string>iMac13,1</string> <string>iMac13,2</string> <string>iMac13,3</string> <string>iMac14,1</string> <string>iMac14,2</string> <string>iMac14,3</string> <string>iMac14,4</string> <string>iMac15,1</string> <string>iMac7,1</string> <string>iMac8,1</string> <string>iMac9,1</string> <string>Mac-50619A408DB004DA</string> <string>MacBook5,1</string> <string>MacBook5,2</string> <string>MacBook6,1</string> <string>MacBook7,1</string> <string>MacBookAir2,1</string> <string>MacBookAir3,1</string> <string>MacBookAir3,2</string> <string>MacBookAir4,1</string> <string>MacBookAir4,2</string> <string>MacBookAir5,1</string> <string>MacBookAir5,2</string> <string>MacBookAir6,1</string> <string>MacBookAir6,2</string> <string>MacBookPro10,1</string> <string>MacBookPro10,2</string> <string>MacBookPro11,1</string> <string>MacBookPro11,2</string> <string>MacBookPro11,3</string> <string>MacBookPro3,1</string> <string>MacBookPro4,1</string> <string>MacBookPro5,1</string> <string>MacBookPro5,2</string> <string>MacBookPro5,3</string> <string>MacBookPro5,4</string> <string>MacBookPro5,5</string> <string>MacBookPro6,1</string> <string>MacBookPro6,2</string> <string>MacBookPro7,1</string> <string>MacBookPro8,1</string> <string>MacBookPro8,2</string> <string>MacBookPro8,3</string> <string>MacBookPro9,1</string> <string>MacBookPro9,2</string> <string>Macmini3,1</string> <string>Macmini4,1</string> <string>Macmini5,1</string> <string>Macmini5,2</string> <string>Macmini5,3</string> <string>Macmini6,1</string> <string>Macmini6,2</string> <string>Macmini7,1</string> <string>MacPro3,1</string> <string>MacPro4,1</string> <string>MacPro5,1</string> <string>MacPro6,1</string> <string>Xserve3,1</string> </array> <key>EnabledMACAddresses</key> <array/> <key>EnabledSystemIdentifiers</key> <array/> </dict> </plist> --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