使用命令拉一个标准的 22.04 的 Docker:
docker pull ubuntu:22.04
我们可以将这个 Docker 的 image 保存成 har 档(参考 Tappas 脚本的 har 格式)
考虑到我们运行脚本的因素,我们将这个 image 重新做 tag
docker tag [image id] hailo_tappas:v3.27.0
docker save -o hailo-docker-tappas-v3.27.0.tar hailo_tappas:v3.27.0
这样我们就得到了一个有 tag: hailo_tappas:v3.27.0 的实际 Ubuntu 22.04 基础 Docker image。
我们使用 Hailo 官网下载的 Tappas Docker 脚本 run_tappas_docker.sh 导入这个 image
run_tappas_docker.sh --tappas-image hailo-docker-tappas-v3.27.0.tar
为什么使用这个脚本,主要有两点原因:
- 因为这个脚本会通过 Docker 使用 host 的硬件设备(Hailo 设备以及 Hailo 驱动)
- 这个脚本会使用 host 的显示界面,从而在 Docker 中运行的显示应用程序可以在 host 上正常显示(所以运行脚本的时候不要使用 SSH,直接在主控中通过 terminal 运行)
导入以后,我们就可以使用 run_tappas_docker.sh –resume 对应的 container 去安装必须安装的包,从而安装好 Tappas
安装之前可以使用如下命令加入其他 apt 源:
sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
也可以直接使用
dpkg -i hailort_4.16.0_amd64.deb
具体 Tappas 安装可以参考:https://github.com/giladnahor/hailo_rpi5_examples/blob/main/doc/install-raspberry-pi5.md
附: 稍微解释下我理解中的 run_tappas_docker.sh 中实现共享 host 端硬件设备以及 host 端显示的功能
function prepare_docker_args() {
DOCKER_ARGS="--privileged --net=host \
--name "$CONTAINER_NAME" \
--ipc=host \
--device /dev/dri:/dev/dri \
-v ${XAUTH_FILE_PC}:${XAUTH_FILE_CONTAINER} \
-v /tmp/.X11-unix/:/tmp/.X11-unix/ \
-v /dev:/dev \
-v /lib/firmware:/lib/firmware \
--group-add 44 \
-e DISPLAY=$DISPLAY \
-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
-e hailort_enable_service=yes \
-v $(pwd)/${SHARED_DIR}/:/local/${SHARED_DIR}:rw"
}
docker run $DOCKER_ARGS -it $IMAGE_NAME:$CONTAINER_TAG
然后在以后运行 container 的时候,采用一些 host 端的临时文件来保存 DISPLAY 的参数,从而达到支持 host 端显示
function handle_xauth() {
# The function extracts auth entry for current display and saves it to specified file.
# It's a workaround for ub22 random name of xauth file, which changes every reboot.
touch $XAUTH_FILE_PC
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH_FILE_PC nmerge -
chmod o+rw $XAUTH_FILE_PC
}
docker start "$CONTAINER_NAME"
docker exec -it -e DISPLAY=$DISPLAY "$CONTAINER_NAME" /bin/bash
发表回复