Bladeren bron

Merge pull request #2037 from tianon/install-script-revamp

Revamp install.sh to be usable by more people, and to use official install methods whenever possible (apt repo, portage tree, etc.)
Solomon Hykes 11 jaren geleden
bovenliggende
commit
f15cd71bb8
4 gewijzigde bestanden met toevoegingen van 153 en 78 verwijderingen
  1. 0 61
      contrib/install.sh
  2. 4 4
      docs/sources/installation/amazon.rst
  3. 136 0
      hack/install.sh
  4. 13 13
      hack/release.sh

+ 0 - 61
contrib/install.sh

@@ -1,61 +0,0 @@
-#!/bin/sh
-# This script is meant for quick & easy install via 'curl URL-OF-SCRIPT | sh'
-# Original version by Jeff Lindsay <progrium@gmail.com>
-# Revamped by Jerome Petazzoni <jerome@dotcloud.com>
-#
-# This script canonical location is https://get.docker.io/; to update it, run:
-# s3cmd put -m text/x-shellscript -P install.sh s3://get.docker.io/index
-
-echo "Ensuring basic dependencies are installed..."
-apt-get -qq update
-apt-get -qq install lxc wget
-
-echo "Looking in /proc/filesystems to see if we have AUFS support..."
-if grep -q aufs /proc/filesystems
-then
-    echo "Found."
-else
-    echo "Ahem, it looks like the current kernel does not support AUFS."
-    echo "Let's see if we can load the AUFS module with modprobe..."
-    if modprobe aufs
-    then
-        echo "Module loaded."
-    else
-        echo "Ahem, things didn't turn out as expected."
-        KPKG=linux-image-extra-$(uname -r)
-        echo "Trying to install $KPKG..."
-        if apt-get -qq install $KPKG
-        then
-            echo "Installed."
-        else
-            echo "Oops, we couldn't install the -extra kernel."
-            echo "Are you sure you are running a supported version of Ubuntu?"
-            echo "Proceeding anyway, but Docker will probably NOT WORK!"
-        fi
-    fi
-fi
-
-echo "Downloading docker binary to /usr/local/bin..."
-curl -s https://get.docker.io/builds/$(uname -s)/$(uname -m)/docker-latest \
-    > /usr/local/bin/docker
-chmod +x /usr/local/bin/docker
-
-if [ -f /etc/init/dockerd.conf ]
-then
-  echo "Upstart script already exists."
-else
-  echo "Creating /etc/init/dockerd.conf..."
-  cat >/etc/init/dockerd.conf <<EOF
-description "Docker daemon"
-start on filesystem and started lxc-net
-stop on runlevel [!2345]
-respawn
-exec /usr/local/bin/docker -d
-EOF
-fi
-
-echo "Starting dockerd..."
-start dockerd > /dev/null
-
-echo "Done."
-echo

+ 4 - 4
docs/sources/installation/amazon.rst

@@ -44,10 +44,10 @@ Security Group to allow SSH.** By default all incoming ports to your
 new instance will be blocked by the AWS Security Group, so you might
 just get timeouts when you try to connect.
 
-Installing with ``get.docker.io`` (as above) will create a service
-named ``dockerd``. You may want to set up a :ref:`docker group
-<dockergroup>` and add the *ubuntu* user to it so that you don't have
-to use ``sudo`` for every Docker command.
+Installing with ``get.docker.io`` (as above) will create a service named
+``lxc-docker``. It will also set up a :ref:`docker group <dockergroup>` and you
+may want to add the *ubuntu* user to it so that you don't have to use ``sudo``
+for every Docker command.
 
 Once you've got Docker installed, you're ready to try it out -- head
 on over to the :doc:`../use/basics` or :doc:`../examples/index` section.

+ 136 - 0
hack/install.sh

@@ -0,0 +1,136 @@
+#!/bin/sh
+set -e
+#
+# This script is meant for quick & easy install via:
+#   'curl -sL https://get.docker.io/ | sh'
+# or:
+#   'wget -qO- https://get.docker.io/ | sh'
+#
+#
+# Docker Maintainers:
+#   To update this script on https://get.docker.io,
+#   use hack/release.sh during a normal release,
+#   or the following one-liner for script hotfixes:
+#     s3cmd put --acl-public -P hack/install.sh s3://get.docker.io/index
+#
+
+url='https://get.docker.io/'
+
+command_exists() {
+	command -v "$@" > /dev/null 2>&1
+}
+
+case "$(uname -m)" in
+	*64)
+		;;
+	*)
+		echo >&2 'Error: you are not using a 64bit platform.'
+		echo >&2 'Docker currently only supports 64bit platforms.'
+		exit 1
+		;;
+esac
+
+if command_exists docker || command_exists lxc-docker; then
+	echo >&2 'Warning: "docker" or "lxc-docker" command appears to already exist.'
+	echo >&2 'Please ensure that you do not already have docker installed.'
+	echo >&2 'You may press Ctrl+C now to abort this process and rectify this situation.'
+	( set -x; sleep 20 )
+fi
+
+sh_c='sh -c'
+if [ "$(whoami 2>/dev/null || true)" != 'root' ]; then
+	if command_exists sudo; then
+		sh_c='sudo sh -c'
+	elif command_exists su; then
+		sh_c='su -c'
+	else
+		echo >&2 'Error: this installer needs the ability to run commands as root.'
+		echo >&2 'We are unable to find either "sudo" or "su" available to make this happen.'
+		exit 1
+	fi
+fi
+
+curl=''
+if command_exists curl; then
+	curl='curl -sL'
+elif command_exists wget; then
+	curl='wget -qO-'
+elif command_exists busybox && busybox --list-modules | grep -q wget; then
+	curl='busybox wget -qO-'
+fi
+
+# perform some very rudimentary platform detection
+lsb_dist=''
+if command_exists lsb_release; then
+	lsb_dist="$(lsb_release -si)"
+fi
+if [ -z "$lsb_dist" ] && [ -r /etc/lsb-release ]; then
+	lsb_dist="$(. /etc/lsb-release && echo "$DISTRIB_ID")"
+fi
+if [ -z "$lsb_dist" ] && [ -r /etc/debian_version ]; then
+	lsb_dist='Debian'
+fi
+
+case "$lsb_dist" in
+	Ubuntu|Debian)
+		export DEBIAN_FRONTEND=noninteractive
+		
+		# TODO remove this comment/section once device-mapper lands
+		echo 'Warning: Docker currently requires AUFS support in the kernel.'
+		echo 'Please ensure that your kernel includes such support.'
+		( set -x; sleep 10 )
+		
+		if [ ! -e /usr/lib/apt/methods/https ]; then
+			( set -x; $sh_c 'sleep 3; apt-get update; apt-get install -y -q apt-transport-https' )
+		fi
+		if [ -z "$curl" ]; then
+			( set -x; $sh_c 'sleep 3; apt-get update; apt-get install -y -q curl' )
+			curl='curl -sL'
+		fi
+		(
+			set -x
+			$sh_c "$curl ${url}gpg | apt-key add -"
+			$sh_c "echo deb ${url}ubuntu docker main > /etc/apt/sources.list.d/docker.list"
+			$sh_c 'sleep 3; apt-get update; apt-get install -y -q lxc-docker'
+		)
+		if command_exists docker && [ -e /var/run/docker.sock ]; then
+			(
+				set -x
+				$sh_c 'docker run busybox echo "Docker has been successfully installed!"'
+			)
+		fi
+		exit 0
+		;;
+		
+	Gentoo)
+		if [ "$url" = "https://test.docker.io/" ]; then
+			echo >&2
+			echo >&2 '  You appear to be trying to install the latest nightly build in Gentoo.'
+			echo >&2 '  The portage tree should contain the latest stable release of Docker, but'
+			echo >&2 '  if you want something more recent, you can always use the live ebuild'
+			echo >&2 '  provided in the "docker" overlay available via layman.  For more'
+			echo >&2 '  instructions, please see the following URL:'
+			echo >&2 '    https://github.com/tianon/docker-overlay#using-this-overlay'
+			echo >&2 '  After adding the "docker" overlay, you should be able to:'
+			echo >&2 '    emerge -av =app-emulation/docker-9999'
+			echo >&2
+			exit 1
+		fi
+		
+		(
+			set -x
+			$sh_c 'sleep 3; emerge app-emulation/docker'
+		)
+		exit 0
+		;;
+esac
+
+echo >&2
+echo >&2 '  Either your platform is not easily detectable, is not supported by this'
+echo >&2 '  installer script (yet - PRs welcome!), or does not yet have a package for'
+echo >&2 '  Docker.  Please visit the following URL for more detailed installation'
+echo >&2 '  instructions:'
+echo >&2
+echo >&2 '    http://docs.docker.io/en/latest/installation/'
+echo >&2
+exit 1

+ 13 - 13
hack/release.sh

@@ -67,7 +67,14 @@ write_to_s3() {
 }
 
 s3_url() {
-	echo "http://$BUCKET.s3.amazonaws.com"
+	case "$BUCKET" in
+		get.docker.io|test.docker.io)
+			echo "https://$BUCKET"
+			;;
+		*)
+			echo "http://$BUCKET.s3.amazonaws.com"
+			;;
+	esac
 }
 
 # Upload the 'ubuntu' bundle to S3:
@@ -125,13 +132,13 @@ EOF
 	s3cmd --acl-public sync $APTDIR/ s3://$BUCKET/ubuntu/
 	cat <<EOF | write_to_s3 s3://$BUCKET/ubuntu/info
 # Add the repository to your APT sources
-echo deb $(s3_url $BUCKET)/ubuntu docker main > /etc/apt/sources.list.d/docker.list
+echo deb $(s3_url)/ubuntu docker main > /etc/apt/sources.list.d/docker.list
 # Then import the repository key
-curl $(s3_url $BUCKET)/gpg | apt-key add -
+curl $(s3_url)/gpg | apt-key add -
 # Install docker
 apt-get update ; apt-get install -y lxc-docker
 EOF
-	echo "APT repository uploaded. Instructions available at $(s3_url $BUCKET)/ubuntu/info"
+	echo "APT repository uploaded. Instructions available at $(s3_url)/ubuntu/info"
 }
 
 # Upload a static binary to S3
@@ -141,7 +148,7 @@ release_binary() {
 	s3cmd --acl-public put bundles/$VERSION/binary/docker-$VERSION $S3DIR/docker-$VERSION
 	cat <<EOF | write_to_s3 s3://$BUCKET/builds/info
 # To install, run the following command as root:
-curl -O http://$BUCKET.s3.amazonaws.com/builds/Linux/x86_64/docker-$VERSION && chmod +x docker-$VERSION && sudo mv docker-$VERSION /usr/local/bin/docker
+curl -O $(s3_url)/builds/Linux/x86_64/docker-$VERSION && chmod +x docker-$VERSION && sudo mv docker-$VERSION /usr/local/bin/docker
 # Then start docker in daemon mode:
 sudo /usr/local/bin/docker -d
 EOF
@@ -155,14 +162,7 @@ EOF
 
 # Upload the index script
 release_index() {
-	(
-	if [ "$BUCKET" != "get.docker.io" ]
-	then
-		sed s,https://get.docker.io/,http://$BUCKET.s3.amazonaws.com/, contrib/install.sh
-	else
-		cat contrib/install.sh
-	fi
-	) | write_to_s3 s3://$BUCKET/index
+	sed "s,https://get.docker.io/,$(s3_url)/," hack/install.sh | write_to_s3 s3://$BUCKET/index
 }
 
 release_test() {