1
0
mirror of https://github.com/rancher/os.git synced 2025-06-23 05:27:03 +00:00
os/Dockerfile.dapper

179 lines
6.8 KiB
Docker
Raw Normal View History

2016-05-06 17:12:09 +00:00
FROM ubuntu:16.04
2015-07-23 13:53:01 +00:00
RUN apt-get update && \
2016-05-06 17:12:09 +00:00
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
2016-05-23 06:11:26 +00:00
ENV DAPPER_ENV VERSION DEV_BUILD
ENV DAPPER_DOCKER_SOCKET true
ENV DAPPER_SOURCE /go/src/github.com/rancher/os
2016-05-08 17:35:48 +00:00
ENV DAPPER_OUTPUT ./bin ./dist ./build/initrd
ENV DAPPER_RUN_ARGS --privileged
ENV SHELL /bin/bash
WORKDIR ${DAPPER_SOURCE}
2016-05-06 17:12:09 +00:00
########## General Configuration #####################
ARG DAPPER_HOST_ARCH=amd64
ARG HOST_ARCH=${DAPPER_HOST_ARCH}
2016-05-08 17:35:48 +00:00
ARG ARCH=${HOST_ARCH}
2016-05-06 17:12:09 +00:00
ARG OS_REPO=rancher
ARG HOSTNAME_DEFAULT=rancher
ARG DISTRIB_ID=RancherOS
ARG DOCKER_VERSION=1.10.3
ARG DOCKER_PATCH_VERSION=v${DOCKER_VERSION}-ros1
ARG SELINUX_POLICY_URL=https://github.com/rancher/refpolicy/releases/download/v0.0.2/policy.29
ARG KERNEL_URL_amd64=https://github.com/rancher/os-kernel/releases/download/Ubuntu-4.2.0-34.39-rancher/linux-4.2.8-ckt4-rancher-x86.tar.gz
ARG KERNEL_URL_arm64=https://github.com/imikushin/os-kernel/releases/download/Estuary-4.1.18-arm64-3/linux-4.1.18-arm64.tar.gz
ARG DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}
ARG DOCKER_URL_arm=https://github.com/rancher/docker/releases/download/${DOCKER_PATCH_VERSION}/docker-${DOCKER_VERSION}_arm
ARG DOCKER_URL_arm64=https://github.com/rancher/docker/releases/download/${DOCKER_PATCH_VERSION}/docker-${DOCKER_VERSION}_arm64
ARG TOOLCHAIN_arm64=aarch64-linux-gnu
ARG TOOLCHAIN_arm=arm-linux-gnueabihf
ARG OS_RELEASES_YML=https://releases.rancher.com/os/releases.yml
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
ARG DFS_IMAGE=${OS_REPO}/docker:v${DOCKER_VERSION}
ARG OS_BASE_URL_amd64=https://github.com/rancher/os-base/releases/download/v2016.02/os-base_amd64.tar.xz
ARG OS_BASE_URL_arm64=https://github.com/rancher/os-base/releases/download/v2016.02/os-base_arm64.tar.xz
ARG OS_BASE_URL_arm=https://github.com/rancher/os-base/releases/download/v2016.02/os-base_arm.tar.xz
######################################################
# Set up environment
ENV DOCKER_URL DOCKER_URL_${ARCH}
ENV KERNEL_URL KERNEL_URL_${ARCH}
ENV OS_BASE_URL OS_BASE_URL_${ARCH}
ENV OS_BASE_SHA1 OS_BASE_SHA1_${ARCH}
ENV VBOX_MODULES_URL VBOX_MODULES_URL_${ARCH}
2016-05-23 06:51:46 +00:00
ENV REPO_VERSION master
2016-02-28 19:17:03 +00:00
2016-05-06 17:12:09 +00:00
# Export all ARGS as ENV
ENV ARCH=${ARCH} DAPPER_HOST_ARCH=${DAPPER_HOST_ARCH} HOST_ARCH=${HOST_ARCH} OS_REPO=${OS_REPO} HOSTNAME_DEFAULT=${HOSTNAME_DEFAULT} DISTRIB_ID=${DISTRIB_ID} DOCKER_VERSION=${DOCKER_VERSION} DOCKER_PATCH_VERSION=${DOCKER_PATCH_VERSION} SELINUX_POLICY_URL=${SELINUX_POLICY_URL} KERNEL_URL_amd64=${KERNEL_URL_amd64} KERNEL_URL_arm64=${KERNEL_URL_arm64} DOCKER_URL_amd64=${DOCKER_URL_amd64} DOCKER_URL_arm=${DOCKER_URL_arm} DOCKER_URL_arm64=${DOCKER_URL_arm64} TOOLCHAIN_arm64=${TOOLCHAIN_arm64} TOOLCHAIN_arm=${TOOLCHAIN_arm} OS_RELEASES_YML=${OS_RELEASES_YML} VBOX_MODULES_URL=${VBOX_MODULES_URL} VBOX_MODULES_URL_amd64=${VBOX_MODULES_URL_amd64} OS_SERVICES_REPO=${OS_SERVICES_REPO} IMAGE_NAME=${IMAGE_NAME} DFS_IMAGE=${DFS_IMAGE} OS_BASE_URL=${OS_BASE_URL} OS_BASE_SHA1=${OS_BASE_SHA1} OS_BASE_URL_amd64=${OS_BASE_URL_amd64} OS_BASE_URL_arm=${OS_BASE_URL_arm} OS_BASE_URL_arm64=${OS_BASE_URL_arm64}
2016-05-06 17:12:09 +00:00
ENV DOWNLOADS /usr/src/downloads
RUN mkdir -p ${DOWNLOADS}
2016-05-06 17:12:09 +00:00
# Download kernel
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN if [ -n "${!KERNEL_URL}" ]; then \
curl -fL ${!KERNEL_URL} > ${DOWNLOADS}/kernel.tar.gz \
;fi
# 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
2016-05-23 06:11:26 +00:00
ENV GO_VERSION 1.6.2
2016-05-06 17:12:09 +00:00
RUN ln -sf go-6 /usr/bin/go && \
2016-05-23 06:11:26 +00:00
curl -sfL https://storage.googleapis.com/golang/go${GO_VERSION}.src.tar.gz | tar -xzf - -C /usr/local && \
2016-05-06 17:12:09 +00:00
cd /usr/local/go/src && \
2016-05-23 06:11:26 +00:00
GOROOT_BOOTSTRAP=/usr GOARCH=${HOST_ARCH} GOHOSTARCH=${HOST_ARCH} ./make.bash && \
rm /usr/bin/go
2016-05-06 17:12:09 +00:00
ENV GOPATH /go
ENV PATH ${GOPATH}/bin:/usr/local/go/bin:$PATH
# Install Docker
RUN URL=DOCKER_URL_${HOST_ARCH} && \
curl -fL ${!URL} > /usr/bin/docker && \
chmod +x /usr/bin/docker
# Install Docker
RUN curl -fL ${!DOCKER_URL} > ${DOWNLOADS}/docker && \
chmod +x ${DOWNLOADS}/docker
# 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
2016-05-06 17:12:09 +00:00
RUN source /usr/src/toolchain-env; if [ "${TOOLCHAIN}" != "" ]; then \
apt-get update && \
cd /usr/local/src && \
2016-03-16 17:52:05 +00:00
for i in libselinux libsepol pcre3 util-linux; do \
apt-get build-dep -y $i && \
apt-get source -y $i \
;done \
;fi
2016-05-06 17:12:09 +00:00
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
2016-05-06 17:12:09 +00:00
RUN source /usr/src/toolchain-env; if [ "${TOOLCHAIN}" != "" ]; then \
cd /usr/local/src/libselinux-* && \
CC=${TOOLCHAIN}-gcc CXX=${TOOLCHAIN}-g++ make CFLAGS=-Wall && \
2016-03-16 17:52:05 +00:00
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
2016-05-06 17:12:09 +00:00
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
2016-05-06 17:12:09 +00:00
ENV GOARCH $ARCH
RUN curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m` > /usr/bin/dapper && \
chmod +x /usr/bin/dapper
2016-05-06 22:45:16 +00:00
RUN mkdir -p images/00-rootfs/build && \
curl -pfL ${!OS_BASE_URL} | tar xvJf - -C images/00-rootfs/build
2016-05-06 22:42:56 +00:00
2016-05-06 17:12:09 +00:00
ENTRYPOINT ["./scripts/entry"]
CMD ["ci"]