Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rustbookのインストール方法を調べる #9

Closed
KeenS opened this issue Jan 26, 2016 · 14 comments
Closed

rustbookのインストール方法を調べる #9

KeenS opened this issue Jan 26, 2016 · 14 comments
Assignees
Milestone

Comments

@KeenS
Copy link
Member

KeenS commented Jan 26, 2016

#7 #8 でも必要になる。

@lefb766
Copy link

lefb766 commented Jan 26, 2016

https://crates.io/crates/rustbook/
があるようですけど、#[feature]をstableで使うなって怒られますね。
cargo installでもリポジトリから落としてきても同様。

@KeenS
Copy link
Member Author

KeenS commented Jan 26, 2016

あー、なるほど。他のレポジトリでわざわざnightlyのrustからrustbookを使っていたのですがその理由が分かりました。

@KeenS
Copy link
Member Author

KeenS commented Jan 26, 2016

メモ: ソースからビルドしたら「そのディレクトリ内では」rustbookコマンドが使える。他のディレクトリからも使う方法が謎のまま

@KeenS
Copy link
Member Author

KeenS commented Jan 26, 2016

メモ: インストール方法は載っていないがmultirust経由で使っている形跡がある。

https://github.com/goyox86/elpr-sources/blob/gh-pages/Rakefile#L10

@KeenS
Copy link
Member Author

KeenS commented Mar 26, 2016

メモ
ローカル環境でmultirust+rustbookでRust日本語ドキュメントをビルドする - Qiita
http://qiita.com/hhatto/items/66073c1a87cc4ff038f8

@tatsuya6502 tatsuya6502 mentioned this issue Apr 29, 2016
Closed
6 tasks
@tatsuya6502
Copy link
Member

rustbook の入った Docker イメージを作りました。
https://quay.io/repository/tatsuya6502/rustbook

使い方(Linux)

$ cd $YOUR_WORK_DIR
$ git clone [email protected]:rust-lang-ja/the-rust-programming-language-ja.git

$ docker pull quay.io/tatsuya6502/rustbook
$ docker run -it \
    -v $YOUR_WORK_DIR/the-rust-programming-language-ja:/root/the-rust-programming-language-ja \
    quay.io/tatsuya6502/rustbook

コンテナの中で rustbook を実行。(この例では Makefile の中から呼ばれている)

# cd ~/the-rust-programming-language-ja/
# make

Dockerfile
https://github.com/tatsuya6502/docker-rustbook/blob/master/docker/Dockerfile

いまのところベースイメージは debian:jessie で、ターゲットは x86_64-unknown-linux-gnu です。Rust の librustdoc に依存しているので、rustbook バイナリだけを他の環境にコピーしても動きません。(詳しくは次のコメントに書きます)

@tatsuya6502
Copy link
Member

tatsuya6502 commented Apr 29, 2016

(長文ですが、単に「できなかった」ということを書いているだけです。まあ、なにかの参考になれば)

rustbook は、いまのところ、musl libc ベースの スタティックリンク・ビルド はできないようです。これができると、アーキテクチャ(Linux x86_64)さえ一致していれば、どの環境に rustbook をコピーしても動くので、嬉しいのですが。

rustbook を --target x86_64-unknown-linux-musl でビルドしようとしても、このターゲットには、librustdoc が無いので、「crate rustdoc が見つからない」というエラーになってしまいます。

準備

$ docker run -it --rm debian:jessie /bin/bash
# apt-get update
# apt-get install -y curl file gcc git sudo
# curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh | sh
# multirust update nightly
# multirust list-available-targets nightly
...
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
...
# multirust add-target nightly x86_64-unknown-linux-musl

# cd
# git clone https://github.com/steveklabnik/rustbook.git
# cd rustbook
# multirust override nightly

musl libc ターゲットではビルドできません。

# cargo build --release --target x86_64-unknown-linux-musl
   Compiling rustbook v0.4.0 (file:///root/rustbook)
src/main.rs:17:1: 17:22 error: can't find crate for `rustdoc` [E0463]
src/main.rs:17 extern crate rustdoc;
               ^~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
error: Could not compile `rustbook`.

To learn more, run the command again with --verbose.

glibc ターゲットならビルドできます。

# cargo build --release --target x86_64-unknown-linux-gnu
   Compiling rustbook v0.4.0 (file:///root/rustbook)
# ls -l target/x86_64-unknown-linux-gnu/release/rustbook
-rwxr-xr-x. 1 root root 133448 Apr 29 07:21 target/x86_64-unknown-linux-gnu/release/rustbook

musl ターゲットには librustdoc が無いのが原因のようです。

# cd ~/.multirust/toolchains/nightly/lib/rustlib/
# ls -l x86_64-unknown-linux-musl/lib/librustdoc*
ls: cannot access x86_64-unknown-linux-musl/lib/librustdoc*: No such file or directory
# ls -l x86_64-unknown-linux-gnu/lib/librustdoc*
-rw-r--r--. 1 root root 4059272 Apr 29 07:19 x86_64-unknown-linux-gnu/lib/librustdoc-cb705824.so

Rust のソースから、librustdoc だけを抜き出してビルドできるかも一応見てみました。が、Cargo.toml の dependencies には、libarena とか librustc_driver とか、musl ターゲットに無いものばかりが並んでおり、これも無理そうです。

さらに、ターゲットでなく、ホストが変えられないかと、glibc の無い Alpine Linux で Rust 自体(と librustdoc)のビルドができないかも調べてみましたが、いまのところ難しそうです。以下のコメントによると、Rust の stage 0 コンパイラが、glibc とリンクされているので、Alpine 上では Rust がビルドできなかったそうです。

andrew-d/docker-rust-musl#7 (comment)

つまり、ターゲットは x86_64-unknown-linux-musl と指定できても、ホストは x86_64-unknown-linux-gnu から変えられないようです。そして、ホスト以外のターゲットには、librustdoc その他が作られない、ということのようです。

@tatsuya6502 tatsuya6502 added this to the 1.9 milestone Jun 4, 2016
@tatsuya6502 tatsuya6502 self-assigned this Jun 4, 2016
@tatsuya6502
Copy link
Member

rustbook のインストール方法は一通りわかったので、Wikiの方にまとめようとしています。

まだ書きかけなので。完成したら、本件はクローズします。

@tatsuya6502
Copy link
Member

tatsuya6502 commented Jun 18, 2016

お知らせ

rustbook ですが、crates.io の rustbook は、今後、もう更新されなさそうな雰囲気です。現在執筆中の 新しい TRPL が、Rust by Example と同様に mdbook を使っており、rustbook は 今後消えていく運命 だそうです。rustbook クレートに対して、いままで2回 PR を送ってますが、対応はよくないです。

とはいえ、rustbook も、まだしばらく、あるいは、今後もずっと必要でしょう。crates.io に上がっているものは、すでにコンパイルエラーでビルドできず、また、Rustコードサンプルの「Run」ボタンが表示されない問題 がありますので、このプロジェクトでは、私の fork を使っていこうと思います。 https://github.com/tatsuya6502/rustbook  なお CI では、最初から私の fork を使ってます。

rustbook がしばらく必要な理由ですが、まず、新しい TRPL が完成するまでは、かなりの時間がかかりそうなことがあります。また、rustbook を使っている他の公式ドキュメント The RustnomiconThe Style Guideline は、このまま放置されそうな雰囲気です。他にも、個人的に翻訳したいと思ってるものの中に、Learning Rust With Entirely Too Many Linked Lists のように、rustbook を使っているものもあります。新しい TRPL を除いて、これらの既存の文書が、mdbook か他の何かに移行されるとも思えません。

@tatsuya6502
Copy link
Member

私の fork を使っていこうと思います。 https://github.com/tatsuya6502/rustbook

この fork ですが、rust-lang-ja organization に持ってこようと思います。(さらに fork するか、所有者変更します)

@tatsuya6502
Copy link
Member

この fork ですが、rust-lang-ja organization に持ってこようと思います。(さらに fork するか、所有者変更します)

所有者変更しました: https://github.com/rust-lang-ja/rustbook

@tatsuya6502
Copy link
Member

https://github.com/rust-lang-ja/rustbook

CircleCI を設定し、また、master ブランチを最新の状態にしました。フォーク元より、コミットが先に進んだ状態です。今後、フォーク元のことは考えず、こちらのリポジトリだけメンテナンスしていきます。

@tatsuya6502
Copy link
Member

#9 (comment)

rustbook のインストール方法は一通りわかったので、Wikiの方にまとめようとしています。

こちら、完成しました。本件は対応完了ということでクローズします。

@KeenS
Copy link
Member Author

KeenS commented Jun 18, 2016

色々ありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants