From 4bddca25730f1471219dfba64413f95de83234a4 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Sun, 7 Jun 2015 19:09:56 -0400 Subject: [PATCH] Add base element for using docker as image base Docker can export root filesystems, which is what we want out of root elements. Make a very simple passthrough element that will grab a docker image and export it into a root filesystem. Change-Id: Ie1e2d5dd5a61558f100e02c953b18d697a8fe8a2 --- elements/docker/README.rst | 15 ++++++++ elements/docker/element-deps | 1 + elements/docker/element-provides | 1 + .../docker/extra-data.d/01-docker-minimal | 32 +++++++++++++++++ elements/docker/root.d/08-docker | 36 +++++++++++++++++++ 5 files changed, 85 insertions(+) create mode 100644 elements/docker/README.rst create mode 100644 elements/docker/element-deps create mode 100644 elements/docker/element-provides create mode 100755 elements/docker/extra-data.d/01-docker-minimal create mode 100755 elements/docker/root.d/08-docker diff --git a/elements/docker/README.rst b/elements/docker/README.rst new file mode 100644 index 00000000..af3e2f5d --- /dev/null +++ b/elements/docker/README.rst @@ -0,0 +1,15 @@ +====== +docker +====== + +Base element for creating images from docker containers. + +This element is incomplete by itself, you'll want to add additional elements, +such as dpkg or yum to get richer features. At its heart, this element simply +exports a root tarball from a named docker container so that other +diskimage-builder elements can build on top of it. + +The variables `DISTRO_NAME` and `DIB_RELEASE` will be used to decide which +docker image to pull, and are required for most other elements. Additionally, +the `DIB_DOCKER_IMAGE` environment variable can be set in addition to +`DISTRO_NAME` and `DIB_RELEASE` if a different docker image is desired. diff --git a/elements/docker/element-deps b/elements/docker/element-deps new file mode 100644 index 00000000..64b9ac34 --- /dev/null +++ b/elements/docker/element-deps @@ -0,0 +1 @@ +dib-run-parts diff --git a/elements/docker/element-provides b/elements/docker/element-provides new file mode 100644 index 00000000..a72e0496 --- /dev/null +++ b/elements/docker/element-provides @@ -0,0 +1 @@ +operating-system diff --git a/elements/docker/extra-data.d/01-docker-minimal b/elements/docker/extra-data.d/01-docker-minimal new file mode 100755 index 00000000..fb0462bd --- /dev/null +++ b/elements/docker/extra-data.d/01-docker-minimal @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Copyright 2015 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then + set -x +fi +set -eu +set -o pipefail + +# This is not using install-packages because it's before install-packages can +# work - and is work needed to make it possible for it to work +if [ -x $TMP_MOUNT_PATH/usr/bin/apt-get ] ; then + sudo chroot $TMP_MOUNT_PATH apt-get update + sudo chroot $TMP_MOUNT_PATH apt-get -y install python +elif [ -x $TMP_MOUNT_PATH/bin/dnf ] ; then + sudo chroot $TMP_MOUNT_PATH dnf install -y findutils +elif [ -x $TMP_MOUNT_PATH/usr/bin/yum ] ; then + sudo chroot $TMP_MOUNT_PATH yum install -y findutils +fi diff --git a/elements/docker/root.d/08-docker b/elements/docker/root.d/08-docker new file mode 100755 index 00000000..78226859 --- /dev/null +++ b/elements/docker/root.d/08-docker @@ -0,0 +1,36 @@ +#!/bin/bash +# +# Copyright 2015 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then + set -x +fi +set -eu +set -o pipefail + +if [ -f ${TARGET_ROOT}/.extra_settings ] ; then + . ${TARGET_ROOT}/.extra_settings +fi + +[ -n "$DISTRO_NAME" ] +[ -n "$DIB_RELEASE" ] + +DIB_DOCKER_IMAGE=${DIB_DOCKER_IMAGE:-${DISTRO_NAME}:${DIB_RELEASE}} + +container=$(docker run -d $DIB_DOCKER_IMAGE /bin/sh) +docker export $container | sudo tar -C $TARGET_ROOT --numeric-owner -xf - +docker rm $container + +sudo rm -f ${TARGET_ROOT}/.extra_settings