使用 docker 构建 rti-connext-dds-5.3.1 时如何接受许可协议?

How to accept the license agreement when building rti-connext-dds-5.3.1 with docker build?

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

该软件包的问题在于它显示了一个许可协议,必须向下滚动该协议,然后在提示中输入“是”接受该协议。我似乎无法将 Dockerfile 命令设置为自动滚动 and/or 自动接受此许可协议:

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

这是 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

我已经试过了:

如何在安装过程中自动滚动 and/or 自动接受许可?

您可以使用环境变量"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

这是一个有效的答案,但肯定不是最好的答案。我目前正在使用 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. 现在构建一个复制安装文件和 expect 脚本的实际容器,并执行以下操作:

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 是一个很棒的小技巧