ローカルでビルドしたいパッケージがあります。パッケージ内の特定のファイルは、そのユーザーが最初に作成されたシステムにインストールされます。これらのファイルはこのユーザーが所有する必要があります。
/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
完了する前に正しい所有権を持つことになり、失敗した場合はパッケージを使用できないと見なす必要があります。
答え2
所有者を名前に変更しないと、chown
番号(名前がマップされるUID)に変更されます。
ターゲットシステムで特定のUID(およびGID)を使用してユーザーを作成し、その番号を使用するようにコマンドを変更する必要があるかもしれません。
chown 9876:9876 debian/foo/usr/share/foo/protected.file