Android
Linux
Debian
linuxbrew
DebianNoroot

Debian noroot 環境に Linuxbrew を導入する

はじめに

Debian noroot とは、 Android OS 上において root 権限を取ることなく Debian 環境を構築するためのアプリケーションです。
CPU の性能とメモリ容量が潤沢にある Android 端末であれば、 Debian noroot の導入によって Android 端末上で非常に軽快な Debian 環境を実現することができます。

ここで、 Debian noroot 環境の制約上、 Debian noroot 環境において動作に問題のあるパッケージが存在する場合、当該パッケージのソースコードを修正してビルドし、 Debian noroot 環境上に導入する手法を取ることにより、問題の解決が可能になることがあります。

また、 Debian 環境において、 apt-get コマンドを用いてパッケージを導入する場合、安定性の観点より、当該パッケージのバージョンが最新のバージョンと比較して古いバージョンとなっている事が多い為、当該パッケージをソースコードからビルドし、Debian noroot 環境上に導入する場合があります。

このような場合、当該パッケージのソースコードを手動でダウンロードした上でビルドし、 /usr/local のような適当なディレクトリにインストールする手法が取られますが、そのまま適当なディレクトリにソフトウェアをインストールすると、ソフトウェアをアップグレードしたりアンインストールする場合に作業が非常に煩雑になる問題が発生します。

ここで、 Linux の各ディストリビューション上におけるソースコードの取得及びビルドに基づいたパッケージ管理システムである LinuxbrewDebian noroot 環境に導入すると、ソフトウェアのソースコードの取得及びビルドにおいて、ライブラリ等の依存関係及び差分ファイルの適用等をコマンドライン上から容易に体系的かつ統合的に行うことが出来、かつ Debian noroot 環境に対応したソフトウェアを容易に導入することが可能になります。

本稿では、Debian noroot 環境Linuxbrew を導入する手法について記述します。

本稿では最初に、 "Linuxbrew に依存する Debian パッケージの導入" の章において、 Linuxbrew の導入にあたって必要となる Debian パッケージをインストールする手法について述べます。

次に、 "Linuxbrew の導入" の章において、 Linuxbrew の本体のリポジトリを導入する為の具体的な手法について述べます。

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

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

Linuxbrew に依存する Debian パッケージの導入

まず Debian noroot 環境Linuxbrew を導入する為には、Linuxbrew の公式ページを参考にして、

  • ソースコードをビルドするために必要なパッケージをインストールする為のメタパッケージである build-essential
  • ソースコードのダウンロードを行う Curl を導入するためのパッケージである curl
  • Linuxbrew の本体等の記述言語となる Ruby を導入するパッケージである ruby
  • Linuxbrewgit のリポジトリとして管理する為のパッケージである git

等の Debian パッケージを下記のように導入する必要があります。

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

また必要に応じて、任意に以下のパッケージを thermes 氏による "Linuxbrew のススメ" の記事を参考にして下記のように導入します。

 $ sudo apt-get install m4 texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev gettext

以上の Debian パッケージの導入により、 次章にて述べる Linuxbrew の本体のリポジトリの導入が可能になります。

Linuxbrew の導入

本章では最初に、 "Linuxbrew 本体のリポジトリの導入" の節において、 Linuxbrew の本体のリポジトリを導入する為の具体的な手法について述べます。

次に、 "環境変数の設定" の節において、 Linuxbrew に関連する環境変数の設定について述べます。

そして、 "Linuxbrew の動作確認" の節において、導入を行った Linuxbrew の正常な動作の確認手法について述べます。

最後に、 "Tap リポジトリ z80oolong/debian-noroot の導入" の節において、 Debian noroot 環境に対応したソフトウェアを導入するための Formula 群を集めた Tap リポジトリである z80oolong/debian-noroot の導入手法について述べます。

Linuxbrew 本体のリポジトリの導入

まず最初に、下記のコマンドを実行して Linuxbrew 本体のリポジトリを導入します。

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

なお、 32 bit ARM アーキテクチャ及び 64 bit x86 アーキテクチャ以外を搭載した携帯端末にインストールされた Debian noroot 環境Linuxbrew を導入する場合、前述の Linuxbrew の本体のリポジトリを導入するコマンドを実行すると、途中で Linuxbrew が使用する ruby 処理系の bottle ファイルの取得に失敗して、導入作業が正常に行われません。

従って、これらの携帯端末における環境の場合は、 "Linuxbrew の自動的なインストールスクリプトが異常終了する場合における代替の導入手法" の投稿に基づき、 Linuxbrew の開発コミュニティによる Linuxbrew のインストールスクリプトに代えて、導入作業に関する問題を回避した代替のスクリプト (以下、代替スクリプトと記述) を実行する必要があります。

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

 $ sudo apt-get install openssl libreadline6-dev libyaml-dev libgdbm-dev

次に、以下のコマンドを実行して Linuxbrew 本体のリポジトリを導入します。

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

上記コマンドにより、 Linuxbrew 本体のリポジトリがディレクトリ /home/linuxbrew/.linuxbrew に導入されます。

Debian noroot 環境上では、ディレクトリ /home が一般ユーザに対して書き込み可能な権限となっているために、環境変数等の設定に関わらず、 Debian noroot 環境における Linuxbrew の本体のリポジトリの導入先は、ディレクトリ /home/linuxbrew/.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}"
export HOMEBREW_NO_AUTO_UPDATE=1                                       # brew install コマンドが毎回実行される度に Linuxbrew の本体のリポジトリが自動的に update されるのを抑止。
...

特に、 Debian noroot 環境上において brew install コマンド等を迅速化するために、環境変数 HOMEBREW_NO_AUTO_UPDATE を 1 に設定し、 brew install コマンド等が毎回実行される度に Linuxbrew の本体のリポジトリが自動的に更新されるのを抑止します。
この場合、 Linuxbrew の本体のリポジトリを更新するには、手動で明示的に brew update を実行する必要があります。

また、 LinuxbrewDebian 環境の実行に影響を与えるのを避けるために、環境変数 LD_LIBRARY_PATH の値は空とすることを強く勧めます。

Linuxbrew の動作確認

前節の設定を完了した後は、下記のコマンドを実行して、 Linuxbrew が正常にインストールされていることを確認します。

 $ brew doctor

ここで、 Debian noroot 環境の実行に必要となる環境変数 LD_PRELOAD の設定に関する警告を除き、警告及びエラーが表示されなければ問題なく Linuxbrew がインストールされています。

そして、下記コマンドを実行して、実際に Linuxbrewhello コマンドの導入を行います。

 $ brew install -dv hello

この時、ソースコードからの hello コマンドのビルドに非常に時間が掛かりますが、我慢強くインストールの完了を待つ必要があります。この場合、 Android 端末に CPU の性能とメモリ容量が潤沢にあれば、別に他の必要な Android OS アプリを起動して Linuxbrew でのインストールの完了を待っても構いません。

上記コマンドによる hello コマンドのインストールが完了した後は、下記のようにして問題なく Linuxbrewhello コマンドの導入が行われていることを確認します。

 $ which hello
 /home/linuxbrew/.linuxbrew/bin/hello
 $ hello
 世界よ、こんにちは!
 $

Tap リポジトリ z80oolong/debian-noroot の導入

最後に下記のコマンドを実行して、 Linuxbrew のリポジトリに、 Debian noroot 環境に対応した各種ソフトウェアの導入を可能にするための Formula 群を含む Tap リポジトリである z80oolong/debian-noroot を導入します。

 $ brew tap z80oolong/debian-noroot

これにより、 "Debian noroot 環境において dropbear に基づく SSH サーバを導入する" の投稿で述べた dropbear デーモン等の各種 Debian noroot 環境に対応したソフトウェアの導入が可能になります。

なお、 Tap リポジトリ z80oolong/debian-noroot 及び Tap リポジトリに含まれる Formula に関する詳細については、 Tap リポジトリに同梱した README.md 及び FormulaList.md を御覧下さい。

結論

本稿において、 Linux の各ディストリビューション上におけるソースコードの取得及びビルドに基づいたパッケージ管理システムである LinuxbrewDebian noroot 環境に導入するために、まず最初に、ソースコードをビルドするために必要なパッケージをインストールする為のメタパッケージである build-essential を始め、 Linuxbrew に依存する各種 Debian パッケージの導入を行いました。

次に、 Linuxbrew の本体のリポジトリの導入及び、環境変数 PATH 等の Linuxbrew の実行に必要な環境変数の設定等を行った後に、 brew doctor コマンド等を実行して実際に Linuxbrew が問題なく導入されているかを確認しました。

最後に、 brew tap コマンドの実行によって Debian noroot 環境に対応した各種ソフトウェアの導入を可能にするための Formula 群を集めた Tap リポジトリである z80oolong/debian-noroot の導入を行うことにより、 Debian noroot 環境において Linuxbrew に基づいた各種ソフトウェアの導入が可能となりました。

謝辞

本稿の記述に当たって、最初に Android OS 端末上で非常に軽快な Debian 環境を実現することを可能にした Debian noroot 環境の開発者である pelya 氏に心より感謝致します。

次に、 Debian 環境への Linuxbrew の導入の詳細に関しては、 thermes 氏による "Linuxbrew のススメ" の投稿を大いに参考にしました。 thermes 氏に心より感謝致します。

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

最後に、 Debian noroot 環境Android OS 及び Debian 環境の全ての事に関わる全ての皆様に心より感謝致します。

追記とお断り

2018/01/22 現在の追記とお断り

64 bit ARM アーキテクチャ等の環境で動作する Debian noroot 環境への Linuxbrew の導入に関する問題の解決手法について加筆を行い、本稿を改稿致しました。どうか御了承下さい。

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

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

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

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