From 49aaa59bf0cfd4fcddee70bfdcbd5501d1a8bc82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Sch=C3=A4fer?= Date: Fri, 4 Mar 2016 10:01:53 +0100 Subject: [PATCH] Preserve extended attributes in tar archives tar doesn't preserve extended attributes by default, causing Docker images to not have any correct set-capabilities bits set on binaries such as ping. This is fixed by adding the --xattrs flag to the tar command --- kiwi/archive/tar.py | 4 ++-- package/python3-kiwi-spec-template | 2 +- test/unit/archive_tar_test.py | 11 +++++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/kiwi/archive/tar.py b/kiwi/archive/tar.py index b2b40c62..a8eb55f0 100644 --- a/kiwi/archive/tar.py +++ b/kiwi/archive/tar.py @@ -37,7 +37,7 @@ class ArchiveTar(object): [ 'tar', '-C', source_dir ] + options + [ - '-c', '-f', self.filename + '--xattrs', '-c', '-f', self.filename ] + self.__get_archive_items(source_dir, exclude) ) @@ -48,7 +48,7 @@ class ArchiveTar(object): [ 'tar', '-C', source_dir ] + options + [ - '-cJ', '-f', self.filename + '.xz' + '--xattrs', '-c', '-J', '-f', self.filename + '.xz' ] + self.__get_archive_items(source_dir, exclude) ) diff --git a/package/python3-kiwi-spec-template b/package/python3-kiwi-spec-template index 9ab87e96..57e9df05 100644 --- a/package/python3-kiwi-spec-template +++ b/package/python3-kiwi-spec-template @@ -44,7 +44,7 @@ Requires: python3-lxml # tools used by kiwi Requires: kiwi-tools Requires: rsync -Requires: tar +Requires: tar >= 1.2.7 Requires: gptfdisk Requires: qemu-tools Requires: dosfstools diff --git a/test/unit/archive_tar_test.py b/test/unit/archive_tar_test.py index b40b63cd..f4873e81 100644 --- a/test/unit/archive_tar_test.py +++ b/test/unit/archive_tar_test.py @@ -25,7 +25,10 @@ class TestArchiveTar(object): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create('source-dir') mock_command.assert_called_once_with( - ['tar', '-C', 'source-dir', '-c', '-f', 'foo.tar', 'foo', 'bar'] + [ + 'tar', '-C', 'source-dir', + '--xattrs', '-c', '-f', 'foo.tar', 'foo', 'bar' + ] ) @patch('kiwi.archive.tar.Command.run') @@ -34,7 +37,7 @@ class TestArchiveTar(object): archive.create('source-dir', ['foo', 'bar']) mock_command.assert_called_once_with( [ - 'tar', '-C', 'source-dir', '-c', '-f', 'foo.tar', + 'tar', '-C', 'source-dir', '--xattrs', '-c', '-f', 'foo.tar', '.', '--exclude', './foo', '--exclude', './bar' ] ) @@ -47,7 +50,7 @@ class TestArchiveTar(object): mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', - '-cJ', '-f', 'foo.tar.xz', 'foo', 'bar' + '--xattrs', '-c', '-J', '-f', 'foo.tar.xz', 'foo', 'bar' ] ) @@ -69,5 +72,5 @@ class TestArchiveTar(object): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create('source-dir', ['foo']) mock_command.assert_called_once_with( - ['tar', '-C', 'source-dir', '-c', '-f', 'foo.tar', 'bar'] + ['tar', '-C', 'source-dir', '--xattrs', '-c', '-f', 'foo.tar', 'bar'] )