Created
March 12, 2014 08:39
-
-
Save scupython/9503083 to your computer and use it in GitHub Desktop.
make centos docker images
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment