1
0

prep-release.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #!/bin/bash
  2. # prep release for upload to production container
  3. set -e
  4. # make ipxe directory to store ipxe disks
  5. mkdir -p build/ipxe
  6. # pull down upstream iPXE
  7. git clone --depth 1 https://github.com/ipxe/ipxe.git ipxe_build
  8. # copy iPXE config overrides into source tree
  9. cp ipxe/local/* ipxe_build/src/config/local/
  10. # copy certs into source tree
  11. cp script/*.crt ipxe_build/src/
  12. # build iPXE disks
  13. cd ipxe_build/src
  14. # get current iPXE hash
  15. IPXE_HASH=`git log -n 1 --pretty=format:"%H"`
  16. # generate netboot.xyz iPXE disks
  17. make bin/ipxe.dsk bin/ipxe.iso bin/ipxe.lkrn bin/ipxe.usb bin/ipxe.kpxe bin/undionly.kpxe \
  18. EMBED=../../ipxe/disks/netboot.xyz TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt
  19. mv bin/ipxe.dsk ../../build/ipxe/netboot.xyz.dsk
  20. mv bin/ipxe.iso ../../build/ipxe/netboot.xyz.iso
  21. mv bin/ipxe.lkrn ../../build/ipxe/netboot.xyz.lkrn
  22. mv bin/ipxe.usb ../../build/ipxe/netboot.xyz.usb
  23. mv bin/ipxe.kpxe ../../build/ipxe/netboot.xyz.kpxe
  24. mv bin/undionly.kpxe ../../build/ipxe/netboot.xyz-undionly.kpxe
  25. # generate netboot.xyz iPXE disk for Google Compute Engine
  26. make bin/ipxe.usb CONFIG=cloud EMBED=../../ipxe/disks/netboot.xyz-gce \
  27. TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt
  28. cp -f bin/ipxe.usb disk.raw
  29. tar Sczvf netboot.xyz-gce.tar.gz disk.raw
  30. mv netboot.xyz-gce.tar.gz ../../build/ipxe/netboot.xyz-gce.tar.gz
  31. # generate netboot.xyz-packet legacy iPXE disk
  32. make bin/undionly.kpxe \
  33. EMBED=../../ipxe/disks/netboot.xyz-packet TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt
  34. mv bin/undionly.kpxe ../../build/ipxe/netboot.xyz-packet.kpxe
  35. # generate EFI iPXE disks
  36. cp config/local/general.h.efi config/local/general.h
  37. make clean
  38. make bin-x86_64-efi/ipxe.efi \
  39. EMBED=../../ipxe/disks/netboot.xyz TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt
  40. mkdir -p efi_tmp
  41. dd if=/dev/zero of=efi_tmp/ipxe.img count=2880
  42. mformat -i efi_tmp/ipxe.img -m 0xf8 -f 2880
  43. mmd -i efi_tmp/ipxe.img ::efi ::efi/boot
  44. mcopy -i efi_tmp/ipxe.img bin-x86_64-efi/ipxe.efi ::efi/boot/bootx64.efi
  45. genisoimage -o ipxe.eiso -eltorito-alt-boot -e ipxe.img -no-emul-boot efi_tmp
  46. mv bin-x86_64-efi/ipxe.efi ../../build/ipxe/netboot.xyz.efi
  47. mv ipxe.eiso ../../build/ipxe/netboot.xyz-efi.iso
  48. # generate netboot.xyz-packet efi iPXE disk
  49. make bin-x86_64-efi/ipxe.efi \
  50. EMBED=../../ipxe/disks/netboot.xyz-packet TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt
  51. mv bin-x86_64-efi/ipxe.efi ../../build/ipxe/netboot.xyz-packet.efi
  52. # iPXE workaround
  53. # http://lists.ipxe.org/pipermail/ipxe-devel/2018-August/006254.html
  54. # apply patch to fix arm64 builds on amd64 builds
  55. sed -i '/WORKAROUND_CFLAGS/d' arch/arm64/Makefile
  56. # generate EFI arm64 iPXE disk
  57. make clean
  58. make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 \
  59. EMBED=../../ipxe/disks/netboot.xyz TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt \
  60. bin-arm64-efi/snp.efi
  61. mv bin-arm64-efi/snp.efi ../../build/ipxe/netboot.xyz-arm64.efi
  62. # generate netboot.xyz-packet-arm64 iPXE disk
  63. make clean
  64. make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 \
  65. EMBED=../../ipxe/disks/netboot.xyz-packet TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt \
  66. bin-arm64-efi/snp.efi
  67. mv bin-arm64-efi/snp.efi ../../build/ipxe/netboot.xyz-packet-arm64.efi
  68. # generate arm64 experimental
  69. cp config/local/nap.h.efi config/local/nap.h
  70. cp config/local/usb.h.efi config/local/usb.h
  71. make clean
  72. make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 \
  73. EMBED=../../ipxe/disks/netboot.xyz TRUST=ca-ipxe-org.crt,ca-netboot-xyz.crt \
  74. bin-arm64-efi/snp.efi
  75. mv bin-arm64-efi/snp.efi ../../build/ipxe/netboot.xyz-arm64-experimental.efi
  76. # return to root
  77. cd ../..
  78. # generate header for sha256-checksums file
  79. cd build/
  80. CURRENT_TIME=`date`
  81. cat > netboot.xyz-sha256-checksums.txt <<EOF
  82. # netboot.xyz bootloaders generated at $CURRENT_TIME
  83. # iPXE Commit: https://github.com/ipxe/ipxe/commit/$IPXE_HASH
  84. # Travis-CI Job: https://travis-ci.org/antonym/netboot.xyz/builds/$TRAVIS_BUILD_ID
  85. EOF
  86. # generate sha256sums for iPXE disks
  87. cd ipxe/
  88. for ipxe_disk in `ls .`
  89. do
  90. sha256sum $ipxe_disk >> ../netboot.xyz-sha256-checksums.txt
  91. done
  92. cat ../netboot.xyz-sha256-checksums.txt
  93. mv ../netboot.xyz-sha256-checksums.txt .
  94. cd ../..
  95. # generate signatures for netboot.xyz source files
  96. mkdir sigs
  97. for src_file in `ls src`
  98. do
  99. openssl cms -sign -binary -noattr -in src/$src_file \
  100. -signer script/codesign.crt -inkey script/codesign.key -certfile script/ca-netboot-xyz.crt -outform DER \
  101. -out sigs/$src_file.sig
  102. echo Generated signature for $src_file...
  103. done
  104. mv sigs src/
  105. # delete index.html so that we don't overwrite existing content type
  106. rm src/index.html
  107. # copy iPXE src code into build directory
  108. cp -R src/* build/