From 6da49c6d4943865932e52a2f06a11803f082af33 Mon Sep 17 00:00:00 2001 From: Tim Serong Date: Tue, 8 Oct 2013 22:45:51 +1100 Subject: [PATCH] Use --numeric-owner when extracting base image When extracting the base image without --numeric-owner, user and group names in the tarball are mapped to uid/gid by the host. This can cause problems when building an image for some other distro than you're running yourself. For example, building an Ubuntu image on openSUSE ends up with /var/cache/man in the image owned by 'proxy' (uid 13) instead of 'man' (uid 6), because the host (openSUSE) uses uid 13 for the 'man' user. This particular man/proxy discrepancy results in "fopen: Permission denied" errors when apt-get does its "Processing triggers for man-db" thing in the Ubuntu system. I wouldn't be surprised if there were other kinks caused by this uid/gid mapping discrepancy too, but that's the one I found so far. The same thing can also happen with Fedora, but seems to be less likely, or at least less obvious to me when building Fedora images on openSUSE. But, IMO, it's better to be safe and just use --numeric-owner on all base image untarring outside the chroot. Change-Id: I9da5ac66dd182e7278fe4fee932093f61d35673a --- elements/fedora/root.d/10-fedora-cloud-image | 5 +++-- elements/rhel/root.d/10-rhel-cloud-image | 5 +++-- elements/ubuntu/root.d/10-cache-ubuntu-tarball | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/elements/fedora/root.d/10-fedora-cloud-image b/elements/fedora/root.d/10-fedora-cloud-image index 089c14587..29f0f2557 100755 --- a/elements/fedora/root.d/10-fedora-cloud-image +++ b/elements/fedora/root.d/10-fedora-cloud-image @@ -58,6 +58,7 @@ else mv $WORKING/tmp.tar $DIB_IMAGE_CACHE/$BASE_IMAGE_TAR fi fi -# Extract the base image -sudo tar -C $TARGET_ROOT -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_TAR +# Extract the base image (use --numeric-owner to avoid UID/GID mismatch between +# image tarball and host OS e.g. when building Fedora image on an openSUSE host) +sudo tar -C $TARGET_ROOT --numeric-owner -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_TAR sudo rmdir $TARGET_ROOT/lost+found diff --git a/elements/rhel/root.d/10-rhel-cloud-image b/elements/rhel/root.d/10-rhel-cloud-image index b50494eae..724dd1130 100755 --- a/elements/rhel/root.d/10-rhel-cloud-image +++ b/elements/rhel/root.d/10-rhel-cloud-image @@ -51,6 +51,7 @@ else mv $WORKING/tmp.tar $DIB_IMAGE_CACHE/$BASE_IMAGE_TAR fi fi -# Extract the base image -sudo tar -C $TARGET_ROOT -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_TAR +# Extract the base image (use --numeric-owner to avoid UID/GID mismatch between +# image tarball and host OS e.g. when building RHEL image on an openSUSE host) +sudo tar -C $TARGET_ROOT --numeric-owner -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_TAR sudo rmdir $TARGET_ROOT/lost+found diff --git a/elements/ubuntu/root.d/10-cache-ubuntu-tarball b/elements/ubuntu/root.d/10-cache-ubuntu-tarball index 23593d4da..400e57f0a 100755 --- a/elements/ubuntu/root.d/10-cache-ubuntu-tarball +++ b/elements/ubuntu/root.d/10-cache-ubuntu-tarball @@ -24,6 +24,7 @@ else grep "$BASE_IMAGE_FILE" SHA256SUMS.ubuntu.$DIB_RELEASE.$ARCH | sha256sum --check - popd fi -# Extract the base image -sudo tar -C $TARGET_ROOT -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_FILE +# Extract the base image (use --numeric-owner to avoid UID/GID mismatch between +# image tarball and host OS e.g. when building Ubuntu image on an openSUSE host) +sudo tar -C $TARGET_ROOT --numeric-owner -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_FILE sudo rmdir $TARGET_ROOT/lost+found