web-dev-qa-db-ja.com

tarアーカイブ内のファイルの所有権を変更する

私はユーザーとして作業していて、(ルートによって)解凍するとファイルをルート所有権で抽出するtarアーカイブを作成したいと思います(そうしないと、ファイルが抽出された後、ルートごとにファイルの所有権を手動で変更する必要がありますその目的地へ)。

私はfakerootを見つけました。しかし、私は自分のアーカイブを作成するために使用する必要がある構文を見つけることができません。

Tar.xzアーカイブを作成して、ルートで解凍したときにファイルがルートの所有権を持つようにするにはどうすればよいですか?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
10
user1968963

Rootで解凍したときにファイルがrootの所有権を持つようにするには、どうすればtar.xzアーカイブを作成できますか?

それは解凍するルート次第です:

tar --no-same-owner -xf ...

すべてを最初にルートにしたい場合は、

tar --owner=root --group=root -cf ...
12
goldilocks

偽根

fakeroot ユーティリティ、または新しいユーティリティ fakeroot-ng (同じ目的、異なる実装手法)は、プログラムを実行し、rootおよびそのシステムとして実行されているプログラムのふりをしますchownなどの呼び出しは成功しました。これらの呼び出しが成功したとプログラムだけが信じているため、実際にはファイルシステムには何も反映されていません(fakerootには追加の特権がないため、反映できません)。ただし、プログラムがファイルの所有権を変更し、そのファイルの所有権に基づいてアクションを実行すると、プログラムの動作が変更される可能性があります。

以下が発生する場所でfakeroot環境を実行することにより、fakerootから有用な作業を得る典型的な方法:

  1. いくつかのファイルを作成し、それらを移動し、所有権とモードを変更します。
  2. これらのファイルのアーカイブを作成します。

例:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

呼び出しの間にメモリがないため、fakerootの単一の呼び出しを使用する必要があります。

Linux名前空間

完全を期すために、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