オブジェクトストレージのテストで便利なのがs3tester
https://github.com/s3tester/s3tester
オブジェクトストレージにテスト用のバケットを作成して、以下のコマンドラインで簡単にテストができてしまう。
export AWS_ACCESS_KEY_ID=<アクセスキー>
export AWS_SECRET_ACCESS_KEY=<シークレット>
s3tester -bucket=<バケット名> -endpoint="<エンドポイントURL>"
しかし、s3testerの最新版バイナリは、Linux/amd64のバイナリしかない。Windowsとかでも使いたかったのに。(古いバージョンだとWindowsバイナリもある。)
ならばs3testerをコンパイルしてしまえというのが今回のテーマ。
閑話休題
s3testerは、goで記載されている。goはクロスプラットフォームをサポートしているっぽい。なので、これからクロスプラットフォームでバイナリを作る。
環境
Ubuntu 22.04.3 amd64でgo1.18.1
s3testerの要件は、go 1.7以上なので大丈夫っぽい。
早速クロスコンパイル
curl -OL https://github.com/s3tester/s3tester/archive/refs/tags/v3.0.0.tar.gz
tar xfz v3.0.0.tar.gz
cd s3tester-3.0.0/
go get github.com/s3tester/s3tester
GOOSにOS、GOARCHにCPUアーキテクチャを書けばいいらしい。
以下が試した組み合わせ
#MacOSの場合
env GOOS=darwin GOARCH=arm64 go build -o s3tester_darwin_arm64
env GOOS=darwin GOARCH=amd64 go build -o s3tester_darwin_amd64
#Linuxの場合
env GOOS=linux GOARCH=arm64 go build -o s3tester_linux_arm64
env GOOS=linux GOARCH=amd64 go build -o s3tester_linux_amd64
#Windowsの場合
env GOOS=windows GOARCH=386 go build -o s3tester_windows_386.exe
env GOOS=windows GOARCH=arm64 go build -o s3tester_windows_arm64.exe
env GOOS=windows GOARCH=amd64 go build -o s3tester_windows_amd64.exe
全てのコマンドラインでバイナリがちゃんとできてしまった。ちなみに、サポートしている環境を調べるには
go tool dist list
と実行すると、サポートされるGOOSとGOARCHの組み合わせが出てくる。
Pythonでもクロスプラットフォームのバイナリが作れたが、Linuxの環境だけでクロスプラットフォームバイナリができたのは簡単。これは便利だぁ。今の仕事では1ミリも役に立たないけどGoはありだなぁ。