pkg_add를 사용하여 FreeBSD 패키지 업그레이드 처리

pkg_add를 사용하여 FreeBSD 패키지 업그레이드 처리

pkg_addFreeBSD의 명령을 사용하여 여러 컴퓨터에 한 번 설치하는 일종의 시나리오에서 바이너리 패키지를 설치하고 업그레이드하려고 합니다 . 새 패키지를 설치할 때는 잘 작동하지만 업그레이드로 인해 당황스럽습니다. 예를 들어, 다음과 같은 패키지를 업그레이드하려는 경우의존하다다른 패키지로는 설치할 수 없습니다.

# pkg_add /path/to/somepackage-2.0.tbz
pkg_add: package 'somepackage' or its older version already installed

-f이 시점에서 다음 명령을 전달하면 이전 버전의 패키지를 삭제할 수 있습니다 pkg_delete.

# pkg_delete -f somepackage-1.0
pkg_delete: package 'somepackage-1.0' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
anotherpackage-1.0

하지만...그리고 이것이 가장 큰 문제입니다...이제 종속성 정보가 사라졌습니다! 업그레이드를 설치할 수 있습니다.

# pkg_add /path/to/somepackage-2.0.tbz

이제 삭제 시도가 오류 없이 성공할 것입니다.

# pkg_delete somepackage-2.0

이를 적절하게 처리하려면 어떻게 해야 합니까("정상적으로"는 "다시 빌드/다시 설치 및 전체 종속성 체인을 요구하지 않고 종속성 정보를 보존하는 방식으로"를 의미함).

감사해요!

답변1

찾은 것처럼 pkg_add포트를 정상적으로 업그레이드할 수 없습니다. 그러나 패키지 portupgrade는 이 작업을 매우 훌륭하게 수행하며 제가 사용하고 권장하는 방법입니다(이 방법이 마음에 들지 않으면 다른 방법도 사용할 수 있습니다).

포트가 설치되면 간단히 실행하면 portupgrade -aPP패키지를 사용하여 시스템에 설치된 모든 포트가 업그레이드됩니다. 포트를 업데이트하지 않으려면 실행하여 portupgrade -RPP [category/port]특정 포트와 해당 포트가 종속된 포트를 업그레이드할 수 있습니다. 인수 없이 프로그램을 실행하면 현재 디렉토리에 속한 포트가 업그레이드됩니다(즉 , 소스에서 포트를 빌드하는 옵션이 없으면 cd /usr/ports/security/openssl ; portupgrade업그레이드 됩니다). 포트 디렉토리에 있지 않으면 도움말이 표시됩니다( 옵션과 동일).openssl-PP-h

편집하다:
기본적으로 portupgrade는 환경 변수에 의해 정의된 디렉터리에 패키지가 있는 경우 패키지를 설치합니다 PKG_PATH(기본값은 $PACKAGES/All, $PACKAGES기본값은 $PORTSDIR/packages이므로 기본 경로는 /usr/ports/packages/All).

$PKG_SITES존재하지 않는 경우 기본 설정에 따라 (하위 폴더가 있는 URI를 사용 Latest하고 All기본값은 없음) 또는 $PACKAGEROOT(아래에 일반 미러 경로가 있는 URI를 사용하며 기본값은 "ftp://ftp.freebsd.org") 에서 패키지를 다운로드합니다 .

이를 수행하는 한 가지 쉬운 방법은 한 시스템을 사용하여 다른 시스템에 설치될 패키지를 빌드/캐시하는 것입니다.

  • 포트 디렉토리의 포트 트리에서 패키지를 빌드할 수 있습니다 make package(포트도 설치됨).
  • 를 사용하여 한 시스템을 업그레이드하고 다른 시스템에서 사용할 패키지 파일을 캐시할 수 있습니다 portupgrade. 앞서 언급한 명령은 기본 디렉터리(위 참조)에 패키지 파일을 캐시합니다.
  • portupgrade -aPPF또는 를 사용하여 portupgrade를 사용하여 패키지만 가져오고 설치하지 않을 수 있습니다 portupgrade -RPPF [category/port].

캐시된 패키지 파일이 있으면 NFS, FTP, HTTP 등을 통해 디렉터리를 공유할 수 있습니다. 다른 컴퓨터에서 파일에 액세스할 수 있는 한. 캐싱 서버를 가리키도록 PACKAGES또는 적절한 값을 사용 하여 설정합니다 . PKG_SITE일반적인 portupgrade명령을 실행하면 캐싱 서버에서 패키지를 가져와 설치해야 합니다.

참고: 올바르게 작동하려면 포트 트리가 모든 서버에서 최신 상태여야 합니다 portupgrade. 로컬 포트 ​​트리에 있는 모든 버전으로 업데이트를 시도합니다. 모든 컴퓨터에 동일한 포트/패키지를 설치하려면 하나의 서버 /usr/ports디렉토리(예: NFS를 통해)를 공유하고 이를 다른 모든 서버에 마운트하는 것이 가장 쉬울 수 있습니다.

답변2

어쩌면 pkg_replace당신이 찾고있는 것일 수도 있습니다.

지금은 한동안 그만두고 사용하고 있어요. 내 FreeBSD 머신 중 하나가 빌드 서버 역할을 하며 portmaster다른 머신의 모든 패키지를 빌드(사용)합니다. 저는 pkg_replace다른 모든 컴퓨터에 이러한 사전 빌드 패키지를 설치하는 데 사용하고 있습니다.

http://www.FreeBSD.org/cgi/url.cgi?ports/ports-mgmt/pkg_replace/pkg-descr

답변3

또는 여기에 설명된 Portsnap 또는 CVSup을 사용할 수도 있습니다.

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html

관련 정보