ローカルでビルドしたいパッケージがあります。パッケージ内の特定のファイルは、そのユーザーが最初に作成されたシステムにインストールされます。これらのファイルはこのユーザーが所有する必要があります。
/usr/share/foo/protected.file
たとえば、私のサーバーに「foo」というユーザーがあり、権限を持つファイルu=r
(つまり、そのユーザーだけがファイルを読み取ることができる)を含むパッケージを作成したとします。
私のファイルで実行したいことは、debian/rules
次のように設定されます。
override_dh_fixperms:
dh_fixperms
...
chmod 400 debian/foo/usr/share/foo/protected.file
chown foo:foo debian/foo/usr/share/foo/protected.file
...
私の問題は、パッケージのビルドに使用するコンピュータに「foo」というユーザーがいないためchown
失敗することです。私はそのコンピュータに「foo」ユーザーを作成したくありません。
ビルドプロセス中にこれを行う方法はありますか(つまり、結果の.tarファイルをハッキングできることを知っていますが、したくありません)。
次のコマンドを使用してローカルビルドを実行します。
dpkg-buildpackage -us -uc
ベストアンサー1
技術的に言えば、任意の方法でパッケージを構築することができます。ファイルに関する限り、パッケージ構築の最後の段階で予想されるすべては、.deb
親ディレクトリにdebian/rules binary
正しい名前を持つ有効なファイルが残っていることです。.deb
したがって、dh_builddeb
存在しないユーザーが所有するファイルでtarballを生成するように上書きできます。
ただし、非標準ユーザーを扱う Debian パッケージはこれを行いません。postinst
そこからユーザー作成も処理します。ユーザーが存在しない場合は、実行する前に作成してくださいchown
。これにより、既存のユーザーに関係なくパッケージをインストールできます。
あなたの意見で述べた競争条件は実際には重要ではありません。dpkg -i
成功すると、ファイルがdpkg -i
完了する前に正しい所有権を持つことになり、失敗した場合はパッケージを使用できないと見なす必要があります。