우리의 개발 환경은 FreeBSD 10.3입니다. FreeBSD는 기본 패키지가 의존하는 모든 패키지의 최신 버전을 항상 찾는 방식으로 패키지 종속성을 관리한다고 들었습니다. 이것은 사실인 것 같습니다. 그래서 내 질문은 다음과 같습니다.
- 이게 진짜야? 이를 증명할 수 있는 공식 문서가 있나요?
- 이 문제를 극복하는 가장 좋은 방법은 무엇입니까?
답변1
FreeBSD가 패키지를 빌드하는 방법
배포용으로만 패키지를 빌드하는 데 사용되는 FreeBSD 프로젝트이며 때로는 STABLE 브랜치용으로 사용됩니다. 이전 패키지 빌더는 Portbuild라는 분산 시스템을 사용했습니다. 패키지를 구축하기 위해 더 작은 2GB-4GB 시스템을 사용할 것입니다. 이는 오류가 발생하기 쉽고 속도가 느립니다. 주로 오래된 시스템으로 인해 발생합니다. 전체 빌드에는 여전히 일주일이 걸릴 수 있습니다. 오늘날 포장은 Poudriere를 사용하는 단일 대형 기계를 사용하여 제작됩니다. (에서브라이언 드류어리의 웹페이지).
또한보십시오:FreeBSD에서 패키지와 포트 조합을 업데이트하는 방법
Solaris 및 Windows와 마찬가지로 FreeBSD에는 진화하는 ABI(및 API)가 있는 반면 Linux에는 안정적인(정체된?) ABI(및 API)가 있으므로 Linux에서는 이전 바이너리가 최신 OS 버전에서 계속 실행되지만 그렇지 않습니다. Linux가 아닌 운영 체제용. 항상 그런 것은 아닙니다(때때로 그렇습니다).
사용해도 pkg lock
괜찮습니다두통을 일으키다, 그럴지라도잠그다(경고 제공) 이를 이용해 업그레이드를 시도하면 pkg upgrade
여전히 상위 버전이 해당되는 것으로 추정됩니다.더 나은 것(이상적) 그리고 그것은 당신이 하고 싶은 일입니다 - 그래서 당신이 허용할 수 있는 권한을 요청하지만 다른 것들이 깨지지 않을 것이라는 보장은 없습니다. 위의 URL 또는 다음 토론을 참조하세요. "FreeBSD가 pkg를 통해 배포된 운영 체제 버전의 바이너리 패키지 버전을 잠그기를 원하십니까?".
패키지가 잠겨 있는 경우때때로잠금 해제 및 업그레이드 권한을 부여해야 합니다.일하다패키지(및 모든 종속성)의 경우 다른 것이 새 라이브러리와 호환되지 않을 것이라는 보장이 없습니다(따라서 업그레이드도 필요함).만약에현재 1개만 사용 가능합니다.)
Brian Drury의 블로그: "FreeBSD 저널: Poudriere" 생각하다:
"서버에서 portmaster, portupgrade 및 포트 사용을 중지하고 패키지로 전환하세요.
Poudriere를 사용하여 자신만의 패키지 빌드를 설정하는 데는 몇 분밖에 걸리지 않으며 앞으로 많은 시간을 절약할 수 있습니다.
...
여러 FreeBSD 시스템을 유지 관리하고 아직 패키지를 사용하고 있지 않다면 그렇게 해야 합니다. 저는 20개의 서버만 유지 관리하고 있지만 각 시스템에 포트를 구축하는 데 많은 시간이 소요되고 생산 시스템의 리소스가 낭비됩니다. 여러 서버에 포트를 구축할 때 옵션이나 버전이 동기화되지 않게 되기 쉽습니다. 하나의 시스템에서 패키지를 한 번 구축함으로써 시스템의 부하를 줄이고 해야 할 작업량을 줄이며 모든 시스템의 일관성을 유지합니다. 모든 시스템에서 동일한 오류를 처리할 필요는 없으며 빌드 시스템에서만 처리하면 됩니다.
하지만,...
왜 공식 패키지에서 벗어나야 합니까? 포트 프레임워크는 빌드 시간 구성을 변경하기 위한 포트에 대한 옵션 지원을 제공합니다. 모든 애플리케이션이 런타임 구성을 지원하는 것은 아닙니다. 일부 애플리케이션은 활성화된 기능에 따라 다르게 컴파일되어야 합니다. 다른 사람들은 단순히 기본 포트의 기능과 종속성 수를 줄이기로 선택할 수도 있습니다. 서버 관리자의 경우 특정 기본 패키지가 요구 사항을 충족하지 않는다는 사실을 빠르게 발견할 수 있습니다.
그래서...
사용자 정의 패키지를 얻는 방법에는 여러 가지가 있습니다. Pkg는 여러 저장소 사용을 지원합니다. 공식 FreeBSD 저장소를 기본 저장소로 사용하고 사용자 정의 저장소를 보조 저장소로 사용하도록 설정할 수 있습니다. Pkg는 추적할 수 있는 리포지토리 수에 제한이 없으며 우선순위에 따라 재정렬될 수 있습니다. 여러 저장소의 문제점은 현재 유지 관리가 어렵다는 것입니다. Pkg가 설치된 패키지에 추적 중인 저장소와 다른 옵션이나 종속성이 있음을 감지하면 해당 패키지는 가능한 모든 원격 버전에서 다시 설치됩니다. pkg lock PKGNAME 및 pkg Unlock PKGNAME을 사용하여 업그레이드 중에 패키지를 잠그거나 pkg annotate -A PKGNAME 저장소 REPONAME을 사용하여 특정 저장소에 바인딩할 수 있습니다. FreeBSD 패키지와 동기화된 사용자 정의 저장소의 포트 트리를 유지하는 방법에 대한 미묘한 문제도 있습니다. 패키지는 포트 트리의 주간 스냅샷을 기반으로 구축되므로 사용자 정의 리포지토리가 일치하지 않으면 충돌이 발생할 수 있습니다. 필요한 것과 원하는 옵션이 포함된 완전한 패키지 세트를 구축하는 것이 훨씬 간단합니다.
해결책:
Poudriere(대략 poo-dree-year라고 발음하며 프랑스어로 "powder keg"를 뜻함)는 Tinderbox에 대한 더 빠르고 간단한 대안으로 작성되었습니다. Pkg의 저자인 Baptiste Daroussin이 작성했으며 현재는 나와 Baptiste 및 기타 기여자들이 주로 관리하고 있습니다. 이는 빠르게 사실상의 FreeBSD 포트 테스트 및 패키지 구축 도구가 되었습니다. 클러스터 구축을 위한 공식 도구이며테스트용 FreeBSD 포트 프로젝트소위 "exp-runs"에서 패치를 정리합니다. POSIX 셸로 작성되었으며 천천히 C 구성 요소로 이동되고 있습니다. Tinderbox와는 달리종속성 없음, 데이터베이스 필요 없음. 고도로 최적화되어 있으며 모든 작업이 고도로 병렬화되어 있습니다. 감옥을 사용하여 매우 엄격한 조건의 샌드박스 환경에서 포트를 구축합니다. 간단한 명령어만으로 감옥을 한번 만들어보세요. 빌드 프로세스 중에 사용된 각 CPU에 대해 감옥이 자동으로 복제되어 포트에 깨끗한 빌드 공간을 제공합니다. "
나만의 저장소 설정푸드리에포트 유연성과 손쉬운 패키지 관리를 제공합니다.