Re: MacPorts, NFS上のファイルへのchflagsに失敗する
新城@筑波大学情報です。こんにちは。
In article <hojtti$nfh$1@speranza.aioe.org>
tesigana@diary.ocn.ne.jp (tesigana@diary.ocn.ne.jp) writes:
> > この問題を誤魔化すような方法は、ないでしょうか。たとえば、
> > chflags を実行しないようにするとか。
> 空の chflags 関数を作って ELF ライブラリにして、
> それを環境変数 LD_PRELOAD に指定する、
> というのはどうですか。
なるほど。その手がありましたね。試してみた所、うまく行きまし
た。ありがとうございました。
動的リンクライブラリを置換える方法としては、次の Web ページ
を参考にしました。
http://d.hatena.ne.jp/eagletmt/20080726/1217085814
実際に作ったのは、次のような C のプログラムです。
------------------------------------------------------------
% cat chflags.c
/*
* fake chflags(2) and fchflags(2) to run port on NFS
*/
#include <sys/stat.h>
#include <unistd.h>
int
chflags(const char *path, __uint32_t flags)
{
return( 0 );
}
int
fchflags(int fd, __uint32_t flags)
{
return( 0 );
}
int
lchflags(const char *path, __uint32_t flags)
{
return( 0 );
}
%
------------------------------------------------------------
Makefile も作ってみました。cc -shared -fPIC -o chflags.dylib
chflags.c でいいんですけれど。
------------------------------------------------------------
% cat Makefile
#
#
#
all: chflags.dylib
chflags.dylib: chflags.c
$(CC) -shared -fPIC -o $@ $<
%
------------------------------------------------------------
うちでは、できあがったものを
/usr/local3/lib/dummy-chflags/chflags.dylib に置きました。
------------------------------------------------------------
% ls -l /usr/local3/lib/dummy-chflags/chflags.dylib
-rwxr-xr-x 1 root admin 4304 3 29 12:31
/usr/local3/lib/dummy-chflags/chflags.dylib
% nm /usr/local3/lib/dummy-chflags/chflags.dylib
0000000000000000 t __mh_dylib_header
0000000000000ecb T _chflags
0000000000000edd T _fchflags
0000000000000eee T _lchflags
U dyld_stub_binder
%
------------------------------------------------------------
シェルスクリプトを作りました。
------------------------------------------------------------
% cat /usr/local3/bin/run-no-chflags
#!/bin/sh
export DYLD_INSERT_LIBRARIES=/usr/local3/lib/dummy-chflags/chflags.dylib
export DYLD_FORCE_FLAT_NAMESPACE=YES
$@
%
------------------------------------------------------------
このシェルスクリプトは、次のように、引数に実行したいコマンド
を与えて使います。
------------------------------------------------------------
# run-no-chflags port activate pstree
---> Activating pstree
#
------------------------------------------------------------
In article <hojtti$nfh$1@speranza.aioe.org>
tesigana@diary.ocn.ne.jp (tesigana@diary.ocn.ne.jp) writes:
> BSD 系でこの技が使えるか分かりませんが…
やってみると、MacOSX でもこのくらいなら比較的簡単でしたね。
引数を変えながら同じ名前の関数を呼ぶとかしようとすると、また
面倒なのかもしれませんけれど。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735