Commit 02e5844d authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging



# gpg: Signature made Fri 10 Nov 2017 13:41:01 GMT
# gpg:                using RSA key 0xCA35624C6A9171C6
# gpg: Good signature from "Fam Zheng <famz@redhat.com>"
# Primary key fingerprint: 5003 7CB7 9706 0F76 F021  AD56 CA35 624C 6A91 71C6

* remotes/famz/tags/docker-pull-request:
  docker: correctly escape $BACKEND in the help output
  docker: Improved image checksum

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 4e8a737c 6423795e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ docker:
	@echo '    DEBUG=1              Stop and drop to shell in the created container'
	@echo '                         before running the command.'
	@echo '    NETWORK=1            Enable virtual network interface with default backend.'
	@echo '    NETWORK=$BACKEND     Enable virtual network interface with $BACKEND.'
	@echo '    NETWORK=$$BACKEND     Enable virtual network interface with $$BACKEND.'
	@echo '    NOUSER               Define to disable adding current user to containers passwd.'
	@echo '    NOCACHE=1            Ignore cache when build images.'
	@echo '    EXECUTABLE=<path>    Include executable in image.'
+23 −1
Original line number Diff line number Diff line
@@ -105,6 +105,28 @@ def _copy_binary_with_libs(src, dest_dir):
            so_path = os.path.dirname(l)
            _copy_with_mkdir(l , dest_dir, so_path)

def _read_qemu_dockerfile(img_name):
    df = os.path.join(os.path.dirname(__file__), "dockerfiles",
                      img_name + ".docker")
    return open(df, "r").read()

def _dockerfile_preprocess(df):
    out = ""
    for l in df.splitlines():
        if len(l.strip()) == 0 or l.startswith("#"):
            continue
        from_pref = "FROM qemu:"
        if l.startswith(from_pref):
            # TODO: Alternatively we could replace this line with "FROM $ID"
            # where $ID is the image's hex id obtained with
            #    $ docker images $IMAGE --format="{{.Id}}"
            # but unfortunately that's not supported by RHEL 7.
            inlining = _read_qemu_dockerfile(l[len(from_pref):])
            out += _dockerfile_preprocess(inlining)
            continue
        out += l + "\n"
    return out

class Docker(object):
    """ Running Docker commands """
    def __init__(self):
@@ -196,7 +218,7 @@ class Docker(object):
            checksum = self.get_image_dockerfile_checksum(tag)
        except Exception:
            return False
        return checksum == _text_checksum(dockerfile)
        return checksum == _text_checksum(_dockerfile_preprocess(dockerfile))

    def run(self, cmd, keep, quiet):
        label = uuid.uuid1().hex