目录
docker模块分布:
①:安装"abseil"C++库
②:安装CMake编辑
③:grpc安装
④:protobuf安装编辑
⑤:qt界面显示
⑥:dockerfile编写编辑
⑦:执行docker脚本
monitor_docker_run.sh启动容器
monitor_docker_into.sh进入容器
docker模块分布:
①:安装"abseil"C++库
该库提供了一些高质量的 C++ 编程组件和算法。
pushd 和 popd 是 Linux/Unix 系统中的命令,用于在终端中进行目录的切换操作。它们通常用于临时切换到其他目录,执行一些操作后再返回之前的工作目录。
rm -rf "abseil-cpp-${VERSION}" "${PKG_NAME}" :删除下载的 tar.gz 压缩包和解压后的目录,以清理安装过程中产生的临时文件。
②:安装CMake
执行过程同①
③:grpc安装
gRPC 是一个高性能、通用的开源框架,用于构建分布式、高效且跨语言的远程过程调用(RPC)系统。
gRPC安装需要一些依赖库:
在这里,使用一系列 -D 选项设置不同的 CMake 变量,用于控制构建的各种参数。例如:
-DgRPC_INSTALL=ON:允许安装 gRPC 库。
-DBUILD_SHARED_LIBS=ON:构建共享库而不是静态库。
-DCMAKE_BUILD_TYPE=Release:使用 Release 构建类型。
-DgRPC_ABSL_PROVIDER=package:使用已安装的 Abseil 库作为依赖。
-DgRPC_CARES_PROVIDER=package:使用已安装的 c-ares 库作为依赖。
-DgRPC_PROTOBUF_PROVIDER=package:使用已安装的 Protobuf 库作为依赖。
-DgRPC_RE2_PROVIDER=package:使用已安装的 RE2 库作为依赖。
-DgRPC_SSL_PROVIDER=package:使用已安装的 OpenSSL 库作为依赖。
-DgRPC_ZLIB_PROVIDER=package:使用已安装的 zlib 库作为依赖。
-DCMAKE_INSTALL_PREFIX=/usr/local/:指定 gRPC 库的安装路径。
④:protobuf安装
-Dprotobuf_BUILD_TESTS=OFF 是在 CMake 配置 gRPC 项目时的一个选项设置。这个选项的作用是控制是否构建 Protobuf 的测试代码。
⑤:qt界面显示
set -e:如果任何命令返回非零退出状态(即执行失败),脚本将立即终止。
BUILD_TYPE="${1:-download}":获取脚本的第一个参数,用于指定安装类型,默认为 "download"。
CURR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)":获取当前脚本文件所在的绝对路径。
TARGET_ARCH="$(uname -m)":获取当前系统的架构。
定义 Qt 版本信息。
QT_INSTALLER=qt-opensource-linux-x64-5.12.9.run:定义 Qt 安装包的文件名。
MY_DEST_DIR="/usr/local/Qt${QT_VERSION_B}":定义安装目标目录。
cuteci 命令:这是一个自定义命令,用于处理 Qt 安装。脚本会使用这个命令来执行 Qt 安装。
QT5_PATH="/usr/local/qt5":定义 Qt 安装后的路径。
创建软链接:将 Qt 安装目录的链接指向 ${QT5_PATH}。
将 Qt 路径添加到 /etc/ld.so.conf.d/qt.conf 文件,以便系统可以找到 Qt 库。
将相关环境变量的配置添加到脚本中。
清理:删除一些不需要的文件,如安装包、文档、示例、工具等。
⑥:dockerfile编写
①:
将名为 sources.list 的文件从当前目录中复制到容器中的 /etc/apt/ 目录下。sources.list中都是使用阿里云镜像源来获取 Ubuntu 软件包。可以更快速地从阿里云镜像源中获取软件包,从而提高软件包的下载速度。这对于在 Docker 镜像构建过程中,或者在本地系统上安装软件包都是非常有用的。
②:这里都是安装后续的包需要的基础包
还需要安装一些额外的依赖库
③:安装 Protobuf、Abseil、gRPC、CMake 和 Qt 开发环境:
分别从对应目录复制相应脚本,并开始执行。
⑦:执行docker脚本
monitor_docker_run.sh启动容器
启动一个名为 `linux_monitor` 的 Docker 容器
1. `MONITOR_HOME_DIR`:使用 `cd` 命令来获取当前脚本的上级目录的上级目录,即获取脚本的上上级目录路径。这将作为挂载到容器内的工作目录。
2. 获取当前显示器变量 `DISPLAY` 的值,如果未设置则默认为 `:1`。
3. 获取本机的主机名、用户、用户 ID、用户组、用户组 ID,以及运行时目录 `XDG_RUNTIME_DIR`。
4. 使用 `docker stop` 命令停止之前的名为 `linux_monitor` 的容器,然后使用 `docker rm -v -f` 命令删除容器。`-v` 参数用于同时删除容器关联的卷,`-f` 参数用于强制删除容器。
5. 使用 `docker run` 命令启动一个名为 `linux_monitor` 的容器:
- `-it`:使用交互式终端。
- `-d`:在后台运行容器。
- `--name linux_monitor`:指定容器的名称为 `linux_monitor`。
- `-e DISPLAY=$display`:设置容器内的环境变量 `DISPLAY`。
- `-e DOCKER_USER="${user}"`:将本机用户赋给容器内的环境变量 `DOCKER_USER`。
- `-e USER="${user}"`:将本机用户赋给容器内的环境变量 `USER`。
- `-e DOCKER_USER_ID="${uid}"`:将本机用户 ID 赋给容器内的环境变量 `DOCKER_USER_ID`。
- `-e DOCKER_GRP="${group}"`:将本机用户组赋给容器内的环境变量 `DOCKER_GRP`。
- `-e DOCKER_GRP_ID="${gid}"`:将本机用户组 ID 赋给容器内的环境变量 `DOCKER_GRP_ID`。
- `-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR`:将本机运行时目录赋给容器内的环境变量 `XDG_RUNTIME_DIR`。
- `-v ${MONITOR_HOME_DIR}:/work`:将本机上级目录的上级目录挂载到容器的 `/work` 目录。
- `-v ${XDG_RUNTIME_DIR}:${XDG_RUNTIME_DIR}`:将本机运行时目录挂载到容器的相同目录。
- `--net host`:使用主机网络模式。
- `linux:monitor`:使用名为 `linux:monitor` 的 Docker 镜像来创建容器。这个脚本用于启动一个 Docker 容器,其中包含了一系列的环境变量和挂载,以便在容器内部访问和操作本机的相关信息和文件。
monitor_docker_into.sh进入容器
在一个已经运行的 Docker 容器 `linux_monitor` 内启动一个交互式的 Bash 终端
1. `xhost +local:root 1>/dev/null 2>&1`:这行命令允许本地的 `root` 用户通过 X11 转发访问 X 服务器,从而能在容器内显示图形界面。`1>/dev/null` 和 `2>&1` 将标准输出和标准错误输出重定向到 `/dev/null`,即不会在终端上显示输出信息。
2. `docker exec`:这是用于在已经运行的容器内执行命令的 Docker 命令。
- `-u root`:以 `root` 用户的身份执行命令。
- `-it linux_monitor`:指定容器名为 `linux_monitor`,并以交互式终端的方式执行命令。
- `/bin/bash`:要在容器内执行的命令,这里是启动一个 Bash 终端。3. `xhost -local:root 1>/dev/null 2>&1`:这行命令用于撤销之前的 `xhost` 命令,不再允许 `root` 用户通过 X11 转发访问 X 服务器。
总的来说,这个脚本的目的是在已经运行的 `linux_monitor` 容器内,以 `root` 用户身份启动一个交互式的 Bash 终端,以便在容器内执行命令和操作。