#!/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 <<EOF
Package: $f
Pin-Priority: -100
EOF
done
echo " ---- upgrade ${ tmpdir } / ${ distro } - ${ arch } " 1>& 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