我的主机系统是ubuntu:18.04 docker容器。在那里,我使用yocto项目为x86_64体系结构构建了一个根文件系统。根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添加哪些其他软件包?
UPDATE-1: 有一点上下文:我不确定如何在映像构建期间从yocto中的apt来源安装deb软件包。因此,我开始为rootfilesystem创建一个后处理脚本,以执行apt并安装软件包。我在那里使用apt从各种apt源安装软件包,包括自定义apt源。
答案 0 :(得分:1)
鉴于其他说明,Yocto风格的解决方案如下:
您将为要安装到映像中的每个项目编写一个配方。如果它是捆绑为.deb
的某种形式的软件包,则标准方法称为“打包外部生成的二进制文件”并描述为here。然后,创建一个将所有这些东西都放入其中的图像配方。
正如您特别要求的构建类型解决方案一样,这就是方法。从您的角度来看,docker-start启动方法可能被认为是“构建时间”,因为Dockerfile是提前执行的。但是从映像的POV来看,它是运行时,您可以将其chroot并在其上执行事情。