![dh_usrlocal이 실제로 하는 일](https://linux55.com/image/116384/dh_usrlocal%EC%9D%B4%20%EC%8B%A4%EC%A0%9C%EB%A1%9C%20%ED%95%98%EB%8A%94%20%EC%9D%BC.png)
이것dh_usrlocal 맨페이지나에게는 약간 신비한 것 같습니다.
패키지 빌드 디렉터리에서 usr/local의 하위 디렉터리를 찾아서 삭제하고, 관리자 스크립트 조각으로 대체하여(-n을 사용하지 않는 한) 설치 시 디렉터리를 생성하고, 패키지가 제거될 때 일치하는 방식으로 제거합니다. 데비안 정책. 이러한 조각은 dh_installdeb에 의해 유지 관리자 스크립트에 삽입됩니다. debhelper 관리자 스크립트 부분에 대한 설명은 dh_installdeb(1)을 참조하십시오.
관리자 스크립트, 스니펫, -n
... 좋아요, 그런데 그게 뭐죠?목적? 실제로 (비어 있는?) 디렉토리를 생성합니까?
누군가 나에게 좀 더 실용적인 방법으로 친절하게 설명해 줄 수 있습니까? 정책의 어느 부분을 읽어야 합니까? 내 앱이 설치되어 있는지 확인해야 합니까 PREFIX=/usr
?
답변1
목적은 패키지가 정책을 준수하도록 돕는 것입니다. 데비안 정책(및 IIRC, 파일 시스템 계층 표준 또는FHS) 공식 데비안 패키지는 다음과 같습니다.허용되지 않음다음 파일 또는 디렉터리를 소유합니다. /usr/local
- 이 디렉터리 트리는 로컬 시스템 관리자에 속합니다.
~에서https://www.debian.org/doc/debian-policy/ch-opersys.html#s9.1.2:
(굵은 강조는 제가 추가했습니다)
9.1.2. 현장별 계획
FHS 규정에 따르면, 패키지/usr/local에 파일을 배치할 수 없습니다., 또는 dpkg로 압축을 풀 수 있도록 파일 시스템 아카이브에 넣거나 관리자 스크립트에서 조작합니다.
하지만,패키지는 /usr/local 아래에 빈 디렉터리를 생성할 수 있습니다.시스템 관리자가 사이트별 파일을 어디에 배치할지 알 수 있도록 합니다. 이는 /usr/local에 있는 디렉토리가 아니라 /usr/local에 있는 디렉토리의 하위 디렉토리입니다. 이러한 디렉터리(/usr/local/*/dir/)가 비어 있으면 패키지를 제거할 때 제거해야 합니다.
이는 /usr/local의 디렉토리가 아닌 /usr/local 아래의 디렉토리에만 적용됩니다. 패키지는 FHS 섹션 4.5에 나열된 디렉터리를 제외하고 /usr/local 디렉터리 자체 내에 하위 디렉터리를 생성해서는 안 됩니다. 그러나 필요한 경우 아래에 디렉터리를 만들 수 있습니다. 4.5에 나열된 디렉터리를 생성했더라도 삭제할 수 없습니다.
/usr/local은 원격 서버에서 읽기 전용으로 마운트될 수 있기 때문에 이러한 디렉토리는 postinst 및 prerm 유지 관리자 스크립트에 의해 생성 및 삭제되어야 하며 .deb 아카이브에 포함될 수 없습니다. 이러한 작업 중 하나라도 실패하더라도 이러한 스크립트는 실패해서는 안 됩니다.
예를 들어, emacsen-common 패키지에는 다음과 같은 내용이 포함될 수 있습니다.
if [ ! -e /usr/local/share/emacs ]; then if mkdir /usr/local/share/emacs 2>/dev/null; then if chown root:staff /usr/local/share/emacs; then chmod 2775 /usr/local/share/emacs || true fi fi fi
postinst 스크립트에서
rmdir /usr/local/share/emacs/site-lisp 2>/dev/null || true rmdir /usr/local/share/emacs 2>/dev/null || true
prerm 스크립트에서. (이 양식은 스크립트가 중단되면 /usr/local/share/emacs 디렉토리가 계속 삭제되도록 하기 위한 것입니다.)
로컬로 패키지를 추가하기 위해 /usr/local에 디렉터리를 만드는 경우 /usr/local의 설정이 /usr의 해당 설정보다 우선하도록 해야 합니다.
그러나 /usr/local과 그 내용은 로컬 관리자만 사용할 수 있으므로 패키지는 적절한 작동을 위해 /usr/local에 있는 파일이나 디렉터리의 존재에 의존할 수 없습니다.
/usr/local 디렉토리 자체와 이 패키지에 의해 생성된 모든 하위 디렉토리는 (기본적으로) 권한 2775(그룹 쓰기 가능 및 그룹 ID 설정)를 가지며 root:staff가 소유해야 합니다.
당신은 또한 볼 수 있습니다https://wiki.debian.org/FilesystemHierarchyStandard
dh_usrlocal
정책에 제공된 예에 따라 설치/제거 시 해당 디렉터리를 패키지에서 제거하고 패키지 스크립트( .postinst
및 스크립트)의 코드로 대체하여 해당 디렉터리를 생성/삭제합니다..prerm
디렉토리는 설치 시 생성되고 제거 시 삭제되므로 이는 별 차이가 없는 것처럼 보일 수 있지만 데비안은 패키지의 정책 준수 실패를 다른 오류만큼 심각한 것으로 간주합니다. 정책을 일관되고 엄격하게 준수하는 것은 데비안의 일부입니다. 패키지 품질 보증 주요 요소.