From 94bf5b00112890ed84c38b9840802fa0142b507b Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Fri, 27 Sep 2013 22:50:24 -0600 Subject: [PATCH] Revamp install.sh to be usable by more people, and to use official install methods whenever possible (apt repo, portage tree, etc.), thus making it an official script and moving it to hack/ --- contrib/install.sh | 61 ------------ docs/sources/installation/amazon.rst | 8 +- hack/install.sh | 136 +++++++++++++++++++++++++++ hack/release.sh | 26 ++--- 4 files changed, 153 insertions(+), 78 deletions(-) delete mode 100755 contrib/install.sh create mode 100755 hack/install.sh diff --git a/contrib/install.sh b/contrib/install.sh deleted file mode 100755 index 40e3aaafb4..0000000000 --- a/contrib/install.sh +++ /dev/null @@ -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 -# Revamped by Jerome Petazzoni -# -# 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 < /dev/null - -echo "Done." -echo diff --git a/docs/sources/installation/amazon.rst b/docs/sources/installation/amazon.rst index 2c74b0fc32..c6c8104321 100644 --- a/docs/sources/installation/amazon.rst +++ b/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 -` 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 ` 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. diff --git a/hack/install.sh b/hack/install.sh new file mode 100755 index 0000000000..e184a87361 --- /dev/null +++ b/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 diff --git a/hack/release.sh b/hack/release.sh index 237b5fb903..12ad27dce3 100755 --- a/hack/release.sh +++ b/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 < /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 <