dh_usrlocal이 실제로 하는 일

dh_usrlocal이 실제로 하는 일

이것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

디렉토리는 설치 시 생성되고 제거 시 삭제되므로 이는 별 차이가 없는 것처럼 보일 수 있지만 데비안은 패키지의 정책 준수 실패를 다른 오류만큼 심각한 것으로 간주합니다. 정책을 일관되고 엄격하게 준수하는 것은 데비안의 일부입니다. 패키지 품질 보증 주요 요소.

관련 정보