diff --git a/Makefile b/Makefile index 56e1a2ca..1ff464ee 100644 --- a/Makefile +++ b/Makefile @@ -1,118 +1,38 @@ -DOCKER_BINARY_URL := https://github.com/rancher/docker/releases/download/v1.7.1-ros-1/docker-1.7.1 - - -FORCE_PULL := 0 -DOCKER_BINARY := $(shell basename $(DOCKER_BINARY_URL)) -pwd := $(shell pwd) -include scripts/build-common -include scripts/version +include common.make compile: bin/rancheros -all: clean ros-build-base package +all: clean ros-build-base build-all ros-build-base: docker build -t ros-build-base -f Dockerfile.base . -ros-build: +ros-build-image: docker build -t ros-build . -docker-run: ros-build - docker rm -fv ros-build > /dev/null 2>&1 || : - docker run -v /var/run/docker.sock:/var/run/docker.sock --name=ros-build -i ros-build +bin/rancheros: ros-build-image + ./scripts/docker-run.sh make -f Makefile.docker $@ -CD := $(BUILD)/cd - -assets bin $(DIST)/artifacts $(CD)/boot/isolinux: - mkdir -p $@ - - -ifdef CONTAINED - - -assets/$(DOCKER_BINARY): assets - cd assets && curl -OL "$(DOCKER_BINARY_URL)" - -assets/docker: assets/$(DOCKER_BINARY) - mv assets/$(DOCKER_BINARY) $@ - chmod +x $@ - -bin/rancheros: bin - godep go build -tags netgo -ldflags "-X github.com/rancherio/os/config.VERSION $(VERSION) -linkmode external -extldflags -static" -o $@ - strip --strip-all $@ - -copy-images: - ./scripts/copy-images -.PHONY: copy-images - -$(DIST)/artifacts/vmlinuz: $(DIST)/artifacts copy-images - mv $(BUILD)/kernel/vmlinuz $@ - - -INITRD_DIR := $(BUILD)/initrd - -$(INITRD_DIR)/images.tar: bin/rancheros - ln -sf bin/rancheros ./ros - for i in `./ros c images -i os-config.yml`; do [ "$(FORCE_PULL)" != "1" ] && docker inspect $$i >/dev/null 2>&1 || docker pull $$i; done - docker save `./ros c images -i os-config.yml` > $@ - - -$(DIST)/artifacts/initrd: $(DIST)/artifacts bin/rancheros assets/docker copy-images $(INITRD_DIR)/images.tar - mv $(BUILD)/kernel/lib $(INITRD_DIR) - mv assets/docker $(INITRD_DIR) - cp os-config.yml $(INITRD_DIR) - cp bin/rancheros $(INITRD_DIR)/init - cd $(INITRD_DIR) && find | cpio -H newc -o | lzma -c > $@ - -$(DIST)/artifacts/rancheros.iso: $(DIST)/artifacts/initrd $(CD)/boot/isolinux - cp $(DIST)/artifacts/initrd $(CD)/boot - cp $(DIST)/artifacts/vmlinuz $(CD)/boot - cp scripts/isolinux.cfg $(CD)/boot/isolinux - cp /usr/lib/ISOLINUX/isolinux.bin $(CD)/boot/isolinux - cp /usr/lib/syslinux/modules/bios/ldlinux.c32 $(CD)/boot/isolinux - cd $(CD) && xorriso -publisher "Rancher Labs, Inc." \ - -as mkisofs \ - -l -J -R -V "RancherOS" \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ - -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ - -o $@ $(CD) - -$(DIST)/artifacts/iso-checksums.txt: $(DIST)/artifacts/rancheros.iso - cd $(DIST)/artifacts && for algo in 'sha256' 'md5'; do echo "$$algo: `$${algo}sum rancheros.iso`" >> $@; done - -package: \ - $(DIST)/artifacts/initrd \ - $(DIST)/artifacts/vmlinuz \ - $(DIST)/artifacts/rancheros.iso \ - $(DIST)/artifacts/iso-checksums.txt - - -else - - -bin/rancheros: - @echo make $@ | make docker-run docker cp ros-build:/go/src/github.com/rancherio/os/$@ $(dir $@) -.PHONY: bin/rancheros -package: - @echo make FORCE_PULL=$(FORCE_PULL) $@ | make docker-run + +build-all: ros-build-image + ./scripts/docker-run.sh make -f Makefile.docker FORCE_PULL=$(FORCE_PULL) $@ + docker cp ros-build:/go/src/github.com/rancherio/os/bin/rancheros bin docker cp ros-build:/go/src/github.com/rancherio/os/dist/artifacts dist -endif - - version: @echo $(VERSION) + clean: rm -rf bin build dist gopath .dockerfile -.PHONY: all compile clean dist docker-run download package ros-build ros-build-base version + +.PHONY: all compile clean build-all ros-build-image ros-build-base version bin/rancheros diff --git a/Makefile.docker b/Makefile.docker new file mode 100644 index 00000000..1f263062 --- /dev/null +++ b/Makefile.docker @@ -0,0 +1,79 @@ + +DOCKER_BINARY_URL := https://github.com/rancher/docker/releases/download/v1.7.1-ros-1/docker-1.7.1 + +include common.make + + +bin/rancheros: bin + godep go build -tags netgo -ldflags "-X github.com/rancherio/os/config.VERSION $(VERSION) -linkmode external -extldflags -static" -o $@ + strip --strip-all $@ + + +pwd := $(shell pwd) +include scripts/build-common +CD := $(BUILD)/cd + +assets bin $(DIST)/artifacts $(CD)/boot/isolinux: + mkdir -p $@ + + +DOCKER_BINARY := $(shell basename $(DOCKER_BINARY_URL)) + +assets/$(DOCKER_BINARY): assets + cd assets && curl -OL "$(DOCKER_BINARY_URL)" + +assets/docker: assets/$(DOCKER_BINARY) + mv assets/$(DOCKER_BINARY) $@ + chmod +x $@ + +copy-images: + ./scripts/copy-images + +$(DIST)/artifacts/vmlinuz: $(DIST)/artifacts copy-images + mv $(BUILD)/kernel/vmlinuz $@ + + +INITRD_DIR := $(BUILD)/initrd + +$(INITRD_DIR)/images.tar: bin/rancheros + ln -sf bin/rancheros ./ros + for i in `./ros c images -i os-config.yml`; do [ "$(FORCE_PULL)" != "1" ] && docker inspect $$i >/dev/null 2>&1 || docker pull $$i; done + docker save `./ros c images -i os-config.yml` > $@ + + +$(DIST)/artifacts/initrd: $(DIST)/artifacts bin/rancheros assets/docker copy-images $(INITRD_DIR)/images.tar + mv $(BUILD)/kernel/lib $(INITRD_DIR) + mv assets/docker $(INITRD_DIR) + cp os-config.yml $(INITRD_DIR) + cp bin/rancheros $(INITRD_DIR)/init + cd $(INITRD_DIR) && find | cpio -H newc -o | lzma -c > $@ + +$(DIST)/artifacts/rancheros.iso: $(DIST)/artifacts/initrd $(CD)/boot/isolinux + cp $(DIST)/artifacts/initrd $(CD)/boot + cp $(DIST)/artifacts/vmlinuz $(CD)/boot + cp scripts/isolinux.cfg $(CD)/boot/isolinux + cp /usr/lib/ISOLINUX/isolinux.bin $(CD)/boot/isolinux + cp /usr/lib/syslinux/modules/bios/ldlinux.c32 $(CD)/boot/isolinux + cd $(CD) && xorriso -publisher "Rancher Labs, Inc." \ + -as mkisofs \ + -l -J -R -V "RancherOS" \ + -no-emul-boot -boot-load-size 4 -boot-info-table \ + -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ + -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ + -o $@ $(CD) + +$(DIST)/artifacts/iso-checksums.txt: $(DIST)/artifacts/rancheros.iso + cd $(DIST)/artifacts && for algo in 'sha256' 'md5'; do echo "$$algo: `$${algo}sum rancheros.iso`" >> $@; done + +version: + @echo $(VERSION) + +build-all: \ + bin/rancheros \ + $(DIST)/artifacts/initrd \ + $(DIST)/artifacts/vmlinuz \ + $(DIST)/artifacts/rancheros.iso \ + $(DIST)/artifacts/iso-checksums.txt + + +.PHONY: build-all version copy-images diff --git a/common.make b/common.make new file mode 100644 index 00000000..264bfecf --- /dev/null +++ b/common.make @@ -0,0 +1,3 @@ + +FORCE_PULL := 0 +include scripts/version diff --git a/scripts/build-common b/scripts/build-common index 182c1b56..c755576d 100644 --- a/scripts/build-common +++ b/scripts/build-common @@ -1,3 +1,2 @@ -ARTIFACTS=$(pwd)/assets BUILD=$(pwd)/build DIST=$(pwd)/dist diff --git a/scripts/ci b/scripts/ci index 834c3598..701c99a3 100755 --- a/scripts/ci +++ b/scripts/ci @@ -9,4 +9,4 @@ fi docker build -t ros-build-base -f Dockerfile.base . docker build -t ros-build . -echo make package | docker run -v /var/run/docker.sock:/var/run/docker.sock --name=ros-build -i ros-build +./scripts/docker-run.sh make -f Makefile.docker dist diff --git a/scripts/docker-run.sh b/scripts/docker-run.sh new file mode 100755 index 00000000..c1745d0d --- /dev/null +++ b/scripts/docker-run.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +docker rm -fv ros-build > /dev/null 2>&1 || : +exec docker run -v /var/run/docker.sock:/var/run/docker.sock --name=ros-build ros-build "$@" diff --git a/scripts/run b/scripts/run index 0facff84..869aa8f8 100755 --- a/scripts/run +++ b/scripts/run @@ -12,7 +12,7 @@ KERNEL=${BASE}/dist/artifacts/vmlinuz INITRD=${BASE}/dist/artifacts/initrd NO_COMPRESS_INITRD=${INITRD}.none HD=${BASE}/state/empty-hd.img -HD_GZ=${ARTIFACTS}/empty-hd.img.gz +HD_GZ=${BASE}/assets/empty-hd.img.gz INITRD_TMP=${BUILD}/$(sha1sum ${INITRD} | awk '{print $1}') INITRD_CURRENT=${BUILD}/initrd-current INITRD_TEST=${BUILD}/initrd.test