From 6fb536137d7d6d93f322e5b79cedd0a5db688181 Mon Sep 17 00:00:00 2001 From: John Regan Date: Wed, 11 Mar 2015 13:17:02 -0500 Subject: [PATCH] Build as non-root, add travis.yml --- .travis.yml | 16 ++++ Dockerfile | 20 ++--- README.md | 10 ++- rootfs/build-wrapper | 4 - {rootfs => skarnet-builder}/build-latest | 87 ++++++++++--------- {rootfs => skarnet-builder}/build-latest-git | 0 skarnet-builder/build-wrapper | 5 ++ {rootfs => skarnet-builder}/install-latest | 0 .../install-latest-git | 0 ...c-inclusion-of-sysinfo.h-in-kernel.h.patch | 0 ...h-fix-some-issues-arising-from-in6.h.patch | 0 ...revent-redefinition-of-struct-ethhdr.patch | 0 .../patches/linux/src.txt | 0 13 files changed, 82 insertions(+), 60 deletions(-) create mode 100644 .travis.yml delete mode 100755 rootfs/build-wrapper rename {rootfs => skarnet-builder}/build-latest (57%) mode change 100644 => 100755 rename {rootfs => skarnet-builder}/build-latest-git (100%) mode change 100644 => 100755 create mode 100755 skarnet-builder/build-wrapper rename {rootfs => skarnet-builder}/install-latest (100%) mode change 100644 => 100755 rename {rootfs => skarnet-builder}/install-latest-git (100%) mode change 100644 => 100755 rename {rootfs => skarnet-builder}/patches/linux/1-4-glibc-specific-inclusion-of-sysinfo.h-in-kernel.h.patch (100%) rename {rootfs => skarnet-builder}/patches/linux/3-4-libc-compat.h-fix-some-issues-arising-from-in6.h.patch (100%) rename {rootfs => skarnet-builder}/patches/linux/4-4-libc-compat.h-prevent-redefinition-of-struct-ethhdr.patch (100%) rename {rootfs => skarnet-builder}/patches/linux/src.txt (100%) diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..40742e1 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,16 @@ +sudo: false +language: c +compiler: gcc +script: +- cd skarnet-builder && ./build-wrapper +deploy: + provider: releases + skip_cleanup: true + api_key: + secure: Bw2bkD5EfXgAtodU47f85kHSQejKKpUKPGbm5ZkdWU564jV3yqYW4tJYvxMVl2rcTE9KW867N7Op4gg9l2xTGnK1h+iiqmeez3b8PKWc1d+LrB4MyGnO/SC6OX/Rz/jiwJaK2frKCmSQkv+Furp4GM2E2UNB5gKjnUxrfUtc1+s= + file: $HOME/dist/* + file_glob: true + on: + repo: just-containers/skaware-builder + branch: master + tags: true diff --git a/Dockerfile b/Dockerfile index eef08c7..74025c0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,19 +5,15 @@ ENV LC_ALL C ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && \ - apt-get -y install git curl build-essential + apt-get -y install git curl build-essential && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -RUN mkdir -p /build && \ - mkdir -p /dist +COPY skarnet-builder /skarnet-builder -COPY rootfs / -RUN chmod +x /build-latest \ - /build-latest-git \ - /install-latest \ - /install-latest-git +RUN chown -R nobody:nogroup /skarnet-builder -VOLUME /dist +USER nobody +ENV HOME /skarnet-builder +WORKDIR /skarnet-builder -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -CMD ["/build-wrapper"] +CMD ["/skarnet-builder/build-wrapper"] diff --git a/README.md b/README.md index fd071a6..f9b720d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ``` -docker build . | \ -tail -n 1 | awk '{ print $3; }' | \ -xargs docker run --rm -v `pwd`/dist:/dist -``` \ No newline at end of file +mkdir dist +chmod o+rw dist +docker build . | \ +tail -n 1 | awk '{ print $3; }' | \ +xargs docker run --rm -v `pwd`/dist:/skarnet-builder/dist +``` diff --git a/rootfs/build-wrapper b/rootfs/build-wrapper deleted file mode 100755 index ca4542d..0000000 --- a/rootfs/build-wrapper +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -rm -f /dist/* -/build-latest 2>&1 | tee "/dist/build-latest-$(date +'%Y%m%d%H%M%S').log" diff --git a/rootfs/build-latest b/skarnet-builder/build-latest old mode 100644 new mode 100755 similarity index 57% rename from rootfs/build-latest rename to skarnet-builder/build-latest index 6e9425a..07bc22f --- a/rootfs/build-latest +++ b/skarnet-builder/build-latest @@ -2,8 +2,15 @@ set -e set -x +BUILDDIR=$HOME/build +PACKAGEDIR=$HOME/pkg +DISTDIR=$HOME/dist +PATCHDIR="$(pwd)/patches" + +mkdir -p "$BUILDDIR" "$PACKAGEDIR" "$DISTDIR" + # point to make -MAKE_4x=/usr/local/bin/make +MAKE_4x="$PACKAGEDIR/make/bin/make" # all packages skarnet_all_packages=( @@ -41,26 +48,26 @@ versions[s6-dns]=2.0.0.2 versions[s6-networking]=2.1.0.0 declare -A includes -includes[skalibs]="--with-include=/usr/musl/include" -includes[execline]="--with-include=/opt/skalibs/usr/include ${includes[skalibs]}" -includes[s6]="--with-include=/opt/execline/usr/include ${includes[execline]}" +includes[skalibs]="--with-include=$PACKAGEDIR/musl/include" +includes[execline]="--with-include=$PACKAGEDIR/skalibs/usr/include ${includes[skalibs]}" +includes[s6]="--with-include=$PACKAGEDIR/execline/usr/include ${includes[execline]}" includes[s6-portable-utils]="${includes[s6]}" -includes[s6-linux-utils]="--with-include=/opt/linux-headers/include ${includes[s6]}" +includes[s6-linux-utils]="--with-include=$PACKAGEDIR/linux-headers/include ${includes[s6]}" includes[s6-dns]="${includes[s6]}" -includes[s6-networking]="--with-include=/opt/s6-dns/usr/include --with-include=/opt/s6/usr/include ${includes[s6]}" +includes[s6-networking]="--with-include=$PACKAGEDIR/s6-dns/usr/include --with-include=$PACKAGEDIR/s6/usr/include ${includes[s6]}" declare -A libs libs[skalibs]="--with-lib=/usr/musl/lib" -libs[execline]="--with-lib=/opt/skalibs/usr/lib ${libs[skalibs]}" -libs[s6]="--with-lib=/opt/execline/usr/lib ${libs[execline]}" +libs[execline]="--with-lib=$PACKAGEDIR/skalibs/usr/lib ${libs[skalibs]}" +libs[s6]="--with-lib=$PACKAGEDIR/execline/usr/lib ${libs[execline]}" libs[s6-portable-utils]="${libs[s6]}" libs[s6-linux-utils]="${libs[s6]}" libs[s6-dns]="${libs[s6]}" -libs[s6-networking]="--with-lib=/opt/s6-dns/usr/lib --with-lib=/opt/s6/usr/lib ${libs[s6]}" +libs[s6-networking]="--with-lib=$PACKAGEDIR/s6-dns/usr/lib --with-lib=$PACKAGEDIR/s6/usr/lib ${libs[s6]}" declare -A sysdeps sysdeps[skalibs]="" -sysdeps[execline]="--with-sysdeps=/opt/skalibs/usr/lib/skalibs/sysdeps" +sysdeps[execline]="--with-sysdeps=$PACKAGEDIR/skalibs/usr/lib/skalibs/sysdeps" sysdeps[s6]="${sysdeps[execline]}" sysdeps[s6-portable-utils]="${sysdeps[execline]}" sysdeps[s6-linux-utils]="${sysdeps[execline]}" @@ -82,11 +89,11 @@ manifests[skarnet_portable_packages]="manifest-portable.txt" build_install_skarnet_package() { local package=$1 - cd /build - curl -R -L -O "http://skarnet.org/software/${package}/${package}-${versions[$package]}.tar.gz" + cd "$BUILDDIR" + curl -R -L -O -C - "http://skarnet.org/software/${package}/${package}-${versions[$package]}.tar.gz" tar xf "${package}-${versions[$package]}.tar.gz" cd "${package}-${versions[$package]}" - CC="musl-gcc" ./configure \ + CC="$PACKAGEDIR/musl/bin/musl-gcc" ./configure \ --prefix=/usr \ --libdir=/usr/lib \ --enable-static \ @@ -97,69 +104,69 @@ build_install_skarnet_package() { ${sysdeps[$package]} \ ${configopts[$package]} ${MAKE_4x} - ${MAKE_4x} DESTDIR="/opt/${package}" install + ${MAKE_4x} DESTDIR="$PACKAGEDIR/${package}" install } tar_skarnet_package() { local package=$1 - if [[ -d "/opt/${package}/usr/bin" ]]; then - find "/opt/${package}/usr/bin" -type f -exec strip {} \; + if [[ -d "$PACKAGEDIR/${package}/usr/bin" ]]; then + find "$PACKAGEDIR/${package}/usr/bin" -type f -exec strip {} \; fi - tar -czf "/dist/${package}-${versions[$package]}-linux-amd64-bin.tar.gz" \ + tar -czf "$DISTDIR/${package}-${versions[$package]}-linux-amd64-bin.tar.gz" \ + --owner 0 \ + --group 0 \ --exclude "usr/lib" \ --exclude "usr/include" \ - -C "/opt/${package}" . + -C "$PACKAGEDIR/${package}" . local dev_dirs="" - if [[ -d "/opt/${package}/usr/lib" ]]; then + if [[ -d "$PACKAGEDIR/${package}/usr/lib" ]]; then dev_dirs="usr/lib" fi - if [[ -d "/opt/${package}/usr/include" ]]; then + if [[ -d "$PACKAGEDIR/${package}/usr/include" ]]; then dev_dirs="${dev_dirs} usr/include" fi if [[ -n "${dev_dirs}" ]]; then - tar -czf "/dist/${package}-${versions[$package]}-linux-amd64-dev.tar.gz" \ - -C "/opt/${package}" $dev_dirs + tar -czf "$DISTDIR/${package}-${versions[$package]}-linux-amd64-dev.tar.gz" \ + --owner 0 \ + --group 0 \ + -C "$PACKAGEDIR/${package}" $dev_dirs fi } -# create build dir -mkdir -p /build /dist - # install make -cd /build +cd "$BUILDDIR" curl -R -L -O http://ftp.gnu.org/gnu/make/make-${versions[make]}.tar.gz tar xf make-${versions[make]}.tar.gz cd make-${versions[make]} -./configure +./configure --prefix="$PACKAGEDIR/make" make make install # install musl -cd /build +cd "$BUILDDIR" curl -R -L -O http://www.musl-libc.org/releases/musl-${versions[musl]}.tar.gz tar xf musl-${versions[musl]}.tar.gz cd musl-${versions[musl]} CFLAGS="-fno-toplevel-reorder -fno-stack-protector" \ ./configure \ - --prefix=/usr/musl \ - --exec-prefix=/usr \ + --prefix=$PACKAGEDIR/musl \ --disable-shared ${MAKE_4x} ${MAKE_4x} install # install linux-headers -cd /build -curl -R -L -O http://www.kernel.org/pub/linux/kernel/v3.x/linux-${versions[linux]}.tar.xz +cd "$BUILDDIR" +curl -R -L -O -C - http://www.kernel.org/pub/linux/kernel/v3.x/linux-${versions[linux]}.tar.xz tar xf linux-${versions[linux]}.tar.xz cd linux-${versions[linux]} -for i in /patches/linux/*.patch; do +for i in $PATCHDIR/linux/*.patch; do patch -p1 -i "${i}" || true done -make headers_install ARCH="$(uname -m)" INSTALL_HDR_PATH="/opt/linux-headers" CC="musl-gcc" +make headers_install ARCH="$(uname -m)" INSTALL_HDR_PATH="$PACKAGEDIR/linux-headers" CC="$PACKAGEDIR/musl/bin/musl-gcc" # install skarnet packages for package in "${skarnet_all_packages[@]}"; do @@ -168,17 +175,17 @@ for package in "${skarnet_all_packages[@]}"; do done # generate release.md -echo "Built using \`make-${versions[make]}\`, \`musl-${versions[musl]}\` and \`linux-headers-${versions[linux]}\`" >> /dist/release.md -echo "" >> /dist/release.md -echo "| Software | Version |" >> /dist/release.md -echo "| -------- |:-------:|" >> /dist/release.md +echo "Built using \`make-${versions[make]}\`, \`musl-${versions[musl]}\` and \`linux-headers-${versions[linux]}\`" >> $DISTDIR/release.md +echo "" >> $DISTDIR/release.md +echo "| Software | Version |" >> $DISTDIR/release.md +echo "| -------- |:-------:|" >> $DISTDIR/release.md for package in "${skarnet_all_packages[@]}"; do - echo "| ${package} | ${versions[${package}]} |" >> /dist/release.md + echo "| ${package} | ${versions[${package}]} |" >> $DISTDIR/release.md done # generate manifests for i in "${!manifests[@]}"; do - file="/dist/${manifests[${i}]}" + file="$DISTDIR/${manifests[${i}]}" packages="$i[@]" for package in "${!packages}"; do echo "${package}=${versions[${package}]}" >> $file diff --git a/rootfs/build-latest-git b/skarnet-builder/build-latest-git old mode 100644 new mode 100755 similarity index 100% rename from rootfs/build-latest-git rename to skarnet-builder/build-latest-git diff --git a/skarnet-builder/build-wrapper b/skarnet-builder/build-wrapper new file mode 100755 index 0000000..4a69c2b --- /dev/null +++ b/skarnet-builder/build-wrapper @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +rm -f $HOME/dist/* +./build-latest 2>&1 | tee "$HOME/dist/build-latest-$(date +'%Y%m%d%H%M%S').log" +exit 0 diff --git a/rootfs/install-latest b/skarnet-builder/install-latest old mode 100644 new mode 100755 similarity index 100% rename from rootfs/install-latest rename to skarnet-builder/install-latest diff --git a/rootfs/install-latest-git b/skarnet-builder/install-latest-git old mode 100644 new mode 100755 similarity index 100% rename from rootfs/install-latest-git rename to skarnet-builder/install-latest-git diff --git a/rootfs/patches/linux/1-4-glibc-specific-inclusion-of-sysinfo.h-in-kernel.h.patch b/skarnet-builder/patches/linux/1-4-glibc-specific-inclusion-of-sysinfo.h-in-kernel.h.patch similarity index 100% rename from rootfs/patches/linux/1-4-glibc-specific-inclusion-of-sysinfo.h-in-kernel.h.patch rename to skarnet-builder/patches/linux/1-4-glibc-specific-inclusion-of-sysinfo.h-in-kernel.h.patch diff --git a/rootfs/patches/linux/3-4-libc-compat.h-fix-some-issues-arising-from-in6.h.patch b/skarnet-builder/patches/linux/3-4-libc-compat.h-fix-some-issues-arising-from-in6.h.patch similarity index 100% rename from rootfs/patches/linux/3-4-libc-compat.h-fix-some-issues-arising-from-in6.h.patch rename to skarnet-builder/patches/linux/3-4-libc-compat.h-fix-some-issues-arising-from-in6.h.patch diff --git a/rootfs/patches/linux/4-4-libc-compat.h-prevent-redefinition-of-struct-ethhdr.patch b/skarnet-builder/patches/linux/4-4-libc-compat.h-prevent-redefinition-of-struct-ethhdr.patch similarity index 100% rename from rootfs/patches/linux/4-4-libc-compat.h-prevent-redefinition-of-struct-ethhdr.patch rename to skarnet-builder/patches/linux/4-4-libc-compat.h-prevent-redefinition-of-struct-ethhdr.patch diff --git a/rootfs/patches/linux/src.txt b/skarnet-builder/patches/linux/src.txt similarity index 100% rename from rootfs/patches/linux/src.txt rename to skarnet-builder/patches/linux/src.txt