Androidを実行しているスマートフォンにLinuxプログラムをインストールする





Androidバックグラウンドの所有者の多くは、デバイスで実際のLinuxソフトウェアを実行するのに苦労しています。 すべての法律により、ここで動作するように見えますが、何らかの理由でインストールにはルート権限が必要であり、一部の仮設インストーラー自体に配布されており、プログラムの選択は非常に限られています。 この記事では、なぜこれが起こったのかという質問に対する答えを提供し、解決策を説明します。これは、AndroidでほとんどすべてのLinuxソフトウェアをインストールして実行する便利な方法です。





LinuxかLinuxか?



ご存知のように、AndroidはLinuxカーネルに基づいており、通常のLinuxディストリビューションに典型的な標準ライブラリとコマンドラインユーティリティのセットが含まれています。 しかし、ABIの非互換性、パッケージマネージャーの欠如、独自のセキュリティシステム、標準のLinuxシステムの多くのコンポーネントの欠如など、多くの理由により、古典的なLinuxベースのソフトウェアの起動は非常に困難です。



そのため、Androidには標準のlibcライブラリなどが存在しますが、ほとんどの場合、それらの実装はGNUプロジェクトのライブラリと互換性がなく、機能が大幅に低下します。 このため、Linuxソフトウェアは少なくともAndroidおよびARMプロセッサ専用に再構築する必要があり、多くの場合、ライブラリにない機能を追加してパッチを適用する必要があります。



BotBrew:サポートされているデバイスのリスト



BotBrewは次のデバイスでテストされました:Barnes&Noble NOOK Color、LG P970 Optimus Black、Huawei Ascend M860、HTC Desire、HTC Evo 4G、HTC Evo 3D、HTC Inspire 4G、HTC Droid Eris、HTC Hero、Samsung Galaxy Nexus、Samsung Galaxy S2(GT-I9100)、Samsung Galaxy Y(GT-S5360)、Motorola Atrix 4G、Motorola Droid / Milestone、Sony Ericsson Xperia X8、Asus EeePad Transformer TF101。





完全なプログラムに従って特権でアプリケーションを遮断し、独自のディレクトリの範囲を超えないようにするAndroidセキュリティシステムは、標準のLinuxソフトウェアの動作を著しく妨げます。 したがって、多くの場合、これらの制限を削除するルート権限を取得する必要があります。 Javaアプリケーションだけでなく、通常のLinuxソフトウェアをインストールできるパッケージマネージャーがないため、開発者は他のアプリケーションをインストールするためだけに必要なアプリケーションを作成する必要があります。 したがって、これらすべてのカスタムインストーラーが表示されます。



さて、この図は、Androidには、X WindowグラフィックスタックやGTK +ライブラリなどの不可欠なコンポーネントも含めて、多くの標準Linuxコンポーネントがないという事実を補完しています。 もちろん、これらすべてをここに持ち込もうとするいくつかの試みが行われていますが、物事はハーフワーキングアルファバージョンよりも先に進んでいません。



それでも、本格的なLinuxシステムの機能をAndroidに転送する機能は、愛好家がプロセスで発生する問題を解決しようとせず、完全で普遍的なソリューションを提供しようとするのを嫌がります。 最も明白で簡単な方法は、すでに詳細に説明した本格的なLinuxディストリビューションの「仮想化」バージョンを起動することです。 この方法は興味深いものですが、システムを2つの領域に分割する問題に悩まされています。それぞれの領域は互いに独立して機能します。



BotBrewプロジェクトはさらに興味深いものに見えます-そのフレームワーク内では、Linuxシステムで非常に一般的なパッケージマネージャーとリポジトリが開発され、Android内の別のディレクトリにLinuxソフトウェアをインストールできます。 また、かつては、兄貴のAndroid内での作業に適したLinuxソフトウェアを簡単に、そして不必要な問題なく構築できるさまざまなスクリプトが発明されました。 記事の残りの部分は、これら2つのプロジェクトに専念します。



BotBrew



BotBrewプロジェクトは、ユーザーが遭遇する可能性のあるLinuxソフトウェアのインストールに関する問題の多くを解決し、外部のアプリケーションを受け入れるためにAndroidシステムを準備するように設計されています。 実際、システムは4つのコンポーネントで構成されています。





動作するために、プログラミングのこの奇跡は何も必要としません。ルート権限と、スマートフォンの内部メモリまたはメモリカードの少しの空き領域です。 さらに、SDファイルの場合は仮想ディスクにダンプされるため、すべてのカーネルでサポートされていないため、最初のオプションが望ましいです。



BotBrewの初期化

初期初期化



インストル済みみアプリケーションのリスト

インストール済みアプリケーションのリスト



現時点では、BotBrewのクラシックバージョンでは、独自のリポジトリを使用して、dcron、GCC、Git、dropbear SSHサーバー、Lynxコンソールブラウザー、Nmapセキュリティスキャナー、rsyncバックアップツール、Vimエディター、lighttpd Webサーバー、スクリプト言語などのソフトウェアをインストールできますPythonとRuby、および他の多数のパッケージ。 ちなみに、これはスマートフォン/タブレットの内部メモリ内の専用ディレクトリにインストールされ、メインシステムを混乱させません。 つまり、1つのディレクトリを削除するだけで、BotBrewとインストールしたすべてのものを取り除くことができます。



ソフトウェアを入れます



では、BotBrewを使用してLinuxソフトウェアをインストールする方法を教えてください。 まず、プログラム自体のパッケージが必要です。 Google Playにあり(実験的なBazilではなくBotBrewのルートが必要です)、1メガバイト未満の重さです。 インストール後、画面の下部にある「実行」ボタンを実行してクリックすると、コンソールパッケージマネージャーやその他のユーティリティ(Debian Linux-ブートストラップに関して)など、操作に必要なすべてのコンポーネントがダウンロードされます。 数メガバイトしかないので、長く待つ必要はありません。 インストールが完了すると、BotBrewはプロジェクトの公式Webページを含むウィンドウを表示します。このページは安全に閉じることができます。



これで、画面にインストール可能なパッケージのリストが表示されます。 それらの多くはありますが、上記の理由により、それらの中にグラフィカルなアプリケーションは見つかりません。 しかし、さまざまなサーバー、コンパイラ、インタープリターが存在するため、スマートフォンで真剣に「遊び回る」ことを望んでいる人なら誰でも展開する場所があります。 パッケージをインストールするには、名前をタップし、アプリケーションに関する情報を含む次の画面で「インストール」ボタンをクリックします。





タンバリンと踊る



BotBrewブートストラップ中に問題が発生した場合は、次のコマンドを使用して手動でインストールを試すことができます。



wget http://repo.botbrew.com/anise/bootstrap/install.sh -O - | su
      
      





これが役に立たなかった場合は、すべてのインストールを削除(設定の「BotBrewを削除」)してから、このコマンドを実行してみてください。





その後、パッケージは「インストール済み」タブに表示されますが、「実行」ボタンなどは表示されません。 アプリケーションはコンソールから独立して実行する必要がありますが、コンソールは論理的です。 アプリケーション自体は/ data / botbrewディレクトリ構造内にインストールされ、/ etc、/ usr、およびその他のディレクトリを含むLinuxディストリビューションの実際の環境が「エミュレート」されます。 そして、チームへのフルパスを取得する必要があるユーザーを苦しめないために、BotBrew開発者は名を冠したチームラッパーを提供しました。 たとえば、インストールされているLynxコンソールブラウザーを起動するために使用するには、次のコマンドを入力します。



 $ botbrew lynx http://xakep.ru
      
      





オプションとして、/ data / botbrew / binディレクトリをPATH環境変数に追加できますが、これはターミナルを起動するたびに実行する必要があります。



オオヤマネコのソブリンブラウザウのログサ

Lynxコンソールブラウザーのログサイト





パケッジのインストールプロセス

パッケージのインストールプロセス



 $ export PATH="$PATH:/data/botbrew/bin"
      
      





ところで、デーモンとさまざまなネットワークサービスの方がはるかに優れています。 起動後、デーモンはすぐに起動します。BotBrewインターフェースの下部にある[再生]ボタンをクリックしてアクセスできるグラフィカルインターフェースを使用して、デーモンを含めるかどうかを制御できます。 一部のアプリケーションでは、追加のユーザーを作成してパラメーターを変更する必要があります。これは、通常のLinuxシステムと同じ方法で実行できます。



  1. ユーザー作成:

    $ botbrew adduser vasya

  2. インターネットへのユーザーアクセスを開く:

    $ botbrew addgroup vasya inet

  3. BotBrewを別のユーザーに切り替える:

    $ botbrew su vasya



これらの変更はすべてBotBrew仮想環境にのみ影響し、メインシステムには一切影響しないことに注意してください。 コンソールを使用して、グラフィカルインターフェイスをバイパスしてアプリケーションをインストールすることもできます。 これを行うには、コマンド構文がapt-getと完全に互換性のあるOpkgコンソールパッケージマネージャーを使用します。



 $ botbrew opkg install dropbear
      
      





逆操作:



 $ botbrew opkg remove dropbear
      
      





「最先端の」状態を維持するには、グラフィカルインターフェイスの対応するボタンをクリックして、BotBrewリポジトリを随時更新する必要があります(混同しないでください)。 パッケージの新しいバージョンが「アップグレード可能」タブに表示されます。 彼の名前をタップして[アップグレード]を押すだけで十分です。



BotBrewでのサービス管理は本当に簡単です

BotBrewでのサービス管理は本当に簡単です



ボットブリューバジル



市場には、実験用としてマークされたBotBrew Basilというアプリケーションもあります。 実際、これは同じBotBrewですが、1つの非常に重要な違いがあります。 独自のリポジトリとOpkgパッケージマネージャーの代わりに、Debian Linux ARMリポジトリとapt-getパッケージマネージャーを使用します。 これは、アプリケーションの「ブラジル版」を使用してインストールできるソフトウェアの量がはるかに多いことを意味します。 10倍以上。



Debianリポジトリの使用に加えて、Basilにはわずかに変更されたインターフェースもあります。 たとえば、起動直後にインストールディレクトリを選択するように求められます。 デフォルトでは、/ data / botbrew-basilが使用されますが、これは非常に論理的ですが、メモリカードのext2セクションなど、他のものを選択できます(FATは機能しません)。



2番目の重要な違いは、アプリケーションの使用方法を選択できることです。これは、[続行]をクリックした直後に表示されます。 次の4つのオプションがあります。



  1. コマンドラインでBotBrewを使用します-実際には、通常のBotBrewのスタイルでのインストールの類似物です。
  2. dpkg / APTシステムを使用-apt-getおよびDebianリポジトリと一緒にインストール。 推奨されるインストールオプション。
  3. Pythonプログラムの実行-Pythonの自動インストールを行う最初のオプションに類似しています。
  4. 最小Debianのインストール-Debianの最小インストール。


2番目と4番目のポイントについて説明します。 最初のBotBrewとこのリストの最初の項目は、Linuxソフトウェアが起動する最小限のLinuxシステム(数個のコマンドとライブラリのみで構成される)をインストールする以上のことはしません。 ただし、apt-getは、最小限のOpkgとは異なり、多少なりとも完全なLinuxのインストールが必要です。 したがって、2番目の項目を選択すると、スマートフォンで一種のmicro-Linuxが得られます。 また、マイクロバージョンをインストールできる場合は、多かれ少なかれ完全なディストリビューションをインストールしてください。 これには、4番目のポイントがあります。



BotBrew Basilのブートストラップの後、アプリケーションのクラシックバージョンから馴染みのある同じアプリケーションインストール制御インターフェイスが画面に表示され、システムにbotbrew2コマンドが表示され、ソフトウェアを実行できます。 opkgの代わりにapt-getコマンドと、追加のリポジトリ(最初のBotBrewのリポジトリを含む)をアプリケーションインストールインターフェイスを介して直接接続する機能を除き、ここでの管理に大きな違いはありません。



BotBrew Basilはいませんつのインストロルオプションを提供します

BotBrew Basilはいくつかのインストールオプションを提供します



問題を自分の手に



既製のパッケージでプリコンパイルされたアプリケーションとリポジトリは問題ありませんが、必要なアプリケーションがインストール可能なアプリケーションの中にない場合はどうでしょうか? 実際、Debianリポジトリを膨大な量のソフトウェアと接続できる同じBotBrew Basilでさえ、その実験的性質により、すべてのスマートフォンで機能するわけではありません。



この場合、アプリケーションを自分でビルドしてみることができます。 ただし、ここでは一度にいくつかの困難に直面します:事実は、スマートフォン用のソフトウェアをビルドするには、必要なクロスコンパイルツールを準備し、ビルド中のアプリケーションのすべての依存関係を考慮に入れ、最終的にコードに必要な変更を加える必要があるということです。 これらはすべて非常に面倒なケースであり、時間を費やす価値はほとんどありません。



それにもかかわらず、他の人の成果を使用して、ソフトウェアアセンブリプロセスを自動化できます。 この分野で最も開発された興味深いソリューションの1つは、smitnaがXDA開発者と共に開発したSCRIPTSETスクリプトスイートです。 これにより、htop、ImageMagick、iptables、ELinks、Screen、mc、node.js、Samba、strace、QEMU、Parted、SANEなどのさまざまなアプリケーションを組み立てるためのコマンドを文字通り結合できます(プリンターへの直接印刷に使用できます)電話!)および他の多くの。 スクリプト自体は、クロスコンパイラ、すべての必要な依存関係とアプリケーションをダウンロードし、必要に応じてパッチを適用し、電話に解凍する準備ができたアーカイブを生成します。



SCRIPTSETはLinuxでのみ機能しますが、Windowsを使用している場合は、仮想マシンにUbuntuをインストールできます。 次に、ターミナルを開き、クロスコンパイラの構築に必要なツールをインストールします。



 $ sudo apt-get install build-essential cmake autoconf2.13 scons
      
      





その後、SCRIPTSET自体を取得して展開できます。



 $ cd ~ $ wget http://goo.gl/zvnom -O scriptset-2.6.zip $ unzip scriptset-2.6.zip
      
      





解凍の結果、...別のアーカイブscriptset-2.6.tar.bz2が得られます。 しかし、これだけではありません。アーカイブはtarの従来のルートディレクトリなしでパッケージ化されるため、自分で作成する必要があります。 そして、すでにそれを解凍します:



 $ mkdir scriptset $ cd scriptset $ tar -xjf ../scriptset-2.6.tar.bz2
      
      







解凍すると、いくつかのスクリプト、構成、およびスクリプトの使用手順を含む印象的なサイズのREADMEファイルがディレクトリに表示されます。 スクリプトには実行ビットがありません(これまでのトラブルを考えると驚くことではありません)。したがって、自分でインストールする必要があります。



 $ chmod 755 *.sh
      
      







アプリケーションビルドの起動

アプリケーションビルドの起動



次に、configuration.confファイルを開いて編集し、次の行を変更します。



 # vi ~/scriptset/configuration.conf //      TARGET_SYSROOT="/data/sysroot" //   TARGET_MARCH="armv7-a" TARGET_MTUNE="cortex-a9" TARGET_MFPU="neon" TARGET_MFLOAT="softfp"
      
      







これは、アプリケーションの正しいアセンブリに十分です。 ターゲットプロセッサは、追加のNEON命令セットを備えた標準ARMv7になります。 これは、過去3〜4年にリリースされたスマートフォンにインストールされます。 / data / sysrootディレクトリは、スマートフォンにアプリケーションをインストールするために使用されますが、奇妙なことに、デスクトップマシン上にも作成する必要があります。



 $ sudo mkdir -p /data/sysroot $ sudo chown user:users /data/sysroot $ sudo chmod 777 /data/sysroot
      
      





スクリプトの作成者が説明しているように、キーディレクトリのパスはビルド段階で一部のアプリケーションに縫い付けられているため、このアクションが必要です。 したがって、現在のディレクトリと他のディレクトリをルートとして使用してアプリケーションを組み立てた場合、方法の違いのためにスマートフォンで動作しません。 chrootを使用してこの問題を解決する方が正しいと確信していますが、必要なディレクトリを作成し、作業の最後に削除する方が簡単かつ迅速です。



次に、構築する予定のアプリケーションのリストを指定する必要があります。 これを行うには、package_selection.confファイルを開き、必要なオプションでnoをyesに変更します。 たとえば、bash、ImageMagick、およびScreenを収集するには、次の3行を変更する必要があります。



 # vi ~/scriptset/package_selection.conf BASH=yes IMAGEMAGICK=yes SCREEN=yes
      
      





#ALWAYS NEEDED行間の設定は変更できないことに注意してください。 これらのアプリケーションとライブラリは常に必要であり、それらがなければ他のアプリケーションは構築されません。 これで、アプリケーションをコンパイルできます。 これを行うには、引数なしでbuild.shスクリプトを実行します。



 $ ./build.sh
      
      





必要なすべてのパッケージがインストールされ、アセンブリの結果としてコンパイラがアセンブリ中にエラーを生成しなかった場合、現在のディレクトリに2つのアーカイブcs-sysroot.tar.bz2およびandroid-mysysroot.tar.bz2が表示されます。 1つ目は、クロスコンパイラによって作成されたアプリケーションを実行するために必要な環境であり、2つ目はアプリケーション自体のセットです。 これらのアーカイブは両方ともスマートフォンのメモリカードにドロップし、端末エミュレータを実行するか、ADB経由で接続して、次の2つのコマンドを実行する必要があります。



 $ tar xjf /sdcard/cs-sysroot.tar.bz2 $ tar xjf /sdcard/android-mysysroot.tar.bz2
      
      





その結果、ディレクトリ/データ/ sysrootは、アプリケーションが配置されるスマートフォンの内部メモリに表示されます。 それらは同じ端末から起動する必要があり、完全なパスを示します。 例:



 $ /data/sysroot/usr/bin/bash
      
      





さて、またはターミナルを起動した後、/ data / sysroot / usr / binをPATHに追加します。



 $ export PATH="$PATH:/data/sysroot/usr/bin"
      
      





結論



Androidと一般的なLinuxディストリビューションのかなり深刻な違いにもかかわらず、コンソールLinuxアプリケーションをスマートフォンにインストールすることはそれほど難しくありません。 残念ながら、グラフィックアプリケーションに関する話はまだありませんが、QtライブラリとWaylandグラフィックサーバーをAndroidに移植するプロジェクトは既にあります。すぐに、実用的なソリューションが得られることを望みます。





2013年8月から最初にHacker誌に掲載されました。



Issuu.comに公開する



ハッカーを購読する












All Articles