Edited at

Linuxbrew の自動的なインストールスクリプトが異常終了する場合における代替の導入手法


はじめに

Linuxbrew とは、 Mac OS X 上における、ソースコードの取得及びビルドに基づいたパッケージ管理システムである Homebrew を Linux の各ディストリビューション向けに移植したものです。

Linuxbrew の使用により、 Linux の各ディストリビューションにおいて、ソースコードからのビルドに基づいたソフトウェアの導入を単純かつ容易に行うことが出来ます。

しかし、 64 bit ARM アーキテクチャ等の環境で動作する Linux の各ディストリビューションにおいて、 Linuxbrew 公式ページが公開している Linuxbrew を自動的にインストールするためのスクリプトを起動すると、以下のようなエラーメッセージを出力してスクリプトが異常終了します。

  $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"

...
Error: Cannot find a vendored version of ruby for your aarch64
processor on Linuxbrew!
Error: Failed to install vendor Ruby.
$

これは、自動的なインストールスクリプトの実行の過程において、 Linuxbrew 本体が使用する ruby 処理系をインストールするための brew コマンドが実行され、この時に、 brew コマンドによって自動検出されたアーキテクチャに対応した ruby 処理系の bottle ファイルの取得が正常に行われないことが異常終了の原因と考えられます。

また、この問題を回避するには、 Linuxbrew 本体のリポジトリの取得を手動に基づいた手法により行った後、 ruby 処理系のバージョン 2.3.7 を Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリに手動でインストールすれば良いことが判ります。

そこで、Linuxbrew を自動的にインストールするためのスクリプトに基づいた Linuxbrew の導入が異常終了した場合に、 Linuxbrew 本体のリポジトリの取得を手動に基づいた手法によって行いました。

そして、 64 bit ARM アーキテクチャ上における環境では、手動で 32 bit ARM アーキテクチャに対応した ruby 処理系の bottle ファイルを取得し、 Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリに展開することにより、正常な Linuxbrew の導入が確認されました。

また、その他の環境では、 ruby 処理系のバージョン 2.3.7 をソースコードから手動でビルドして Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリにインストールする事によって、同様に正常な Linuxbrew の導入が確認されました。

そして、以上の手動による導入手法を踏まえて Linuxbrew の開発コミュニティによる Linuxbrew の自動的なインストールスクリプトに修正を加えた上で実行したところ、手動による導入手法と同じく正常に Linuxbrew が導入されることが示されました。

本稿では、 Linux の各ディストリビューションにおいて、 Linuxbrew の自動的なインストールスクリプトに基づいて Linuxbrew を導入した際に、 Linuxbrew 本体への ruby の導入の失敗に起因して異常終了する場合において、 Linuxbrew のインストールスクリプトによる導入に代わる Linuxbrew の導入手法について述べます。

本稿では、最初に、 "Linuxbrew の自動的なインストールスクリプトが異常終了する原因" の章において、 Linuxbrew の公式ページで示された Linuxbrew の自動的なインストールスクリプトが正常に動作しない原因について述べます。

次に、 "手動による Linuxbrew の導入手法" の章において、 64 bit ARM アーキテクチャ及びその他の環境のそれぞれの場合において、 手動による作業に基づいた Linuxbrew の導入手法について述べます。

そして、 "自動による Linuxbrew の導入手法" の章において、前章で述べた手法を踏まえて、 Linuxbrew の自動的なインストールスクリプトに修正を加えて代替のインストールスクリプトを作成し、 64 bit x86 アーキテクチャ及び32 bit x86 アーキテクチャ以外の環境において、代替のインストールスクリプトの実行に基づく Linuxbrew の導入手法について述べます。

最後に、"結論" の章において、本稿の結論について述べます。

なお、本稿においては、特段の断りがない限り、 Linuxbrew を導入する Linux ディストリビューションは Debian 系のディストリビューションとし、また、 Linuxbrew の導入先となるホームディレクトリを /home/linuxbrew として、 Linuxbrew 本体のリポジトリは /home/linuxbrew/.linuxbrew に置かれるものとします。

また、 Linuxbrew を導入するにあたって、 Linuxbrew に依存するパッケージは以下のコマンドによって既に導入済みであり、これらのパッケージに加えて、各種ファイルをダウンロードするためのパッケージである wget も既に導入されているものとして本稿を記述します。

 $ sudo apt-get install build-essential curl file git python-setuptools ruby

$ sudo apt-get install wget

また、本稿においては、 Linuxbrew に関する各種用語等の詳細に関しては、具体的な説明を割愛致します。 Linuxbrew に関する詳細については、 Linuxbrew の公式ページ 及び Linuxbrew 本体のリポジトリに同梱する各種ドキュメントを参照して下さい。


Linuxbrew の自動的なインストールスクリプトが異常終了する原因

本章では、 Linuxbrew の公式ページで示された Linuxbrew の自動的なインストールスクリプトが正常に動作しない原因の概要について述べます。

まず、前述した Linuxbrew のインストールスクリプトのエラーメッセージである "Error: Cannot find a vendored version of ruby for your ..."Linuxbrew 本体のリポジトリ内で検索すると、シェルスクリプト /home/linuxbrew/.linuxbrew/Library/Homebrew/cmd/vendor-install.sh (以下、 vendor-install.sh と表記) の実行時においてそのメッセージが表示されることが判ります。

シェルスクリプト vendor-install.sh は、コマンド brew vendor-install の実体となるスクリプトであり、インストールスクリプトが出力したエラーメッセージの内容と、シェルスクリプト vendor-install.sh 内の関数 homebrew-vendor-install() におけるエラーメッセージを出力する以下の記述より、環境変数 VENDOR_NAME の値は "ruby" であることが判ります。

そして、この時 Linuxbrew のインストールスクリプトは、コマンド brew vendor-install ruby を呼び出していることも同時に判ります。


vendor-install.sh

...

if [[ -z "$VENDOR_URL" || -z "$VENDOR_SHA" ]]
then
odie <<-EOS
Cannot find a vendored version of
$VENDOR_NAME for your $HOMEBREW_PROCESSOR
processor on
$HOMEBREW_PRODUCT!
EOS
fi
...

また、関数 homebrew-vendor-install() における環境変数 VENDOR_URL, VENDOR_URL2, VENDOR_SHA の値を設定する以下の記述より、環境変数 VENDOR_URL, VENDOR_URL2, VENDOR_SHA の値は、それぞれ環境変数 ruby_URL, ruby_URL2, ruby_SHA の値を取ることが判ります。


vendor-install.sh

...

url_var="${VENDOR_NAME}_URL"
url2_var="${VENDOR_NAME}_URL2"
sha_var="${VENDOR_NAME}_SHA"
VENDOR_URL="${!url_var}"
VENDOR_URL2="${!url2_var}"
VENDOR_SHA="${!sha_var}"
...

ここで、スクリプト vendor-install.sh における環境変数 ruby_URL, ruby_URL2, ruby_SHA の値を設定する記述は以下のようになっています。


vedor-install.sh

...

VENDOR_DIR="$HOMEBREW_LIBRARY/Homebrew/vendor"

# Built from https://github.com/Homebrew/homebrew-portable-ruby.
#
# Dynamic variables can't be detected by shellcheck
# shellcheck disable=SC2034
if [[ -n "$HOMEBREW_MACOS" ]]
then
if
[[ "$HOMEBREW_PROCESSOR" = "Intel" ]]
then
ruby_URL="$HOMEBREW_BOTTLE_DOMAIN/bottles-portable-ruby/portable-ruby-2.3.7.leopard_64.bottle.tar.gz"
ruby_URL2="https://github.com/Homebrew/homebrew-portable-ruby/releases/download/2.3.7/portable-ruby-2.3.7.leopard_64.bottle.tar.gz"
ruby_SHA="033ac518bb14abdb1bb47d968dc9e967c3ae2035499383a21a79b49d523065d1"
fi
elif
[[ -n "$HOMEBREW_LINUX" ]]
then
case
"$HOMEBREW_PROCESSOR" in
x86_64)
ruby_URL="$HOMEBREW_BOTTLE_DOMAIN/bottles-portable-ruby/portable-ruby-2.3.7.x86_64_linux.bottle.tar.gz"
ruby_URL2="https://github.com/Homebrew/homebrew-portable-ruby/releases/download/2.3.7/portable-ruby-2.3.7.x86_64_linux.bottle.tar.gz"
ruby_SHA="9df214085a0e566a580eea3dd9eab14a2a94930ff74fbf97fb1284e905c8921d"
;;
armv[67]*)
ruby_URL="$HOMEBREW_BOTTLE_DOMAIN/bottles-portable-ruby/portable-ruby-2.3.7.armv6_linux.bottle.tar.gz"
ruby_URL2="https://github.com/Homebrew/homebrew-portable-ruby/releases/download/2.3.7/portable-ruby-2.3.7.armv6_linux.bottle.tar.gz"
ruby_SHA="17dce8965d7c935ec1dd0c5bb0be937b685ffe65529141d9e6ed78f4925b4570"
;;
esac
fi
...


ここに、環境変数 HOMEBREW_PROCESSOR の値は brew コマンドによって設定されるアーキテクチャを表す文字列であり、コマンド uname -m が出力する文字列が代入されています。

このことと、上記のスクリプトの記述より、 brew コマンドによって検出されたアーキテクチャを表す文字列である環境変数 HOMEBREW_PROCESSOR の値が "armv6l, armv7l" 若しくは "x86_64" の何れでもない場合は、環境変数 ruby_URL, ruby_URL2, ruby_SHA の内容は空文字列となることが判ります。

また、スクリプト vendor-install.sh の環境変数 VENDOR_DIR を設定する記述スクリプト vendor-install.sh 内の関数 install() の記述より、 Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリは、 /homee/linuxbrew/.linuxbrew/Library/Homebrew/vendor であることも判ります。

以上のことと、前述した関数 homebrew-vendor-install() の環境変数 VENDOR_URL, VENDOR_URL2, VENDOR_SHA の値によってエラーメッセージを出力する記述の内容から、環境変数 HOMEBREW_PROCESSOR の値が "armv6l, armv7l" 及び "x86_64" 以外の値を取る場合、コマンド brew vendor-install ruby 及びそれを呼び出す Linuxbrew のインストールスクリプトは、エラーメッセージを出力して異常終了することが判ります。


手動による Linuxbrew の導入手法

本章では、 Linuxbrew の自動的なインストールスクリプトが正常に動作しない場合における手動による作業に基づいた Linuxbrew の導入手法について述べます。

まず最初に、 "64 bit ARM アーキテクチャの環境に導入する場合" の節において、 64 bit ARM アーキテクチャの環境にて、 32 bit ARM アーキテクチャ に対応する ruby 処理系の bottle ファイルの取得と展開による手法に基づいた Linuxbrew の導入手法について述べます。

最後に、 "64 bit ARM アーキテクチャ以外の環境に導入する場合" の節において、64 bit ARM アーキテクチャ以外のその他の環境にて、 ruby 処理系のバージョン 2.3.7 のソースコードを手動にてビルドし、Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリにインストールする手法に基づいた Linuxbrew の導入手法について述べます。


64 bit ARM アーキテクチャの環境に導入する場合

本節では、64 bit ARM アーキテクチャの環境における手動による Linuxbrew の導入手法について述べます。

64 bit ARM アーキテクチャは、32 bit ARM アーキテクチャとプログラム実行用のバイナリコードにおいて互換性があるため、64 bit ARM アーキテクチャの環境においては、32 bit ARM アーキテクチャの環境に対応した bottle ファイルをそのまま導入作業において使用することが出来ます。

そこで、 32 bit ARM アーキテクチャに対応した ruby 処理系の bottle ファイルを手動によって取得し、 Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリに展開することにより、 Linuxbrew の導入作業を行います。

まず最初に、各種 brew コマンドの実行等を可能にするために、下記の通りに bash の初期化ファイル ${HOME}/.bashrc に追記を行い、 bash の再起動を行います。


${HOME}/.bashrc

...

export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" # Linuxbrew の本体のリポジトリが存在するディレクトリ。
export PATH="${HOMEBREW_PREFIX}/sbin:${HOMEBREW_PREFIX}/bin:$PATH" # 環境変数 PATH にディレクトリ ${HOMEBREW_PREFIX}/sbin 及び ${HOMEBREW_PREFIX}/bin を追記。
export MANPATH="${HOMEBREW_PREFIX}/share/man:${MANPATH}" # 環境変数 MANPATH, INFOPATH についても同様。
export INFOPATH="${HOMEBREW_PREFIX}/share/info:${INFOPATH}"
...

次に、 Linuxbrew の公式ページの "Alternative Installation" の記述に従って、 Linuxbrew の導入先となるディレクトリにカレントディレクトリを移動し、 git clone コマンドを用いて Linuxbrew 本体のリポジトリを取得します。ここで、 Linuxbrew 本体のリポジトリの展開先のディレクトリ名は .linuxbrew としておきます。

  $ cd /home/linuxbrew

$ git clone https://github.com/Linuxbrew/brew.git .linuxbrew

続いて、 Linuxbrew がソースコード及びバイナリコードのアーカイブファイル等のキャッシュとして用いるディレクトリである $HOME/.cache/Homebrew を作成した上で、そのディレクトリにカレントディレクトリを移動します。

そして、 Linuxbrew が使用する ruby 処理系の bottle ファイルである portable-ruby-2.3.7.armv6l_linux.bottle.1.tar.gz を以下に示す URL から wget コマンドを用いて取得します。

  $ mkdir -p ~/.cache/Homebrew

$ cd ~/.cache/Homebrew
$ wget https://homebrew.bintray.com/bottles-portable/portable-ruby-2.3.7.armv6l_linux.bottle.1.tar.gz

次に、 ## 2018/06/08 現在の追記とお断り

Linuxbrew自動的にインストールするための代替となるスクリプトの更新と、代替スクリプトの実行手法の変更に伴い、本稿を改稿致しました。どうか御了承下さい。

のインストール先となるディレクトリである /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor にカレントディレクトリを移動し、 bottle ファイル portable-ruby-2.3.7.armv6l_linux.bottle.1.tar.gztar コマンドを用いて展開します。

そして、ディレクトリ portable-ruby にカレントディレクトリを移動して、ディレクトリ 2.3.7 に向けてシンボリックリンク current を作成します。

  $ cd /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor

$ tar -zxvf ~/.cache/Homebrew/portable-ruby-2.3.7.armv6l_linux.bottle.1.tar.gz
$ cd portable-ruby
$ ln -sf 2.3.7 current

最後に、 brew update --force コマンドによって、 core tap である homebrew/coreLinuxbrew に導入した後、 Linuxbrew の診断コマンドである brew doctor コマンドを実行します。

  $ brew update --force

$ brew doctor

brew doctor コマンドが正常に終了すれば、手動による Linuxbrew の導入が正常に完了したことが判ります。


64 bit ARM アーキテクチャ以外の環境に導入する場合

本節では、64 bit ARM アーキテクチャ以外のその他の環境における手動による Linuxbrew の導入手法について述べます。

この場合は、32 bit ARM アーキテクチャ及び64 bit x86 アーキテクチャ以外の環境に対応した ruby 処理系の bottle ファイルを取得することが出来ません。

そこで、 ruby 処理系のバージョン 2.3.7 のソースコードを手動でビルドして Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリにインストールする事によって、 Linuxbrew の導入作業を行います。

まず最初に、前節と同様に、各種 brew コマンドの実行等を可能にするために、下記の通りに bash の初期化ファイル ${HOME}/.bashrc に追記を行い、 bash の再起動を行います。


${HOME}/.bashrc

...

export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" # Linuxbrew の本体のリポジトリが存在するディレクトリ。
export PATH="${HOMEBREW_PREFIX}/sbin:${HOMEBREW_PREFIX}/bin:$PATH" # 環境変数 PATH にディレクトリ ${HOMEBREW_PREFIX}/sbin 及び ${HOMEBREW_PREFIX}/bin を追記。
export MANPATH="${HOMEBREW_PREFIX}/share/man:${MANPATH}" # 環境変数 MANPATH, INFOPATH についても同様。
export INFOPATH="${HOMEBREW_PREFIX}/share/info:${INFOPATH}"
...

次に、前節と同様にして、 Linuxbrew の公式ページの "Alternative Installation" の記述に従って、 Linuxbrew の導入先となるディレクトリにカレントディレクトリを移動し、 git clone コマンドを用いて Linuxbrew 本体のリポジトリを取得します。 Linuxbrew 本体のリポジトリの展開先のディレクトリ名は .linuxbrew とするのも前節と同様です。

  $ cd /home/linuxbrew

$ git clone https://github.com/Linuxbrew/brew.git .linuxbrew

続いて、前節と同様に、ディレクトリ $HOME/.cache/Homebrew を作成して、そのディレクトリにカレントディレクトリを移動します。

そして、 ruby 処理系のバージョン 2.3.7 のソースコードのアーカイブファイルである ruby-2.3.7.tar.gz を以下の URL より wget コマンドを用いて取得します。

  $ mkdir -p ~/.cache/Homebrew

$ cd ~/.cache/Homebrew
$ wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.7.tar.gz

次に、アーカイブファイル ruby-2.3.7.tar.gztar コマンドを用いて展開してディレクトリ ruby-2.3.7 にカレントディレクトリを移動します。

その後は、 ruby 2.3.7 の処理系のソースコードを ./configure && make && make install の実行に基づいてビルドし、ディレクトリ /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor/portable-ruby/2.3.7 以下にインストールします。

即ち、 ./configure スクリプトにオプション --prefix=/home/linuxbrew/.linuxbrew/Library/Homebrew/vendor/portable-ruby/2.3.7 をつけて実行した後、 make コマンド及び make install コマンドを実行します。

  $ tar -zxvf ruby-2.3.7.tar.gz

$ cd ruby-2.3.7
$ ./configure --prefix=/home/linuxbrew/.linuxbrew/Library/Homebrew/vendor/portable-ruby/2.3.7
$ make && make install

そして、前節と同様に、ディレクトリ portable-ruby にカレントディレクトリを移動して、ディレクトリ 2.3.7 に向けてシンボリックリンク current を作成します。

  $ cd /home/linuxbrew/.linuxbrew/Library/Homebrew/vendor/portable-ruby

$ ln -sf 2.3.7 current

最後に、前節と同様に brew update --force コマンドによって、 core tap である homebrew/core を Linuxbrew に導入した後、 Linuxbrew の診断コマンドである brew doctor コマンドを実行します。

  $ brew update --force

$ brew doctor

brew doctor コマンドが正常に終了すれば、手動による Linuxbrew の導入が正常に完了したことが判ります。


自動による Linuxbrew の導入手法

ここで、前章にて述べた手動による Linuxbrew の導入手法を踏まえ、 Linuxbrew の自動的なインストールスクリプトについて、 Linuxbrew の core tap を取得するプロセスの直前に Linuxbrew が使用する ruby 処理系をインストールする為のコードを追加する事により、自動的なインストールが異常終了することを回避したスクリプトを当方にて作成し、 github にて公開しました

本章では、 Linuxbrew で示された Linuxbrew の自動的なインストールスクリプトに代わるスクリプトを用いた Linuxbrew の導入手法について述べます。

通常のインストールスクリプトの代わりとなる自動的なインストールスクリプトは、 https://raw.githubusercontent.com/z80oolong/linuxbrew-altinstall/master/install.sh に置かれています (以下、代替スクリプトと記述)。

代替スクリプトの起動方法は、 Linuxbrew 公式ページによる Linuxbrew のインストールスクリプトの起動方法とほぼ同じですが、 ruby 処理系 をソースコードからインストールする場合に libssl-dev, readline, libyaml, libgdbm-dev, libdb-dev が必要となることから、予め代替スクリプトの起動前に、 Linuxbrew に依存するシステムのパッケージの他に、これらのパッケージをインストールする必要が有ります。

 $ sudo apt-get install libssl-dev libreadline6-dev libyaml-dev libgdbm-dev libdb-dev

次に、以下のコマンドを実行して Linuxbrew を導入します。

 $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/z80oolong/linuxbrew-altinstall/master/install.sh)"

$ brew doctor

最後の brew doctor コマンドが正常に終了すれば、手動による Linuxbrew の導入が正常に完了したことが判ります。


結論

本稿では、"Linuxbrew の自動的なインストールスクリプトが異常終了する原因" の章において、 Linuxbrew 本体のリポジトリを分析した結果、 Linuxbrew のインストールスクリプトの実行の過程において、 Linuxbrew 本体が使用する ruby 処理系をインストールするための brew vendor-install ruby コマンドが実行されることが判りました。

この時に、 brew コマンドによって検出されたアーキテクチャの文字列が "armv6l, armv7l" 及び "x86_64" 以外の値を取る場合に、 Linuxbrew で使用する ruby 処理系の bottle ファイルの取得が失敗する事が、 Linuxbrew の自動的なインストールスクリプトの実行が異常終了する原因であることが判りました。

そこで、前々章において、 Linuxbrew 本体のリポジトリの取得を手動に基づいた手法によって行った後、 64 bit ARM アーキテクチャ上における環境では、 32 bit ARM アーキテクチャに対応した ruby 処理系の bottle ファイルを手動で取得し、 Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリに展開することにより、正常な Linuxbrew の導入が確認されました。

また、その他の環境では、同様に Linuxbrew 本体のリポジトリの取得を手動に基づいた手法によって行い、 ruby 処理系のバージョン 2.3.7 をソースコードから手動でビルドして Linuxbrew が使用する ruby 処理系のインストール先となるディレクトリにインストールする事によって、正常な Linuxbrew の導入が確認されました。

そして、前章において、前々章での一連の導入作業を踏まえて、 Linuxbrew の開発コミュニティ による Linuxbrew の自動的なインストールスクリプトについて、 Linuxbrew の core tap を取得するプロセスの直前に Linuxbrew が使用する ruby 処理系をインストールする為のコードを追加したスクリプトを作成して実行することにより、問題無く Linuxbrew の導入が行われることが確認されました。

以上のことより、 64 bit x86 アーキテクチャ及び 32 bit ARM アーキテクチャ以外の環境においても、代替の手法によって Linuxbrew の導入作業を行うことにより、正常な Linuxbrew の導入を行うことが出来ることが示されました。

但し、 64 bit x86 アーキテクチャ及び 32 bit ARM アーキテクチャ以外の環境において Linuxbrew を動作させることは、 Linuxbrew の開発コミュニティのサポートの対象外であり、本稿において述べた Linuxbrew の導入手法もまた、 Linuxbrew の開発コミュニティのサポートの対象外であることに留意する必要があります。


謝辞

本稿の記述に当たって、最初に、当方の手元の環境への Linuxbrew の導入の詳細に関しては、 thermes 氏による "Linuxbrew のススメ" の投稿を大いに参考にしました。 thermes 氏に心より感謝致します。

そして、 Linuxbrew 本体のリポジトリの開発を行っている Shaun Jackman 氏を始めとする Linuxbrew の開発コミュニティの各氏に心より感謝致します。また、 Linuxbrew の詳細に関しては、 Linuxbrew 公式ページ及び Linuxbrew のリポジトリに同梱される各種資料も併せて参考にしました。

最後に、 Linuxbrew の全ての事に関わる全ての皆様に心より感謝致します。


追記とお断り


2018/02/04 現在の追記とお断り

Linuxbrew自動的にインストールするための代替となるスクリプトの作成と公開に伴い、本稿を改稿致しました。どうか御了承下さい。


2018/06/08 現在の追記とお断り

Linuxbrew自動的にインストールするための代替となるスクリプトの更新と、代替スクリプトの実行手法の変更に伴い、本稿を改稿致しました。どうか御了承下さい。


2018/10/11 現在の追記とお断り

Linuxbrew が使用する ruby 処理系のバージョンが 2.3.7 に更新されたことに伴い、本稿を改稿致しました。また、Linuxbrew が使用する ruby 処理系をソースコードからコンパイルする際に必要となるパッケージについて訂正を行いました。どうか御了承下さい。