.deb 生成後: dpkg: 削除時に警告、/usr/local/bin ディレクトリが空でないため削除されません。

.deb 生成後: dpkg: 削除時に警告、/usr/local/bin ディレクトリが空でないため削除されません。

ソースからzsh 5.0.7パッケージを作成し、正常にインストールできますが、削除しようとすると、次のメッセージが表示されます。

$ sudo dpkg -i zsh_5.0.7_amd64.deb
Selecting previously unselected package zsh.
(Reading database ... 177638 files and directories currently installed.)
Preparing to unpack zsh_5.0.7_amd64.deb ...
Unpacking zsh (5.0.7) ...
Setting up zsh (5.0.7) ...
Processing triggers for man-db (2.7.0.2-2) ...
Reading package lists...
Building dependency tree...
$ sudo apt-get purge zsh
Reading state information...
The following packages will be REMOVED:
  zsh*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 6473 kB disk space will be freed.
Do you want to continue? [Y/n] (Reading database ... 178746 files and directories currently installed.)
Removing zsh (5.0.7) ...
dpkg: warning: while removing zsh, directory '/usr/local/bin' not empty so not removed
dpkg: warning: while removing zsh, directory '/usr/local/lib' not empty so not removed
dpkg: warning: while removing zsh, directory '/usr/local/share/man/man1' not empty so not removed
Processing triggers for man-db (2.7.0.2-2) ...

この警告を取り除くには、パッケージ(または他のファイル)でdebian/{control,rules}何を変更する必要がありますか?

debian/control

Source: zsh
Section: unknown
Priority: optional
Maintainer: Patryk <[email protected]>
Build-Depends: debhelper (>= 8.0.0), autotools-dev
Standards-Version: 3.9.4
Homepage: http://zsh.sourceforge.net/

Package: zsh
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libc6
Description: ZSH shell
 Zsh is a shell designed for interactive use, although it is also a powerful scripting language. Many of the useful features of bash, ksh, and tcsh were incorporated into zsh; many original features were added.

debian/rules

#!/usr/bin/make -f
# -*- makefile -*-

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

%:
        dh $@  --with autotools-dev
override_dh_auto_configure:
        ./configure
override_dh_usrlocal:

編集する

zshソースをフォークし、パッケージング用のdebianディレクトリを追加しました。

https://github.com/pmalek/zsh/tree/5.0.7-deb/debian

答え1

通常、この警告はまったく無害で正常です。パッケージを削除(または削除しようとする)すると、dpkgパッケージのインストールの一部として生成されたすべてのファイルとディレクトリが削除されます。ここでは、ディレクトリに削除できるファイルがいくつかありますが、dpkgそのファイルについては不明であるとします。これは、インストール中またはインストール後にシステムで作成されたか、ユーザーが作成したために発生する可能性があります。dpkgこれらのファイルは、特に指示がない限り削除されません。デフォルトでは、空でないディレクトリは削除されないため、これらのファイルを含むディレクトリはこの場合削除されません。したがって、要約すると、パッケージをアンインストールすると、一部のマシン生成ファイルやその他のコンテンツを含むほとんどの空のディレクトリ(またはディレクトリ)が発生する可能性があります。これは問題ではありません。手動で削除できます。

上記のデフォルトは合理的なデフォルトです。ここにエラーはありません。

あなたの場合、/usr/localファイル階層標準に違反する Debian バイナリパッケージの一部としてファイルをインストールしました。間違った。これをしないでください。ユーザーバイナリはに入る必要があります/usr/bin。たとえば、ライブラリはに入る必要があります/usr/lib。私はあなたのパッケージがそれを生成したと仮定します/usr/local/bin。なぜならdpkg当然それについてまだ分からないからです。 (Debianパッケージにファイル/ディレクトリを含めるのはFHSに違反するため、Debianポリシーに違反することです/usr/local)。そのため、パッケージを削除するときにファイルを削除しようとします。インストールを停止する/usr/localと問題が解決します。

より詳細な背景情報を提供してもらえますか?ディストリビューションに付属のパッケージを使用するのではなく、独自のzsh Debianパッケージを構築したいのはなぜですか?どのディストリビューションを使用していますか?

本当にこれをやりたい場合は、ここに簡単なヒントがあります。ディストリビューション(Debianを含む)がzshをどのようにパッケージ化しているかを確認し、そのパッケージングを再利用してください。うまくいくでしょう。パッケージング方法を学びたくない場合は、直接コードを書こうとする理由はありませんが、ここではそうではありません。

関連情報