From e1e3b66771a93955ab766625ea271a4d195cd506 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Wed, 23 Oct 2013 11:22:41 -0600 Subject: [PATCH] Remove mkimage-centos.sh in favor of a new rinse-based script, since febootstrap is fragile and picky Upstream-commit: 9d62dc1a0837e37ce5da01c278ab20f7d32c3774 Component: engine --- components/engine/contrib/mkimage-centos.sh | 15 --- components/engine/contrib/mkimage-rinse.sh | 112 ++++++++++++++++++ .../engine/docs/sources/use/baseimages.rst | 6 +- 3 files changed, 115 insertions(+), 18 deletions(-) delete mode 100755 components/engine/contrib/mkimage-centos.sh create mode 100755 components/engine/contrib/mkimage-rinse.sh diff --git a/components/engine/contrib/mkimage-centos.sh b/components/engine/contrib/mkimage-centos.sh deleted file mode 100755 index a3c3253f97..0000000000 --- a/components/engine/contrib/mkimage-centos.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# Create a CentOS base image for Docker -# From unclejack https://github.com/dotcloud/docker/issues/290 -set -e - -MIRROR_URL="http://centos.netnitco.net/6.4/os/x86_64/" -MIRROR_URL_UPDATES="http://centos.netnitco.net/6.4/updates/x86_64/" - -yum install -y febootstrap xz - -febootstrap -i bash -i coreutils -i tar -i bzip2 -i gzip -i vim-minimal -i wget -i patch -i diffutils -i iproute -i yum centos centos64 $MIRROR_URL -u $MIRROR_URL_UPDATES -touch centos64/etc/resolv.conf -touch centos64/sbin/init - -tar --numeric-owner -Jcpf centos-64.tar.xz -C centos64 . diff --git a/components/engine/contrib/mkimage-rinse.sh b/components/engine/contrib/mkimage-rinse.sh new file mode 100755 index 0000000000..ff8f173f98 --- /dev/null +++ b/components/engine/contrib/mkimage-rinse.sh @@ -0,0 +1,112 @@ +#!/bin/bash +set -e + +repo="$1" +distro="$2" +mirror="$3" + +if [ ! "$repo" ] || [ ! "$distro" ]; then + self="$(basename $0)" + echo >&2 "usage: $self repo distro [mirror]" + echo >&2 + echo >&2 " ie: $self username/centos centos-5" + echo >&2 " $self username/centos centos-6" + echo >&2 + echo >&2 " ie: $self username/slc slc-5" + echo >&2 " $self username/slc slc-6" + echo >&2 + echo >&2 " ie: $self username/centos centos-5 http://vault.centos.org/5.8/os/x86_64/CentOS/" + echo >&2 " $self username/centos centos-6 http://vault.centos.org/6.3/os/x86_64/Packages/" + echo >&2 + echo >&2 'See /etc/rinse for supported values of "distro" and for examples of' + echo >&2 ' expected values of "mirror".' + echo >&2 + echo >&2 'This script is tested to work with the original upstream version of rinse,' + echo >&2 ' found at http://www.steve.org.uk/Software/rinse/ and also in Debian at' + echo >&2 ' http://packages.debian.org/wheezy/rinse -- as always, YMMV.' + echo >&2 + exit 1 +fi + +target="/tmp/docker-rootfs-rinse-$distro-$$-$RANDOM" + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" +returnTo="$(pwd -P)" + +rinseArgs=( --arch amd64 --distribution "$distro" --directory "$target" ) +if [ "$mirror" ]; then + rinseArgs+=( --mirror "$mirror" ) +fi + +set -x + +mkdir -p "$target" + +sudo rinse "${rinseArgs[@]}" + +cd "$target" + +# rinse fails a little at setting up /dev, so we'll just wipe it out and create our own +sudo rm -rf dev +sudo mkdir -m 755 dev +( + cd dev + sudo ln -sf /proc/self/fd ./ + sudo mkdir -m 755 pts + sudo mkdir -m 1777 shm + sudo mknod -m 600 console c 5 1 + sudo mknod -m 600 initctl p + sudo mknod -m 666 full c 1 7 + sudo mknod -m 666 null c 1 3 + sudo mknod -m 666 ptmx c 5 2 + sudo mknod -m 666 random c 1 8 + sudo mknod -m 666 tty c 5 0 + sudo mknod -m 666 tty0 c 4 0 + sudo mknod -m 666 urandom c 1 9 + sudo mknod -m 666 zero c 1 5 +) + +# effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb --keep-services "$target" +# locales +sudo rm -rf usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive} +# docs +sudo rm -rf usr/share/{man,doc,info,gnome/help} +# cracklib +sudo rm -rf usr/share/cracklib +# i18n +sudo rm -rf usr/share/i18n +# yum cache +sudo rm -rf var/cache/yum +sudo mkdir -p --mode=0755 var/cache/yum +# sln +sudo rm -rf sbin/sln +# ldconfig +#sudo rm -rf sbin/ldconfig +sudo rm -rf etc/ld.so.cache var/cache/ldconfig +sudo mkdir -p --mode=0755 var/cache/ldconfig + +# allow networking init scripts inside the container to work without extra steps +echo 'NETWORKING=yes' | sudo tee etc/sysconfig/network > /dev/null + +# to restore locales later: +# yum reinstall glibc-common + +version= +if [ -r etc/redhat-release ]; then + version="$(sed -E 's/^[^0-9.]*([0-9.]+).*$/\1/' etc/redhat-release)" +elif [ -r etc/SuSE-release ]; then + version="$(awk '/^VERSION/ { print $3 }' etc/SuSE-release)" +fi + +if [ -z "$version" ]; then + echo >&2 "warning: cannot autodetect OS version, using $distro as tag" + sleep 20 + version="$distro" +fi + +sudo tar --numeric-owner -c . | docker import - $repo:$version + +docker run -i -t $repo:$version echo success + +cd "$returnTo" +sudo rm -rf "$target" diff --git a/components/engine/docs/sources/use/baseimages.rst b/components/engine/docs/sources/use/baseimages.rst index 4785cc5298..f1f5d106e0 100644 --- a/components/engine/docs/sources/use/baseimages.rst +++ b/components/engine/docs/sources/use/baseimages.rst @@ -37,7 +37,7 @@ There are more example scripts for creating base images in the Docker Github Repo: * `BusyBox `_ -* `CentOS - `_ -* `Debian/Ubuntu +* `CentOS / Scientific Linux CERN (SLC) + `_ +* `Debian / Ubuntu `_