Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.gitignore
.git
.gitmodules
bootstrap.sh
21 changes: 13 additions & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
FROM mwcampbell/muslbase-build-base
ENV ROOT /newroot
RUN mkdir $ROOT
ADD . $ROOT/src
MAINTAINER Matt Campbell <[email protected]>

ENV ROOT /buildroot
ENV RUNTIME_ROOT $ROOT/runtime
RUN mkdir $RUNTIME_ROOT
env STATIC_RUNTIME_ROOT $ROOT/static-runtime
RUN mkdir $STATIC_RUNTIME_ROOT
RUN $ROOT/src/build-prerequisites.sh && \
$ROOT/src/build-temporary.sh
ENV STATIC_RUNTIME_ROOT $ROOT/static-runtime

RUN mkdir -p $RUNTIME_ROOT $STATIC_RUNTIME_ROOT

ADD . $ROOT/src

RUN $ROOT/src/build-prerequisites.sh
RUN $ROOT/src/build-temporary.sh

ADD dev.tar $ROOT/dev/
ADD dev.tar $RUNTIME_ROOT/dev
ADD dev.tar $STATIC_RUNTIME_ROOT/dev

RUN chroot $ROOT /src/build-final.sh && \
rm -rf $ROOT/src && \
rm -rf $ROOT/tools && \
Expand Down
75 changes: 48 additions & 27 deletions bootstrap.sh
Original file line number Diff line number Diff line change
@@ -1,35 +1,56 @@
#!/bin/sh

set -e
if [ -z "$1" ]
then
echo "Usage: $0 username" >&2
exit 1

# Check if script is run correctly
if [ -z "$1" ]; then
echo "Usage: $0 username" >&2
exit 1
fi

username="$1"

# Download/Update all dependencies
git submodule update --init

# Clean/Remove built environment
docker rmi mwcampbell/muslbase-build-base || true
docker rmi $username/muslbase-build || true
for buildbase in debian selfhost selfhost
do
if [ "$buildbase" = "selfhost" ]
then
docker tag $username/muslbase mwcampbell/muslbase-build-base
else
docker build --rm -t=mwcampbell/muslbase-build-base buildbase/$buildbase
fi
docker rmi $username/muslbase || true
docker rmi $username/muslbase-runtime || true
docker rmi $username/muslbase-static-runtime || true
docker build --rm -t=$username/muslbase-build .
docker run --rm $username/muslbase-build cat /rootfs.tar > rootfs/full/rootfs.tar
docker build --rm -t=$username/muslbase rootfs/full
rm rootfs/full/rootfs.tar
docker run --rm $username/muslbase-build cat /runtime-rootfs.tar > rootfs/runtime/rootfs.tar
docker build --rm -t=$username/muslbase-runtime rootfs/runtime
rm rootfs/runtime/rootfs.tar
docker run --rm $username/muslbase-build cat /static-runtime-rootfs.tar > rootfs/static-runtime/rootfs.tar
docker build --rm -t=$username/muslbase-static-runtime rootfs/static-runtime
rm rootfs/static-runtime/rootfs.tar
docker rmi mwcampbell/muslbase-build-base
docker rmi $username/muslbase-build

# Build, first using glibc from debian, then musl from selfhost build environment
for buildbase in debian selfhost selfhost; do
if [ "$buildbase" = "selfhost" ]; then
# Next use muslbase as build environment
docker tag $username/muslbase mwcampbell/muslbase-build-base
else
# Build initial debian base build environment
docker build --rm -t=mwcampbell/muslbase-build-base buildbase/$buildbase
fi

# Remove earlier muslbase images
docker rmi $username/muslbase || true
docker rmi $username/muslbase-runtime || true
docker rmi $username/muslbase-static-runtime || true

# Build muslbase rootfs
docker build --rm -t=$username/muslbase-build .

# Build docker image: muslbase
docker run --rm $username/muslbase-build cat /rootfs.tar > rootfs/full/rootfs.tar
docker build --rm -t=$username/muslbase rootfs/full
rm rootfs/full/rootfs.tar

# Build docker image: muslbase-runtime
docker run --rm $username/muslbase-build cat /runtime-rootfs.tar > rootfs/runtime/rootfs.tar
docker build --rm -t=$username/muslbase-runtime rootfs/runtime
rm rootfs/runtime/rootfs.tar

# Build docker image: muslbase-static-runtime
docker run --rm $username/muslbase-build cat /static-runtime-rootfs.tar > rootfs/static-runtime/rootfs.tar
docker build --rm -t=$username/muslbase-static-runtime rootfs/static-runtime
rm rootfs/static-runtime/rootfs.tar

# Clean/Remove build environment
docker rmi mwcampbell/muslbase-build-base
docker rmi $username/muslbase-build
done
21 changes: 12 additions & 9 deletions build-final.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,25 @@

# Setup
set -e

umask 022

jobs=-j8

configure_args='--prefix= --libdir=/lib --libexecdir=/lib --bindir=/bin --sbindir=/sbin --sysconfdir=/etc --includedir=/include --localstatedir=/var --mandir=/share/man --infodir=/share/info'

export LC_ALL=POSIX
export PATH=/bin:/sbin:/tools/bin
export SRC=/src
export DEPS=$SRC/deps
export PATCHDIR=$SRC/patches

for script in $SRC/steps/final/*
do
mkdir /work
cd /work
echo Running $script
. $script
cd /
rm -rf /work
hash -r
for script in $SRC/steps/final/*; do
mkdir /work
cd /work
echo Running $script
. $script
cd /
rm -rf /work
hash -r
done
20 changes: 11 additions & 9 deletions build-prerequisites.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,22 @@

# Setup
set -e

umask 022

jobs=-j8

export LC_ALL=POSIX
export SRC=$ROOT/src
export DEPS=$SRC/deps
export PATCHDIR=$SRC/patches

for script in $SRC/steps/prerequisites/*
do
mkdir $ROOT/work
cd $ROOT/work
echo Running $script
. $script
cd $ROOT
rm -rf $ROOT/work
hash -r
for script in $SRC/steps/prerequisites/*; do
mkdir $ROOT/work
cd $ROOT/work
echo Running $script
. $script
cd $ROOT
rm -rf $ROOT/work
hash -r
done
22 changes: 13 additions & 9 deletions build-temporary.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,35 @@

# Setup
set -e

umask 022

export BUILD=x86_64-unknown-linux-gnu
export TARGET=x86_64-muslbasecross-linux-gnu

CC=gcc
CXX=g++
jobs=-j8

export LC_ALL=POSIX
export PATH=/tools/bin:$PATH
export SRC=$ROOT/src
export DEPS=$SRC/deps
export PATCHDIR=$SRC/patches

cd $ROOT
rm -rf tools
mkdir tools
ln -s $ROOT/tools /tools

for script in $SRC/steps/temporary/*
do
mkdir $ROOT/work
cd $ROOT/work
echo Running $script
. $script
cd $ROOT
rm -rf $ROOT/work
hash -r
for script in $SRC/steps/temporary/*; do
mkdir $ROOT/work
cd $ROOT/work
echo Running $script
. $script
cd $ROOT
rm -rf $ROOT/work
hash -r
done

# Cleanup
Expand Down
5 changes: 3 additions & 2 deletions buildbase/debian/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
FROM debian:wheezy
RUN apt-get -y update
RUN apt-get -y install libc6-dev binutils gcc g++ make patch
MAINTAINER Matt Campbell <[email protected]>

RUN apt-get -y update && apt-get -y install libc6-dev binutils gcc g++ make patch
1 change: 1 addition & 0 deletions rootfs/full/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
FROM scratch
MAINTAINER Matt Campbell <[email protected]>

ADD rootfs.tar /
ENV PATH /local/sbin:/local/bin:/sbin:/bin
1 change: 1 addition & 0 deletions rootfs/runtime/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
FROM scratch
MAINTAINER Matt Campbell <[email protected]>

ADD rootfs.tar /
ENV PATH /local/sbin:/local/bin:/sbin:/bin
1 change: 1 addition & 0 deletions rootfs/static-runtime/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
FROM scratch
MAINTAINER Matt Campbell <[email protected]>

ADD rootfs.tar /
ENV PATH /local/sbin:/local/bin:/sbin:/bin