CodeCommitsIssuesPull requestsActionsInsightsSecurity
e8cbf3d09e6b009ec0c094ad3594da558f4869c9

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

ci/docker-multiarch/update.sh

96lines · modecode

1#!/usr/bin/env bash
2set -e -x
3
4# A POSIX variable
5OPTIND=1 # Reset in case getopts has been used previously in the shell.
6
7while getopts "a:v:q:u:d:t:" opt; do
8 case "$opt" in
9 a) ARCH=$OPTARG
10 ;;
11 v) VERSION=$OPTARG
12 ;;
13 q) QEMU_ARCH=$OPTARG
14 ;;
15 u) QEMU_VER=$OPTARG
16 ;;
17 d) DOCKER_REPO=$OPTARG
18 ;;
19 t) TAG_ARCH=$OPTARG
20 ;;
21 esac
22done
23
24thisTarBase="ubuntu-$VERSION-core-cloudimg-$ARCH"
25thisTar="$thisTarBase-root.tar.gz"
26baseUrl="https://partner-images.canonical.com/core/$VERSION"
27
28
29# install qemu-user-static
30if [ -n "${QEMU_ARCH}" ]; then
31 if [ ! -f x86_64_qemu-${QEMU_ARCH}-static.tar.gz ]; then
32 wget -N https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VER}/x86_64_qemu-${QEMU_ARCH}-static.tar.gz
33 fi
34 tar -xvf x86_64_qemu-${QEMU_ARCH}-static.tar.gz -C $ROOTFS/usr/bin/
35fi
36
37
38# get the image
39if \
40 wget -q --spider "$baseUrl/current" \
41 && wget -q --spider "$baseUrl/current/$thisTar" \
42 ; then
43 baseUrl+='/current'
44fi
45wget -qN "$baseUrl/"{{MD5,SHA{1,256}}SUMS{,.gpg},"$thisTarBase.manifest",'unpacked/build-info.txt'} || true
46wget -N "$baseUrl/$thisTar"
47
48# check checksum
49if [ -f SHA256SUMS ]; then
50 sha256sum="$(sha256sum "$thisTar" | cut -d' ' -f1)"
51 if ! grep -q "$sha256sum" SHA256SUMS; then
52 echo >&2 "error: '$thisTar' has invalid SHA256"
53 exit 1
54 fi
55fi
56
57cat > Dockerfile <<-EOF
58 FROM scratch
59 ADD $thisTar /
60 ENV ARCH=${ARCH} UBUNTU_SUITE=${VERSION} DOCKER_REPO=${DOCKER_REPO}
61EOF
62
63# add qemu-user-static binary
64if [ -n "${QEMU_ARCH}" ]; then
65 cat >> Dockerfile <<EOF
66
67# Add qemu-user-static binary for amd64 builders
68ADD x86_64_qemu-${QEMU_ARCH}-static.tar.gz /usr/bin
69EOF
70fi
71
72cat >> Dockerfile <<-EOF
73 # a few minor docker-specific tweaks
74 # see https://github.com/docker/docker/blob/master/contrib/mkimage/debootstrap
75 RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \\
76 && echo 'exit 101' >> /usr/sbin/policy-rc.d \\
77 && chmod +x /usr/sbin/policy-rc.d \\
78 && dpkg-divert --local --rename --add /sbin/initctl \\
79 && cp -a /usr/sbin/policy-rc.d /sbin/initctl \\
80 && sed -i 's/^exit.*/exit 0/' /sbin/initctl \\
81 && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \\
82 && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \\
83 && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \\
84 && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \\
85 && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \\
86 && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes
87
88 # enable the universe
89 RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
90
91 # overwrite this with 'CMD []' in a dependent Dockerfile
92 CMD ["/bin/bash"]
93EOF
94
95docker build -t "${DOCKER_REPO}:${TAG_ARCH}-${VERSION}" .
96docker run --rm "${DOCKER_REPO}:${TAG_ARCH}-${VERSION}" /bin/bash -ec "echo Hello from Ubuntu!"