支持多架构打包
This commit is contained in:
parent
336cb4387a
commit
5dfd54c5ef
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
prog/*
|
||||
Edge_PLCDrv*.tar.gz
|
||||
|
48
Dockerfile
48
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"]
|
16
README.md
16
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
|
||||
|
78
build.sh
Executable file
78
build.sh
Executable 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"
|
BIN
overlay/dotnet-runtime-3.1.32-linux-arm64.tar.gz
Normal file
BIN
overlay/dotnet-runtime-3.1.32-linux-arm64.tar.gz
Normal file
Binary file not shown.
BIN
overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb
Normal file
BIN
overlay/libssl1.0.0_1.0.2g-1ubuntu4.20_arm64.deb
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user