docs: def bootstrap(
              repositories, name, packages=None, additional_packages=None,
              tag="latest", prefix=constants.CONU_ARTIFACT_TAG, packager=None):
          """
          bootstrap Image from scratch. It creates new image based on giver dnf repositories and package setts
  
          :param repositories:list of repositories
          :param packages: list of base packages in case you don't want to use base packages defined in contants
          :param additional_packages: list of additonal packages
          :param tag: tag the output image
          :param prefix: use some prefix for newly cretaed image (internal usage)
          :param packager: use another packages in case you dont want to use defined in constants (dnf)
          :return: NspawnImage instance
          """
          additional_packages = additional_packages or []
          if packages is None:
              packages = constants.CONU_NSPAWN_BASEPACKAGES
          package_set = packages + additional_packages
          if packager is None:
              packager = constants.BOOTSTRAP_PACKAGER
          mounted_dir = mkdtemp()
          if not os.path.exists(mounted_dir):
              os.makedirs(mounted_dir)
          imdescriptor, tempimagefile = mkstemp()
          image_size = constants.BOOTSTRAP_IMAGE_SIZE_IN_MB
          # create no partitions when create own image
          run_cmd(["dd", "if=/dev/zero", "of={}".format(tempimagefile),
                   "bs=1M", "count=1", "seek={}".format(image_size)])
          run_cmd([constants.BOOTSTRAP_FS_UTIL, tempimagefile])
          # TODO: is there possible to use NspawnImageFS class instead of direct
          # mount/umount, image objects does not exist
          run_cmd(["mount", tempimagefile, mounted_dir])
          if os.path.exists(os.path.join(mounted_dir, "usr")):
              raise ConuException("Directory %s already in use" % mounted_dir)
          if not os.path.exists(mounted_dir):
              os.makedirs(mounted_dir)
          repo_params = []
          repo_file_content = ""
          for cnt in range(len(repositories)):
              repo_params += ["--repofrompath",
                              "{0}{1},{2}".format(prefix, cnt, repositories[cnt])]
              repo_file_content += """
  [{NAME}{CNT}]
  name={NAME}{CNT}
  baseurl={REPO}
  enabled=1
  gpgcheck=0
  """.format(NAME=prefix, CNT=cnt, REPO=repositories[cnt])
          packages += set(additional_packages)
          logger.debug("Install system to direcory: %s" % mounted_dir)
          logger.debug("Install packages: %s" % packages)
          logger.debug("Repositories: %s" % repositories)
          packager_addition = [
              "--installroot",
              mounted_dir,
              "--disablerepo",
              "*",
              "--enablerepo",
              prefix + "*"]
          final_command = packager + packager_addition + repo_params + package_set
          try:
              run_cmd(final_command)
          except Exception as e:
              raise ConuException("Unable to install packages via command: {} (original exception {})".format(final_command, e))
          insiderepopath = os.path.join(
              mounted_dir,
              "etc",
              "yum.repos.d",
              "{}.repo".format(prefix))
          if not os.path.exists(os.path.dirname(insiderepopath)):
              os.makedirs(os.path.dirname(insiderepopath))
          with open(insiderepopath, 'w') as f:
              f.write(repo_file_content)
          run_cmd(["umount", mounted_dir])
          # add sleep before umount, to ensure, that kernel finish ops
          time.sleep(constants.DEFAULT_SLEEP)
          nspawnimage = NspawnImage(repository=name, location=tempimagefile, tag=tag)
          os.remove(tempimagefile)
          os.rmdir(mounted_dir)
          return nspawnimage