#2 Backport patch for being able to build OCI containers in Mock (nspawn)
Merged 2 years ago by ngompa. Opened 2 years ago by ignatenkobrain.
rpms/ ignatenkobrain/kiwi rawhide  into  rawhide

@@ -0,0 +1,126 @@ 

+ From 1f547d6bb994d7d0cbed857b1b8d9b4ec79081be Mon Sep 17 00:00:00 2001

+ From: Igor Raits <igor.raits@gmail.com>

+ 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'),

file modified
+5 -1
@@ -12,7 +12,7 @@ 

  

  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 @@ 

  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 @@ 

  # Empty metapackage

  

  %changelog

+ * Sat Oct 22 2022 Igor Raits <igor@gooddata.com> - 9.24.48-2

+ - Backport patch for being able to build OCI containers in Mock (nspawn)

+ 

  * Wed Sep 14 2022 Neal Gompa <ngompa@fedoraproject.org> - 9.24.48-1

  - Update to 9.24.48 (RH#2106248)

  

no initial comment

Pull-Request has been merged by ngompa

2 years ago