.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파일 계층 표준을 위반하는 데비안 바이너리 패키지의 일부로 파일을 설치했으며잘못된. 이렇게 하지 마십시오. 사용자 바이너리는 에 들어가야 합니다 /usr/bin. 예를 들어 라이브러리는 에 들어가야 합니다 /usr/lib. 나는 당신의 패키지가 그것을 생성했다고 가정합니다 /usr/local/bin. 왜냐하면 dpkg당연히 그것에 대해 아직 모르기 때문입니다. (데비안 패키지에 파일/디렉토리를 포함하는 것은 FHS를 위반하므로 데비안 정책을 위반하는 것입니다 /usr/local). 그래서 패키지를 제거할 때 파일을 삭제하려고 시도합니다. 설치를 중지 /usr/local하면 문제가 해결됩니다.

좀 더 자세한 배경 정보를 제공해 주시겠습니까? 배포판과 함께 제공되는 패키지를 사용하는 대신 자체 zsh Debian 패키지를 구축하려는 이유는 무엇입니까? 어떤 배포판을 사용하고 있습니까?

정말로 이 작업을 수행하고 싶다면 여기에 간단한 팁이 있습니다. 배포판(Debian 포함)이 zsh를 어떻게 패키징하는지 확인하고 해당 패키징을 재사용하세요. 잘 작동할 겁니다. 패키징 방법을 배우고 싶지 않다면 직접 코드를 작성하려고 할 이유가 없지만 여기서는 그렇지 않다고 생각합니다.

관련 정보