From 1bdb7501e322a0a55616352c11aad134e1c443d7 Mon Sep 17 00:00:00 2001 From: Igor Raits Date: Oct 22 2022 09:02:52 +0000 Subject: Backport patch for being able to build OCI containers in Mock (nspawn) --- diff --git a/0001-Stop-copying-dev-files-statically-into-the-OCI-conta.patch b/0001-Stop-copying-dev-files-statically-into-the-OCI-conta.patch new file mode 100644 index 0000000..1c1fe56 --- /dev/null +++ b/0001-Stop-copying-dev-files-statically-into-the-OCI-conta.patch @@ -0,0 +1,126 @@ +From 1f547d6bb994d7d0cbed857b1b8d9b4ec79081be Mon Sep 17 00:00:00 2001 +From: Igor Raits +Date: Wed, 12 Oct 2022 20:31:54 +0200 +Subject: [PATCH] Stop copying /dev files statically into the OCI container + +In containers (nspawn) where part of the /dev filesystem is bind-mounted +from outside system, kiwi fails to do the rsync (in creation of the +nodes). + +There is no reason to actually copy whole tree inside so let's just +not do it (as it does not seem to be needed at all). +--- + kiwi/container/setup/base.py | 23 ----------------------- + kiwi/container/setup/oci.py | 1 - + test/unit/container/setup/base_test.py | 20 -------------------- + test/unit/container/setup/oci_test.py | 2 -- + 4 files changed, 46 deletions(-) + +diff --git a/kiwi/container/setup/base.py b/kiwi/container/setup/base.py +index d2fc56aa66..5a462889d0 100644 +--- a/kiwi/container/setup/base.py ++++ b/kiwi/container/setup/base.py +@@ -20,7 +20,6 @@ + + # project + from kiwi.command import Command +-from kiwi.utils.sync import DataSync + + from kiwi.exceptions import ( + KiwiContainerSetupError +@@ -145,28 +144,6 @@ def setup_root_console(self): + } + ) + +- def setup_static_device_nodes(self): +- """ +- Container device node setup +- +- Without subsystems like udev running in a container it is +- required to provide a set of device nodes to let the +- system in the container function correctly. This is +- done by syncing the host system nodes to the container. +- That this will also create device nodes which are not +- necessarily present in the container later is a know +- limitation of this method and considered harmless +- """ +- try: +- data = DataSync('/dev/', self.root_dir + '/dev/') +- data.sync_data( +- options=['-a', '-x', '--devices', '--specials'] +- ) +- except Exception as e: +- raise KiwiContainerSetupError( +- 'Failed to create static container nodes %s' % format(e) +- ) +- + def get_container_name(self): + """ + Container name +diff --git a/kiwi/container/setup/oci.py b/kiwi/container/setup/oci.py +index 915b56c794..cbc284550e 100644 +--- a/kiwi/container/setup/oci.py ++++ b/kiwi/container/setup/oci.py +@@ -50,7 +50,6 @@ def setup(self): + + self.deactivate_bootloader_setup() + self.deactivate_root_filesystem_check() +- self.setup_static_device_nodes() + self.setup_root_console() + + for service in services_to_deactivate: +diff --git a/test/unit/container/setup/base_test.py b/test/unit/container/setup/base_test.py +index b77fa93cd4..d1741c9dbb 100644 +--- a/test/unit/container/setup/base_test.py ++++ b/test/unit/container/setup/base_test.py +@@ -2,7 +2,6 @@ + patch, call, mock_open + ) + from pytest import raises +-import mock + + from kiwi.container.setup.base import ContainerSetupBase + +@@ -102,22 +101,3 @@ def test_setup_root_console(self, mock_exists): + assert m_open.return_value.write.call_args_list == [ + call('\nconsole\n') + ] +- +- @patch('kiwi.container.setup.base.Command.run') +- @patch('kiwi.container.setup.base.DataSync') +- def test_setup_static_device_nodes(self, mock_DataSync, mock_command): +- data = mock.Mock() +- mock_DataSync.return_value = data +- self.container.setup_static_device_nodes() +- mock_DataSync.assert_called_once_with( +- '/dev/', 'root_dir/dev/' +- ) +- data.sync_data.assert_called_once_with( +- options=['-a', '-x', '--devices', '--specials'] +- ) +- +- @patch('kiwi.container.setup.base.Command.run') +- def test_setup_static_device_nodes_failed(self, mock_command): +- mock_command.side_effect = Exception +- with raises(KiwiContainerSetupError): +- self.container.setup_static_device_nodes() +diff --git a/test/unit/container/setup/oci_test.py b/test/unit/container/setup/oci_test.py +index f5ef5022d5..59a1496a29 100644 +--- a/test/unit/container/setup/oci_test.py ++++ b/test/unit/container/setup/oci_test.py +@@ -16,7 +16,6 @@ def setup(self, mock_exists): + + self.container.deactivate_bootloader_setup = mock.Mock() + self.container.deactivate_root_filesystem_check = mock.Mock() +- self.container.setup_static_device_nodes = mock.Mock() + self.container.setup_root_console = mock.Mock() + self.container.deactivate_systemd_service = mock.Mock() + +@@ -28,7 +27,6 @@ def test_setup(self): + self.container.setup() + self.container.deactivate_bootloader_setup.assert_called_once_with() + self.container.deactivate_root_filesystem_check.assert_called_once_with() +- self.container.setup_static_device_nodes.assert_called_once_with() + assert self.container.deactivate_systemd_service.call_args_list == [ + call('device-mapper.service'), + call('kbd.service'), diff --git a/kiwi.spec b/kiwi.spec index e7a36b9..f2903f3 100644 --- a/kiwi.spec +++ b/kiwi.spec @@ -12,7 +12,7 @@ and cloud systems like Xen, KVM, VMware, EC2 and more. Name: kiwi Version: 9.24.48 -Release: 1%{?dist} +Release: 2%{?dist} URL: http://osinside.github.io/kiwi/ Summary: Flexible operating system image builder License: GPLv3+ @@ -20,6 +20,7 @@ License: GPLv3+ Source0: https://files.pythonhosted.org/packages/source/k/%{name}/%{name}-%{version}.tar.gz # Backports from upstream +Patch1002: https://github.com/OSInside/kiwi/pull/2195.patch#/0001-Stop-copying-dev-files-statically-into-the-OCI-conta.patch # Fedora-specific patches ## Use buildah instead of umoci by default for OCI image builds @@ -540,6 +541,9 @@ done # Empty metapackage %changelog +* Sat Oct 22 2022 Igor Raits - 9.24.48-2 +- Backport patch for being able to build OCI containers in Mock (nspawn) + * Wed Sep 14 2022 Neal Gompa - 9.24.48-1 - Update to 9.24.48 (RH#2106248)