私はユーザーとして作業していて、(ルートによって)解凍するとファイルをルート所有権で抽出するtarアーカイブを作成したいと思います(そうしないと、ファイルが抽出された後、ルートごとにファイルの所有権を手動で変更する必要がありますその目的地へ)。
私はfakeroot
を見つけました。しかし、私は自分のアーカイブを作成するために使用する必要がある構文を見つけることができません。
Tar.xzアーカイブを作成して、ルートで解凍したときにファイルがルートの所有権を持つようにするにはどうすればよいですか?
do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
Rootで解凍したときにファイルがrootの所有権を持つようにするには、どうすればtar.xzアーカイブを作成できますか?
それは解凍するルート次第です:
tar --no-same-owner -xf ...
すべてを最初にルートにしたい場合は、
tar --owner=root --group=root -cf ...
fakeroot ユーティリティ、または新しいユーティリティ fakeroot-ng (同じ目的、異なる実装手法)は、プログラムを実行し、rootおよびそのシステムとして実行されているプログラムのふりをしますchown
などの呼び出しは成功しました。これらの呼び出しが成功したとプログラムだけが信じているため、実際にはファイルシステムには何も反映されていません(fakeroot
には追加の特権がないため、反映できません)。ただし、プログラムがファイルの所有権を変更し、そのファイルの所有権に基づいてアクションを実行すると、プログラムの動作が変更される可能性があります。
以下が発生する場所でfakeroot環境を実行することにより、fakerootから有用な作業を得る典型的な方法:
例:
fakeroot sh -c '
chown root:root usr/bin/foo
tar cf foo.tar usr
'
呼び出しの間にメモリがないため、fakeroot
の単一の呼び出しを使用する必要があります。
完全を期すために、Linuxカーネルが3.8以上の場合、 namespaces は、ルートの偽の環境を作成するもう1つの方法です。ユーザーランドのサポートはまだ十分ではないので、これ以上詳しくは説明しません。
問題を解決する別の方法は、アーカイブをディレクトリとしてマウントすることです。 archivemount を使用できます。これは、圧縮tarを含む libarchive を介していくつかのアーカイブ形式を変更できます。
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt