Skip to content

Commit

Permalink
Build rootfs with docker
Browse files Browse the repository at this point in the history
  • Loading branch information
ayufan committed Jun 13, 2017
1 parent f3aad18 commit 0483bad
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 555 deletions.
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ node('docker && linux-build') {

def environment = docker.build('build-environment:build-rock64-image', 'environment')

environment.inside("--privileged -u 0:0") {
environment.inside("--privileged -u 0:0 -v /var/run/docker.sock:/var/run/docker.sock") {
withEnv([
"USE_CCACHE=true",
"RELEASE_NAME=$VERSION",
Expand Down
97 changes: 38 additions & 59 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ export RELEASE ?= 1
export BOOT_TOOLS_BRANCH ?= master
export BUILD_ARCH ?= armhf

ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))

all: linux-rock64

package/rtk_bt/rtk_hciattach/rtk_hciattach:
Expand Down Expand Up @@ -31,65 +33,42 @@ linux-rock64-package-$(RELEASE_NAME).deb: package package/rtk_bt/rtk_hciattach/r
%.img.xz: %.img
pxz -f -3 $<

xenial-minimal-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: linux-rock64-package-$(RELEASE_NAME).deb
sudo bash export ./build-system-image.sh \
$(shell readlink -f $@) \
$(shell readlink -f $<) \
"" \
$(shell readlink -f linux-rock64-package-$(RELEASE_NAME).deb) \
xenial \
rock64 \
minimal \
"" \
"${BUILD_ARCH}"

xenial-minimal-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: linux-rock64-package-$(RELEASE_NAME).deb
cd rootfs/ && sudo bash ./build-system-image.sh \
$(shell readlink -f $@) \
"" \
"" \
$(shell readlink -f linux-rock64-package-$(RELEASE_NAME).deb) \
xenial \
rock64 \
minimal \
"" \
"${BUILD_ARCH}"

xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: linux-rock64-package-$(RELEASE_NAME).deb
cd rootfs/ && sudo bash ./build-system-image.sh \
$(shell readlink -f $@) \
"" \
"" \
$(shell readlink -f linux-rock64-package-$(RELEASE_NAME).deb) \
xenial \
rock64 \
mate \
7300 \
"${BUILD_ARCH}"

xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: linux-rock64-package-$(RELEASE_NAME).deb
cd rootfs/ && sudo bash ./build-system-image.sh \
$(shell readlink -f $@) \
"" \
"" \
$(shell readlink -f linux-rock64-package-$(RELEASE_NAME).deb) \
xenial \
rock64 \
i3 \
"" \
"${BUILD_ARCH}"

stretch-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: linux-rock64-package-$(RELEASE_NAME).deb
cd rootfs/ && sudo export BUILD_ARCH=$(BUILD_ARCH) bash rootfs/build-system-image.sh \
$(shell readlink -f $@) \
"" \
"" \
$(shell readlink -f linux-rock64-package-$(RELEASE_NAME).deb) \
stretch \
rock64 \
i3 \
"" \
"${BUILD_ARCH}"
rootfs/linux-package.deb: linux-rock64-package-$(RELEASE_NAME).deb
cp "$<" "$@"

%-system.img: rootfs/linux-package.deb rootfs/Dockerfile
docker build \
--tag=$(BUILD_SUITE)_$(BUILD_VARIANT)_$(BUILD_MODEL) \
--build-arg BUILD_ARCH=$(BUILD_ARCH) \
--build-arg BUILD_SUITE=$(BUILD_SUITE) \
--build-arg BUILD_VARIANT=$(BUILD_VARIANT) \
--build-arg BUILD_VARIANT_PACKAGES="$(BUILD_VARIANT_PACKAGES)" \
--build-arg BUILD_ADDITIONAL_PACKAGES="$(BUILD_ADDITIONAL_PACKAGES)" \
--build-arg BUILD_MODEL=$(BUILD_MODEL) \
rootfs/
touch $@.tmp
docker run --rm -v $(ROOT_DIR):$(ROOT_DIR) $(BUILD_SUITE)_$(BUILD_VARIANT)_$(BUILD_MODEL) \
$(shell readlink -f $@.tmp) /rootfs -l $(BUILD_SIZE)
mv $@.tmp $@

xenial-minimal-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_SUITE=xenial
xenial-minimal-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_VARIANT=minimal
xenial-minimal-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_MODEL=rock64
xenial-minimal-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_SIZE=1G

xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_SUITE=xenial
xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_VARIANT=i3
xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_MODEL=rock64
xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_SIZE=2G
xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_ADDITIONAL_PACKAGES=aisleriot geany gnomine gnome-sudoku mplayer scratch smplayer smplayer-themes smtube chromium-browser
xenial-i3-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_VARIANT_PACKAGES=xserver-xorg-input-all xfonts-base slim rxvt-unicode-lite i3 i3status i3lock suckless-tools network-manager pulseaudio

xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_SUITE=xenial
xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_VARIANT=mate
xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_MODEL=rock64
xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_SIZE=6G
xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_ADDITIONAL_PACKAGES=aisleriot geany gnomine gnome-sudoku mplayer scratch smplayer smplayer-themes smtube chromium-browser
xenial-mate-rock64-$(RELEASE_NAME)-$(RELEASE)-$(BUILD_ARCH)-system.img: BUILD_VARIANT_PACKAGES=ubuntu-mate-core ubuntu-mate-desktop ubuntu-mate-lightdm-theme ubuntu-mate-wallpapers-xenial lightdm

out/kernel/Image out/kernel/rk3328-rock64.dtb: kernel/arch/arm64/configs/rockchip_linux_defconfig
build/mk-kernel.sh rk3328-rock64
Expand Down
3 changes: 3 additions & 0 deletions environment/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ RUN apt-get install -y libssl-dev parted live-build linaro-image-tools

RUN gem install fpm

RUN curl -L https://get.docker.com/builds/Linux/x86_64/docker-17.05.0-ce.tgz | tar -C /tmp -zx && \
mv /tmp/docker/docker /usr/local/bin/

RUN curl -L https://github.com/aktau/github-release/releases/download/v0.6.2/linux-amd64-github-release.tar.bz2 | tar -C /tmp -jx && \
mv /tmp/bin/linux/amd64/github-release /usr/local/bin/

Expand Down
1 change: 1 addition & 0 deletions rootfs/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Dockerfile*
109 changes: 109 additions & 0 deletions rootfs/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
FROM ubuntu as buildsystem

RUN apt-get update -qq -y
RUN apt-get install -qq -y debootstrap qemu-user-static

ARG BUILD_ARCH=arm64
ARG BUILD_SUITE=xenial
ARG BUILD_ESSENTIAL_PACKAGES=ubuntu-minimal,dosfstools,curl,xz-utils,iw,rfkill,wpasupplicant,openssh-server,alsa-utils,nano,git,build-essential,vim,jq,systemd,systemd-sysv,udev,apt,kmod,locales,sudo,netbase,net-tools,ethtool,iproute,iputils-ping,ifupdown,dhcpcd5,wpasupplicant,ssh,avahi-daemon,ntp,wireless-tools,wget
ARG BUILD_COMPONENTS=main,restricted,universe,multiverse

RUN debootstrap \
--arch=$BUILD_ARCH \
--verbose \
--foreign \
--components=$BUILD_COMPONENTS \
--include=$BUILD_ESSENTIAL_PACKAGES \
$BUILD_SUITE \
/rootfs

RUN cp -Rv /usr/bin/qemu-aarch64-static /rootfs/usr/bin
RUN cp -Rv /usr/bin/qemu-arm-static /rootfs/usr/bin
RUN cp -Rv /usr/share/keyrings /rootfs/usr/share/

# ---

FROM scratch as rootfs
COPY --from=buildsystem /rootfs /

# Finish system installation
RUN echo "setup_proc () { true; }" >> /debootstrap/functions
RUN /debootstrap/debootstrap --second-stage

# Update APT sources
ARG BUILD_SUITE=xenial
RUN ( echo "deb http://ports.ubuntu.com/ ${BUILD_SUITE} main restricted universe multiverse" && \
echo "deb-src http://ports.ubuntu.com/ ${BUILD_SUITE} main restricted universe multiverse" && \
echo "deb http://ports.ubuntu.com/ ${BUILD_SUITE}-updates main restricted universe multiverse" && \
echo "deb-src http://ports.ubuntu.com/ ${BUILD_SUITE}-updates main restricted universe multiverse" && \
echo "deb http://ports.ubuntu.com/ ${BUILD_SUITE}-security main restricted universe multiverse" && \
echo "deb-src http://ports.ubuntu.com/ ${BUILD_SUITE}-security main restricted universe multiverse" ) \
> /etc/apt/sources.list

# Disable services startup
RUN echo exit 101 > /usr/sbin/policy-rc.d && \
chmod +x /usr/sbin/policy-rc.d

# this is needed to fix resolvconf dpkg-configure
RUN touch /var/lib/resolvconf/linkified
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -f install
RUN apt-get update -y -qq
RUN apt-get dist-upgrade -y
RUN locale-gen en_US.UTF-8

ARG BUILD_ADDITIONAL_PACKAGES=
RUN apt-get install -y $BUILD_ADDITIONAL_PACKAGES

ARG BUILD_VARIANT_PACKAGES=
RUN apt-get install -y $BUILD_VARIANT_PACKAGES

# Install linux-package
ADD /linux-package.deb /
RUN dpkg -i linux-package.deb && \
rm linux-package.deb

ARG BUILD_VARIANT=minimal
RUN [ "$BUILD_VARIANT" = "minimal" ] || \
( install_desktop.sh "$BUILD_VARIANT" && systemctl set-default graphical.target )

ARG BUILD_MODEL=rock64
RUN adduser --gecos "$BUILD_MODEL" --disabled-login "$BUILD_MODEL" --uid 1000 && \
chown -R 1000:1000 "/home/$BUILD_MODEL" && \
echo "$BUILD_MODEL:$BUILD_MODEL" | chpasswd && \
usermod -a -G sudo,adm,input,video,plugdev "$BUILD_MODEL" && \
sed -i 's|After=rc.local.service|#\0|;' "/lib/systemd/system/[email protected]"

# Cleanup system
RUN apt-get clean && \
rm -f /usr/bin/qemu-*-static /usr/sbin/policy-rc.d

# ---

FROM ubuntu
RUN apt-get update -qq -y
RUN apt-get install -qq -y build-essential git-core zlib1g-dev
RUN git clone https://github.com/superr/make_ext4fs
RUN make -C make_ext4fs

COPY --from=rootfs / /rootfs

# Fix rootfs
RUN rm -rf /rootfs/dev/* && \
mkdir -p /rootfs/dev /rootfs/sys /rootfs/proc && \
rm -f /rootfs/etc/ssh/ssh_host_* && \
ln -f -s /run/resolvconf/resolv.conf /rootfs/etc/resolv.conf

ARG BUILD_MODEL=rock64
RUN echo "$BUILD_MODEL" > /rootfs/etc/hostname
RUN ( echo "127.0.0.1 localhost" && \
echo "127.0.1.1 $BUILD_MODEL" && \
echo "" && \
echo "# The following lines are desirable for IPv6 capable hosts" && \
echo "::1 localhost ip6-localhost ip6-loopback" && \
echo "fe00::0 ip6-localnet" && \
echo "ff00::0 ip6-mcastprefix" && \
echo "ff02::1 ip6-allnodes" && \
echo "ff02::2 ip6-allro" ) > /rootfs/etc/hosts

ENTRYPOINT ["make_ext4fs/make_ext4fs"]
82 changes: 0 additions & 82 deletions rootfs/build-system-image.sh

This file was deleted.

Loading

0 comments on commit 0483bad

Please sign in to comment.