FreeBSD 포트: 모든 것을 다시 컴파일하려고 했지만 일부 패키지가 "제거 오류"/"이미 설치됨"으로 인해 실패했습니다.

FreeBSD 포트: 모든 것을 다시 컴파일하려고 했지만 일부 패키지가 "제거 오류"/"이미 설치됨"으로 인해 실패했습니다.

pkg install오랫동안 저는 바이너리 패키지를 통해서만 사용했습니다. 그런 다음 추가 옵션을 활성화해야 하므로 소스에서 패키지를 컴파일해야 합니다. 너무 잘 진행되고 있어서 /usr/ports이 기계 로 완전히 전환하고 싶습니다 .

정리(어딘가에서 얻었음):

pkg autoremove
portsclean -C -D -DD
portsnap auto
portsclean -C -D -DD

그럼 하세요 portupgrade -af --batch. 이 명령의 결과는 다음과 같습니다.

** Listing the failed packages (-:ignored / *:skipped / !:failed)
        ! multimedia/libvpx (libvpx-1.9.0)      (uninstall error)
        ! databases/db5 (db5-5.3.28_7)  (uninstall error)
        * databases/ruby-bdb (ruby26-bdb-0.6.6_8)
        * ports-mgmt/portupgrade (portupgrade-2.4.16,2)
        * devel/apr1 (apr-1.7.0.1.6.1_1)
        [...]

...그리고 건너뛴 패키지가 더 많습니다.

root:/usr/ports/multimedia/libvpx # make install
===>  Installing for libvpx-1.9.0
===>  Checking if libvpx is already installed
===>   libvpx-1.9.0 is already installed
      You may wish to ``make deinstall'' and install this port again
      by ``make reinstall'' to upgrade it properly.
      If you really wish to overwrite the old port of libvpx
      without deleting it first, set the variable "FORCE_PKG_REGISTER"
      in your environment or the "make install" command line.
*** Error code 1

Stop.
make: stopped in /usr/ports/multimedia/libvpx

for 와 같은 것입니다 databases/db5. 그래서 두 디렉토리 모두에서 실행하고 make deinstall다시 시작합니다. 그러나 여기에는 다음 줄이 나열되어 있는 유사한 메시지로 끝납니다.make reinstallportupgrade -af --batch!

        ! multimedia/libvpx (libvpx-1.9.0)      (uninstall error)
        ! databases/db5 (db5-5.3.28_7)  (uninstall error)
        ! devel/boost-libs (boost-libs-1.72.0_2)        (uninstall error)
        ! devel/cmake (cmake-3.18.3)    (uninstall error)

그래서 또 다른 "제거 오류"입니다.

이 문제를 처리하는 올바른 방법은 무엇입니까?

고쳐 쓰다:Portupgrade가 원인인 것 같습니다. 그것하다Portmaster와 잘 작동합니다. 지금 바로:

env BATCH=yes portmaster -afGyd --no-confirm

매분마다 "y"와 "enter"를 누르느라 바쁘지 않도록 도구를 설득하는 방법을 알아내는 데 시간이 좀 걸렸지만 도구는 "설치", "다시 설치" 또는 "업그레이드"를 통해 모든 패키지를 검사했습니다. . 오류가 없습니다.

그런 다음 portupgrade -af --batch다시 시도했는데 "제거 오류"가 다시 발생했습니다.

다른 실행으로 이것을 확인하면 답변으로 작성하겠습니다.

업데이트 2:Portmaster를 다시 실행하면 일부 패키지에 대해 "제거 오류"가 발생했습니다. 다른 날 나중에 다시 시도했는데 portsnap autoPortmaster가 내 모든 패키지를 매우 잘 처리했습니다. 그래서 문제는 왔다 갔다 합니다. 나는 지금 포기한다. Portmaster의 마지막 전체 실행이 성공적이었으므로 여기서 마무리하겠습니다. 일일 크론 작업을 설치했습니다.

#!/bin/sh
set -e
portsnap auto
env BATCH=yes portmaster -aGyd --no-confirm
env BATCH=yes portmaster -ys --no-confirm
service -R
echo "All done!"

이것이 좋을 것이기를 바랍니다.

업데이트 3:위 스크립트를 몇 개의 env BATCH=yes portmaster -afGyd --no-confirm수동 스크립트와 함께 삽입했는데 오류는 발생하지 않았지만 모든 패키지를 다시 설치했습니다.

종합: 앞으로는 FreeBSD 설치 시 항상 포트를 사용할 것입니다. 미리 컴파일된 패키지는 pkg잘 작동하지만 언젠가는 미리 컴파일된 버전과 다르게 설정된 작은 패키지에 작은 구성이 필요합니다. 그런 다음 포트가 필요합니다. 또한 그날에는 운영 체제 인프라의 중요한 부분을 사용하는 방법을 다시 배울 시간이 없을 수도 있습니다. 그래서 저는 전체적으로 포트를 사용하는 것을 추천합니다. 여러 대의 컴퓨터가 있다면 Poudriere를 살펴보세요(직접 시도해본 적은 없지만 언젠가는 시도해 볼 수도 있습니다).

답변1

pkg autoremove당신이 생각하는 대로 되지 않습니다.

pkg autoremove는 종속성 해결 중에 설치되어 더 이상 필요하지 않은 고아 패키지를 제거하는 데 사용됩니다.

당신이 해야 할 일은 pkg delete <pkg>제거하려는 콘텐츠를 타겟팅하는 것입니다. 이를 사용하려면 포트를 설치하는 데 여러 단계를 거쳐야 합니다 make.

첫 번째 단계 /usr/ports/<pkg>:

make config fetch checksum depends extract patch configure build

그런 다음 작업 파일을 삭제하거나 make install작업 파일과 다운로드한 프로그램을 모두 삭제합니다.make cleanmake distclean

이 모든 것은 포트 트리와 패키지를 최신 상태로 유지했다고 가정합니다.

탁월함을 따라야 해FreeBSD 매뉴얼

관련 정보