mirror of
https://github.com/linuxkit/linuxkit.git
synced 2026-04-09 10:50:29 +00:00
add pinata modified boot2docker until replaced by real Moby
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
217
boot2docker/Dockerfile
Normal file
217
boot2docker/Dockerfile
Normal file
@@ -0,0 +1,217 @@
|
||||
FROM debian:jessie
|
||||
|
||||
RUN apt-get update && apt-get -y install unzip \
|
||||
xz-utils \
|
||||
curl \
|
||||
bc \
|
||||
git \
|
||||
build-essential \
|
||||
golang \
|
||||
cpio \
|
||||
gcc libc6 libc6-dev \
|
||||
kmod \
|
||||
squashfs-tools \
|
||||
genisoimage \
|
||||
xorriso \
|
||||
syslinux \
|
||||
isolinux \
|
||||
automake \
|
||||
pkg-config \
|
||||
p7zip-full
|
||||
|
||||
# https://www.kernel.org/
|
||||
ENV KERNEL_VERSION 4.1.10
|
||||
|
||||
# Fetch the kernel sources
|
||||
RUN curl --retry 10 https://www.kernel.org/pub/linux/kernel/v${KERNEL_VERSION%%.*}.x/linux-$KERNEL_VERSION.tar.xz | tar -C / -xJ && \
|
||||
mv /linux-$KERNEL_VERSION /linux-kernel
|
||||
|
||||
# http://aufs.sourceforge.net/
|
||||
ENV AUFS_REPO https://github.com/sfjro/aufs4-standalone
|
||||
ENV AUFS_BRANCH aufs4.1
|
||||
ENV AUFS_COMMIT 4912d6da07e3e24d7a8484e0e8a4c1315adbc8fd
|
||||
# we use AUFS_COMMIT to get stronger repeatability guarantees
|
||||
|
||||
# Download AUFS and apply patches and files, then remove it
|
||||
RUN git clone -b "$AUFS_BRANCH" "$AUFS_REPO" /aufs-standalone && \
|
||||
cd /aufs-standalone && \
|
||||
git checkout -q "$AUFS_COMMIT" && \
|
||||
cd /linux-kernel && \
|
||||
cp -r /aufs-standalone/Documentation /linux-kernel && \
|
||||
cp -r /aufs-standalone/fs /linux-kernel && \
|
||||
cp -r /aufs-standalone/include/uapi/linux/aufs_type.h /linux-kernel/include/uapi/linux/ && \
|
||||
set -e && for patch in \
|
||||
/aufs-standalone/aufs*-kbuild.patch \
|
||||
/aufs-standalone/aufs*-base.patch \
|
||||
/aufs-standalone/aufs*-mmap.patch \
|
||||
/aufs-standalone/aufs*-standalone.patch \
|
||||
/aufs-standalone/aufs*-loopback.patch \
|
||||
; do \
|
||||
patch -p1 < "$patch"; \
|
||||
done
|
||||
|
||||
COPY kernel_config /linux-kernel/.config
|
||||
|
||||
RUN jobs=$(nproc); \
|
||||
cd /linux-kernel && \
|
||||
make -j ${jobs} oldconfig && \
|
||||
make -j ${jobs} bzImage && \
|
||||
make -j ${jobs} modules
|
||||
|
||||
# The post kernel build process
|
||||
|
||||
ENV ROOTFS /rootfs
|
||||
ENV TCL_REPO_BASE http://distro.ibiblio.org/tinycorelinux/6.x/x86_64
|
||||
# Note that the ncurses is here explicitly so that top continues to work
|
||||
ENV TCZ_DEPS iptables \
|
||||
iproute2 \
|
||||
openssh openssl \
|
||||
tar \
|
||||
gcc_libs \
|
||||
ncurses \
|
||||
acpid \
|
||||
xz liblzma \
|
||||
git expat2 libiconv libidn libgpg-error libgcrypt libssh2 \
|
||||
nfs-utils tcp_wrappers portmap rpcbind libtirpc \
|
||||
curl ntpclient \
|
||||
procps glib2 libtirpc libffi fuse pcre \
|
||||
udev-lib \
|
||||
liblvm2 \
|
||||
parted
|
||||
|
||||
# Make the ROOTFS
|
||||
RUN mkdir -p $ROOTFS
|
||||
|
||||
# Prepare the build directory (/tmp/iso)
|
||||
RUN mkdir -p /tmp/iso/boot
|
||||
|
||||
# Install the kernel modules in $ROOTFS
|
||||
RUN cd /linux-kernel && \
|
||||
make INSTALL_MOD_PATH=$ROOTFS modules_install firmware_install
|
||||
|
||||
# Remove useless kernel modules, based on unclejack/debian2docker
|
||||
RUN cd $ROOTFS/lib/modules && \
|
||||
rm -rf ./*/kernel/sound/* && \
|
||||
rm -rf ./*/kernel/drivers/gpu/* && \
|
||||
rm -rf ./*/kernel/drivers/infiniband/* && \
|
||||
rm -rf ./*/kernel/drivers/isdn/* && \
|
||||
rm -rf ./*/kernel/drivers/media/* && \
|
||||
rm -rf ./*/kernel/drivers/staging/lustre/* && \
|
||||
rm -rf ./*/kernel/drivers/staging/comedi/* && \
|
||||
rm -rf ./*/kernel/fs/ocfs2/* && \
|
||||
rm -rf ./*/kernel/net/bluetooth/* && \
|
||||
rm -rf ./*/kernel/net/mac80211/* && \
|
||||
rm -rf ./*/kernel/net/drivers/ethernet/* && \
|
||||
rm -rf ./*/kernel/net/drivers/scsi/* && \
|
||||
rm -rf ./*/kernel/net/drivers/mtd/* && \
|
||||
rm -rf ./*/kernel/fs/btrfs/* && \
|
||||
rm -rf ./*/kernel/fs/xfs/* && \
|
||||
rm -rf ./*/kernel/net/wireless/*
|
||||
|
||||
# Install libcap
|
||||
RUN curl -fL http://http.debian.net/debian/pool/main/libc/libcap2/libcap2_2.22.orig.tar.gz | tar -C / -xz && \
|
||||
cd /libcap-2.22 && \
|
||||
sed -i 's/LIBATTR := yes/LIBATTR := no/' Make.Rules && \
|
||||
make && \
|
||||
mkdir -p output && \
|
||||
make prefix=`pwd`/output install && \
|
||||
mkdir -p $ROOTFS/usr/local/lib && \
|
||||
cp -av `pwd`/output/lib64/* $ROOTFS/usr/local/lib
|
||||
|
||||
# Make sure the kernel headers are installed for aufs-util, and then build it
|
||||
RUN cd /linux-kernel && \
|
||||
make INSTALL_HDR_PATH=/tmp/kheaders headers_install && \
|
||||
cd / && \
|
||||
git clone https://github.com/Distrotech/aufs-util.git && \
|
||||
cd /aufs-util && \
|
||||
git checkout 5e0c348bd8b1898beb1e043b026bcb0e0c7b0d54 && \
|
||||
CPPFLAGS="-I/tmp/kheaders/include" CLFAGS=$CPPFLAGS LDFLAGS=$CPPFLAGS make && \
|
||||
DESTDIR=$ROOTFS make install && \
|
||||
rm -rf /tmp/kheaders
|
||||
|
||||
# Prepare the ISO directory with the kernel
|
||||
RUN cp -v /linux-kernel/arch/x86_64/boot/bzImage /tmp/iso/boot/vmlinuz64
|
||||
|
||||
# Download the rootfs, don't unpack it though:
|
||||
RUN curl -fL -o /tcl_rootfs.gz $TCL_REPO_BASE/release/distribution_files/rootfs64.gz
|
||||
|
||||
# Install the TCZ dependencies
|
||||
RUN for dep in $TCZ_DEPS; do \
|
||||
echo "Download $TCL_REPO_BASE/tcz/$dep.tcz" &&\
|
||||
curl -fL -o /tmp/$dep.tcz $TCL_REPO_BASE/tcz/$dep.tcz && \
|
||||
unsquashfs -f -d $ROOTFS /tmp/$dep.tcz && \
|
||||
rm -f /tmp/$dep.tcz ;\
|
||||
done
|
||||
|
||||
# Make sure that all the modules we might have added are recognized (especially VBox guest additions)
|
||||
RUN depmod -a -b $ROOTFS $KERNEL_VERSION-boot2docker
|
||||
|
||||
COPY VERSION $ROOTFS/etc/version
|
||||
RUN cp -v $ROOTFS/etc/version /tmp/iso/version
|
||||
|
||||
# Get the Docker version that matches our boot2docker version
|
||||
# Note: `docker version` returns non-true when there is no server to ask
|
||||
RUN curl -fL -o $ROOTFS/usr/local/bin/docker https://get.docker.com/builds/Linux/x86_64/docker-$(cat $ROOTFS/etc/version) && \
|
||||
chmod +x $ROOTFS/usr/local/bin/docker && \
|
||||
{ $ROOTFS/usr/local/bin/docker version || true; }
|
||||
|
||||
# .git directory is not available because it's in ../..
|
||||
RUN echo "pinata: unknown-sha %(date)" > $ROOTFS/etc/boot2docker
|
||||
|
||||
# Install Tiny Core Linux rootfs
|
||||
RUN cd $ROOTFS && zcat /tcl_rootfs.gz | cpio -f -i -H newc -d --no-absolute-filenames
|
||||
|
||||
# Copy our custom rootfs
|
||||
COPY rootfs/rootfs $ROOTFS
|
||||
|
||||
# setup acpi config dir &
|
||||
# tcl6's sshd is compiled without `/usr/local/sbin` in the path
|
||||
# Boot2Docker and Docker Machine need `ip`, so I'm linking it in here
|
||||
RUN cd $ROOTFS \
|
||||
&& ln -s /usr/local/etc/acpi etc/ \
|
||||
&& ln -s /usr/local/sbin/ip usr/sbin/
|
||||
|
||||
# These steps can only be run once, so can't be in make_iso.sh (which can be run in chained Dockerfiles)
|
||||
# see https://github.com/boot2docker/boot2docker/blob/master/doc/BUILD.md
|
||||
|
||||
# Make sure init scripts are executable
|
||||
RUN find $ROOTFS/etc/rc.d/ $ROOTFS/usr/local/etc/init.d/ -exec chmod +x '{}' ';'
|
||||
|
||||
# move dhcp.sh out of init.d as we're triggering it manually so its ready a bit faster
|
||||
RUN mv $ROOTFS/etc/init.d/dhcp.sh $ROOTFS/etc/rc.d/
|
||||
|
||||
# Change MOTD
|
||||
RUN mv $ROOTFS/usr/local/etc/motd $ROOTFS/etc/motd
|
||||
|
||||
# Make sure we have the correct bootsync
|
||||
RUN mv $ROOTFS/boot*.sh $ROOTFS/opt/ && \
|
||||
chmod +x $ROOTFS/opt/*.sh
|
||||
|
||||
# Make sure we have the correct shutdown
|
||||
RUN mv $ROOTFS/shutdown.sh $ROOTFS/opt/shutdown.sh && \
|
||||
chmod +x $ROOTFS/opt/shutdown.sh
|
||||
|
||||
# Add serial console
|
||||
RUN echo "#!/bin/sh" > $ROOTFS/usr/local/bin/autologin && \
|
||||
echo "/bin/login -f docker" >> $ROOTFS/usr/local/bin/autologin && \
|
||||
chmod 755 $ROOTFS/usr/local/bin/autologin && \
|
||||
echo 'ttyS0:2345:respawn:/sbin/getty -l /usr/local/bin/autologin 9600 ttyS0 vt100' >> $ROOTFS/etc/inittab && \
|
||||
echo 'ttyS1:2345:respawn:/sbin/getty -l /usr/local/bin/autologin 9600 ttyS1 vt100' >> $ROOTFS/etc/inittab
|
||||
|
||||
# fix "su -"
|
||||
RUN echo root > $ROOTFS/etc/sysconfig/superuser
|
||||
|
||||
# crontab
|
||||
COPY rootfs/crontab $ROOTFS/var/spool/cron/crontabs/root
|
||||
|
||||
# avahi
|
||||
# RUN apt-get install -y openssh-server avahi-daemon
|
||||
# RUN echo "UseDNS no" >> /etc/ssh/sshd_config
|
||||
|
||||
# Copy boot params
|
||||
COPY rootfs/isolinux /tmp/iso/boot/isolinux
|
||||
|
||||
COPY rootfs/make_iso.sh /
|
||||
|
||||
RUN /make_iso.sh
|
||||
|
||||
Reference in New Issue
Block a user