github.com/tsuna/docker@v1.7.0-rc3/contrib/mkimage-rinse.sh (about)

     1  #!/usr/bin/env bash
     2  #
     3  # Create a base CentOS Docker image.
     4  
     5  # This script is useful on systems with rinse available (e.g.,
     6  # building a CentOS image on Debian).  See contrib/mkimage-yum.sh for
     7  # a way to build CentOS images on systems with yum installed.
     8  
     9  set -e
    10  
    11  echo >&2
    12  echo >&2 'warning: this script is deprecated - see mkimage.sh and mkimage/rinse'
    13  echo >&2
    14  
    15  repo="$1"
    16  distro="$2"
    17  mirror="$3"
    18  
    19  if [ ! "$repo" ] || [ ! "$distro" ]; then
    20  	self="$(basename $0)"
    21  	echo >&2 "usage: $self repo distro [mirror]"
    22  	echo >&2
    23  	echo >&2 "   ie: $self username/centos centos-5"
    24  	echo >&2 "       $self username/centos centos-6"
    25  	echo >&2
    26  	echo >&2 "   ie: $self username/slc slc-5"
    27  	echo >&2 "       $self username/slc slc-6"
    28  	echo >&2
    29  	echo >&2 "   ie: $self username/centos centos-5 http://vault.centos.org/5.8/os/x86_64/CentOS/"
    30  	echo >&2 "       $self username/centos centos-6 http://vault.centos.org/6.3/os/x86_64/Packages/"
    31  	echo >&2
    32  	echo >&2 'See /etc/rinse for supported values of "distro" and for examples of'
    33  	echo >&2 '  expected values of "mirror".'
    34  	echo >&2
    35  	echo >&2 'This script is tested to work with the original upstream version of rinse,'
    36  	echo >&2 '  found at http://www.steve.org.uk/Software/rinse/ and also in Debian at'
    37  	echo >&2 '  http://packages.debian.org/wheezy/rinse -- as always, YMMV.'
    38  	echo >&2
    39  	exit 1
    40  fi
    41  
    42  target="${TMPDIR:-/var/tmp}/docker-rootfs-rinse-$distro-$$-$RANDOM"
    43  
    44  cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
    45  returnTo="$(pwd -P)"
    46  
    47  rinseArgs=( --arch amd64 --distribution "$distro" --directory "$target" )
    48  if [ "$mirror" ]; then
    49  	rinseArgs+=( --mirror "$mirror" )
    50  fi
    51  
    52  set -x
    53  
    54  mkdir -p "$target"
    55  
    56  sudo rinse "${rinseArgs[@]}"
    57  
    58  cd "$target"
    59  
    60  # rinse fails a little at setting up /dev, so we'll just wipe it out and create our own
    61  sudo rm -rf dev
    62  sudo mkdir -m 755 dev
    63  (
    64  	cd dev
    65  	sudo ln -sf /proc/self/fd ./
    66  	sudo mkdir -m 755 pts
    67  	sudo mkdir -m 1777 shm
    68  	sudo mknod -m 600 console c 5 1
    69  	sudo mknod -m 600 initctl p
    70  	sudo mknod -m 666 full c 1 7
    71  	sudo mknod -m 666 null c 1 3
    72  	sudo mknod -m 666 ptmx c 5 2
    73  	sudo mknod -m 666 random c 1 8
    74  	sudo mknod -m 666 tty c 5 0
    75  	sudo mknod -m 666 tty0 c 4 0
    76  	sudo mknod -m 666 urandom c 1 9
    77  	sudo mknod -m 666 zero c 1 5
    78  )
    79  
    80  # effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb --keep-services "$target"
    81  #  locales
    82  sudo rm -rf usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}
    83  #  docs and man pages
    84  sudo rm -rf usr/share/{man,doc,info,gnome/help}
    85  #  cracklib
    86  sudo rm -rf usr/share/cracklib
    87  #  i18n
    88  sudo rm -rf usr/share/i18n
    89  #  yum cache
    90  sudo rm -rf var/cache/yum
    91  sudo mkdir -p --mode=0755 var/cache/yum
    92  #  sln
    93  sudo rm -rf sbin/sln
    94  #  ldconfig
    95  #sudo rm -rf sbin/ldconfig
    96  sudo rm -rf etc/ld.so.cache var/cache/ldconfig
    97  sudo mkdir -p --mode=0755 var/cache/ldconfig
    98  
    99  # allow networking init scripts inside the container to work without extra steps
   100  echo 'NETWORKING=yes' | sudo tee etc/sysconfig/network > /dev/null
   101  
   102  # to restore locales later:
   103  #  yum reinstall glibc-common
   104  
   105  version=
   106  if [ -r etc/redhat-release ]; then
   107  	version="$(sed -E 's/^[^0-9.]*([0-9.]+).*$/\1/' etc/redhat-release)"
   108  elif [ -r etc/SuSE-release ]; then
   109  	version="$(awk '/^VERSION/ { print $3 }' etc/SuSE-release)"
   110  fi
   111  
   112  if [ -z "$version" ]; then
   113  	echo >&2 "warning: cannot autodetect OS version, using $distro as tag"
   114  	sleep 20
   115  	version="$distro"
   116  fi
   117  
   118  sudo tar --numeric-owner -c . | docker import - $repo:$version
   119  
   120  docker run -i -t $repo:$version echo success
   121  
   122  cd "$returnTo"
   123  sudo rm -rf "$target"