背景
azureのファイルコピーコマンドazcopyを32bitのRaspberry Pi OSで動かそうとしたら戸惑ったので、実行までの手順を記事に残します。arm 32bit向けの実行ファイルは配布されていないものの、ソースコードをビルドしたら動かせる
記事を書いている時点では、azcopyの説明ページでarm 32bit向けの実行ファイルは配布されていません。しかしながら、ソースコードは公開されています。
Azure/azure-storage-azcopy
このコードはgoで書かれているため、arm 32bit OS向けにビルドしたらRaspberry Pi OS 32bitで動く実行ファイルを作れます。
Raspberry Pi OS 32bitでビルドして実行
go lang 1.6以上が必要
azure-storage-copyが扱うライブラリは1.16から追加された機能を含んでいるため1.15.15では「package embed is not in GOROOT」というエラーが出てしまいます。参考: Install fails ('package embed is not in GOROOT')
自分が試したRaspberry Pi OS Liteのaptでインストールできるgoは1.15.15でした。
apt-cacheコマンドでaptでインストール可能なプログラムのバージョンを確認できます。
apt-cache show golang
Package: golang
Source: golang-defaults
Version: 2:1.15~1
Architecture: armhf
apt版が使えたら楽だったのですが対応していないので、goのダウンロードサイトから1.16以上のgoをダウンロードしてインストールします。
既にapt installしている場合は削除が厄介
aptでインストールしたgolangはapt purgeしてもなぜかプログラムが残ります。which go
/usr/bin/go
ls -la `which go`
lrwxrwxrwx 1 root root 21 Sep 16 2020 /usr/bin/go -> ../lib/go-1.15/bin/go
パスの扱いが面倒なので、この記事ではaptに頼らずインストールしたgoをフルパスで呼び出して使います。
go langをaptに頼らずインストール
記事を書いている時点のgoの最新版は1.20.4だったので下記の流れでインストールしました。下記のコマンドではエラーが出たりバージョンが古かったりして不十分な場合は公式のインストールページと最新版一覧を参考にしてください。
mkdir -p ~/Downloads
cd ~/Downloads
wget https://go.dev/dl/go1.20.4.linux-armv6l.tar.gz
rm -rf /usr/local/go # 過去にgoをインストールしてなければ削除対象が無くてエラーになります
tar -C /usr/local -xzf go1.20.4.linux-armv6l.tar.gz
上記のコマンドでインストールしたらgoを下記のように呼べます。
/usr/local/go/bin/go version
go version go1.20.4 linux/arm
ソースコードをcloneしてビルドして実行
raspberry pi os上でのビルドとazure-storage-copy(azcopy)のhelpの実行例の例です。この例ではgitprojectsというフォルダをホームフォルダ作り、その中にリポジトリをcloneして、aptに頼らずインストールしたgoを絶対パスで読んでビルドしています。
sudo apt install -y git
mkdir -p gitprojects
cd ~/gitprojects
git clone https://github.com/Azure/azure-storage-azcopy.git
cd azure-storage-azcopy
/usr/local/go/bin/go build
./azure-storage-azcopy --help
azcopyをazure-storage-copyとして実行できました。
~/gitprojects/azure-storage-azcopy/azure-storage-azcopy -v
azcopy version 10.19.0
arm 32bit向けにクロスビルド
goはビルドしている環境とは異るOS向けのクロスビルドが可能なので、下記のようにarm32bit linux環境を指定してビルドしたファイルをRaspberry Pi OS 32bitに送って使うのも一手です。Linuxやmacの場合
cd [azure-storeage-copyのリポジトリのフォルダ]
GOOS=linux GOARCH=arm go build
Windowsの場合
cd [azure-storeage-copyのリポジトリのフォルダ]
set GOOS=linux
set GOARCH=arm
go build
上記のコマンドでビルドしたazure-storeage-copyをRaspberry Pi OS 32bitに送れば実行できます。
おわり
azcopyのarm 32bit版が配布されていなくて戸惑いましたが、環境を整えてビルドすればRaspberry Pi OS 32bit版で動くazure-storage-copyを得られました。参考
azcopyの説明ページAzure/azure-storage-azcopy
go公式のインストール解説ページ
0 件のコメント :
コメントを投稿