Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Termux に移植された libandroid-shmem.so を Debian noroot 環境に再移植するための差分ファイル

Termux に移植された libandroid-shmem.so を Debian noroot 環境に再移植するための差分ファイル

告知 (2019/03/28)

本稿の Gist にて公開していました差分ファイル を適用した Termux 開発コミュニティによる libandroid-shmem.so を以前より公開したことに伴い、今後は、本稿 Gist より libandroid-shmem-termux-0.2_3-fix.diff を削除し、以下の Github リポジトリにて Debian noroot 環境に再移植した Termux の開発コミュニティによる libandroid-shmem.so のソースコードを公開することと致します。

なお今後、本 Gist には本稿のみを残しておきますので、Debian noroot 環境に再移植した Termux の開発コミュニティによる libandroid-shmem.so のソースコードにつきましては上記 URL より取得して下さいますよう御願い致します。

以上誠に勝手ながらどうか御了承下さいますよう御願い致します。

概要

この差分ファイルは、Debian noroot 環境 の作者である pelya 氏によって作成された、 共有メモリ関連の標準 C ライブラリ関数を /dev/ashmem によってエミュレートする Debian noroot 環境のための動的ライブラリである libandroid-shmem.sotermux の開発コミュニティTermux 環境に対応するよう移植したものを、再度 Debian noroot 環境上で動作するように修正した差分ファイルです。

pelya 氏による libandroid-shmem.so と異なり、 termux の開発コミュニティによる libandroid-shmem.so は、関数 shmget(2) の第一引数 keyIPC_PRIVATE 以外の値を指定出来るために、 termux の開発コミュニティによる libandroid-shmem.so の導入によって Debian noroot 環境上で動作する各種ソフトウェアが正常かつ安定に動作することが可能となります。

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

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

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

 $ patch -p1 < /path/to/diff/libandroid-shmem-termux-0.2_3-fix.diff
 (ここに、 /path/to/diff は、 libandroid-shmem-termux-0.2_3-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 環境を再起動して設定を有効にします。

libandroid-shmem-termux.so で使用する環境変数

ここに、本差分ファイルを適用して生成した動的ライブラリ libandroid-shmem-termux.so において使用する環境変数について述べます。

LIBANDROID_SHMEM_QUIET

環境変数 LIBANDROID_SHMEM_QUIET の値を 1 に設定すると、動的ライブラリ libandroid-shmem-termux.sostderr に出力するデバッグ用のログの出力を抑止します。

LIBANDROID_SHMEM_DISABLE

環境変数 LIBANDROID_SHMEM_DISABLE の値を 1 に設定すると、共有メモリ関連の標準ライブラリ関数である shmget(2), shmat(2), shmdt(2), shmctl(2) を一時的に無効化します。一部のソフトウェアについて、この動的ライブラリの為に動作が不安定になる場合は、この環境変数の設定を試みて下さい。

謝辞

まず最初に、 Debian noroot 環境及びそれに伴う libandroid-shmem.so を開発した pelya 氏に心より感謝致します。また、 libandroid-shmem.so の機能を強化して Termux 環境に移植した termux の開発コミュニティに心より感謝致します。

そして、 Debian noroot 環境及び Termux 環境に関わる全ての人々に心より感謝致します。

追記

2017/09/06 現在の追記

libandroid-shmem.so のデバッグ用ログ出力の変更に伴い、差分ファイルを修正しました。以降は、差分ファイルは libandroid-shmem-termux-0.2_1-fix.diff を適用して下さい。

2018/11/09 現在の追記

libandroid-shmem.so の一部動作の不具合を修正しました。以降は、差分ファイルは libandroid-shmem-termux-0.2_2-fix.diff を適用して下さい。

2018/12/13 現在の追記

クロスコンパイル環境で生成した libandroid-shmem.so の動作の不具合を修正しました。以降は、差分ファイルは libandroid-shmem-termux-0.2_3-fix.diff を適用して下さい。

これに伴い、差分ファイル libandroid-shmem-termux-0.2_1-fix.diff, libandroid-shmem-termux-0.2_2-fix.diff を削除致しました。どうか御了承下さい。

@lordbryan

This comment has been minimized.

Copy link

lordbryan commented Oct 24, 2017

Hi, just want thanks, you really saved me a lot of trouble. I have been trying to get shm to work in a chrooted Linux container, but i have been running into some sort of permissions [ failure to access private resources ] when using pelya's version . But it seems like the changes the termux team made , made it work without troubles. You will have to use google translate to read this.

@z80oolong

This comment has been minimized.

Copy link
Owner Author

z80oolong commented Feb 22, 2018

I'm sorry my response to your comment has been delayed so much. I sincerely thank you for using this patch file. I am glad that this patch file is useful for you.

@Anonymous1p

This comment has been minimized.

Copy link

Anonymous1p commented Sep 21, 2018

how can i use it in gnuroot debian plz tell me

@z80oolong

This comment has been minimized.

Copy link
Owner Author

z80oolong commented Sep 27, 2018

Thank you very much for your comment. In order to use libandroid-shmem-termux.so created with my diff file in Gnuroot Debian, you need to specify the path name of libandroid-shmem-termux.so in the environment variable LD_PRELOAD as follows.

  $ /usr/bin/env LD_PRELOAD="/libandroid-shmem-termux.so" linux_command

For details, please see the following web page by Mr. pelya -- https://github.com/pelya/android-shmem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.