diff --git a/Dockerfile b/Dockerfile index af1e368..e250da3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,8 @@ -ARG OPENCV_VERSION=v4.5.3 - -FROM docker.io/library/golang:1.17-alpine as gobuilder +ARG OPENCV_VERSION=4.9.0 +FROM golang:1.22-alpine as gobuilder -FROM docker.io/cyrilix/opencv-buildstage:${OPENCV_VERSION} as builder +FROM ghcr.io/hybridgroup/opencv:${OPENCV_VERSION} as builder LABEL maintainer="Cyrille Nofficial" @@ -13,20 +12,14 @@ ENV PATH /usr/local/go/bin:$GOPATH/bin:/usr/local/go/bin:$PATH RUN mkdir -p "/src $GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" -ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig -ENV CGO_CPPFLAGS -I/usr/local/include -ENV CGO_CXXFLAGS "--std=c++1z" - WORKDIR /src ADD . . -RUN CGO_LDFLAGS="$(pkg-config --libs opencv4)" \ - CGO_ENABLED=1 CGO_CPPFLAGS=${CGO_CPPFLAGS} CGO_CXXFLAGS=${CGO_CXXFLAGS} CGO_LDFLAGS=${CGO_LDFLAGS} GOOS=${GOOS} GOARCH=${GOARCH} GOARM=${GOARM} go build -mod vendor -a ./cmd/rc-road/ +RUN go build -mod vendor -a ./cmd/rc-road/ - -FROM docker.io/cyrilix/opencv-runtime:${OPENCV_VERSION} +FROM ghcr.io/hybridgroup/opencv:${OPENCV_VERSION} ENV LD_LIBRARY_PATH /usr/local/lib:/usr/local/lib64 diff --git a/build-docker.sh b/build-docker.sh index d7f073f..2b24813 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -1,134 +1,12 @@ #! /bin/bash IMAGE_NAME=robocar-road -BINARY_NAME=rc-road TAG=$(git describe) FULL_IMAGE_NAME=docker.io/cyrilix/${IMAGE_NAME}:${TAG} -OPENCV_VERSION=4.5.5 -SRC_CMD=./cmd/$BINARY_NAME -GOLANG_VERSION=1.18 -image_build(){ - local containerName=builder +# Remove old images +podman manifest rm localhost/${IMAGE_NAME}:${TAG} ${FULL_IMAGE_NAME} - GOPATH=/go - - buildah from --name ${containerName} docker.io/cyrilix/opencv-buildstage:${OPENCV_VERSION} - buildah config --label maintainer="Cyrille Nofficial" "${containerName}" - - buildah copy --from=docker.io/library/golang:${GOLANG_VERSION} "${containerName}" /usr/local/go /usr/local/go - buildah config --env GOPATH=/go \ - --env PATH=/usr/local/go/bin:$GOPATH/bin:/usr/local/go/bin:/usr/bin:/bin \ - "${containerName}" - - buildah run \ - --env GOPATH=${GOPATH} \ - "${containerName}" \ - mkdir -p /src "$GOPATH/src" "$GOPATH/bin" - - buildah run \ - --env GOPATH=${GOPATH} \ - "${containerName}" \ - chmod -R 777 "$GOPATH" - - - buildah config --env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig "${containerName}" - buildah config --workingdir /src/ "${containerName}" - - buildah add "${containerName}" . . - - for platform in "linux/amd64" "linux/arm64" "linux/arm/v7" - do - - GOOS=$(echo "$platform" | cut -f1 -d/) && \ - GOARCH=$(echo "$platform" | cut -f2 -d/) && \ - GOARM=$(echo "$platform" | cut -f3 -d/ | sed "s/v//" ) - - case $GOARCH in - "amd64") - ARCH=amd64 - ARCH_LIB_DIR=/usr/lib/x86_64-linux-gnu - EXTRA_LIBS="" - CC=gcc - CXX=g++ - ;; - "arm64") - ARCH=arm64 - ARCH_LIB_DIR=/usr/lib/aarch64-linux-gnu - EXTRA_LIBS="-ltbb" - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - ;; - "arm") - ARCH=armhf - ARCH_LIB_DIR=/usr/lib/arm-linux-gnueabihf - EXTRA_LIBS="-ltbb" - CC=arm-linux-gnueabihf-gcc - CXX=arm-linux-gnueabihf-g++ - ;; - esac - - printf "Build binary for %s\n\n" "${platform}" - - buildah run \ - --env CGO_ENABLED=1 \ - --env CC=${CC} \ - --env CXX=${CXX} \ - --env GOOS=${GOOS} \ - --env GOARCH=${GOARCH} \ - --env GOARM=${GOARM} \ - --env CGO_CPPFLAGS="-I/opt/opencv/${ARCH}/include/opencv4/" \ - --env CGO_LDFLAGS="-L/opt/opencv/${ARCH}/lib -L${ARCH_LIB_DIR} ${EXTRA_LIBS} -lopencv_core -lopencv_face -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_xfeatures2d -lopencv_calib3d -lopencv_photo -lopencv_flann" \ - --env CGO_CXXFLAGS="--std=c++1z" \ - "${containerName}" \ - go build -tags customenv -a -o ${BINARY_NAME}.${ARCH} ${SRC_CMD} - - done - buildah commit --rm ${containerName} ${IMAGE_NAME}-builder -} - -image_final(){ - local containerName=runtime - - for platform in "linux/amd64" "linux/arm64" "linux/arm/v7" - do - - GOOS=$(echo $platform | cut -f1 -d/) && \ - GOARCH=$(echo $platform | cut -f2 -d/) && \ - GOARM=$(echo $platform | cut -f3 -d/ | sed "s/v//" ) - VARIANT="--variant $(echo $platform | cut -f3 -d/ )" - - if [[ -z "$GOARM" ]] ; - then - VARIANT="" - fi - - if [[ "${GOARCH}" == "arm" ]] - then - BINARY="${BINARY_NAME}.armhf" - else - BINARY="${BINARY_NAME}.${GOARCH}" - fi - - buildah from --name "${containerName}" --os "${GOOS}" --arch "${GOARCH}" ${VARIANT} docker.io/cyrilix/opencv-runtime:${OPENCV_VERSION} - - buildah copy --from ${IMAGE_NAME}-builder "$containerName" "/src/${BINARY}" /usr/local/bin/${BINARY_NAME} - - buildah config --label maintainer="Cyrille Nofficial" "${containerName}" - buildah config --user 1234 "$containerName" - buildah config --cmd '' "$containerName" - buildah config --entrypoint '[ "/usr/local/bin/'${BINARY_NAME}'" ]' "$containerName" - - buildah commit --rm --manifest ${IMAGE_NAME} ${containerName} - done -} -#buildah rmi localhost/$IMAGE_NAME -#buildah manifest rm localhost/${IMAGE_NAME} - -image_build - -# push image -image_final -printf "\n\nPush manifest to %s\n\n" ${FULL_IMAGE_NAME} -buildah manifest push --rm -f v2s2 "localhost/$IMAGE_NAME" "docker://$FULL_IMAGE_NAME" --all +podman build . --platform linux/amd64,linux/arm64 --manifest ${IMAGE_NAME}:${TAG} +podman manifest push --all --rm localhost/${IMAGE_NAME}:${TAG} ${FULL_IMAGE_NAME}