7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cross で Rust のクロスコンパイル

Posted at

Rust のクロスコンパイルツール cross を使って Linux で windows 向けにクロスコンパイルする。
Docker関連でエラーがでたので対処法。

環境

Docker version 19.03.4-ce, build 9013bf583a
cross 0.1.16
cargo 1.37.0 (9edd08916 2019-08-02)
Arch Linux

やったこと

$ cargo install cross
$ sudo systemctl start docker
$ cross build --release --target x86_64-pc-windows-gnu

エラー

Dockerのバージョンが取得できないようです。

thread 'main' panicked at 'Unable to obtain Docker version: Error(Msg("`\"docker\" \"version\" \"--format={{.Server.APIVersion}}\"` failed with exit code: Some(1)"), State { next_error: None, backtrace: InternalBacktrace { backtrace: None } })', src/libcore/result.rs:999:5
 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

issueがあがっていました。
といってもバグではありません。
https://github.com/rust-embedded/cross/issues/185
単にroot権限がないから実行できないようです。
Linux の場合、 Docker コマンドを実行するには root 権限が必要であるために発生しています。
( rootless docker がすでにリリースされているようなので、今後はセキュリティ的にもそちらを使うほうがいいみたいです。)

こうする

cross を実行するユーザーが root 権限なしで docker コマンドを実行できるようにすればよいようです。
Docker のドキュメントに従います。
Manage Docker as a non-root user

# docker ユーザーがない場合はつくる
$ sudo groupadd docker

# docker グループにログインユーザーを追加する
$ sudo usermod -aG docker $USER

# 設定を有効化する
$ newgrp docker 

これで問題なくビルドすることができ、windows での動作も確認できました。

参考

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?