支持多架构打包

This commit is contained in:
liu.chunxun 2025-04-22 18:41:14 +08:00
parent 336cb4387a
commit 5dfd54c5ef
9 changed files with 125 additions and 18 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
prog/*
Edge_PLCDrv*.tar.gz

View File

@ -1,18 +1,40 @@
FROM dockerproxy.com/library/ubuntu:22.04
ADD dotnet-runtime-3.1.32-linux-x64.tar.gz /root/dotnet
COPY libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb /tmp
FROM swr.cn-north-4.myhuaweicloud.com/cloud-yuzhen/ubuntu:22.04
ARG TARGETARCH
ARG ARCH32
RUN apt update;dpkg --add-architecture i386;apt update;apt install -y --no-install-recommends libstdc++6 lib32stdc++6 libc6:i386 libc6 libgcc-s1 libicu70 liblttng-ust1 zlib1g vim zip unzip wget openssh-server inetutils-ping inetutils-telnet;\
dpkg -i /tmp/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb;\
echo "PermitRootLogin yes\nPasswordAuthentication yes\n" >> /etc/ssh/sshd_config;\
RUN echo "当前构建架构: ${TARGETARCH}"
RUN echo "当前构建32架构: ${ARCH32}"
# 添加架构相关的依赖包
ADD overlay/dotnet-runtime-3.1.32-linux-${TARGETARCH}.tar.gz /root/dotnet
COPY overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_${TARGETARCH}.deb /tmp
# 动态处理架构兼容性
RUN apt update && \
dpkg --add-architecture ${ARCH32} && \
apt update && \
apt install -y --no-install-recommends \
libstdc++6 \
# lib32stdc++6 \
libstdc++6:${ARCH32} \
libc6:${ARCH32} \
libc6 \
libgcc-s1 \
libicu70 \
liblttng-ust1 \
zlib1g \
vim \
zip \
unzip \
wget \
openssh-server \
inetutils-ping \
inetutils-telnet && \
dpkg -i /tmp/libssl1.0.0_1.0.2g-1ubuntu4.20_${TARGETARCH}.deb && \
echo "PermitRootLogin yes\nPasswordAuthentication yes\n" >> /etc/ssh/sshd_config && \
echo root:123456 | chpasswd
COPY localtime /etc
COPY overlay/localtime /etc
COPY prog /home/
WORKDIR /home
CMD ["/home/start.sh"]

View File

@ -1,11 +1,17 @@
# 华为Edge软采基础镜像
包含dotnet 3.1 运行时i386 架构支持,
### 替换程序
将真实驱动解压到 prog路径下删掉 virdrv ,修改dLoad.json ,注意需要额外增加一个指定日志路径的参数 “-logdir,log”
包含dotnet 3.1 运行时兼容32位程序支持同时编译arm64架构和amd64架构的镜像。
### 编译
`docker build -t gitiot.mgm-iot.com/iot_images/xxx:vx.x.x .`
编译命令:
`./build.sh ${pack}`
脚本自动判断编译架构以及版本号,程序包命名需要严格按照 Edge_PLCDrv_<架构>_<版本号>.tar.gz arm架构自动更改为 arm64 ,编译成功后会自动推送
示例:
`./build.sh Edge_PLCDrv_amd64_v1.1.1_5.0.5.tar.gz`
参数说明:
- packedge 虚拟驱动程序包,有 virhwedge 直接打包而来Edge_PLCDrv_amd64_v1.1.1_5.0.5.tar.gz
### 发布
在edge 发布版本时注意修改卷映射,将容器目录修改为: /var/IoTEdge/config

78
build.sh Executable file
View File

@ -0,0 +1,78 @@
##!/bin/sh
# build.sh - 自动化构建Docker镜像脚本
# 用法: ./build.sh <压缩文件>
# 参数验证
if [ $# -ne 1 ]; then
echo "错误:参数数量不正确"
echo "用法: $0 <压缩文件>"
echo "压缩文件名格式应为: Edge_PLCDrv_<架构>_<版本号>.tar.gz"
exit 1
fi
# 解压参数配置
COMPRESSED_FILE="$1"
# 从文件名提取架构和版本
filename=$(basename "$COMPRESSED_FILE" .tar.gz)
IFS='_' read -ra parts <<< "$filename"
if [ ${#parts[@]} -lt 4 ]; then
echo "错误:压缩文件名格式不正确"
echo "应为: Edge_PLCDrv_<架构>_<版本号>.tar.gz"
exit 1
fi
ARCH_TYPE="${parts[2]}"
VERSION=$(IFS='_'; echo "${parts[*]:3}")
TARGET_DIR="./prog"
# 架构参数验证
# 架构参数验证
if [[ "$ARCH_TYPE" == "arm" ]]; then
ARCH_TYPE="arm64"
fi
if [[ "$ARCH_TYPE" != "arm64" && "$ARCH_TYPE" != "amd64" ]]; then
echo "错误:不支持的架构类型 '$ARCH_TYPE',仅支持 arm64/amd64"
exit 1
fi
# 创建目标目录网页5/7解压目录处理逻辑
mkdir -p "$TARGET_DIR"
# 解压操作网页6/7解压命令参考
echo "正在解压 $COMPRESSED_FILE$TARGET_DIR..."
tar -xzf "$COMPRESSED_FILE" -C "$TARGET_DIR" || {
echo "解压失败,请检查压缩文件完整性";
exit 1
}
# Docker构建参数配置
declare -A ARCH_CONFIG=(
["arm64"]="ARCH32="armhf" linux/arm64"
["amd64"]="ARCH32="i386" linux/amd64"
)
# 动态生成镜像标签
#IMAGE_TAG="gitiot.mgm-iot.com/iot_images/edge_${ARCH_TYPE}:v1.0.0"
IMAGE_TAG="swr.cn-north-4.myhuaweicloud.com/cloud-yuzhen/edge_plc_all_${ARCH_TYPE}:${VERSION}"
# 执行构建命令网页3/5的Docker参数传递模式
echo "启动Docker构建架构$ARCH_TYPE..."
BUILDCMD="docker buildx build \
--build-arg "${ARCH_CONFIG[$ARCH_TYPE]%% *}" \
--load \
-t "$IMAGE_TAG" \
--platform "${ARCH_CONFIG[$ARCH_TYPE]##* }" ."
echo $BUILDCMD
$BUILDCMD || {
echo "构建失败...";
exit 1
}
echo "构建完成,镜像已生成:$IMAGE_TAG"
echo "正在推送镜像到镜像仓库..."
docker push "$IMAGE_TAG"

Binary file not shown.

Binary file not shown.