diff --git a/.dockerignore b/.dockerignore index 43c4ac91..962cb50c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,4 +7,5 @@ tmp state build dist +assets Godeps/_workspace/pkg diff --git a/Dockerfile.base b/Dockerfile.base index 3802b489..3355c155 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -18,9 +18,6 @@ RUN cd /usr/src/go/src && ./make.bash --no-clean 2>&1 ENV GOROOT /usr/src/go ENV PATH $GOROOT/bin:$PATH -RUN go clean -i net -RUN go install -tags netgo std - RUN mkdir -p /go/src /go/bin && chmod -R 777 /go ENV GOPATH /go ENV PATH /go/bin:$PATH diff --git a/Makefile b/Makefile index 1ff464ee..0f469fd9 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,16 @@ - include common.make compile: bin/rancheros + all: clean ros-build-base build-all ros-build-base: docker build -t ros-build-base -f Dockerfile.base . + ros-build-image: docker build -t ros-build . diff --git a/Makefile.docker b/Makefile.docker index ce36c85b..2181eb13 100644 --- a/Makefile.docker +++ b/Makefile.docker @@ -1,11 +1,12 @@ -DOCKER_BINARY_URL := https://github.com/rancher/docker/releases/download/v1.7.1-ros-1/docker-1.7.1 +DOCKER_BINARY_URL := https://github.com/rancher/docker/releases/download/v1.8.0-rc2-ros/docker-1.8.0-rc2 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 $@ +bin/rancheros: + mkdir -p bin + godep go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancherio/os/config.VERSION $(VERSION) -linkmode external -extldflags -static" -o $@ strip --strip-all $@ @@ -13,44 +14,46 @@ 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) $@ +assets/docker: + mkdir -p assets + curl -L "$(DOCKER_BINARY_URL)" > $@ chmod +x $@ + copy-images: ./scripts/copy-images -$(DIST)/artifacts/vmlinuz: $(DIST)/artifacts copy-images + +$(DIST)/artifacts/vmlinuz: copy-images + mkdir -p $(DIST)/artifacts mv $(BUILD)/kernel/vmlinuz $@ INITRD_DIR := $(BUILD)/initrd -$(INITRD_DIR)/images.tar: bin/rancheros - FORCE_PULL=$(FORCE_PULL) INITRD_DIR=$(INITRD_DIR) ./scripts/mk-images-tar.sh + +$(BUILD)/images.tar: bin/rancheros os-config.yml + FORCE_PULL=$(FORCE_PULL) BUILD=$(BUILD) ./scripts/mk-images-tar.sh -$(DIST)/artifacts/initrd: $(DIST)/artifacts bin/rancheros assets/docker copy-images $(INITRD_DIR)/images.tar +$(DIST)/artifacts/initrd: bin/rancheros assets/docker copy-images $(BUILD)/images.tar + mkdir -p $(DIST)/artifacts INITRD_DIR=$(INITRD_DIR) ./scripts/mk-initrd.sh -$(DIST)/artifacts/rancheros.iso: $(DIST)/artifacts/initrd $(CD)/boot/isolinux + +$(DIST)/artifacts/rancheros.iso: $(DIST)/artifacts/initrd CD=$(CD) ./scripts/mk-rancheros-iso.sh + $(DIST)/artifacts/iso-checksums.txt: $(DIST)/artifacts/rancheros.iso ./scripts/mk-iso-checksums-txt.sh + version: @echo $(VERSION) + build-all: \ bin/rancheros \ $(DIST)/artifacts/initrd \ @@ -59,4 +62,4 @@ build-all: \ $(DIST)/artifacts/iso-checksums.txt -.PHONY: build-all version copy-images +.PHONY: build-all version copy-images os-config.yml diff --git a/scripts/copy-images b/scripts/copy-images index ab98ce6a..82e9cc4a 100755 --- a/scripts/copy-images +++ b/scripts/copy-images @@ -10,18 +10,10 @@ VERSION=${VERSION:?"VERSION not set"} BUILD=${BUILD:?"BUILD not set"} -CONTAINER_INITRDBASE=$(docker create rancher/os-initrdbase:${VERSION}) -cleanup_initrdbase() { - docker rm -v ${CONTAINER_INITRDBASE} -} -trap cleanup_initrdbase EXIT -docker cp ${CONTAINER_INITRDBASE}:/initrd ${BUILD} # copies files to ${BUILD}/initrd - - CONTAINER_KERNEL=$(docker create rancher/os-kernel:${VERSION}) cleanup_kernel() { - cleanup_initrdbase docker rm -v ${CONTAINER_KERNEL} } trap cleanup_kernel EXIT + docker cp ${CONTAINER_KERNEL}:/kernel ${BUILD} # copies files to ${BUILD}/kernel diff --git a/scripts/docker-run.sh b/scripts/docker-run.sh index c1745d0d..c3bf3b8d 100755 --- a/scripts/docker-run.sh +++ b/scripts/docker-run.sh @@ -1,5 +1,13 @@ #!/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 "$@" +DOCKER_ARGS= +if [ -n "$BIND_DIR" ]; then + if [ "$BIND_DIR" = "." ]; then + BIND_DIR=$(pwd) + fi + DOCKER_ARGS="-t -v $BIND_DIR:/go/src/github.com/rancherio/os" +fi + +docker rm -fv ros-build >/dev/null 2>&1 || true +exec docker run -i -v /var/run/docker.sock:/var/run/docker.sock $DOCKER_ARGS --name=ros-build ros-build "$@" diff --git a/scripts/mk-images-tar.sh b/scripts/mk-images-tar.sh index 0eaf161d..25b20c91 100755 --- a/scripts/mk-images-tar.sh +++ b/scripts/mk-images-tar.sh @@ -9,4 +9,4 @@ 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` > ${INITRD_DIR}/images.tar +docker save `./ros c images -i os-config.yml` > ${BUILD}/images.tar diff --git a/scripts/mk-initrd.sh b/scripts/mk-initrd.sh index a2dd02dd..15f3db4c 100755 --- a/scripts/mk-initrd.sh +++ b/scripts/mk-initrd.sh @@ -4,8 +4,22 @@ set -ex cd $(dirname $0)/.. . scripts/build-common -mv ${BUILD}/kernel/lib ${INITRD_DIR} -mv assets/docker ${INITRD_DIR} -cp os-config.yml ${INITRD_DIR} -cp bin/rancheros ${INITRD_DIR}/init +rm -rf ${INITRD_DIR}/{usr,init} +mkdir -p ${INITRD_DIR}/usr/{bin,share/ros} + +cp -rf ${BUILD}/kernel/lib ${INITRD_DIR}/usr +cp assets/docker ${INITRD_DIR}/usr/bin/docker +cp ${BUILD}/images.tar ${INITRD_DIR}/usr/share/ros +cp os-config.yml ${INITRD_DIR}/usr/share/ros/ +cp bin/rancheros ${INITRD_DIR}/usr/bin/ros +ln -s usr/bin/ros ${INITRD_DIR}/init + +docker export $(docker create rancher/docker:1.8.0-rc2) | tar xvf - -C ${INITRD_DIR} --exclude=usr/bin/dockerlaunch \ + --exclude=usr/bin/docker \ + --exclude=usr/share/git-core \ + --exclude=usr/bin/git \ + --exclude=usr/bin/ssh \ + --exclude=usr/libexec/git-core \ + usr + cd ${INITRD_DIR} && find | cpio -H newc -o | lzma -c > ${DIST}/artifacts/initrd diff --git a/scripts/mk-rancheros-iso.sh b/scripts/mk-rancheros-iso.sh index 4b538eef..b7c288d1 100755 --- a/scripts/mk-rancheros-iso.sh +++ b/scripts/mk-rancheros-iso.sh @@ -4,6 +4,8 @@ set -ex cd $(dirname $0)/.. . scripts/build-common +mkdir -p ${CD}/boot/isolinux + cp ${DIST}/artifacts/initrd ${CD}/boot cp ${DIST}/artifacts/vmlinuz ${CD}/boot cp scripts/isolinux.cfg ${CD}/boot/isolinux diff --git a/scripts/run b/scripts/run index 1fd16a62..c05c4a38 100755 --- a/scripts/run +++ b/scripts/run @@ -60,7 +60,6 @@ if [ ! -d ${INITRD_TMP} ]; then else xz -dc ${INITRD} | cpio -idmv fi - rm -f init popd fi