2017年3月5日日曜日

【悲報】Atomのビルドができない

なんだか最近悲報ばかりですが勘弁してください。
個人用のGentooリポジトリAtomのパッケージを入れているのですが、しばらく更新をサボっている間にバージョンが1.10.2から1.14.4まで上がっていました。

ビルド方法が変わったらしく、これまでのパッケージそのままでは使えなかったのでいろいろ試行錯誤しました。その奮闘記です。


まずはビルドを。

まずは1.14.4のドキュメントにしたがってビルドを試してみました。

$ git clone https://github.com/atom/atom.git
...(略)...

$ cd atom
$ git checkout v1.14.4
$ ./script/build
Node: v6.9.4
Npm: v3.10.5
Installing script dependencies
...(略)...
module.exports = new Proxy({}, {
                     ^

ReferenceError: Proxy is not defined
なんやて工藤

レッツ調査。

エラーメッセージで検索してみると、どうやらProxyはNode.jsのバジョン6で登場した機能らしい。
でも上のログを見てわかるとおり、Nodeのバージョンは6.9.4だから問題ないはず。

ここから数時間にわたる地道な調査を続けましたが、どういう調査をしたのかはだいたい忘れたので結論だけ書くと
  • 上記のエラーはfs-plus内で起きていた
  • エラーが起きた時のNodeは、システムにインストールされている6.9.4ではなくapmの4.4.5を使っていた
つまり勝手にバージョン4.4.5でProxyを使ったソースを実行していたので「そんなの知らないよ」というエラーが起きていたようです。

解決方法は?

無事原因はわかったのですが、さてどうやって解決しましょう。
どうしてもソースに手を加える必要がありそうですが、正直あまりあちこちにパッチを当てたくはありません。

いろいろ試して気づいたのは、Atomの最新ブランチなら問題なくビルドできるということ。
そこで最新ブランチと1.14.4の差分を調べたところ、1.14.4で使っているapmのバージョンは1.15.3ですが、最新ブランチでは1.16.0だったことがわかりました。そして1.16.0ではちゃんとNodeのバージョン6系を使っていまいた。

えーっと、つまり…

atom@1.14.4でもapm@1.16.0をインストールすればいいんじゃね?

というわけで依存パッケージのバージョンを変更するパッチを書くと無事ビルドできました!

そして今。

あらためてこの記事を書くためにもう一度ビルドしてみると。

なんと。

パッチも何も当てずにあっさりビルド成功!

( ゚д゚)?

調べてみると、fs-plusの問題だった場所が元に戻っていました

今までの苦労は何だったんだ…

ところで。


インストール方法も変わって、
$ ./script/build --install
を実行すると /usr/local 以下にインストールしてくれるようになったわけですが、このインストール先を変更できないんですよね。

Gentooのebuildではサンドボックス外への書き込みができないので、そのまま実行するとエラーが起きてしまいます。

仕方ないので地道に insinto とか doins でインストールすることにしました。

0 件のコメント:

コメントを投稿