mkimage-rinse.sh 3.4 KB

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