Z.OOL.ネット信託統治領 はてな諸島

こちらは "Z.OOL.ネット信託統治領 はてな諸島" です。

Z.OOL.ネット信託統治領はてな諸島は、はてなダイアリーからはてなブログに運用を移行致しました。
どうか御了承下さい。

Termux 開発コミュニティによる libandroid-shmem.so を Debian noroot 環境に導入する (再掲)

この投稿は、技術的事項についての速報的で簡易な短信についての投稿であり、
以前の投稿の再掲です。どうか宜しくお願い致します。

本稿について

この投稿は、以下に投稿された過去の Qiitadon.com のセルフモーメントの投稿を再編した上で、再掲したものです。

z80oolong.hatenadiary.jp

また、この投稿は、技術的事項についての速報的で簡易な短信についての投稿として、Z.OOL.ネット信託統治領 Qrunch 諸島の以下の投稿にクロス投稿しています。

z80oolong.qrunch.io

はじめに

Debian noroot とは、 Android OS 上において root 権限を取ることなく Debian 環境を構築するためのアプリケーションです。

CPU の性能とメモリ容量が潤沢にある Android 端末であれば、 Debian noroot の導入によって Android 端末上で非常に軽快な Debian 環境を実現することができます。

pelya 氏によって作成された Debian noroot 環境には、共有メモリ関連の標準 C ライブラリ関数を /dev/ashmem によってエミュレートする Debian noroot 環境のための動的ライブラリである libandroid-shmem.so が導入されています。

しかし、 pelya 氏による libandroid-shmem.so では、 Qt の共有メモリ関係のライブラリ関数を用いたソフトウエアが正常に動作しなかったり、その他の共有メモリを使用したソフトウェアの動作のパフォーマンスがあまり良くないという問題があります。

ここで、 Debian noroot 環境において、 pelya 氏による libandroid-shmem.so に代えて、 termux の開発コミュニティによって改良された libandroid-shmem.so を導入することにより、Qt の共有メモリ関係のライブラリ関数を用いたソフトウエアの正常な動作や、その他の共有メモリを使用したソフトウェアの動作のパフォーマンスの向上を図ることが出来るようになりました。

差分ファイルの適用とソースコードコンパイル

まず、 termux の開発コミュニティによる libandroid-shmem.sogithub 版若しくは v0.2 版を以下の URL から入手し、 tarball の場合は適当なディレクトリに展開します。

次に、termux の開発コミュニティによる libandroid-shmem.soDebian noroot 環境に再移植するための差分ファイルを以下の URL より入手します。

そして、入手したソースコードが置かれているディレクトリに、以下のようにして、差分ファイル libandroid-shmem-termux-0.2_1-fix.diff を適用して通常通りに make コマンドによってコンパイルすると、動的ライブラリ libandroid-shmem-termux.so が生成されます。

 $ patch -p1 < /path/to/diff/libandroid-shmem-termux-0.2_1-fix.diff
 (ここに、 /path/to/diff は、 libandroid-shmem-termux-0.2_1-fix.diff が置かれているディレクトリのパス名)
 $ make ... (オプションを適宜設定すること。)

この動的ファイルを使用するには、まず最初に生成された動的ライブラリを Debian noroot 環境のルートディレクトリにインストールします。

 # install -v -m 0755 libandroid-shmem-termux.so /

次に、 Debian noroot 環境の初期化ファイルである /proot.sh において、環境変数 LD_PRELOAD が定義されている行を以下のように修正します。

...
# LD_PRELOAD="... /libandroid-shmem.so ..."
LD_PRELOAD="... /libandroid-shmem-termux.so ..."    # /libandroid-shmem.so を /libandroid-shmem-termux.so に修正。
...

初期化ファイル /proot.sh の修正後は、 Debian noroot 環境を再起動して設定を有効にします。

結論

pelya 氏による libandroid-shmem.so と異なり、 termux の開発コミュニティによる libandroid-shmem.so は、関数 shmget(2) の第一引数 keyIPC_PRIVATE 以外の値を指定出来るために、 termux の開発コミュニティによる libandroid-shmem.so の導入によって Qt の共有メモリ関連のライブラリ関数を用いたソフトウェア等が Debian noroot 環境 で正常に動作し、また、他の共有メモリを使用したソフトウェアについても動作のパフォーマンスが向上したことが判りました。