【问题标题】:How to accept the license agreement when building rti-connext-dds-5.3.1 with docker build?使用 docker build 构建 rti-connext-dds-5.3.1 时如何接受许可协议?
【发布时间】:2019-09-29 16:45:15
【问题描述】:

我正在从需要安装包 rti-connext-dds-5.3.1 的 Dockerfile 构建映像。 (building ROS2 on Linux时的依赖之一)。

该软件包的问题在于它显示的许可协议必须向下滚动,然后通过在提示符上输入“是”来接受。我似乎无法将 Dockerfile 命令设置为自动滚动和/或自动接受此许可协议:

EnterSpace 键不会向下滚动许可证,它只会显示空白行。按下任何其他键只会将其打印到控制台。此时构建卡住了,无法继续。

这里是 Dockerfile:

FROM ubuntu:bionic

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get install -y apt-utils debconf-utils gnupg2 lsb-release && \
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 421C365BD9FF1F717815A3895523BAEEB01FA116 && \
    echo "deb http://packages.ros.org/ros2/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros2-latest.list && \
    apt-get update && \
    apt-get install -y rti-connext-dds-5.3.1

WORKDIR /home

我已经试过了:

如何在安装过程中自动滚动和/或自动接受许可证?

【问题讨论】:

  • 常规 RTI 安装程序有一个 --mode unattended 命令行标志来安装并自动接受许可证,也许尝试通过它?
  • @JohnnyWillemsen 我正在通过apt-get 安装它,我认为没有办法通过--mode

标签: docker installation dockerfile apt-get data-distribution-service


【解决方案1】:

您可以使用环境变量“RTI_NC_LICENSE_ACCEPTED=yes”。您的 dockerfile 将如下所示:

FROM ubuntu:bionic

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get install -y apt-utils debconf-utils gnupg2 lsb-release && \
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 421C365BD9FF1F717815A3895523BAEEB01FA116 && \
    echo "deb http://packages.ros.org/ros2/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros2-latest.list && \
    apt-get update 
RUN RTI_NC_LICENSE_ACCEPTED=yes apt-get install rti-connext-dds-5.3.1

WORKDIR /home

【讨论】:

  • 成功了。将ARG RTI_NC_LICENSE_ACCEPTED=yes 放在RUN 命令之前也可以使用,这样所有内容都在一个RUN 命令中。
【解决方案2】:

这是一个有效的答案,但绝对不是最好的答案。我目前正在使用 DDS 的试用版,它不允许您自动接受许可证。所以我的工作是做以下事情:

首先我安装了expect 命令,它允许您编写交互的脚本并说击enter 21 次,然后是字母y 等等。

此外,还有一个名为autoexpect 的命令将为您生成一个脚本。所以我的步骤是:

  1. 启动一个基本容器并复制rti_connext_dds-6.0.1-eval-x64Linux4gcc7.3.0.run - 或在本地挂载文件

  2. 运行autoexpect ./rti_connext_dds-6.0.1-eval-x64Linux4gcc7.3.0.run,它将生成script1.exp

  3. 现在构建一个复制安装文件和期望脚本的实际容器并执行以下操作:

ARG RTI_INSTALL_FILE=rti_connext_dds-6.0.1-eval-x64Linux4gcc7.3.0.run
RUN chmod +x /rti/${RTI_INSTALL_FILE} && expect /rti/script.exp

最好的方法 - 当然 - 是按照上面的建议去做 - 然而 - 了解更多关于 docker expect 是一个很棒的小技巧

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多