
コンテクスト:
.deb
パッケージを変換しようとしてい.rpm
ますエイリアン、私はこのコマンドを使用します:
$ alien -r foo.deb
しかし、次のように不満を述べています。
> Warning: alien is not running as root!
> Warning: Ownerships of files in the generated packages will probably be wrong.
alien
必要なのは、出力用にが所有するファイルroot
を作成する権限があることを保証することだけだと思いますが、よくわかりません。foo.deb
root
foo.rpm
質問:
- パッケージには常に
root
-owned ファイルが必要ですか? root
そもそもなぜ -owned ファイルが必要なのでしょうか?- 私が間違っているなら、なぜ
alien
必要なのでしょうかroot
?
答え1
fakeroot を使用します。alien は一部のビットを操作するために root を必要としません。fakeroot のマニュアル ページの 1 行の説明がそれを適切に要約しています。
ファイル操作のためにルート権限を偽装した環境でコマンドを実行する
つまり、fakeroot は、問題のコマンドが root として実行されていると確信させ、ファイルのアクセス許可が root として適切に設定されるプログラムです。詳細については、を参照してくださいman fakeroot
。
残念ながら、そこに表示されたエラー メッセージは誤解を招くものです。
簡単に言えば、
fakeroot alien ...
ここに、alien の作者である Joey Hess が fakeroot を使用する必要性について説明しているバグ レポートがあります。おそらく最適なリンクではありません。もっと良いものを見つけたら、投稿します。
答え2
ファイルの所有権を変更するには「root」権限が必要であり、ファイルが必ずしも「root」によって所有されている必要があるからではありません (多くのファイルはそうなっていますが)。
ホームディレクトリにファイルを作成し、その所有者を変更してみます:-
touch test.txt
ls -l test.txt
-rw-rw-r--. 1 gareth gareth 0 Jun 28 21:24 test.txt
chown nobody. test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted
ファイルの所有者でありrw
権限も持っていますが、所有者を変更することはできません。
sudo chown nobody. test.txt
ls -l test.txt
-rw-rw-r--. 1 nobody gareth 0 Jun 28 21:24 test.txt
しかし、root として実行すると動作しますsudo
。
警告にあるように、所有権は間違っています。そこから、alien
一部のファイルの所有権が変更されると推測できます。
システム ファイルは通常、制限された権限を持つ「root」によって所有されるため、あなたや私のような単なるユーザーが変更したり削除したりすることはできません。
システムには他のユーザーやグループもありますが、「root」とは異なり、ディストリビューション間で同じではありません。たとえば、Fedora (および RedHat と CentOS) では、Apache
Web サーバーは として実行されapache
、データ ファイルはそのユーザーが所有します。一方、 Debian/Ubuntu システムではApache
として実行されwww-data
、その結果、データ ファイルはそのユーザーが所有することになります。つまり、alien
変換時にファイルの所有者を変更する必要があり、これを行うには、上記の例でわかるように、「root」として実行する必要があります。
答え3
Rpmおよびdebパッケージにはインストールするファイルのアーカイブが含まれています(cpiorpmの場合のアーカイブ、タールこれらのアーカイブには、各ファイルの名前、変更日、所有ユーザーとグループ、権限などのメタデータが含まれています。パッケージがインストールされると、各ファイルの所有権はアーカイブに記述されているものになります (インストール後のスクリプトによって変更されない限り)。
パッケージによってインストールされるファイルのほとんどは、どのユーザーも変更を許可されていないため、root が所有します。
Alien は、アーカイブを解凍して再パックすることでパッケージを変換します (インストール前/インストール後のスクリプトの変換など、他の処理も行います)。たとえば、rpm を deb に変換するには、alien を呼び出してcpio
アーカイブを一時的な場所に抽出し、tar
新しいアーカイブを構築します。解凍がルート権限で行われない場合、すべての一時ファイルは解凍を行っているユーザーの所有物となるため、ファイルが新しいアーカイブにパックされると、そのユーザーの所有物になります。
Alien はシステム内の何も変更する必要がないため、実際には root として実行する必要はありません。フェイクルートalien (またはその他のコマンド) を、そのコマンドがファイルシステム操作に関する偽の情報を受け取る環境で実行し、通常はルートを必要とする操作 (ファイルの所有権の変更など) が成功したかのように見せかけます。このようにして、解凍はルートとして実行され、正しいファイルの所有権が設定され ( およびalien
そのサブプロセスに関する限り)、再パックによって目的のアーカイブが作成されます。