web-dev-qa-db-ja.com

削除中に.deb:dpkg:warningを作成した後、ディレクトリ/ 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

5
Patryk

一般に、この警告は完全に無害で正常です。 dpkgがパッケージを削除する(または削除しようとする)と、そのパッケージのインストールの一部として作成されたすべてのファイルとディレクトリが削除されます。ここで、このようなシナリオで削除の候補となるディレクトリにいくつかのファイルがあり、dpkgがこれらのファイルを認識していないとします。これは、インストール中またはインストール後にマシンで生成されたため、またはユーザーによって作成されたために発生する可能性があります。その後、指示がない限り、dpkgはそれらのファイルを削除しません。デフォルトでは、空でないディレクトリは削除されないため、このような場合、これらのファイルを含むディレクトリは削除されません。つまり、要約すると、パッケージが削除された後、基本的に空のディレクトリ(複数可)がいくつかのマシンで生成されたファイルなどで終わる可能性があります。これは問題ではありません。これらは手動で削除できます。

上記のデフォルトはすべて賢明なデフォルトであることに注意してください。ここにバグはありません。

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

もう少しコンテキストを教えてください。ディストリビューションに同梱されているものを使用するのではなく、独自のzsh Debianパッケージを作成しようとしているのはなぜですか。

これを本当に実行したい場合は、簡単なヒントを次に示します。ディストリビューション(またはDebian)がzshをパッケージ化する方法を確認し、パッケージを再利用します。正常に動作するはずです。パッケージングの方法を学ぼうとしているのでない限り、自分で書こうとする理由はありません。

9
Faheem Mitha