2017-08-02 5 views
-1

上で動作し、これは単なる期待通りに動作します:busyboxのタールは、Ubuntuでのfakerootを無視しますが、それは私のMacマシンでOS X

#!/bin/sh -euf 
touch test.sh 
chown 888:888 test.sh 
busybox tar -czvf out.tar.gz test.sh 

が呼び出し:

$ fakeroot -- ./generateArchive.sh 
$ busybox tar -tzvf out.tar.gz 
-rw-r--r-- 888/888   0 2017-08-02 20:52:50 test.sh 

しかし、私の仮想Ubuntuマシンで私が取得します:

$ fakeroot -- ./generateArchive.sh 
$ busybox tar -tzvf out.tar.gz 
-rwxrwxr-x marco/marco  215 2017-08-02 20:53:32 test.sh 

なぜubuntuのbusyboxは偽のオーナーシップのために「落ちない」のですか?

busybox tarの代わりにtarを使用すると、ubuntuで動作します。

追加情報:

Mac (10.12.5): 
    fakeroot version 1.20.2 
    BusyBox v1.20.0.git (2017-05-17 10:01:40 CEST) multi-call binary. 
Ubuntu (14.04.5 LTS): 
    fakeroot version 1.20 
    BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) multi-call binary. 

答えて

1

おそらく、ビジーボックスが静的にリンクされている可能性があります。 FakerootはLD_PRELOADを使用します。LD_PRELOADは、プログラムから実行時ライブラリ(glibc)に渡されるコールをインターセプトします。静的にリンクされた実行可能ファイルはLD_PRELOADには見えないので、fakerootには見えません。

Fakeroot-ngは、プログラムからカーネルにシステムコールが渡されるときにインターセプトするptraceメカニズムを使用します。そのため、fakeroot-ngは、静的にリンクされたプログラムによって実行されるシステムコールを捕まえることができます(これは最初にfakeroot-ngを作成した理由の1つです)。

Macでは、ランタイムライブラリの静的リンクは許可されていません。彼らは、ランタイムライブラリの静的バージョンを提供していません。そのため、fakerootはそこでシステムコールを傍受することに問題はありません(fakeroot-ngには上記の理由のためにOS-Xバージョンがないため、良いことです)。

0

私はそれが機能しない理由の推測を持っている:

たぶんUbuntuの上busyboxのはfakerootを傍受することはできませんopen()を使用しています。

回避策

私は私のUbuntuマシンにfakeroot-ngをインストールし、予想通り、今では動作します。

関連する問題