freedombone-image-makefile 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. #!/usr/bin/make
  2. # _____ _ _
  3. # | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
  4. # | __| _| -_| -_| . | . | | . | . | | -_|
  5. # |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
  6. #
  7. # Freedom in the Cloud
  8. #
  9. # A debian image builder, based upon freedom-maker Makefile
  10. #
  11. # License
  12. # =======
  13. #
  14. # This program is free software: you can redistribute it and/or modify
  15. # it under the terms of the GNU Affero General Public License as published by
  16. # the Free Software Foundation, either version 3 of the License, or
  17. # (at your option) any later version.
  18. #
  19. # This program is distributed in the hope that it will be useful,
  20. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  22. # GNU Affero General Public License for more details.
  23. #
  24. # You should have received a copy of the GNU Affero General Public License
  25. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  26. # Where to fetch packages
  27. MIRROR ?= http://httpredir.debian.org/debian
  28. BUILD_MIRROR ?= http://httpredir.debian.org/debian
  29. IMAGE_SIZE ?= 8G
  30. IMAGE_NAME ?= 'full'
  31. SUITE ?= stretch
  32. # include source packages in image?
  33. SOURCE ?= false
  34. # yes no
  35. BUILD = $(MACHINE)-$(ARCHITECTURE)
  36. TODAY := $(shell date +%Y-%m-%d)
  37. NAME = build/$(PROJECT_NAME)-$(IMAGE_NAME)-$(TODAY)_$(BUILD)
  38. IMAGE = $(NAME).img
  39. ARCHIVE = $(IMAGE).xz
  40. SIGNATURE = $(ARCHIVE).sig
  41. OWNER = 1000
  42. ifeq ("$CONTINUOUS_INTEGRATION", "")
  43. XZ = xz --no-warn --verbose --keep --threads=0 -3 $(IMAGE)
  44. SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE)
  45. else
  46. XZ =
  47. SIGN =
  48. endif
  49. # settings for `make test`
  50. TEST_SSH_PORT = 2222
  51. TEST_FIRSTRUN_WAIT_TIME = 120 # seconds
  52. USERNAME ?= $(echo $USER)
  53. PASSWORD ?= $(PROJECT_NAME)
  54. # IP address of the router (gateway)
  55. ROUTER_IP_ADDRESS ?= "192.168.1.254"
  56. # The fixed IP address of the Beaglebone Black (or other SBC) on your local network
  57. BOX_IP_ADDRESS ?= "192.168.1.55"
  58. # DNS
  59. NAMESERVER1 ?= '91.239.100.100'
  60. NAMESERVER2 ?= '89.233.43.71'
  61. NAMESERVER3 ?= '213.73.91.35'
  62. NAMESERVER4 ?= '85.214.73.63'
  63. NAMESERVER5 ?= '84.200.69.80'
  64. NAMESERVER6 ?= '84.200.70.40'
  65. # Using taskset to pin build process to single core. This is a
  66. # workaround for a qemu-user-static issue that causes builds to
  67. # hang. (See Debian bug #769983 for details.)
  68. MAKE_IMAGE = ARCHITECTURE=$(ARCHITECTURE) MACHINE=$(MACHINE) SOURCE=$(SOURCE) \
  69. MIRROR=$(MIRROR) SUITE=$(SUITE) OWNER=$(OWNER) \
  70. BUILD_MIRROR=$(BUILD_MIRROR) \
  71. MY_USERNAME=$(USERNAME) \
  72. MY_PASSWORD=$(PASSWORD) \
  73. ROUTER_IP_ADDRESS=$(ROUTER_IP_ADDRESS) \
  74. BOX_IP_ADDRESS=$(BOX_IP_ADDRESS) \
  75. NAMESERVER1=$(NAMESERVER1) \
  76. NAMESERVER2=$(NAMESERVER2) \
  77. NAMESERVER3=$(NAMESERVER3) \
  78. NAMESERVER4=$(NAMESERVER4) \
  79. NAMESERVER5=$(NAMESERVER5) \
  80. NAMESERVER6=$(NAMESERVER6) \
  81. CUSTOM_SETUP=$(CUSTOM_SETUP) \
  82. IMAGE_SIZE=$(IMAGE_SIZE) taskset 0x01 $(PROJECT_NAME)-image-make $(NAME)
  83. # build Beaglebone SD card image
  84. beaglebone: prep
  85. $(eval ARCHITECTURE = armhf)
  86. $(eval MACHINE = beaglebone)
  87. $(MAKE_IMAGE)
  88. @rm -f $(ARCHIVE)
  89. $(XZ)
  90. @echo ""
  91. $(SIGN)
  92. @echo "Build complete."
  93. # build Cubieboard2 SD card image
  94. cubieboard2: prep
  95. $(eval ARCHITECTURE = armhf)
  96. $(eval MACHINE = cubieboard2)
  97. $(MAKE_IMAGE)
  98. @rm -f $(ARCHIVE)
  99. $(XZ)
  100. @echo ""
  101. $(SIGN)
  102. @echo "Build complete."
  103. # build PCDuino3 SD card image
  104. pcduino3: prep
  105. $(eval ARCHITECTURE = armhf)
  106. $(eval MACHINE = pcduino3)
  107. $(MAKE_IMAGE)
  108. @rm -f $(ARCHIVE)
  109. $(XZ)
  110. @echo ""
  111. $(SIGN)
  112. @echo "Build complete."
  113. # build CubieTruck SD card image
  114. cubietruck: prep
  115. $(eval ARCHITECTURE = armhf)
  116. $(eval MACHINE = cubietruck)
  117. $(MAKE_IMAGE)
  118. @rm -f $(ARCHIVE)
  119. $(XZ)
  120. @echo ""
  121. $(SIGN)
  122. @echo "Build complete."
  123. # build A20 OLinuXino Lime SD card image
  124. a20-olinuxino-lime: prep
  125. $(eval ARCHITECTURE = armhf)
  126. $(eval MACHINE = a20-olinuxino-lime)
  127. $(eval IMAGE = $(NAME).img)
  128. $(MAKE_IMAGE)
  129. rm -f $(ARCHIVE)
  130. $(XZ)
  131. @echo ""
  132. $(SIGN)
  133. # build A20 OLinuXino Lime2 SD card image
  134. a20-olinuxino-lime2: prep
  135. $(eval ARCHITECTURE = armhf)
  136. $(eval MACHINE = a20-olinuxino-lime2)
  137. $(MAKE_IMAGE)
  138. @rm -f $(ARCHIVE)
  139. $(XZ)
  140. @echo ""
  141. $(SIGN)
  142. @echo "Build complete."
  143. # build A20 OLinuXino Micro SD card image
  144. a20-olinuxino-micro: prep
  145. $(eval ARCHITECTURE = armhf)
  146. $(eval MACHINE = a20-olinuxino-micro)
  147. $(MAKE_IMAGE)
  148. @rm -f $(ARCHIVE)
  149. $(XZ)
  150. @echo ""
  151. $(SIGN)
  152. @echo "Build complete."
  153. # build an i386 image
  154. i386: prep
  155. $(eval ARCHITECTURE = i386)
  156. $(eval MACHINE = all)
  157. $(MAKE_IMAGE)
  158. @rm -f $(ARCHIVE)
  159. $(XZ)
  160. @echo ""
  161. $(SIGN)
  162. @echo "Build complete."
  163. # build an i686 image
  164. i686: prep
  165. $(eval ARCHITECTURE = i686)
  166. $(eval MACHINE = all)
  167. $(MAKE_IMAGE)
  168. @rm -f $(ARCHIVE)
  169. $(XZ)
  170. @echo ""
  171. $(SIGN)
  172. @echo "Build complete."
  173. # build an amd64 image
  174. amd64: prep
  175. $(eval ARCHITECTURE = amd64)
  176. $(eval MACHINE = all)
  177. $(MAKE_IMAGE)
  178. @rm -f $(ARCHIVE)
  179. $(XZ)
  180. @echo ""
  181. $(SIGN)
  182. @echo "Build complete."
  183. # build an PC Engines APU image
  184. apu: prep
  185. $(eval ARCHITECTURE = amd64)
  186. $(eval MACHINE = all)
  187. $(MAKE_IMAGE)
  188. @rm -f $(ARCHIVE)
  189. $(XZ)
  190. @echo ""
  191. $(SIGN)
  192. @echo "Build complete."
  193. # build a qemu image
  194. qemu: qemu-i386
  195. qemu-i386: prep
  196. $(eval ARCHITECTURE = i386)
  197. $(eval MACHINE = qemu)
  198. $(MAKE_IMAGE)
  199. # Convert image to qemu format
  200. qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2
  201. @rm -f $(ARCHIVE)
  202. $(XZ)
  203. @echo ""
  204. $(SIGN)
  205. @echo "Build complete."
  206. qemu-x86_64: prep
  207. $(eval ARCHITECTURE = x86_64)
  208. $(eval MACHINE = qemu)
  209. $(MAKE_IMAGE)
  210. # Convert image to qemu format
  211. qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2
  212. @rm -f $(ARCHIVE)
  213. $(XZ)
  214. @echo ""
  215. $(SIGN)
  216. @echo "Build complete."
  217. vendor/vmdebootstrap/vmdebootstrap: vendor-patches/vmdebootstrap/*.patch
  218. freedombone-image-vmdebootstrap
  219. prep: vendor/vmdebootstrap/vmdebootstrap
  220. mkdir -p build
  221. clean:
  222. -rm -f build/$(PROJECT_NAME).log
  223. distclean: clean
  224. sudo rm -rf build