ビルドシステムにユーザーがいなくてもDebianパッケージをビルドするときにユーザーを設定できますか?

ビルドシステムにユーザーがいなくてもDebianパッケージをビルドするときにユーザーを設定できますか?

ローカルでビルドしたいパッケージがあります。パッケージ内の特定のファイルは、そのユーザーが最初に作成されたシステムにインストールされます。これらのファイルはこのユーザーが所有する必要があります。

/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完了する前に正しい所有権を持つことになり、失敗した場合はパッケージを使用できないと見なす必要があります。

おすすめ記事