Browse code

Remove mkimage-centos.sh in favor of a new rinse-based script, since febootstrap is fragile and picky

Tianon Gravi authored on 2013/10/24 02:22:41
Showing 3 changed files
1 1
deleted file mode 100755
... ...
@@ -1,15 +0,0 @@
1
-#!/bin/bash
2
-# Create a CentOS base image for Docker
3
-# From unclejack https://github.com/dotcloud/docker/issues/290
4
-set -e
5
-
6
-MIRROR_URL="http://centos.netnitco.net/6.4/os/x86_64/"
7
-MIRROR_URL_UPDATES="http://centos.netnitco.net/6.4/updates/x86_64/"
8
-
9
-yum install -y febootstrap xz
10
-
11
-febootstrap -i bash -i coreutils -i tar -i bzip2 -i gzip -i vim-minimal -i wget -i patch -i diffutils -i iproute -i yum centos centos64  $MIRROR_URL -u $MIRROR_URL_UPDATES
12
-touch centos64/etc/resolv.conf
13
-touch centos64/sbin/init
14
-
15
-tar --numeric-owner -Jcpf centos-64.tar.xz -C centos64 .
16 1
new file mode 100755
... ...
@@ -0,0 +1,112 @@
0
+#!/bin/bash
1
+set -e
2
+
3
+repo="$1"
4
+distro="$2"
5
+mirror="$3"
6
+
7
+if [ ! "$repo" ] || [ ! "$distro" ]; then
8
+	self="$(basename $0)"
9
+	echo >&2 "usage: $self repo distro [mirror]"
10
+	echo >&2
11
+	echo >&2 "   ie: $self username/centos centos-5"
12
+	echo >&2 "       $self username/centos centos-6"
13
+	echo >&2
14
+	echo >&2 "   ie: $self username/slc slc-5"
15
+	echo >&2 "       $self username/slc slc-6"
16
+	echo >&2
17
+	echo >&2 "   ie: $self username/centos centos-5 http://vault.centos.org/5.8/os/x86_64/CentOS/"
18
+	echo >&2 "       $self username/centos centos-6 http://vault.centos.org/6.3/os/x86_64/Packages/"
19
+	echo >&2
20
+	echo >&2 'See /etc/rinse for supported values of "distro" and for examples of'
21
+	echo >&2 '  expected values of "mirror".'
22
+	echo >&2
23
+	echo >&2 'This script is tested to work with the original upstream version of rinse,'
24
+	echo >&2 '  found at http://www.steve.org.uk/Software/rinse/ and also in Debian at'
25
+	echo >&2 '  http://packages.debian.org/wheezy/rinse -- as always, YMMV.'
26
+	echo >&2
27
+	exit 1
28
+fi
29
+
30
+target="/tmp/docker-rootfs-rinse-$distro-$$-$RANDOM"
31
+
32
+cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
33
+returnTo="$(pwd -P)"
34
+
35
+rinseArgs=( --arch amd64 --distribution "$distro" --directory "$target" )
36
+if [ "$mirror" ]; then
37
+	rinseArgs+=( --mirror "$mirror" )
38
+fi
39
+
40
+set -x
41
+
42
+mkdir -p "$target"
43
+
44
+sudo rinse "${rinseArgs[@]}"
45
+
46
+cd "$target"
47
+
48
+# rinse fails a little at setting up /dev, so we'll just wipe it out and create our own
49
+sudo rm -rf dev
50
+sudo mkdir -m 755 dev
51
+(
52
+	cd dev
53
+	sudo ln -sf /proc/self/fd ./
54
+	sudo mkdir -m 755 pts
55
+	sudo mkdir -m 1777 shm
56
+	sudo mknod -m 600 console c 5 1
57
+	sudo mknod -m 600 initctl p
58
+	sudo mknod -m 666 full c 1 7
59
+	sudo mknod -m 666 null c 1 3
60
+	sudo mknod -m 666 ptmx c 5 2
61
+	sudo mknod -m 666 random c 1 8
62
+	sudo mknod -m 666 tty c 5 0
63
+	sudo mknod -m 666 tty0 c 4 0
64
+	sudo mknod -m 666 urandom c 1 9
65
+	sudo mknod -m 666 zero c 1 5
66
+)
67
+
68
+# effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb --keep-services "$target"
69
+#  locales
70
+sudo rm -rf usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}
71
+#  docs
72
+sudo rm -rf usr/share/{man,doc,info,gnome/help}
73
+#  cracklib
74
+sudo rm -rf usr/share/cracklib
75
+#  i18n
76
+sudo rm -rf usr/share/i18n
77
+#  yum cache
78
+sudo rm -rf var/cache/yum
79
+sudo mkdir -p --mode=0755 var/cache/yum
80
+#  sln
81
+sudo rm -rf sbin/sln
82
+#  ldconfig
83
+#sudo rm -rf sbin/ldconfig
84
+sudo rm -rf etc/ld.so.cache var/cache/ldconfig
85
+sudo mkdir -p --mode=0755 var/cache/ldconfig
86
+
87
+# allow networking init scripts inside the container to work without extra steps
88
+echo 'NETWORKING=yes' | sudo tee etc/sysconfig/network > /dev/null
89
+
90
+# to restore locales later:
91
+#  yum reinstall glibc-common
92
+
93
+version=
94
+if [ -r etc/redhat-release ]; then
95
+	version="$(sed -E 's/^[^0-9.]*([0-9.]+).*$/\1/' etc/redhat-release)"
96
+elif [ -r etc/SuSE-release ]; then
97
+	version="$(awk '/^VERSION/ { print $3 }' etc/SuSE-release)"
98
+fi
99
+
100
+if [ -z "$version" ]; then
101
+	echo >&2 "warning: cannot autodetect OS version, using $distro as tag"
102
+	sleep 20
103
+	version="$distro"
104
+fi
105
+
106
+sudo tar --numeric-owner -c . | docker import - $repo:$version
107
+
108
+docker run -i -t $repo:$version echo success
109
+
110
+cd "$returnTo"
111
+sudo rm -rf "$target"
... ...
@@ -37,7 +37,7 @@ There are more example scripts for creating base images in the
37 37
 Docker Github Repo:
38 38
 
39 39
 * `BusyBox <https://github.com/dotcloud/docker/blob/master/contrib/mkimage-busybox.sh>`_
40
-* `CentOS
41
-  <https://github.com/dotcloud/docker/blob/master/contrib/mkimage-centos.sh>`_
42
-* `Debian/Ubuntu
40
+* `CentOS / Scientific Linux CERN (SLC)
41
+  <https://github.com/dotcloud/docker/blob/master/contrib/mkimage-rinse.sh>`_
42
+* `Debian / Ubuntu
43 43
   <https://github.com/dotcloud/docker/blob/master/contrib/mkimage-debootstrap.sh>`_