공급업체에서 제공하는 바이너리에 대한 FHS 호환 설치 디렉터리는 무엇입니까?

공급업체에서 제공하는 바이너리에 대한 FHS 호환 설치 디렉터리는 무엇입니까?

소프트웨어 공급업체는Linux 파일 시스템 계층 표준(FHS)호환되는 데비안 패키지. 바이너리에는 어떤 설치 디렉터리를 사용해야 합니까?

시스템 업그레이드에 포함된 소프트웨어 /bin또는 /usr/bin시스템 업그레이드에 포함될 수 있는 소프트웨어입니다. 이 디렉터리에 바이너리를 설치할 수 있나요? 아니면 이 디렉토리는 기본 시스템 배포자를 위해 예약되어 있습니까?

/usr/local/bin시스템 관리자 설치용 소프트웨어입니다. 다음 내용은 모두 /usr/local시스템 업그레이드로 인해 수정되어서는 안 됩니다. 벤더가 제공한 데비안 패키지를 패키지 저장소에서 다운로드하고 저장소가 apt-add-repository.

/opt/<vendor>/bin괜찮은 것 같습니다. 하지만 다른 공급업체와의 충돌을 피하기 위해 이 디렉토리를 어딘가에 등록해야 하는 것 아닌가요? 그리고 이 디렉토리가 $PATH작동 하도록 FHS 호환 방식으로 통합하려면 어떻게 해야 합니까 ?

답변1

상담하자데비안 방법 개요/선택:

/opt/ 추가 응용 프로그램 패키지의 미리 컴파일된 ".deb"가 아닌 바이너리 배포판(tar'ed..)이 여기에 있습니다.

/opt/bin/ : 최상위 계층 구조와 동일

/opt/include/ : 최상위 계층 구조와 동일

/opt/lib/ : 최상위 계층 구조와 동일

/opt/sbin/ : 최상위 계층 구조와 동일

/opt/share/ : 최상위 계층 구조와 동일

.deb실제로 나는 또한 응용 프로그램이 거기에 패키지를 설치하는 것을 보았습니다. 이상적으로 /bin는 특히 다음과 같이 정의되므로 /usr/bin보존해야 합니다./bin

모든 사용자를 위한 기본 명령 실행 파일(바이너리)(예: cat, ls, cp)(특히 시스템 부팅 또는 복구에 필요한 파일)

실제로 /usr/binDebian 기반 시스템에 타사의 Debian 패키지가 설치되어 있는 것을 흔히 볼 수 있습니다. 이는 /usr/bin일반적으로 변수의 일부 PATH이므로 명령줄을 통해 쉽게 시작할 수 있기 때문일 것입니다. "/bin 또는 /usr/bin에 있는 소프트웨어는 시스템 업그레이드로 덮어쓰여질 수 있습니다"라고 언급하셨습니다. 업그레이드의 목표는 파일에서 특정 파일을 제거하는 것이므로 /usr/bin덮어쓸 수 있지만 일부 .deb패키지가 명시적으로 파일 제거를 지정하지 않는 한(예를 들어 이전 버전의 도킹 스테이션을 제거한 작은 패키지를 발견했습니다) ). 소프트웨어가 특정 바이너리에 의존하는 경우 업그레이드는 위험할 수 있습니다.버전나타나다 /usr/bin.

내가 본 또 다른 일반적인 것은 심볼릭 링크입니다. 입력은 /usr/bin다른 위치에 대한 심볼릭 링크입니다. $PATH귀하의 질문에서 언급했듯이 이는 바이너리를 통합하는 실행 가능한 옵션일 수 있습니다. 게다가 이는 데비안의 정책과도 일치합니다.FHS에 관한 포장 브로셔상태:

4.4. /usr/bin: 대부분의 사용자 명령

4.4.1.목적

이는 시스템에서 실행 가능한 명령의 홈 디렉토리입니다
.

4.4.2.요구사항

/usr/bin에는 하위 디렉터리가 있을 수 없습니다.

따라서 애플리케이션에 하위 디렉터리(예: 하위 모듈 디렉터리가 있는 Python 모듈)가 필요한 경우 애플리케이션을 다른 곳에 배치하는 것이 가장 좋습니다(파이썬이라면, 즉 /usr/lib/python*/dist-packages디렉터리) 및 하위 디렉터리를 만들고 심볼릭 링크를 만듭니다./usr/bin/my_binary

$PATH일부 공급업체에서 본 또 다른 통합은 사용자의 $PATH변수를 편집하여 ~/.bashrc.

"하지만 다른 공급자와의 충돌을 피하기 위해 이 디렉토리를 어딘가에 등록해야 하지 않나요? 언급된 데비안 문서에는 디렉토리 등록에 대해 아무 것도 나와 있지 않으므로 대답은 다음과 같습니다.그럴 필요는 없어그러나 충돌을 정말로 피하고 싶다면 패턴을 따를 수 있습니다 /opt/vendor/package-v-1.2/bin. 즉, 패키지와 릴리스 버전을 지정합니다(아마도 1년).

답변2

/usr/localinstall 과 마찬가지로 디렉토리 계층 에 소프트웨어를 설치할 수 있습니다 /usr. "시스템 관리자가 설치"는 단순히 관리자(또는 단일 사용자 데스크탑 시스템의 경우 사용자)가 시스템의 패키지 관리를 사용하지 않고 직접 설치하기로 결정했음을 의미합니다. 파일을 찾을 때(이는 $PATH라이브러리 검색뿐만 아니라 검색에도 적용됩니다) 에 /usr/local우선순위가 부여됩니다 /usr.

사용 예는 GNU Autotools, CMake 또는 Meson과 같은 일부 빌드 시스템의 기본 설정을 참조하세요. 이들 모두는 기본적으로 설치되지만 /usr/local운영 체제 게시자가 이를 사용하도록 구성해야 합니다 /usr. 관리자는 아무것도 수정할 필요가 없습니다.

일반적으로 설치란 /usr/local애플리케이션이 소스 코드에서 빌드되었음을 의미하고, 설치란 /opt애플리케이션이 다른 사람의 컴퓨터에서 컴파일된 바이너리임을 의미합니다.

.local각 사용자는 자신의 어셈블리를 포함할 수 있는 숨겨진 디렉터리를 집에 가질 수도 있습니다 . 그것은 다음과 같이 사용됩니다 - 등이 /usr/local있을 수 있습니다 .~/.local/bin~/.local/share

아카이브에서 애플리케이션을 설치하는 일반적인 방법 중 하나는 아카이브 내용을 적절한 /opt하위 디렉터리(예: )에 덤프하고 여기 파일과 /opt/graalvm-ce-java11-22.0.0.2애플리케이션 파일 아래의 다른 디렉터리에 대한 기호 링크를 만드는 것입니다. 예는 다음과 같습니다./usr/local/bin/usr/local

/usr/local/bin/java -> /opt/graalvm/bin/java

/opt또한 디렉토리 이름(예: )에 버전 정보를 추가하고 해당 디렉토리에 대한 심볼릭 링크(예:)를 생성하여 /opt/graalvm-ce-java11-22.0.0.2설치된 애플리케이션의 여러 버전을 더 쉽게 전환할 수 있도록 하는 것도 일반적입니다 /opt/grallvm.

관련 정보