[virt-tools-list] [virt-bootstrap] [PATCH v7 02/26] Improve untar command

Cedric Bosdonnat cbosdonnat at suse.com
Mon Aug 28 13:56:47 UTC 2017


On Sat, 2017-08-26 at 21:41 +0100, Radostin Stoyanov wrote:
> Add "--overwrite" to enforce the overwrite of existing files.
> 
> Add the flag "--absolute-names" to disable the strip of leading '/'s
> This is used to get around the error "Cannot open:Permission denied"
> which occurs when the qemu driver is used by virt-sandbox. It is used
> for unprivileged users to create isolated environment in which tar is
> executed to extract the content from container image layers.
> 
> In particular this error occurs when the tar archive contains symbolic
> link which has target path starting with '/'.
> 
> Steps to reproduce:
>     $ mkdir /tmp/foo
>     $ cd /tmp/foo
>     $ touch file
>     $ ln -s /tmp/foo/file link
>     $ tar -cf archive.tar link
>     $ mkdir /tmp/foo/dest
>     $ virt-sandbox -c qemu:///session \
>                    -m host-bind:/mnt=/tmp/foo/dest \
>                    -- /bin/tar xf /tmp/foo/archive.tar -C /mnt
> 
> Error message:
>     tar: link: Cannot open: Permission denied
>     tar: Exiting with failure status due to previous errors
> ---
>  src/virtBootstrap/utils.py | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/src/virtBootstrap/utils.py b/src/virtBootstrap/utils.py
> index 63ef57a..66cd301 100644
> --- a/src/virtBootstrap/utils.py
> +++ b/src/virtBootstrap/utils.py
> @@ -106,7 +106,11 @@ def safe_untar(src, dest):
>  
>      # Compression type is auto detected from tar
>      # Exclude files under /dev to avoid "Cannot mknod: Operation not permitted"
> -    params = ['--', '/bin/tar', 'xf', src, '-C', '/mnt', '--exclude', 'dev/*']
> +    # Note: Here we use --absolute-names flag to get around the error message
> +    # "Cannot open: Permission denied" when symlynks are extracted, with the
> +    # qemu:/// driver. This flag must not be used outside virt-sandbox.
> +    params = ['--', '/bin/tar', 'xf', src, '-C', '/mnt', '--exclude', 'dev/*',
> +              '--overwrite', '--absolute-names']
>      execute(virt_sandbox + params)
>  
>  
ACK

--
Cedric




More information about the virt-tools-list mailing list