Beispiel #1
0
 def _create_checksum_file(self, checksum, filename):
     compressed_blocks = None
     compress = Compress(self.source_filename)
     if compress.get_format():
         compressed_blocks = self._block_list(
             os.path.getsize(self.source_filename)
         )
         compress.uncompress(temporary=True)
         blocks = self._block_list(
             os.path.getsize(compress.uncompressed_filename)
         )
         checksum = self._calculate_hash_hexdigest(
             hashlib.md5(), compress.uncompressed_filename
         )
     else:
         blocks = self._block_list(
             os.path.getsize(self.source_filename)
         )
     with open(filename, 'w') as checksum_file:
         if compressed_blocks:
             checksum_file.write(
                 '%s %s %s %s %s\n' % (
                     checksum, blocks.blocks, blocks.blocksize,
                     compressed_blocks.blocks, compressed_blocks.blocksize
                 )
             )
         else:
             checksum_file.write(
                 '%s %s %s\n' % (
                     checksum, blocks.blocks, blocks.blocksize
                 )
             )
Beispiel #2
0
    def sync_data(self):
        """
        Synchronize data from the given base image to the target root
        directory.
        """
        if not self.unknown_uri:
            compressor = Compress(self.image_file)
            if compressor.get_format():
                compressor.uncompress(True)
                self.uncompressed_image = compressor.uncompressed_filename
            else:
                self.uncompressed_image = self.image_file
            image_uri = '{0}:{1}'.format(
                self.archive_transport, self.uncompressed_image
            )
        else:
            log.warning('Bypassing base image URI to OCI tools')
            image_uri = self.unknown_uri

        oci = OCI.new()
        oci.import_container_image(image_uri)
        oci.unpack()
        oci.import_rootfs(self.root_dir)

        # A copy of the uncompressed image and its checksum are
        # kept inside the root_dir in order to ensure the later steps
        # i.e. system create are atomic and don't need any third
        # party archive.
        image_copy = Defaults.get_imported_root_image(self.root_dir)
        Path.create(os.path.dirname(image_copy))
        oci.export_container_image(
            image_copy, 'oci-archive', Defaults.get_container_base_image_tag()
        )
        self._make_checksum(image_copy)
Beispiel #3
0
    def _create_checksum_file(self, checksum, filename):
        """
        Creates the text file that contains the checksum

        :param str checksum: checksum to include into the file
        :param str filename: filename of the output file
        """
        compressed_blocks = None
        compress = Compress(self.source_filename)
        if compress.get_format():
            compressed_blocks = self._block_list(
                os.path.getsize(self.source_filename))
            compress.uncompress(temporary=True)
            blocks = self._block_list(
                os.path.getsize(compress.uncompressed_filename))
            checksum = self._calculate_hash_hexdigest(
                hashlib.md5(), compress.uncompressed_filename)
        else:
            blocks = self._block_list(os.path.getsize(self.source_filename))
        with open(filename, encoding=self.ascii, mode='w') as checksum_file:
            if compressed_blocks:
                checksum_file.write(
                    '%s %s %s %s %s\n' %
                    (checksum, blocks.blocks, blocks.blocksize,
                     compressed_blocks.blocks, compressed_blocks.blocksize))
            else:
                checksum_file.write(
                    '%s %s %s\n' % (checksum, blocks.blocks, blocks.blocksize))
Beispiel #4
0
    def test_get_format_invalid_format(self, mock_run):
        mock_run.side_effect = ValueError("nothing")
        invalid = Compress("../data/gz_data.gz")
        invalid.supported_zipper = ["mock_zip"]

        with self._caplog.at_level(logging.DEBUG):
            assert invalid.get_format() is None
            mock_run.assert_called_once_with(
                ['mock_zip', '-l', '../data/gz_data.gz'])
            assert 'Error running "mock_zip -l ../data/gz_data.gz", got a'
            ' ValueError: nothing' in self._caplog.text
Beispiel #5
0
    def test_get_format_invalid_format(self, mock_run, mock_log):
        mock_run.side_effect = ValueError("nothing")
        invalid = Compress("../data/gz_data.gz")
        invalid.supported_zipper = ["mock_zip"]

        assert invalid.get_format() is None

        mock_run.assert_called_once_with(
            ['mock_zip', '-l', '../data/gz_data.gz'])
        mock_log.assert_called_once_with(
            'Error running "mock_zip -l ../data/gz_data.gz", got a'
            ' ValueError: nothing')
Beispiel #6
0
    def extract_oci_image(self):
        """
        Extract and converts to OCI the image from the provided
        image file to a temporary location to KIWI can work with it.
        """
        if not self.unknown_uri:
            compressor = Compress(self.image_file)
            if compressor.get_format():
                compressor.uncompress(True)
                self.uncompressed_image = compressor.uncompressed_filename
            else:
                self.uncompressed_image = self.image_file
            skopeo_uri = 'docker-archive:{0}'.format(self.uncompressed_image)
        else:
            log.warning('Bypassing base image URI to skopeo tool')
            skopeo_uri = self.unknown_uri

        Command.run([
            'skopeo', 'copy', skopeo_uri,
            'oci:{0}:base_layer'.format(self.oci_layout_dir)
        ])
Beispiel #7
0
 def _create_checksum_file(self, checksum, filename):
     compressed_blocks = None
     compress = Compress(self.source_filename)
     if compress.get_format():
         compressed_blocks = self._block_list(
             os.path.getsize(self.source_filename))
         compress.uncompress(temporary=True)
         blocks = self._block_list(
             os.path.getsize(compress.uncompressed_filename))
         checksum = self._calculate_hash_hexdigest(
             hashlib.md5(), compress.uncompressed_filename)
     else:
         blocks = self._block_list(os.path.getsize(self.source_filename))
     with open(filename, 'w') as checksum_file:
         if compressed_blocks:
             checksum_file.write(
                 '%s %s %s %s %s\n' %
                 (checksum, blocks.blocks, blocks.blocksize,
                  compressed_blocks.blocks, compressed_blocks.blocksize))
         else:
             checksum_file.write(
                 '%s %s %s\n' % (checksum, blocks.blocks, blocks.blocksize))
Beispiel #8
0
    def _create_checksum_file(self, checksum, filename):
        """
        Creates the text file that contains the checksum

        :param str checksum: checksum to include into the file
        :param str filename: filename of the output file
        """
        compressed_blocks = None
        compress = Compress(self.source_filename)
        if compress.get_format():
            compressed_blocks = self._block_list(
                os.path.getsize(self.source_filename)
            )
            compress.uncompress(temporary=True)
            blocks = self._block_list(
                os.path.getsize(compress.uncompressed_filename)
            )
            checksum = self._calculate_hash_hexdigest(
                hashlib.md5(), compress.uncompressed_filename
            )
        else:
            blocks = self._block_list(
                os.path.getsize(self.source_filename)
            )
        with open(filename, 'w') as checksum_file:
            if compressed_blocks:
                checksum_file.write(
                    '%s %s %s %s %s\n' % (
                        checksum, blocks.blocks, blocks.blocksize,
                        compressed_blocks.blocks, compressed_blocks.blocksize
                    )
                )
            else:
                checksum_file.write(
                    '%s %s %s\n' % (
                        checksum, blocks.blocks, blocks.blocksize
                    )
                )
Beispiel #9
0
 def test_get_format(self, mock_which):
     mock_which.return_value = 'ziptool'
     xz = Compress('../data/xz_data.xz')
     assert xz.get_format() == 'xz'
     gzip = Compress('../data/gz_data.gz')
     assert gzip.get_format() == 'gzip'
Beispiel #10
0
 def test_get_format(self, mock_which):
     mock_which.return_value = 'ziptool'
     xz = Compress('../data/xz_data.xz')
     assert xz.get_format() == 'xz'
     gzip = Compress('../data/gz_data.gz')
     assert gzip.get_format() == 'gzip'
Beispiel #11
0
 def test_get_format(self):
     xz = Compress('../data/xz_data.xz')
     assert xz.get_format() == 'xz'
     gzip = Compress('../data/gz_data.gz')
     assert gzip.get_format() == 'gzip'
Beispiel #12
0
 def test_get_format(self):
     xz = Compress('../data/xz_data.xz')
     assert xz.get_format() == 'xz'
     gzip = Compress('../data/gz_data.gz')
     assert gzip.get_format() == 'gzip'