[DEPRECATED, use docker as replacement] Scripts to generate Ubuntu and Debian docker images or chroot environments, i.e. used for building packages for these environments.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

201 lines
9.8 KiB

#!/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
tmpdir=${tmpdir:-"/var/tmp/chroots"}
test -d "${tmpdir}" || mkdir -p "${tmpdir}"
9 years ago
docker_user=${docker_user:-${USER}}
if test -z "${ports[@]}"; then
#ports=( armhf powerpc ppc64el s390x arm64 )
#qemus=( arm ppc ppc64 s390x aarch64 )
ports=( armhf )
qemus=( arm )
fi
numports=${#ports[@]}
if test -z "$archs"; then
case "$(dpkg --print-architecture)" in
(amd64) archs="amd64 i386";;
(*) archs=$(dpkg --print-architecture);;
esac
for ((i=0; i<$numports; ++i)); do
if test -x /usr/bin/qemu-${qemus[$i]}-static; then
archs+=" ${ports[$i]}"
fi
done
fi
ubuntu_qt5="yakkety xenial wily vivid trusty"
debian_qt5="jessie sid"
debian_qt4=""
# not yet successfully installable: debian stretch and buster
9 years ago
ubuntu=("${ubuntu_qt5}")
9 years ago
debian=("${debian_qt5}" "${debian_qt4}")
distros=(${distros:-"${ubuntu[@]}" "${debian[@]}"})
packages_qt5="libpoppler-qt5-dev libpodofo-dev libqt5designer5 libqt5svg5-dev libqt5webkit5-dev qt5-default qt5-qmake qtbase5-dev qtbase5-dev-tools qttools5-dev qttools5-dev-tools"
packages_qt4="libqt4-core libqt4-designer libqt4-dev libqt4-webkit qt4-dev-tools qt4-qmake"
# |libqtcore4 |libqtwebkit-dev |libp11-kit-dev|libgnutls-dev
packages_base="apt-transport-https automake autotools-dev binutils-dev debhelper default-jdk-headless doxygen dpkg-dev g++ git graphviz libboost-thread-dev libcppunit-dev liblog4cxx-dev libpcsclite-dev libpkcs11-helper1-dev libproxy-dev libssl-dev libtool libz-dev lsb-release mscgen nodejs pandoc pkg-config software-properties-common subversion subversion-tools texinfo xvfb"
#package_not_in_yakkety="default-jdk-headless"
package_not_in_wily="default-jdk-headless"
9 years ago
if test -z "${packages[@]}"; then
packages=("${packages_base} ${packages_qt5}" "${packages_base} ${packages_qt5}" "${packages_base} ${packages_qt4}")
fi
9 years ago
if test -z "${index}" -a "${#distros[@]}" -ne "${#packages[@]}"; then
echo "**** ERROR: number of distribution lists doesn't match package lists" 1>&2
echo " distribution lists: ${#distros[@]}" 1>&2
echo " package lists: ${#packages[@]}" 1>&2
exit 1
fi
fastmode=0;
limit=
while [ $# -gt 0 ]; do
case "$1" in
(-f|--fastmode) fastmode=1;;
(-l|--limit) shift; limit=$1;;
(*)
echo "**** ERROR: unknown option $1" 1>&2
exit 1;;
esac
shift
done
error() {
tmpdir=$2
disto=$3
arch=$4
echo "**** ERROR at ${0}:${1}" 1>&2
echo ".... on $(eval echo \"${BASH_COMMAND}\")" 1>&2
echo ".... tmpdir=$tmpdir arch=$arch distro=$distro" 1>&2
exit 1
}
9 years ago
for ((i=0; i<${#distros[@]}; ++i)); do
package="${packages[${index:-$i}]}"
for distro in ${distros[$i]}; do
prevent=package_not_in_${distro};
instpkgs=${package}
for pkg in ${!prevent}; do
instpkgs=${instpkgs//${pkg}/}
done
if test -n "$limit" -a "$distro" != "$limit"; then
continue
fi
if ! test -e /usr/share/debootstrap/scripts/${distro}; then
echo "**** WARNING: skipping unsupported ${distro}" 1>&2
continue;
fi
9 years ago
ubuntus="${ubuntu[@]}"
if test "${ubuntus//${distro}/}" != "${ubuntus}"; then
type="ubuntu"
else
type="debian"
fi
9 years ago
for arch in ${archs}; do
trap 'error "${LINENO}" "${tmpdir}" "${disto}" "${arch}"' ERR SIGINT
9 years ago
echo "******** process $type $distro $arch ********" 1>&2
if test -d "${tmpdir}/${distro}-${arch}"; then
echo " ++++ already exists ${tmpdir}/${distro}-${arch}" 1>&2
if test $fastmode -eq 1; then
continue;
fi
9 years ago
else
if test "$(dpkg --print-architecture)" = "$arch" -o \( "$(dpkg --print-architecture)" = amd64 -a "$arch" = i386 \) ; then
echo " ---- install ${tmpdir}/${distro}-${arch}" 1>&2
sudo debootstrap --arch="$arch" "$distro" "${tmpdir}/${distro}-${arch}"
else
for ((i=0; $i<$numports; ++i)); do
if test "${ports[$i]}" = "${arch}"; then
break;
fi
done
qemu="${qemus[$i]}"
if ! test -e /usr/bin/qemu-${qemu}-static; then
echo "**** WARNING: no emulator ${qemu} found, skipping ${arch}" 1>&2
continue;
fi
arch=${arch#*-}
echo " ---- install on $qemu ${tmpdir}/${distro}-${arch}" 1>&2
sudo debootstrap --foreign --arch="$arch" "$distro" "${tmpdir}/${distro}-${arch}"
sudo cp /usr/bin/qemu-${qemu}-static "${tmpdir}/${distro}-${arch}/usr/bin/qemu-${qemu}-static"
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot "${tmpdir}/${distro}-${arch}" /debootstrap/debootstrap --second-stage || \
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true -y -f install && \
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot "${tmpdir}/${distro}-${arch}" /debootstrap/debootstrap --second-stage
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot "${tmpdir}/${distro}-${arch}" dpkg --configure -a
fi
9 years ago
fi
echo " ---- mount filesystems in ${tmpdir}/${distro}-${arch}" 1>&2
sudo mount -t proc proc "${tmpdir}/${distro}-${arch}"/proc/
sudo mount -t sysfs sys "${tmpdir}/${distro}-${arch}"/sys/
sudo mount -o bind /dev "${tmpdir}/${distro}-${arch}"/dev/
echo " ---- preconfigure debian packages in ${tmpdir}/${distro}-${arch}" 1>&2
sudo chroot "${tmpdir}/${distro}-${arch}" debconf-set-selections <<EOF
console-setup console-setup/fontsize-fb47 select 8x16
console-setup console-setup/fontface47 select Fixed
console-setup console-setup/charmap47 select UTF-8
console-setup console-setup/store_defaults_in_debconf_db boolean true
keyboard-configuration console-setup/ask_detect boolean false
keyboard-configuration console-setup/detected note
console-setup console-setup/fontsize string 8x16
console-setup console-setup/fontsize-text47 select 8x16
console-setup console-setup/codesetcode string Uni2
keyboard-configuration console-setup/detect detect-keyboard
console-setup console-setup/codeset47 select . Combined - Latin; Slavic Cyrillic; Greek
EOF
9 years ago
echo " ---- prevent packages in ${tmpdir}/${distro}-${arch}" 1>&2
for f in "dbus" "libpam-systemd*" "packagekit*" "policykit*" "colord"; do
sudo chroot "${tmpdir}/${distro}-${arch}" <<EOF1
if ! grep -q "Package: $f" /etc/apt/preferences; then
cat >> /etc/apt/preferences <<EOF2
Package: $f
Pin-Priority: -100
9 years ago
EOF2
fi
EOF1
done
9 years ago
echo " ---- upgrade ${tmpdir}/${distro}-${arch}" 1>&2
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true update
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true -y -f install
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true -y upgrade
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true install -y python-software-properties software-properties-common || \
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true install -y software-properties-common
9 years ago
if test "${distro}" != "jessie" -a "${distro}" != "sid"; then
sudo chroot "${tmpdir}/${distro}-${arch}" add-apt-repository universe || \
( test "$type" != "debian" && \
sudo chroot "${tmpdir}/${distro}-${arch}" add-apt-repository "deb http://archive.ubuntu.com/ubuntu ${distro} universe" )
9 years ago
fi
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true update
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true -y dist-upgrade
echo " ---- cleanup ${instpkgs} to ${tmpdir}/${distro}-${arch}" 1>&2
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true autoremove --purge -y
echo " ---- install ${instpkgs} to ${tmpdir}/${distro}-${arch}" 1>&2
sudo chroot "${tmpdir}/${distro}-${arch}" apt-get -o Acquire::ForceIPv4=true install -y ${instpkgs}
echo " ---- unmount filesystems in ${tmpdir}/${distro}-${arch}" 1>&2
sudo umount "${tmpdir}/${distro}-${arch}"/proc/
sudo umount "${tmpdir}/${distro}-${arch}"/sys/
sudo umount "${tmpdir}/${distro}-${arch}"/dev/
9 years ago
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
done