S3やS3互換のオブジェクトストレージをマウントできるツールとして、goofysが有名です。
s3fsより速いのですが、ビルド済みバイナリにはarm64(aarch64)バイナリがありません。
そして残念なことに単純にgo getやgo installをしてもライブラリ取得関連でコケてしまいビルドが通りません。
GitHubのissueとその返答そのままですが、うまくビルドして利用できたので備忘録としておいておきます。
あとビルド済みバイナリ(アーキテクチャ明記)も置いておきます。(linux/386, linux/amd64, linux/arm64, linux/arm)
(コードでimportのpathを元ソースから一切変えていないので、go installは効かないかと思います。)
結論
- リポジトリをcloneする
-
api/common/panic_logger.go
で2重定義の関数を片方消す
説明
1は置いといて、2の2重定義に関してです。
このissueに書いてあることそのままですが、まず、普通にgit cloneしてビルドすると、
$ go build
# github.com/kahing/goofys/api/common
api/common/panic_logger.go:69:27: method FusePanicLogger.BatchForget already declared at api/common/panic_logger.go:41:27
https://github.com/kahing/goofys/issues/754
といった感じでBatchForgetがすでに定義されている、と出てきます。
issueの返信に従って、2回目のBatchForget関数(panic_logger.goの69~72行目)をコメントアウト or 削除します。
これでgo buildが通り、arm64でも動作できるようになります。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
$ uname -p
aarch64
$ go build
$ ls ./goofys
./goofys
$ ./goofys -h
Error: goofys takes exactly two arguments.
NAME:
goofys - Mount an S3 bucket locally
(以下略)
これでビルドしたバイナリで実際にARM64なOracleCloudのA1インスタンスでマウントに成功しています。
お困りの方の参考になれば幸いです。
(goofysの元リポジトリへ同様の内容のPRが複数飛んでいるのですが、マージされてませんね。)