#!/bin/bash -e # pass your docker hub login name as $1, defaults to your user name # you should have a repositories named ubuntu and debian # if you have your own repository, you can also prepend it: # my.repo.url:5000/myname the script will then append ubuntu or debian # e.g. to my.repo.url:5000/myname/ubuntu:trusty-amd64 # please login to docker before you start this script docker_user=${1:-${docker_user:-$(id -un)}} if test -f /etc/setup-debootstrap.conf; then . /etc/setup-debootstrap.conf fi archs=${archs:-"i386 amd64"} ubuntu=${ubuntu:-"wily vivid trusty precise"} debian=${debian:-"jessie wheezy squeeze sid"} distros="${ubuntu} ${debian}" tmpdir=${tmpdir:-"/var/tmp"} packages=(${packages:-"python-software-properties software-properties-common|software-properties-common|python-software-properties" "apt-transport-https dpkg-dev lsb-release"}) for arch in ${archs}; do for distro in ${distros}; do if test "${ubuntu//${distro}/}" != "${ubuntu}"; then type="ubuntu" else type="debian" fi echo "******** process $type $distro $arch ********" 1>&2 if test -d "${tmpdir}/${distro}-${arch}"; then echo " ++++ already exists ${tmpdir}/${distro}-${arch}" 1>&2 else echo " ---- install ${tmpdir}/${distro}-${arch}" 1>&2 sudo debootstrap --arch="$arch" "$distro" "${tmpdir}/${distro}-${arch}" fi echo " ---- prevent packages in ${tmpdir}/${distro}-${arch}" 1>&2 for f in "libpam-systemd:amd64" "policykit*" "colord"; do sudo chroot "${tmpdir}/${distro}-${arch}" cat >> /etc/apt/preferences <&2 sudo chroot "${tmpdir}/${distro}-${arch}" apt-get update sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -y upgrade sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -y dist-upgrade for package in "${packages[@]}"; do echo " ---- install ${package//|/ or } to ${tmpdir}/${distro}-${arch}" 1>&2 IFS='|' read -r -a pkgs <<< "$package" success=0 for pkg in "${pkgs[@]}"; do if sudo chroot "${tmpdir}/${distro}-${arch}" apt-get install -y ${pkg}; then success=1; break; fi done test $success -eq 1 done echo " ---- import ${tmpdir}/${distro}-${arch} to ${docker_user}/${type}:${distro}-${arch}" 1>&2 cd "${tmpdir}/${distro}-${arch}" sudo tar c . | docker import - "${docker_user}/${type}:${distro}-${arch}" echo " ---- push ${tmpdir}/${distro}-${arch} to ${docker_user}/${type}:${distro}-${arch}" 1>&2 docker push "${docker_user}/${type}:${distro}-${arch}" done done