【发布时间】:2016-01-24 05:36:03
【问题描述】:
我目前正在重建我们的构建服务器,并为我们的各种项目创建一组 Docker 映像,因为每个项目都有相当不同的工具链和库要求。由于 Docker 目前仅在 64 位主机上运行,因此构建服务器将是 x86_64 Fedora 22 机器。
这些图像必须能够构建我们项目的历史/标记版本而无需修改;如果需要,我们可以更改每个项目的构建过程,但仅限于当前主干和未来版本。
现在,我的一个构建环境需要重现旧的 i686 构建服务器。为了执行 32 位程序,我可以简单地安装 i686 支持库 (yum install glibc.i686 ncurses-libs.i686),但这并不能帮助我构建 32 位程序,而无需修改 Makefile 以通过 -m32到 GCC ……而且,如上所述,我根本不希望更改历史代码库。
所以,我目前的想法基本上是通过安装 所有 i686 软件包(包括 GCC)在 Docker 容器中伪造 i686 版本的 CentOS。这样,虽然uname -a 会报告主机的 x86_64 架构,但容器中的其他所有内容都应该非常一致。我从the "centos-i386" base image 中汲取了这个想法(和centos6.tar.gz),从本质上讲,我正在尝试为我自己的本地图像进行复制。
遗憾的是,进展并不顺利。
这是一个极简风格的Dockerfile:
FROM scratch
# Inspiration from https://hub.docker.com/r/toopher/centos-i386/~/dockerfile/
ADD centos6.tar.gz /
RUN echo "i686" > /etc/yum/vars/arch && \
echo "i386" > /etc/yum/vars/basearch
ENTRYPOINT ["linux32"]
# Base packages
RUN yum update -y && yum -y install epel-release patch sed subversion bzip zip
# AT91SAM9260 ARM compiler
ADD arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 /usr/local/
ENV PATH $PATH:/usr/local/arm-2009q1/bin
# AT91SAM9260 & native cxxtest
ADD cxxtest-3.10.1.tar.gz /staging/
WORKDIR /staging/cxxtest/
RUN cp -r cxxtest /usr/local/arm-2009q1/arm-none-linux-gnueabi/include/
RUN cp -r cxxtest /usr/local/include/
RUN cp cxxtestgen.pl /usr/bin/
RUN ln -s /usr/bin/cxxtestgen.pl /usr/bin/cxxtestgen
WORKDIR /
RUN rm -rf /staging/
在 cxxtest 安装步骤中的第一个“RUN”处构建失败:
/bin/sh: cp: command not found
The command '/bin/sh -c cp -r cxxtest /usr/local/arm-2009q1/arm-none-linux-gnueabi/include/' returned a non-zero code: 127
怎么了?
【问题讨论】: