diff --git a/Dockerfile.dapper b/Dockerfile.dapper index 9b5a3f58..73af57a7 100644 --- a/Dockerfile.dapper +++ b/Dockerfile.dapper @@ -10,6 +10,36 @@ ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache ENV SHELL /bin/bash WORKDIR ${DAPPER_SOURCE} +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + cpio \ + curl \ + dosfstools \ + gccgo \ + genisoimage \ + git \ + isolinux \ + less \ + libblkid-dev \ + libmount-dev \ + libselinux1-dev \ + locales \ + module-init-tools \ + openssh-client \ + pkg-config \ + python-pip \ + qemu \ + qemu-kvm \ + rsync \ + sudo \ + syslinux-common \ + tox \ + vim \ + wget \ + xorriso + ########## General Configuration ##################### ARG DAPPER_HOST_ARCH=amd64 ARG HOST_ARCH=${DAPPER_HOST_ARCH} @@ -36,11 +66,7 @@ ARG BUILD_DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-${D ARG BUILD_DOCKER_URL_arm=https://github.com/rancher/docker/releases/download/${DOCKER_BUILD_PATCH_VERSION}/docker-${DOCKER_BUILD_VERSION}_arm ARG BUILD_DOCKER_URL_arm64=https://github.com/rancher/docker/releases/download/${DOCKER_BUILD_PATCH_VERSION}/docker-${DOCKER_BUILD_VERSION}_arm64 -ARG TOOLCHAIN_arm64=aarch64-linux-gnu -ARG TOOLCHAIN_arm=arm-linux-gnueabihf - ARG OS_RELEASES_YML=https://releases.rancher.com/os -ARG VBOX_MODULES_URL_amd64=https://github.com/rancher/os-vbox/releases/download/v0.0.2/vbox-modules.tar.gz ARG OS_SERVICES_REPO=https://raw.githubusercontent.com/${OS_REPO}/os-services ARG IMAGE_NAME=${OS_REPO}/os @@ -49,82 +75,48 @@ ARG DFS_IMAGE=${OS_REPO}/docker:v${DOCKER_VERSION}-1 ARG OS_BASE_URL_amd64=https://github.com/rancher/os-base/releases/download/v2016.05-3/os-base_amd64.tar.xz ARG OS_BASE_URL_arm64=https://github.com/rancher/os-base/releases/download/v2016.05-3/os-base_arm64.tar.xz ARG OS_BASE_URL_arm=https://github.com/rancher/os-base/releases/download/v2016.05-3/os-base_arm.tar.xz - ###################################################### # Set up environment and export all ARGS as ENV -ENV ARCH ${ARCH} -ENV BUILD_DOCKER_URL BUILD_DOCKER_URL_${ARCH} -ENV BUILD_DOCKER_URL_amd64 ${BUILD_DOCKER_URL_amd64} -ENV BUILD_DOCKER_URL_arm ${BUILD_DOCKER_URL_arm} -ENV BUILD_DOCKER_URL_arm64 ${BUILD_DOCKER_URL_arm64} -ENV DAPPER_HOST_ARCH ${DAPPER_HOST_ARCH} -ENV DFS_IMAGE ${DFS_IMAGE} -ENV DISTRIB_ID ${DISTRIB_ID} -ENV DOCKER_PATCH_VERSION ${DOCKER_PATCH_VERSION} -ENV DOCKER_URL DOCKER_URL_${ARCH} -ENV DOCKER_URL_amd64 ${DOCKER_URL_amd64} -ENV DOCKER_URL_arm ${DOCKER_URL_arm} -ENV DOCKER_URL_arm64 ${DOCKER_URL_arm64} -ENV DOCKER_VERSION ${DOCKER_VERSION} -ENV DOWNLOADS /usr/src/downloads -ENV GOPATH /go -ENV GO_VERSION 1.6.2 -ENV GOARCH $ARCH -ENV HOSTNAME_DEFAULT ${HOSTNAME_DEFAULT} -ENV HOST_ARCH ${HOST_ARCH} -ENV IMAGE_NAME ${IMAGE_NAME} -ENV KERNEL_URL KERNEL_URL_${ARCH} -ENV KERNEL_URL_amd64 ${KERNEL_URL_amd64} -ENV KERNEL_URL_arm64 ${KERNEL_URL_arm64} -ENV OS_BASE_SHA1 OS_BASE_SHA1_${ARCH} -ENV OS_BASE_URL OS_BASE_URL_${ARCH} -ENV OS_BASE_URL_amd64 ${OS_BASE_URL_amd64} -ENV OS_BASE_URL_arm ${OS_BASE_URL_arm} -ENV OS_BASE_URL_arm64 ${OS_BASE_URL_arm64} -ENV OS_RELEASES_YML ${OS_RELEASES_YML} -ENV OS_REPO ${OS_REPO} -ENV OS_SERVICES_REPO ${OS_SERVICES_REPO} -ENV PATH ${GOPATH}/bin:/usr/local/go/bin:$PATH -ENV REPO_VERSION master -ENV SELINUX_POLICY_URL ${SELINUX_POLICY_URL} -ENV TOOLCHAIN_arm ${TOOLCHAIN_arm} -ENV TOOLCHAIN_arm64 ${TOOLCHAIN_arm64} -ENV VBOX_MODULES_URL ${VBOX_MODULES_URL} -ENV VBOX_MODULES_URL VBOX_MODULES_URL_${ARCH} -ENV VBOX_MODULES_URL_amd64 ${VBOX_MODULES_URL_amd64} +ENV ARCH=${ARCH} \ + HOST_ARCH=${HOST_ARCH} + +ENV BUILD_DOCKER_URL=BUILD_DOCKER_URL_${ARCH} \ + BUILD_DOCKER_URL_amd64=${BUILD_DOCKER_URL_amd64} \ + BUILD_DOCKER_URL_arm=${BUILD_DOCKER_URL_arm} \ + BUILD_DOCKER_URL_arm64=${BUILD_DOCKER_URL_arm64} \ + DAPPER_HOST_ARCH=${DAPPER_HOST_ARCH} \ + DFS_IMAGE=${DFS_IMAGE} \ + DISTRIB_ID=${DISTRIB_ID} \ + DOCKER_PATCH_VERSION=${DOCKER_PATCH_VERSION} \ + DOCKER_URL=DOCKER_URL_${ARCH} \ + DOCKER_URL_amd64=${DOCKER_URL_amd64} \ + DOCKER_URL_arm=${DOCKER_URL_arm} \ + DOCKER_URL_arm64=${DOCKER_URL_arm64} \ + DOCKER_VERSION=${DOCKER_VERSION} \ + DOWNLOADS=/usr/src/downloads \ + GOPATH=/go \ + GO_VERSION=1.6.2 \ + GOARCH=$ARCH \ + HOSTNAME_DEFAULT=${HOSTNAME_DEFAULT} \ + IMAGE_NAME=${IMAGE_NAME} \ + KERNEL_URL=KERNEL_URL_${ARCH} \ + KERNEL_URL_amd64=${KERNEL_URL_amd64} \ + KERNEL_URL_arm64=${KERNEL_URL_arm64} \ + OS_BASE_SHA1=OS_BASE_SHA1_${ARCH} \ + OS_BASE_URL=OS_BASE_URL_${ARCH} \ + OS_BASE_URL_amd64=${OS_BASE_URL_amd64} \ + OS_BASE_URL_arm=${OS_BASE_URL_arm} \ + OS_BASE_URL_arm64=${OS_BASE_URL_arm64} \ + OS_RELEASES_YML=${OS_RELEASES_YML} \ + OS_REPO=${OS_REPO} \ + OS_SERVICES_REPO=${OS_SERVICES_REPO} \ + PATH=${GOPATH}/bin:/usr/local/go/bin:$PATH \ + REPO_VERSION=master \ + SELINUX_POLICY_URL=${SELINUX_POLICY_URL} RUN mkdir -p ${DOWNLOADS} -RUN apt-get update && \ - apt-get install -y \ - build-essential \ - ca-certificates \ - cpio \ - curl \ - dosfstools \ - gccgo \ - genisoimage \ - git \ - isolinux \ - less \ - libblkid-dev \ - libmount-dev \ - libselinux1-dev \ - locales \ - module-init-tools \ - pkg-config \ - python-pip \ - qemu \ - qemu-kvm \ - rsync \ - sudo \ - tox \ - vim \ - wget \ - xorriso - - # Download kernel RUN rm /bin/sh && ln -s /bin/bash /bin/sh RUN if [ -n "${!KERNEL_URL}" ]; then \ @@ -134,11 +126,6 @@ RUN if [ -n "${!KERNEL_URL}" ]; then \ # Download SELinux Policy RUN curl -pfL ${SELINUX_POLICY_URL} > ${DOWNLOADS}/$(basename ${SELINUX_POLICY_URL}) -# VBox URL -RUN if [ -n "${!VBOX_MODULES_URL}" ]; then \ - curl -pfL ${!VBOX_MODULES_URL} > ${DOWNLOADS}/vbox-modules.tar.gz \ - ;fi - # Install Go COPY assets/go-dnsclient.patch ${DAPPER_SOURCE} RUN ln -sf go-6 /usr/bin/go && \ @@ -162,53 +149,6 @@ RUN go get github.com/rancher/trash RUN curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m | sed 's/arm.*/arm/'` > /usr/bin/dapper && \ chmod +x /usr/bin/dapper -# Install toolchain -RUN TOOLCHAIN=TOOLCHAIN_${ARCH} && \ - echo export TOOLCHAIN=${!TOOLCHAIN} > /usr/src/toolchain-env -RUN source /usr/src/toolchain-env && \ - if [ "${TOOLCHAIN}" != "" ] && ! which ${TOOLCHAIN}-gcc; then \ - apt-get install -y gcc-${TOOLCHAIN} g++-${TOOLCHAIN} \ - ;fi - -RUN source /usr/src/toolchain-env; if [ "${TOOLCHAIN}" != "" ]; then \ - apt-get update && \ - cd /usr/local/src && \ - for i in libselinux libsepol pcre3 util-linux; do \ - apt-get build-dep -y $i && \ - apt-get source -y $i \ - ;done \ - ;fi - -RUN source /usr/src/toolchain-env; if [ "${TOOLCHAIN}" != "" ]; then \ - cd /usr/local/src/pcre3-* && \ - autoreconf && \ - CC=${TOOLCHAIN}-gcc CXX=${TOOLCHAIN}-g++ ./configure --host=${TOOLCHAIN} --prefix=/usr/${TOOLCHAIN} && \ - make -j$(nproc) && \ - make install \ - ;fi - -RUN source /usr/src/toolchain-env; if [ "${TOOLCHAIN}" != "" ]; then \ - cd /usr/local/src/libselinux-* && \ - CC=${TOOLCHAIN}-gcc CXX=${TOOLCHAIN}-g++ make CFLAGS=-Wall && \ - make PREFIX=/usr/${TOOLCHAIN} DESTDIR=/usr/${TOOLCHAIN} install && \ - cd /usr/local/src/libsepol-* && \ - CC=${TOOLCHAIN}-gcc CXX=${TOOLCHAIN}-g++ make CFLAGS=-Wall && \ - make PREFIX=/usr/${TOOLCHAIN} DESTDIR=/usr/${TOOLCHAIN} install \ - ;fi - -RUN source /usr/src/toolchain-env; if [ "${TOOLCHAIN}" != "" ]; then \ - cd /usr/local/src/util-linux-* && \ - autoreconf && \ - CC=${TOOLCHAIN}-gcc CXX=${TOOLCHAIN}-g++ ./configure --host=${TOOLCHAIN} --prefix=/usr/${TOOLCHAIN} \ - --disable-all-programs \ - --enable-libmount \ - --enable-libblkid \ - --enable-libuuid \ - --enable-mount && \ - make -j$(nproc) && \ - make install \ - ;fi - RUN cd ${DOWNLOADS} && \ curl -pfL ${!OS_BASE_URL} | tar xvJf - diff --git a/images/02-console/console.sh b/images/02-console/console.sh index ec292543..f0745676 100755 --- a/images/02-console/console.sh +++ b/images/02-console/console.sh @@ -56,6 +56,7 @@ done if [ -n "$PASSWORD" ]; then echo "rancher:$PASSWORD" | chpasswd + sed -E -i 's/(rancher:.*:).*(:.*:.*:.*:.*:.*:.*)$/\1\2/' /etc/shadow fi setup_ssh diff --git a/scripts/package-initrd b/scripts/package-initrd index 5c2050f0..7c984e34 100755 --- a/scripts/package-initrd +++ b/scripts/package-initrd @@ -10,6 +10,10 @@ INITRD=${ARTIFACTS}/initrd mkdir -p ${ARTIFACTS} +if [ ! -f ${ARTIFACTS}/vmlinuz ]; then + exit 0 +fi + if [ "$COMPRESS" == "" ]; then COMPRESS="gzip -1" fi diff --git a/scripts/package-installer b/scripts/package-installer index 59da0d3f..be0cdb49 100755 --- a/scripts/package-installer +++ b/scripts/package-installer @@ -8,8 +8,7 @@ source ./scripts/version DOCKERFILE=./scripts/installer/Dockerfile.${ARCH} if [ ! -f $DOCKERFILE ] || [ ! -f dist/artifacts/vmlinuz ] || [ ! -f dist/artifacts/initrd ]; then - echo "Error: ${DOCKERFILE}, dist/artifacts/vmlinuz or dist/artifacts/initrd is missing" - exit 1 + exit 0 fi mkdir -p ./scripts/installer/build diff --git a/scripts/package-iso b/scripts/package-iso index 3eaff7b5..97a25dc1 100755 --- a/scripts/package-iso +++ b/scripts/package-iso @@ -11,8 +11,7 @@ mkdir -p ${CD}/boot/isolinux mkdir -p ${CD}/boot/isolinux if [ ! -f ${ARTIFACTS}/vmlinuz ] || [ ! -f ${ARTIFACTS}/initrd ]; then - echo "Error: vmlinuz or initrd is missing in ${ARTIFACTS}/" - exit 1 + exit 0 fi cp ${ARTIFACTS}/initrd ${CD}/boot diff --git a/scripts/package-rootfs b/scripts/package-rootfs index 68c10c3c..a06c565c 100755 --- a/scripts/package-rootfs +++ b/scripts/package-rootfs @@ -16,8 +16,10 @@ INITRD=${ARTIFACTS}/initrd mkdir -p ${ARTIFACTS} ${PREPOP_DIR} if [ "$(docker info | grep 'Storage Driver: ' | sed 's/Storage Driver: //')" != "overlay" ]; then - echo Overlay storage driver is require do create rootfs.tar 1>&2 - exit 1 + echo Overlay storage driver is require to prepackage exploded images + echo packaging images.tar instead + tar czf ${ARTIFACTS}/rootfs.tar.gz --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} . + exit 0 fi DFS=$(docker run -d --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) ${DFS_IMAGE}${SUFFIX} ${DFS_ARGS}) @@ -27,7 +29,4 @@ docker stop ${DFS} docker run --rm --volumes-from=${DFS} rancher/os-base tar -c -C /var/lib/docker ./image | tar -x -C ${PREPOP_DIR} docker run --rm --volumes-from=${DFS} rancher/os-base tar -c -C /var/lib/docker ./overlay | tar -x -C ${PREPOP_DIR} -tar -cf ${ARTIFACTS}/rootfs.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} . -tar -rf ${ARTIFACTS}/rootfs.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} . -rm -f ${ARTIFACTS}/rootfs.tar.gz -gzip ${ARTIFACTS}/rootfs.tar +tar czf ${ARTIFACTS}/rootfs.tar.gz --exclude usr/share/ros/images.tar --exclude lib/modules --exclude lib/firmware -C ${INITRD_DIR} .