소프트웨어 공급업체는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/bin
Debian 기반 시스템에 타사의 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/local
install 과 마찬가지로 디렉토리 계층 에 소프트웨어를 설치할 수 있습니다 /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
.