【发布时间】:2019-08-13 09:34:57
【问题描述】:
我的主机系统是一个 ubuntu:18.04 docker 容器。在那里,我使用 yocto 项目为 x86_64 架构构建了一个根文件系统。 root-fs 的位置由 ${IMAGE_ROOTFS} 变量定义。我在系统中 chroot 并尝试安装 dos2unix 包。我的代码如下所示:
mount --bind /proc ${IMAGE_ROOTFS}/proc
mount --bind /dev ${IMAGE_ROOTFS}/dev
# copy host files to make network function in chroot
sudo cp /etc/resolv.conf ${IMAGE_ROOTFS}/etc/resolv.conf
# configure apt
sudo mkdir -p ${IMAGE_ROOTFS}/log/apt
# set time
sudo cp ${IMAGE_ROOTFS}/usr/share/zoneinfo/Europe/Berlin ${IMAGE_ROOTFS}/etc/localtime
#######################
#### Entering Chroot
#######################
# chroot into the target system
sudo chroot ${IMAGE_ROOTFS}/bin/bash
# install packages
apt-get install -y dos2unix
但是,我收到以下错误:
bash-4.4# apt-get install dos2unix
Reading package lists... Done
Building dependency tree
Reading state information... Done
dos2unix is already the newest version (7.3.4-3).
0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory)
Setting up sysvinit-inittab (2.88dsf-r10) ...
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
dpkg: error processing package sysvinit-inittab (--configure):
installed sysvinit-inittab package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
sysvinit-inittab
E: Directory '/var/log/apt/' missing
E: Sub-process /usr/bin/dpkg returned an error code (1)
似乎 root-fs 没有完全配置为运行 apt。我需要向 yocto 添加哪些额外的包?
更新-1: 一点上下文:我不确定如何在图像构建期间从 yocto 中的 apt 源安装 deb 包。所以我开始为根文件系统创建一个后处理脚本,以执行 apt 并安装包。在那里,我使用 apt 安装来自各种 apt 源的软件包,包括自定义 apt 源。
【问题讨论】:
-
您已经制作了 ${IMAGE_ROOTFS}/log/apt,但您制作了 ${IMAGE_ROOTFS}/var/log/apt 吗?另外,根据我的经验,时区应该是符号链接而不是复制,但我以前从未使用过 Yocto。
-
@Aurelius 我的错。那么 sysvinit-inittab 错误呢。和/var/log/apt有关系吗?
-
很难说,因为它只是说安装后脚本返回了错误。一旦你创建了正确的 apt 日志目录,我相信你可以查看更详细的日志。安装后脚本的错误可能是它也无法写入 apt 日志目录。
-
也许可以告诉我们更多关于您的用例的信息。因为如果它只是关于 dos2unix,则无需这样做:只需通过 Yocto 本身添加它,甚至在核心中也提供了一个配方:cgit.openembedded.org/openembedded-core/tree/meta/… 话虽如此,这里有关于在基于 Yocto 的构建中运行包管理器的大量信息: intel.com/content/dam/www/public/us/en/documents/white-papers/…
-
@LetoThe2nd 这不仅适用于 dos2unix。我不确定如何在 yocto 中从 apt 源安装 deb 包。所以我开始为根文件系统创建一个后处理脚本,以执行 apt 并安装包。我正在使用 apt 安装来自各种 apt 源的软件包,包括自定义 apt 源。