diff --git a/.gitignore b/.gitignore index 3e06f76..2e587bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ prog/* +Edge_PLCDrv*.tar.gz diff --git a/Dockerfile b/Dockerfile index 160a2ac..20cdb51 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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;\ - echo root:123456 |chpasswd +RUN echo "当前构建架构: ${TARGETARCH}" +RUN echo "当前构建32架构: ${ARCH32}" -COPY localtime /etc +# 添加架构相关的依赖包 +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 overlay/localtime /etc COPY prog /home/ - WORKDIR /home - -CMD ["/home/start.sh"] - - +CMD ["/home/start.sh"] \ No newline at end of file diff --git a/README.md b/README.md index 00075f4..93312ec 100644 --- a/README.md +++ b/README.md @@ -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` + +参数说明: +- pack:edge 虚拟驱动程序包,有 virhwedge 直接打包而来,如:Edge_PLCDrv_amd64_v1.1.1_5.0.5.tar.gz ### 发布 在edge 发布版本时注意修改卷映射,将容器目录修改为: /var/IoTEdge/config diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..62ca0b9 --- /dev/null +++ b/build.sh @@ -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" \ No newline at end of file diff --git a/dotnet-runtime-3.1.32-linux-x64.tar.gz b/overlay/dotnet-runtime-3.1.32-linux-amd64.tar.gz similarity index 100% rename from dotnet-runtime-3.1.32-linux-x64.tar.gz rename to overlay/dotnet-runtime-3.1.32-linux-amd64.tar.gz diff --git a/overlay/dotnet-runtime-3.1.32-linux-arm64.tar.gz b/overlay/dotnet-runtime-3.1.32-linux-arm64.tar.gz new file mode 100644 index 0000000..a4d52b9 Binary files /dev/null and b/overlay/dotnet-runtime-3.1.32-linux-arm64.tar.gz differ diff --git a/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb b/overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb similarity index 100% rename from libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb rename to overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb diff --git a/overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb b/overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb new file mode 100644 index 0000000..3a8011e Binary files /dev/null and b/overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb differ diff --git a/localtime b/overlay/localtime similarity index 100% rename from localtime rename to overlay/localtime