freedombone-image-makefile 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #!/usr/bin/make
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # A debian image builder, based upon freedom-maker Makefile
  12. #
  13. # License
  14. # =======
  15. #
  16. # This program is free software: you can redistribute it and/or modify
  17. # it under the terms of the GNU General Public License as published by
  18. # the Free Software Foundation, either version 3 of the License, or
  19. # (at your option) any later version.
  20. #
  21. # This program is distributed in the hope that it will be useful,
  22. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  24. # GNU General Public License for more details.
  25. #
  26. # You should have received a copy of the GNU General Public License
  27. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  28. # Where to fetch packages
  29. MIRROR ?= http://httpredir.debian.org/debian
  30. BUILD_MIRROR ?= http://httpredir.debian.org/debian
  31. IMAGE_SIZE ?= 8G
  32. SUITE ?= jessie
  33. # include source packages in image?
  34. SOURCE ?= false
  35. # yes no
  36. BUILD = $(MACHINE)-$(ARCHITECTURE)
  37. TODAY := $(shell date +%Y-%m-%d)
  38. NAME = build/$(PROJECT_NAME)-$(TODAY)_$(BUILD)
  39. IMAGE = $(NAME).img
  40. ARCHIVE = $(NAME).tar.bz2
  41. SIGNATURE = $(ARCHIVE).sig
  42. OWNER = 1000
  43. TAR = tar --checkpoint=1000 --checkpoint-action=dot -cjvf
  44. SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE)
  45. # settings for `make test`
  46. TEST_SSH_PORT = 2222
  47. TEST_FIRSTRUN_WAIT_TIME = 120 # seconds
  48. USERNAME ?= $(echo $USER)
  49. PASSWORD ?= $(PROJECT_NAME)
  50. # IP address of the router (gateway)
  51. ROUTER_IP_ADDRESS ?= "192.168.1.254"
  52. # The fixed IP address of the Beaglebone Black (or other SBC) on your local network
  53. BOX_IP_ADDRESS ?= "192.168.1.55"
  54. # DNS
  55. NAMESERVER1 ?= '213.73.91.35'
  56. NAMESERVER2 ?= '85.214.20.141'
  57. # Using taskset to pin build process to single core. This is a
  58. # workaround for a qemu-user-static issue that causes builds to
  59. # hang. (See Debian bug #769983 for details.)
  60. MAKE_IMAGE = ARCHITECTURE=$(ARCHITECTURE) MACHINE=$(MACHINE) SOURCE=$(SOURCE) \
  61. MIRROR=$(MIRROR) SUITE=$(SUITE) OWNER=$(OWNER) \
  62. BUILD_MIRROR=$(BUILD_MIRROR) \
  63. MY_USERNAME=$(USERNAME) \
  64. MY_PASSWORD=$(PASSWORD) \
  65. ROUTER_IP_ADDRESS=$(ROUTER_IP_ADDRESS) \
  66. BOX_IP_ADDRESS=$(BOX_IP_ADDRESS) \
  67. NAMESERVER1=$(NAMESERVER1) \
  68. NAMESERVER2=$(NAMESERVER2) \
  69. CUSTOM_SETUP=$(CUSTOM_SETUP) \
  70. IMAGE_SIZE=$(IMAGE_SIZE) taskset 0x01 $(PROJECT_NAME)-image-make $(NAME)
  71. # build Beaglebone SD card image
  72. beaglebone: prep
  73. $(eval ARCHITECTURE = armhf)
  74. $(eval MACHINE = beaglebone)
  75. $(MAKE_IMAGE)
  76. $(TAR) $(ARCHIVE) $(IMAGE)
  77. @echo ""
  78. $(SIGN)
  79. @echo "Build complete."
  80. # build Cubieboard2 SD card image
  81. cubieboard2: prep
  82. $(eval ARCHITECTURE = armhf)
  83. $(eval MACHINE = cubieboard2)
  84. $(MAKE_IMAGE)
  85. $(TAR) $(ARCHIVE) $(IMAGE)
  86. @echo ""
  87. $(SIGN)
  88. @echo "Build complete."
  89. # build CubieTruck SD card image
  90. cubietruck: prep
  91. $(eval ARCHITECTURE = armhf)
  92. $(eval MACHINE = cubietruck)
  93. $(MAKE_IMAGE)
  94. $(TAR) $(ARCHIVE) $(IMAGE)
  95. @echo ""
  96. $(SIGN)
  97. @echo "Build complete."
  98. # build A20 OLinuXino Lime2 SD card image
  99. a20-olinuxino-lime2: prep
  100. $(eval ARCHITECTURE = armhf)
  101. $(eval MACHINE = a20-olinuxino-lime2)
  102. $(MAKE_IMAGE)
  103. $(TAR) $(ARCHIVE) $(IMAGE)
  104. @echo ""
  105. $(SIGN)
  106. @echo "Build complete."
  107. # build an i386 image
  108. i386: prep
  109. $(eval ARCHITECTURE = i386)
  110. $(eval MACHINE = all)
  111. $(MAKE_IMAGE)
  112. $(TAR) $(ARCHIVE) $(IMAGE)
  113. @echo ""
  114. $(SIGN)
  115. @echo "Build complete."
  116. # build an amd64 image
  117. amd64: prep
  118. $(eval ARCHITECTURE = amd64)
  119. $(eval MACHINE = all)
  120. $(MAKE_IMAGE)
  121. $(TAR) $(ARCHIVE) $(IMAGE)
  122. @echo ""
  123. $(SIGN)
  124. @echo "Build complete."
  125. # build a virtualbox image
  126. virtualbox: virtualbox-i386
  127. virtualbox-i386: prep
  128. $(eval ARCHITECTURE = i386)
  129. $(eval MACHINE = virtualbox)
  130. $(MAKE_IMAGE)
  131. # Convert image to vdi hard drive
  132. VBoxManage convertdd $(NAME).img $(NAME).vdi
  133. $(TAR) $(ARCHIVE) $(NAME).vdi
  134. @echo ""
  135. $(SIGN)
  136. @echo "Build complete."
  137. virtualbox-amd64: prep
  138. $(eval ARCHITECTURE = amd64)
  139. $(eval MACHINE = virtualbox)
  140. $(MAKE_IMAGE)
  141. # Convert image to vdi hard drive
  142. VBoxManage convertdd $(NAME).img $(NAME).vdi
  143. $(TAR) $(ARCHIVE) $(NAME).vdi
  144. @echo ""
  145. $(SIGN)
  146. @echo "Build complete."
  147. test: test-virtualbox
  148. test-virtualbox: virtualbox
  149. $(eval VM_NAME = $(PROJECT_NAME)-test)
  150. VBoxManage createvm --name $(VM_NAME) --ostype "Debian" --register
  151. VBoxManage storagectl $(VM_NAME) --name "SATA Controller" --add sata \
  152. --controller IntelAHCI
  153. VBoxManage storageattach $(VM_NAME) --storagectl "SATA Controller" \
  154. --port 0 --device 0 --type hdd --medium $(NAME).vdi
  155. VBoxManage modifyvm $(VM_NAME) --pae on --memory 1024 --vram 128 \
  156. --nic1 nat --natpf1 ,tcp,,$(TEST_SSH_PORT),,22
  157. VBoxManage startvm $(VM_NAME) --type headless
  158. sleep $(TEST_FIRSTRUN_WAIT_TIME) # wait for first-run to complete
  159. echo frdm |sshpass -p frdm ssh -o UserKnownHostsFile=/dev/null \
  160. -o StrictHostKeyChecking=no -t -t \
  161. -p $(TEST_SSH_PORT) fbx@127.0.0.1 \
  162. "sudo plinth --diagnose" \
  163. |tee build/$(VM_NAME)-results_$(TODAY).log
  164. VBoxManage controlvm $(VM_NAME) poweroff
  165. VBoxManage modifyvm $(VM_NAME) --hda none
  166. VBoxManage unregistervm $(VM_NAME) --delete
  167. # build a qemu image
  168. qemu: qemu-i386
  169. qemu-i386: prep
  170. $(eval ARCHITECTURE = i386)
  171. $(eval MACHINE = qemu)
  172. $(MAKE_IMAGE)
  173. # Convert image to qemu format
  174. qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2
  175. $(TAR) $(ARCHIVE) $(NAME).qcow2
  176. @echo ""
  177. $(SIGN)
  178. @echo "Build complete."
  179. qemu-x86_64: prep
  180. $(eval ARCHITECTURE = x86_64)
  181. $(eval MACHINE = qemu)
  182. $(MAKE_IMAGE)
  183. # Convert image to qemu format
  184. qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2
  185. $(TAR) $(ARCHIVE) $(NAME).qcow2
  186. @echo ""
  187. $(SIGN)
  188. @echo "Build complete."
  189. vendor/vmdebootstrap/vmdebootstrap: vendor-patches/vmdebootstrap/*.patch
  190. freedombone-image-vmdebootstrap
  191. prep: vendor/vmdebootstrap/vmdebootstrap
  192. mkdir -p build
  193. clean:
  194. -rm -f build/$(PROJECT_NAME).log
  195. distclean: clean
  196. sudo rm -rf build