【问题标题】:do_rootfs function failed in yocto projectyocto 项目中的 do_rootfs 函数失败
【发布时间】:2018-04-25 06:45:48
【问题描述】:

我刚刚开始使用 yocto 项目并尝试为要使用 QEMU 模拟器(在 Ubuntu 16.04 上运行)模拟的 x86 架构构建映像。在构建操作系统映像时遇到以下错误。

ERROR: core-image-sato-1.0-r0 do_rootfs: Error executing a python function in exec_python_func() autogenerated:

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
     0001:
 *** 0002:do_rootfs(d)
     0003:
File: '/home/rahul/poky/poky/meta/classes/image.bbclass', lineno: 258, function: do_rootfs
     0254:    progress_reporter.next_stage()
     0255:
     0256:    # generate rootfs
     0257:    d.setVarFlag('REPRODUCIBLE_TIMESTAMP_ROOTFS', 'export', '1')
 *** 0258:    create_rootfs(d, progress_reporter=progress_reporter, logcatcher=logcatcher)
     0259:
     0260:    progress_reporter.finish()
     0261:}
     0262:do_rootfs[dirs] = "${TOPDIR}"
File: '/home/rahul/poky/poky/meta/lib/oe/rootfs.py', lineno: 1010, function: create_rootfs
     1006:    env_bkp = os.environ.copy()
     1007:
     1008:    img_type = d.getVar('IMAGE_PKGTYPE')
     1009:    if img_type == "rpm":
 *** 1010:        RpmRootfs(d, manifest_dir, progress_reporter, logcatcher).create()
     1011:    elif img_type == "ipk":
     1012:        OpkgRootfs(d, manifest_dir, progress_reporter, logcatcher).create()
     1013:    elif img_type == "deb":
     1014:        DpkgRootfs(d, manifest_dir, progress_reporter, logcatcher).create()
File: '/home/rahul/poky/poky/meta/lib/oe/rootfs.py', lineno: 201, function: create
     0197:        if self.progress_reporter:
     0198:            self.progress_reporter.next_stage()
     0199:
     0200:        # call the package manager dependent create method
 *** 0201:        self._create()
     0202:
     0203:        sysconfdir = self.image_rootfs + self.d.getVar('sysconfdir')
     0204:        bb.utils.mkdirhier(sysconfdir)
     0205:        with open(sysconfdir + "/version", "w+") as ver:
File: '/home/rahul/poky/poky/meta/lib/oe/rootfs.py', lineno: 450, function: _create
     0446:        rpm_pre_process_cmds = self.d.getVar('RPM_PREPROCESS_COMMANDS')
     0447:        rpm_post_process_cmds = self.d.getVar('RPM_POSTPROCESS_COMMANDS')
     0448:
     0449:        # update PM index files
 *** 0450:        self.pm.write_index()
     0451:
     0452:        execute_pre_post_process(self.d, rpm_pre_process_cmds)
     0453:
     0454:        if self.progress_reporter:
File: '/home/rahul/poky/poky/meta/lib/oe/package_manager.py', lineno: 543, function: write_index
     0539:
     0540:    def write_index(self):
     0541:        lockfilename = self.d.getVar('DEPLOY_DIR_RPM') + "/rpm.lock"
     0542:        lf = bb.utils.lockfile(lockfilename, False)
 *** 0543:        RpmIndexer(self.d, self.rpm_repo_dir).write_index()
     0544:        bb.utils.unlockfile(lf)
     0545:
     0546:    def insert_feeds_uris(self, feed_uris, feed_base_paths, feed_archs):
     0547:        from urllib.parse import urlparse
File: '/home/rahul/poky/poky/meta/lib/oe/package_manager.py', lineno: 105, function: write_index
     0101:        else:
     0102:            signer = None
     0103:
     0104:        createrepo_c = bb.utils.which(os.environ['PATH'], "createrepo_c")
 *** 0105:        result = create_index("%s --update -q %s" % (createrepo_c, self.deploy_dir))
     0106:        if result:
     0107:            bb.fatal(result)
     0108:
     0109:        # Sign repomd
File: '/home/rahul/poky/poky/meta/lib/oe/package_manager.py', lineno: 21, function: create_index
     0017:def create_index(arg):
     0018:    index_cmd = arg
     0019:
     0020:    bb.note("Executing '%s' ..." % index_cmd)
 *** 0021:    result = subprocess.check_output(index_cmd, stderr=subprocess.STDOUT, shell=True).decode("utf-8")
     0022:    if result:
     0023:        bb.note(result)
     0024:
     0025:"""
File: '/usr/lib/python3.5/subprocess.py', lineno: 626, function: check_output
     0622:        # empty string. That is maintained here for backwards compatibility.
     0623:        kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
     0624:
     0625:    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
 *** 0626:               **kwargs).stdout
     0627:
     0628:
     0629:class CompletedProcess(object):
     0630:    """A process that has finished running.
File: '/usr/lib/python3.5/subprocess.py', lineno: 708, function: run
     0704:            raise
     0705:        retcode = process.poll()
     0706:        if check and retcode:
     0707:            raise CalledProcessError(retcode, process.args,
 *** 0708:                                     output=stdout, stderr=stderr)
     0709:    return CompletedProcess(process.args, retcode, stdout, stderr)
     0710:
     0711:
     0712:def list2cmdline(seq):
Exception: subprocess.CalledProcessError: Command '/home/rahul/poky/poky/build/tmp/work/qemux86-poky-linux/core-image-sato/1.0-r0/recipe-sysroot-native/usr/bin/createrepo_c --update -q /home/rahul/poky/poky/build/tmp/work/qemux86-poky-linux/core-image-sato/1.0-r0/oe-rootfs-repo' returned non-zero exit status 1

Subprocess output:
Temporary repodata directory /home/rahul/poky/poky/build/tmp/work/qemux86-poky-linux/core-image-sato/1.0-r0/oe-rootfs-repo/.repodata/ already exists! (Another createrepo process is running?)

ERROR: core-image-sato-1.0-r0 do_rootfs: Function failed: do_rootfs
ERROR: Logfile of failure stored in: /home/rahul/poky/poky/build/tmp/work/qemux86-poky-linux/core-image-sato/1.0-r0/temp/log.do_rootfs.5019
ERROR: Task (/home/rahul/poky/poky/meta/recipes-sato/images/core-image-sato.bb:do_rootfs) failed with exit code '1'

构建过程运行到几乎 90% 之后出现此错误并终止该过程。可能是什么问题?

【问题讨论】:

  • createrepo_c 工具因core-image-sato/1.0-r0/oe-rootfs-repo/.repodata/ already exists! (Another createrepo process is running?) 而失败。你有任何已经运行的 qemu 实例吗?尝试删除 .repodata 文件夹并重新构建?
  • 给定路径中只有一个 rpm 目录,没有 .repodata 文件夹。我删除了该目录,但仍然出现相同的错误。
  • 你的 Yocto 版本是多少?
  • 也许可以在mailing-list 或irc #yocto 上问这个问题

标签: c linux ubuntu-16.04 embedded-linux yocto


【解决方案1】:

当我的主机突然关闭时,我遇到了同样的错误,但是在我删除 .repodata 文件夹和 sudo rm -r build/tmp/work/qemux86-poky-linux/core-image-sato/1.0-r0/oe-rootfs-repo/.repodata/ 然后重新构建后一切正常。

【讨论】:

    【解决方案2】:

    我使用 Ctrl-C 停止了构建并得到了原始问题中描述的 python 错误。

    .repodata 文件夹(请参阅 jmiranda 的答案)是空的。所以我删除了 oe-rootfs-repo 文件夹,这对我有用。

    【讨论】:

      【解决方案3】:

      在 Docker 容器中构建时,我遇到了同样的问题,但出现了错误“目录不为空”。使用 rm -r 删除目标目录,然后再次运行构建,可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-23
        相关资源
        最近更新 更多