Scripts for docker-machine to install a particular docker version
Hosted at https://releases.rancher.com/install-docker/x.y[.z].sh, e.g.:
Test bucket is located at https://releases.rancher.com/install-docker-dev/x.y[.z].sh
Example adding 20.10.7 with diff from 20.10.6:
make add-new-version
with the previous and new version:PREVIOUS_ADD_DOCKER_VERSION=20.10.6 ADD_DOCKER_VERSION=20.10.7 make add-new-version
make generate
dist/
create/update the proper docker install script symlink <DOCKER_MAJOR>.<DOCKER_MINOR>.sh
, to the generated script. Ex: ln -s 20.10.7.sh 20.10.sh
make test
(currently takes around 45 minutes)The repo contains some tests to check if the docker install scripts are working fine on defined distros and versions. The tests are executed within a dind env for every pkg/<DOCKER_VERSION>
folder, using the generated scripts to install and run docker on defined distros and versions.
make test
There is the default distros and versions definition to test:
TEST_OS_IMAGE_NAME=(ubuntu centos debian)
TEST_OS_IMAGE_TAG[0]="16.04 18.04 20.04"
TEST_OS_IMAGE_TAG[1]="centos7 centos8"
TEST_OS_IMAGE_TAG[2]="10"
The test definition can be overwritten on every docker version folder, using the shell script file pkg/<DOCKER_VERSION>/config.sh
#!/bin/sh
DOCKER_GIT_COMMIT="3d8fe77c2c46c5b7571f94b42793905e5b3e42e4"
TEST_OS_IMAGE_NAME=(ubuntu centos debian)
TEST_OS_IMAGE_TAG[0]="20.04"
TEST_OS_IMAGE_TAG[1]="centos7"
TEST_OS_IMAGE_TAG[2]="10"
Tip As dind test env doesn't use systemd, dockerd is started manually. The default timeout waiting until dockerd starts, is defined by env variable DIND_TEST_WAIT=3s
. It can be overwritten on execution time if required, DIND_TEST_WAIT=5s make test
On each merge to master, scripts in dist/
will be uploaded to install-docker-dev
bucket and can be retrieved using https://releases.rancher.com/install-docker-dev/$VERSION.sh. The commit of the version that was uploaded can be found on https://releases.rancher.com/install-docker-dev/VERSION
When testing has been completed, the release job needs to be run to upload the scripts in dist/
to install-docker
(https://releases.rancher.com/install-docker/$VERSION.sh). A tag consists of the latest Docker version in the repository (for example, 20.10.12
) and epoch timestamp (in case we need to release same set of versions with changes). The release job will automatically create a tag and release the artifacts to the specified upload bucket. To initiate the release process, use the GitHub Actions workflow Creates a tag and upload release. You can find the tag of the version that was uploaded at https://releases.rancher.com/install-docker/VERSION
This script is based on public docker-install release, https://github.com/docker/docker-install . Docker-install script is built from the docker repo, and it's patched to generate a docker install script for a concrete docker version. The patch is also adding support for oracle
and rancheros
distros due to not supported on the original script.
To add a new docker installer version, follow these steps:
pkg/<DOCKER_VERSION>
, version should follow semver format. Ex: pkg/20.10.2/
curl -Lsk http://get.docker.com/ -o <DOCKER_VERSION>.orig.sh
and make a copy cp -p <DOCKER_VERSION>.orig.sh <DOCKER_VERSION>.sh
<DOCKER_VERSION>.sh
. Don't remove SCRIPT_COMMIT_SHA
var definitiondiff -uNr <DOCKER_VERSION>.orig.sh <DOCKER_VERSION>.sh > pkg/<DOCKER_VERSION>/<DOCKER_VERSION>.diff
and remove . Ex: pkg/20.10.2/20.10.2.diff
diff -uNr 20.10.2.orig.sh 20.10.2.sh
--- 20.10.2.orig.sh 2021-01-28 23:47:45.000000000 +0100
+++ 20.10.2.sh 2021-01-28 23:53:21.000000000 +0100
@@ -21,26 +21,11 @@
# the script was uploaded (Should only be modified by upload job):
SCRIPT_COMMIT_SHA="3d8fe77c2c46c5b7571f94b42793905e5b3e42e4"
-
-# The channel to install from:
-# * nightly
-# * test
-# * stable
-# * edge (deprecated)
-DEFAULT_CHANNEL_VALUE="stable"
-if [ -z "$CHANNEL" ]; then
- CHANNEL=$DEFAULT_CHANNEL_VALUE
-fi
-
-DEFAULT_DOWNLOAD_URL="https://download.docker.com"
-if [ -z "$DOWNLOAD_URL" ]; then
- DOWNLOAD_URL=$DEFAULT_DOWNLOAD_URL
-fi
-
-DEFAULT_REPO_FILE="docker-ce.repo"
-if [ -z "$REPO_FILE" ]; then
- REPO_FILE="$DEFAULT_REPO_FILE"
-fi
+CHANNEL="stable"
+DOWNLOAD_URL="https://download.docker.com"
+REPO_FILE="docker-ce.repo"
+VERSION=20.10.2
+DIND_TEST_WAIT=${DIND_TEST_WAIT:-3s} # Wait time until docker start at dind test env
mirror=''
DRY_RUN=${DRY_RUN:-}
@@ -69,6 +54,18 @@
;;
esac
+start_docker() {
+ if [ ! -z $DIND_TEST ]; then
+ # Starting dockerd manually due to dind env is not using systemd
+ dockerd &
+ sleep $DIND_TEST_WAIT
+ elif [ -d '/run/systemd/system' ] ; then
+ $sh_c 'systemctl start docker'
+ else
+ $sh_c 'service docker start'
+ fi
+}
+
command_exists() {
command -v "$@" > /dev/null 2>&1
}
@@ -329,11 +326,20 @@
;;
centos|rhel)
+ # installing centos packages
+ lsb_dist="centos"
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
fi
;;
+ oracleserver)
+ # installing centos packages
+ lsb_dist="centos"
+ # need to switch lsb_dist to match yum repo URL
+ dist_version="$(rpm -q --whatprovides redhat-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//')"
+ ;;
+
*)
if command_exists lsb_release; then
dist_version="$(lsb_release --release | cut -f2)"
@@ -404,6 +410,7 @@
$sh_c "apt-get install -y -qq --no-install-recommends docker-ce-cli=$cli_pkg_version >/dev/null"
fi
$sh_c "apt-get install -y -qq --no-install-recommends docker-ce$pkg_version >/dev/null"
+ start_docker
)
echo_docker_as_nonroot
exit 0
@@ -474,10 +481,25 @@
$sh_c "$pkg_manager install -y -q docker-ce-cli-$cli_pkg_version"
fi
$sh_c "$pkg_manager install -y -q docker-ce$pkg_version"
+ if ! command_exists iptables; then
+ $sh_c "$pkg_manager install -y -q iptables"
+ fi
+ start_docker
)
echo_docker_as_nonroot
exit 0
;;
+ rancheros)
+ (
+ set -x
+ $sh_c "sleep 3;ros engine list --update"
+ engine_version="$(sudo ros engine list | awk '{print $2}' | grep ${docker_version} | tail -n 1)"
+ if [ "$engine_version" != "" ]; then
+ $sh_c "ros engine switch -f $engine_version"
+ fi
+ )
+ exit 0
+ ;;
*)
if [ -z "$lsb_dist" ]; then
if is_darwin; then
pkg/<DOCKER_VERSION>/config.sh
. To assure the patch would be applied to the same origin script version, this file should contain DOCKER_GIT_COMMIT
var equal to SCRIPT_COMMIT_SHA
got on first steps. Ex: pkg/20.10.2/config.sh
#!/bin/sh
DOCKER_GIT_COMMIT="3d8fe77c2c46c5b7571f94b42793905e5b3e42e4"
dist/<DOCKER_VERSION>.sh
executing make generate
. This command will generate docker version install script for every pkg/<DOCKER_VERSION>
folder, if it doesn't exist and pkg/<DOCKER_VERSION>/<DOCKER_VERSION>.diff
and pkg/<DOCKER_VERSION>/config.sh
files exist. This command will also shows an info message for docker install scripts that were generated with older DOCKER_GIT_COMMIT, so they could be updated with latest released DOCKER_GIT_COMMIT. git
and curl
commands are required.
Ex: Will generate dist/20.10.2.sh
.dist/
create/update the proper docker install script symlink <DOCKER_MAJOR>.<DOCKER_MINOR>.sh
, to the generated script. Ex: ln -s 20.10.2.sh 20.10.sh
make test
. See above for more info此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. Open source ecosystem
2. Collaboration, People, Software
3. Evaluation model