mkimage-yum.sh 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env bash
  2. #
  3. # Create a base CentOS Docker image.
  4. #
  5. # This script is useful on systems with yum installed (e.g., building
  6. # a CentOS image on CentOS). See contrib/mkimage-rinse.sh for a way
  7. # to build CentOS images on other systems.
  8. usage() {
  9. cat <<EOOPTS
  10. $(basename $0) [OPTIONS] <name>
  11. OPTIONS:
  12. -y <yumconf> The path to the yum config to install packages from. The
  13. default is /etc/yum.conf.
  14. EOOPTS
  15. exit 1
  16. }
  17. # option defaults
  18. yum_config=/etc/yum.conf
  19. while getopts ":y:h" opt; do
  20. case $opt in
  21. y)
  22. yum_config=$OPTARG
  23. ;;
  24. h)
  25. usage
  26. ;;
  27. \?)
  28. echo "Invalid option: -$OPTARG"
  29. usage
  30. ;;
  31. esac
  32. done
  33. shift $((OPTIND - 1))
  34. name=$1
  35. if [[ -z $name ]]; then
  36. usage
  37. fi
  38. #--------------------
  39. target=$(mktemp -d --tmpdir $(basename $0).XXXXXX)
  40. set -x
  41. mkdir -m 755 "$target"/dev
  42. mknod -m 600 "$target"/dev/console c 5 1
  43. mknod -m 600 "$target"/dev/initctl p
  44. mknod -m 666 "$target"/dev/full c 1 7
  45. mknod -m 666 "$target"/dev/null c 1 3
  46. mknod -m 666 "$target"/dev/ptmx c 5 2
  47. mknod -m 666 "$target"/dev/random c 1 8
  48. mknod -m 666 "$target"/dev/tty c 5 0
  49. mknod -m 666 "$target"/dev/tty0 c 4 0
  50. mknod -m 666 "$target"/dev/urandom c 1 9
  51. mknod -m 666 "$target"/dev/zero c 1 5
  52. yum -c "$yum_config" --installroot="$target" --setopt=tsflags=nodocs \
  53. --setopt=group_package_types=mandatory -y groupinstall Core
  54. yum -c "$yum_config" --installroot="$target" -y clean all
  55. cat > "$target"/etc/sysconfig/network <<EOF
  56. NETWORKING=yes
  57. HOSTNAME=localhost.localdomain
  58. EOF
  59. # effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb
  60. # --keep-services "$target". Stolen from mkimage-rinse.sh
  61. # locales
  62. rm -rf "$target"/usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}
  63. # docs
  64. rm -rf "$target"/usr/share/{man,doc,info,gnome/help}
  65. # cracklib
  66. rm -rf "$target"/usr/share/cracklib
  67. # i18n
  68. rm -rf "$target"/usr/share/i18n
  69. # sln
  70. rm -rf "$target"/sbin/sln
  71. # ldconfig
  72. rm -rf "$target"/etc/ld.so.cache
  73. rm -rf "$target"/var/cache/ldconfig/*
  74. version=
  75. if [ -r "$target"/etc/redhat-release ]; then
  76. version="$(sed 's/^[^0-9\]*\([0-9.]\+\).*$/\1/' "$target"/etc/redhat-release)"
  77. fi
  78. if [ -z "$version" ]; then
  79. echo >&2 "warning: cannot autodetect OS version, using '$name' as tag"
  80. version=$name
  81. fi
  82. tar --numeric-owner -c -C "$target" . | docker import - $name:$version
  83. docker run -i -t $name:$version echo success
  84. rm -rf "$target"