Created
July 25, 2014 01:53
-
-
Save dbehnke/9a201373b6e91eaa5a1a to your computer and use it in GitHub Desktop.
Docker build script for Oracle Linux 7 using public-yum
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
#!/usr/bin/env bash | |
# | |
# Create a base CentOS Docker image. | |
# | |
# This script is useful on systems with yum installed (e.g., building | |
# a CentOS image on CentOS). See contrib/mkimage-rinse.sh for a way | |
# to build CentOS images on other systems. | |
usage() { | |
cat <<EOOPTS | |
$(basename $0) [OPTIONS] <name> | |
OPTIONS: | |
-y <yumconf> The path to the yum config to install packages from. The | |
default is /etc/yum.conf. | |
EOOPTS | |
exit 1 | |
} | |
# option defaults | |
yum_config=/etc/yum.conf | |
while getopts ":y:h" opt; do | |
case $opt in | |
y) | |
yum_config=$OPTARG | |
;; | |
h) | |
usage | |
;; | |
\?) | |
echo "Invalid option: -$OPTARG" | |
usage | |
;; | |
esac | |
done | |
shift $((OPTIND - 1)) | |
name=$1 | |
if [[ -z $name ]]; then | |
usage | |
fi | |
#-------------------- | |
target=$(mktemp -d --tmpdir $(basename $0).XXXXXX) | |
set -x | |
mkdir -m 755 "$target"/dev | |
mknod -m 600 "$target"/dev/console c 5 1 | |
mknod -m 600 "$target"/dev/initctl p | |
mknod -m 666 "$target"/dev/full c 1 7 | |
mknod -m 666 "$target"/dev/null c 1 3 | |
mknod -m 666 "$target"/dev/ptmx c 5 2 | |
mknod -m 666 "$target"/dev/random c 1 8 | |
mknod -m 666 "$target"/dev/tty c 5 0 | |
mknod -m 666 "$target"/dev/tty0 c 4 0 | |
mknod -m 666 "$target"/dev/urandom c 1 9 | |
mknod -m 666 "$target"/dev/zero c 1 5 | |
yum -c "$yum_config" --installroot="$target" --setopt=tsflags=nodocs \ | |
--setopt=group_package_types=mandatory -y groupinstall Core | |
#ol7 hack | |
mkdir -p $target/etc/yum.repos.d | |
cp /etc/yum.repos.d/public-yum-ol7.repo $target/etc/yum.repos.d | |
#cleanup | |
yum -c "$yum_config" --installroot="$target" -y clean all | |
cat > "$target"/etc/sysconfig/network <<EOF | |
NETWORKING=yes | |
HOSTNAME=localhost.localdomain | |
EOF | |
# effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb | |
# --keep-services "$target". Stolen from mkimage-rinse.sh | |
# locales | |
rm -rf "$target"/usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive} | |
# docs | |
rm -rf "$target"/usr/share/{man,doc,info,gnome/help} | |
# cracklib | |
rm -rf "$target"/usr/share/cracklib | |
# i18n | |
rm -rf "$target"/usr/share/i18n | |
# sln | |
rm -rf "$target"/sbin/sln | |
# ldconfig | |
rm -rf "$target"/etc/ld.so.cache | |
rm -rf "$target"/var/cache/ldconfig/* | |
version= | |
if [ -r "$target"/etc/redhat-release ]; then | |
version="$(sed 's/^[^0-9\]*\([0-9.]\+\).*$/\1/' "$target"/etc/redhat-release)" | |
fi | |
if [ -z "$version" ]; then | |
echo >&2 "warning: cannot autodetect OS version, using '$name' as tag" | |
version=$name | |
fi | |
tar --numeric-owner -c -C "$target" . | docker import - $name:$version | |
docker run -i -t $name:$version echo success | |
rm -rf "$target" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment