Skip to content

Commit ca010a1

Browse files
author
YangSen-qn
committed
Packaging supports arm64
1 parent 3d3a835 commit ca010a1

File tree

5 files changed

+49
-23
lines changed

5 files changed

+49
-23
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
/docker/plugin.storage.qiniu.com
2121
/docker/kodofs
2222
/docker/rclone
23+
/docker/*/kodofs
24+
/docker/*/rclone
2325
/k8s/kodo.yaml
2426
/k8s/kodofs.yaml
2527

Dockerfile

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
# 1. 第一阶段,编译二进制可执行文件
22
FROM golang:1.21-alpine3.18 as build-env
33

4+
ARG TARGETOS
5+
ARG TARGETARCH
6+
47
COPY . /app
58
WORKDIR /app
69
# 安装依赖
710
RUN apk add --no-cache git make
811

912
# 编译二进制可执行文件
10-
RUN make build
13+
RUN GOOS=$TARGETOS GOARCH=$TARGETARCH make build
1114

1215
# 2. 第二阶段,构建最终镜像
1316
FROM alpine:3.18
1417

18+
ARG TARGETOS
19+
ARG TARGETARCH
1520
ARG PLUGIN_FILENAME=plugin.storage.qiniu.com
1621
ARG CONNECTOR_FILENAME=connector.${PLUGIN_FILENAME}
1722

@@ -20,9 +25,8 @@ COPY --from=build-env /app/plugin/${PLUGIN_FILENAME} /usr/local/bin/${PLUGIN_FIL
2025
COPY --from=build-env /app/connector/${CONNECTOR_FILENAME} /usr/local/bin/${CONNECTOR_FILENAME}
2126

2227
# 这些文件直接由仓库提供
23-
COPY docker/nsenter /usr/local/bin/nsenter
24-
COPY docker/kodofs /usr/local/bin/kodofs
25-
COPY docker/rclone /usr/local/bin/rclone
28+
COPY docker/${TARGETARCH}/kodofs /usr/local/bin/kodofs
29+
COPY docker/${TARGETARCH}/rclone /usr/local/bin/rclone
2630
COPY docker/kodo-csi-connector.service /csiplugin-connector.service
2731
COPY docker/entrypoint.sh /entrypoint.sh
2832

@@ -33,6 +37,6 @@ RUN chmod +x /usr/local/bin/kodofs \
3337
/usr/local/bin/${CONNECTOR_FILENAME} \
3438
/entrypoint.sh
3539

36-
RUN apk add --no-cache ca-certificates bash
40+
RUN apk add util-linux --no-cache ca-certificates bash
3741

3842
ENTRYPOINT ["/entrypoint.sh"]

Makefile

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,36 +72,56 @@ install_plugins: install_kodo_csi_driver install_kodofs_csi_driver
7272
.PHONY: delete_plugins
7373
delete_plugins: delete_kodo_csi_driver delete_kodofs_csi_driver
7474

75-
.PHONY: docker/rclone
76-
docker/rclone:
75+
.PHONY: download-rclone
76+
download-rclone:
77+
# 下载 amd64 版本
7778
curl -LJO# https://github.com/rclone/rclone/releases/download/$(RCLONE_VERSION)/rclone-$(RCLONE_VERSION)-linux-amd64.zip
7879
unzip rclone-$(RCLONE_VERSION)-linux-amd64.zip
79-
mv rclone-$(RCLONE_VERSION)-linux-amd64/rclone docker/rclone
80-
chmod +x docker/rclone
80+
[ -f "docker/amd64/rclone" ] && rm docker/amd64/rclone || :
81+
mv rclone-$(RCLONE_VERSION)-linux-amd64/rclone docker/amd64/rclone
82+
chmod +x docker/amd64/rclone
8183
rm rclone-$(RCLONE_VERSION)-linux-amd64.zip
8284
rm -rf rclone-$(RCLONE_VERSION)-linux-amd64
8385

86+
# 下载 arm64 版本
87+
curl -LJO# https://github.com/rclone/rclone/releases/download/$(RCLONE_VERSION)/rclone-$(RCLONE_VERSION)-linux-arm64.zip
88+
unzip rclone-$(RCLONE_VERSION)-linux-arm64.zip
89+
[ -f "docker/arm64/rclone" ] && rm docker/arm64/rclone || :
90+
mv rclone-$(RCLONE_VERSION)-linux-arm64/rclone docker/arm64/rclone
91+
chmod +x docker/arm64/rclone
92+
rm rclone-$(RCLONE_VERSION)-linux-arm64.zip
93+
rm -rf rclone-$(RCLONE_VERSION)-linux-arm64
94+
8495
# 下载kodofs二进制文件,由于kodofs是私有仓库,所以需要携带 Github API Token 才能下载
85-
.PHONY: docker/kodofs
86-
docker/kodofs:
96+
.PHONY: download-kodofs
97+
download-kodofs:
8798
@if [ -z $$GITHUB_API_TOKEN ];\
8899
then \
89100
echo "Please configure environment GITHUB_API_TOKEN"; \
90101
exit 1; \
91102
fi
103+
# 下载 arm64
104+
[ -f "scripts/kodofs_linux_arm64" ] && rm scripts/kodofs_linux_arm64 || :
105+
cd scripts && bash get_gh_asset.sh qbox kodofs $(KODOFS_VERSION) kodofs_linux_arm64
106+
[ -f "docker/arm64/kodofs" ] && rm docker/arm64/kodofs || :
107+
mv scripts/kodofs_linux_arm64 docker/arm64/kodofs
108+
chmod +x docker/arm64/kodofs
109+
# 下载 amd64
110+
[ -f "scripts/kodofs" ] && rm scripts/kodofs || :
92111
cd scripts && bash get_gh_asset.sh qbox kodofs $(KODOFS_VERSION) kodofs
93-
mv scripts/kodofs docker/kodofs
94-
chmod +x docker/kodofs
95-
96-
.PHONY: build_image
97-
build_image: docker/rclone docker/kodofs
98-
docker build --pull \
99-
-t="$(DOCKERHUB_ORGANIZATION)/$(DOCKERHUB_IMAGE):$(VERSION)" \
100-
-f Dockerfile .
112+
[ -f "docker/amd64/kodofs" ] && rm docker/amd64/kodofs || :
113+
mv scripts/kodofs docker/amd64/kodofs
114+
chmod +x docker/amd64/kodofs
101115

102116
.PHONY: push_image
103-
push_image: build_image
104-
docker push "$(DOCKERHUB_ORGANIZATION)/$(DOCKERHUB_IMAGE):$(VERSION)"
117+
push_image: docker/rclone docker/kodofs
118+
docker buildx create --name=CSIBuilder --driver docker-container --platform linux/amd64,linux/arm64
119+
docker buildx build --push \
120+
--builder CSIBuilder \
121+
--platform linux/amd64,linux/arm64 \
122+
-t "$(DOCKERHUB_ORGANIZATION)/$(DOCKERHUB_IMAGE):$(VERSION)" \
123+
-f Dockerfile \
124+
.
105125

106126
.PHONY: install_kodo_static_example
107127
install_kodo_static_example: k8s/kodo.yaml

docker/entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -e
44

5-
HOST_CMD="/usr/local/bin/nsenter --all --target 1 --"
5+
HOST_CMD="nsenter --all --target 1 --"
66

77
rm -f /host/usr/local/bin/kodofs /host/usr/local/bin/connector.plugin.storage.qiniu.com /host/usr/local/bin/rclone
88
cp /usr/local/bin/kodofs /host/usr/local/bin/kodofs

scripts/get_gh_asset.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ curl -o /dev/null -sH "$AUTH" $GH_REPO || { echo "Error: Invalid repo, token or
2929
# Read asset tags.
3030
response=$(curl -sH "$AUTH" $GH_TAGS)
3131
# Get ID of the asset based on given name.
32-
eval $(echo "$response" | grep -C3 "name.:.\+$name" | grep -w id | tr : = | tr -cd '[[:alnum:]]=')
32+
eval $(echo "$response" | grep -C3 "name.:.\+$name\"" | grep -w id | tr : = | tr -cd '[[:alnum:]]=')
3333
# id=$(echo "$response" | jq --arg name "$name" '.assets[] | select(.name == $name).id') # If jq is installed, this can be used instead.
3434
[ "$id" ] || { echo "Error: Failed to get asset id, response: $response" | awk 'length($0)<100' >&2; exit 1; }
3535
GH_ASSET="$GH_REPO/releases/assets/$id"

0 commit comments

Comments
 (0)