2017の5日目の記事です。Firefoxのビルドには、Rustプログラミング言語のコンパイラーであるrustcと、パッケージ管理プログラムのcargoが必要となっている。7向けのブートストラップキットはビルドしてくれている。FirefoxをNetBSD/i386でビルドできない。公開しているが、信頼できるか分からない人の作ったコンパイラーなど使うべきではない。ここにブートストラップキットの作り方を書いておくので、自分のためのブートストラップキットを作って使って欲しい。RustのアップストリームにどうやってNetBSD/i386用をビルドしてもらうように交渉すれば良いのか...。7.0以降の環境を用意する。Rustのアップストリームのビルドしているブートストラップキットが動けばNetBSD/amd64のバージョンは問わない。7.1の環境があったので、それを使用することにした。ところで、原理的にはNetBSD/amd64である必要もない。ある程度POSIX準拠なオペレーティングシステムで、Rustがサポートしブートストラップキットを提供しているアーキテクチャーであれば良い。次に説明するNetBSD/i386のクロスツールチェインはそこでビルドできるはずである。7用のクロスツールチェインとユーザーランドをビルドするNetBSDはクロスツールチェインを簡単に生成でき、クロスコンパイルをする準備が簡単にできるのが良い所である。以下のように実行してクロスコンパイラーなどのツールチェインを作成する。これは、NetBSD/i386のユーザーランドをビルドするのに使用するだけでなく、Rustブートストラップキットをビルドするのにも使用する。ここで、/usr/srcにnetbsd-7のツリーを用意してあるとする。それを使って/usr/world/7/i386/destdir以下にユーザーランドがビルドされインストールされた。Rustのブートストラップメカニズムはそのようなコマンドライン引数を与えてgcc/g++を呼び出してはくれない。必要なコマンドライン引数をあらかじめ指定したシェルスクリプトを用意し、それをクロスコンパイラーの代わりに使用することにする。以下のようにi486--netbsdelf-g++-sysrootとi486--netbsdelf-gcc-sysrootを用意しておく。referenceにならないために必要だったはずである。ライブラリーが必要になる。llvm関係はRustのソースコードに含まれているので、それ以外を/usr/world/7/i386/destdirにインストールしておく。NetBSD/amd64では、NetBSD/i386のバイナリーを実行できるので、ここではchroot(8)コマンドを使って、ライブラリーを準備してしまった。これは安直な方法なので、例えば今後NetBSD/earm向けのRustブートストラップキットを作ろうと言う場合には、この方法は採用できない。必要なライブラリーをクロスビルドして配置するか、NetBSD/earmでビルドとインストールしたユーザーランドをコピーして来る必要があるだろう。手作業でlibhttp_parser.aをビルドし、/usr/libに配置する。合わせて、http_parser.hを/usr/includeに配置する。/usr/pkg以下にあってはビルドに失敗した。面倒だったので/usr以下に配置したが、本来であればRustで書かれたRustのビルドメカニズムを修正すべきであろう。7用のrustcやcargoをビルドしていくのである。必要とするライブラリー等が用意されている必要がある。以下のように実行すれば、/usr/pkg以下にインストールされる。ninjaもインストールしてしまおう。ninjaは、lllvmの部分をパラレルビルドするのに必要となる。installRustブートストラップキットを展開する基本的には、一つ前のリリースのブートストラップキットを使って、最新のリリースのブートストラップキットを作るのだと思う。7でビルドしようとしているので、1.21.0のブートストラップキットを作ることになる。その1.21.0のブートストラップキットをビルドするために使用するRustアップストリームのブートストラップキットは、1.20.0となる。以下のように展開しておく。rust-std-1.20.0-x86_64-unknown-netbsdNetBSD/i386のためのパッチを適用するNetBSD/i386のRustブートストラップキットをビルドするのに必要なパッチを適用する。そのパッチは以下のようである。7で動くllvmのバイナリーを得るには、以下のパッチが必要であった。8以降では不要らしい。")config.tomlにビルド条件を設定する以下のようにi686-unknown-netbsdブートストラップキットを作ること、その他のコマンドのパス等々を設定する。trueRustブートストラップキットをビルドするここまで来れば、後は実行してしばらく待つだけである。私のところのマシンでは正確には把握していないが数時間は必要だった。以下のように実行すれば良い。distエラーなく完了したら、以下のようにブートストラップキットができているはずである。build/dist(snip)build/dist/rust-1.19.0-i686-unknown-netbsd.tar.gz(snip)build/dist/rust-std-1.19.0-i686-unknown-netbsd.tar.gz(snip)これをDISTDIRに置いて、pkgsrc/lang/rustをNetBSD/i386でビルドするのに使えば良い。(Atom)PEMファイルの中身をダンプするPEM形式のファイルの中身を確認するには、以下のようにすれば良い。ExcelからVBAでアクセスしたい。個々の端末にODBCデータソースを設定するのはスクリプトで可能かもしれないが、面倒なのでADOとOLEDBの組み合わせでアクセスすることを考えている。