손상된 패키지를 관리하는 방법

손상된 패키지를 관리하는 방법

때때로 Ubuntu 사용자는 다음에서 오류가 발생합니다.apt또는apt-get, 형식은 다음과 같습니다.

The package some-package needs to be reinstalled, but I can't find an archive for it.

손상된 패키지가 중요하고 종속성이 많더라도 오류를 재현하고 안전한 수정 방법을 찾을 수 있도록 이 오류의 원인을 알고 싶습니다.이 비트~의APT 소스 코드약간의 단서를 제공할 수 있지만 패키지가 오류를 일으키는 상태를 얻는 방법을 모르겠습니다.

내 (Ubuntu MATE 17.10) 시스템에서 테스트할 때 이 오류를 어떻게 생성할 수 있습니까?

이는 다음에 의해 프롬프트됩니다.이 최근 Ask Ubuntu 질문그리고 이 오류에 대한 질문을 마무리하는 데 대한 나의 오랜 불편함Apt/Synaptic은 패키지를 다시 설치해야 하지만 해당 아카이브를 찾을 수 없습니다., 그 답변은 dpkg --force-all문제가 있는 패키지를 제거하는 데 사용됩니다.익명 피드백이 솔루션이 많은 사용자에게 효과가 있었음을 암시하지만, 이 방법을 사용하면 --force-all나중에 문제가 발생하지 않을 것이라고 확신할 수 없습니다. 또는 APT와 같은 중요한 패키지를 제거하기 위해 이 방법을 사용하는 것이 좋은 생각인지도 모르겠습니다.

답변1

"Apt/Synaptic이 패키지를 다시 설치해야 하지만 해당 아카이브를 찾을 수 없습니다"라는 오류는 때때로 구체적이지 않습니다.

이 오류가 가장 자주 나타나는 것은 Ubuntu를 한 버전에서 다른 버전으로 업그레이드할 때입니다.

메모: Ubuntu는 apt-get에서 apt로 변환 중이지만 이 게시물에서는 apt-get을 사용하고 있습니다. 추가 정보는 man apthttps://www.debian.org/doc/manuals/debian-reference/ch02.en.html

이 오류의 가장 일반적인 원인은 사용자가 패키지를 설치한 다음 일반적으로 다음과 같이 .deb를 제거한 경우입니다.sudo apt-get clean

http://manpages.ubuntu.com/manpages/zesty/man8/apt-get.8.html

깨끗한

       clean clears out the local repository of retrieved package files.
       It removes everything but the lock file from
       /var/cache/apt/archives/ and /var/cache/apt/archives/partial/

그런 다음 어느 시점에서 dpkg --reconfigure사용자에 의해 또는 업그레이드에 의해 호출되거나, 어느 시점에서 사용자가 패키지를 다시 설치하거나 sudo apt-get --reinstall foo일부 변형을 다시 설치하려고 시도합니다.

패키지가 제거되었거나(드물게) 저장소가 시스템에서 제거되었거나 업그레이드하고 패키지가 새 저장소에 없기 때문에 apt가 저장소에서 .deb를 찾을 수 없는 경우 "Apt/Synaptic" 오류가 발생합니다. 패키지를 다시 설치해야 하는데 해당 아카이브를 찾을 수 없습니다"


그러나 오류는 다른 원인으로 인해 발생할 수 있습니다.

dpkg 매뉴얼 페이지에서 관련 섹션을 인용합니다(http://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.html자세한 내용은 )

패키지에 대한 정보 dpkg는 사용 가능한 패키지에 대한 일부 유용한 정보를 유지 관리합니다. 정보는 상태, 선택 상태 및 플래그의 세 가지 클래스로 나뉩니다. 이 값은 주로 dselect를 사용하여 변경하기 위한 것입니다.

패키지 상태

   not-installed
          The package is not installed on your system.

   config-files
          Only the configuration files of the package exist on the system.

   half-installed
          The  installation  of  the  package  has  been  started, but not
          completed for some reason.

   unpacked
          The package is unpacked, but not configured.

   half-configured
          The package is unpacked and configuration has been started,  but
          not yet completed for some reason.

   triggers-awaited
          The package awaits trigger processing by another package.

   triggers-pending
          The package has been triggered.

   installed
          The package is unpacked and configured OK.

행위

   -i, --install package-file...
          Install the package. If --recursive or -R option  is  specified,
          package-file must refer to a directory instead.

          Installation consists of the following steps:

          1. Extract the control files of the new package.

          2.  If  another version of the same package was installed before
          the new installation, execute prerm script of the old package.

          3. Run preinst script, if provided by the package.

          4. Unpack the new files, and at the same time back  up  the  old
          files, so that if something goes wrong, they can be restored.

          5.  If  another version of the same package was installed before
          the new installation, execute  the  postrm  script  of  the  old
          package.  Note  that  this  script is executed after the preinst
          script of the new package, because new files are written at  the
          same time old files are removed.

          6.   Configure   the   package.  See  --configure  for  detailed
          information about how this is done.

--패키지 구성...|-a|--보류 중

          Configure  a  package  which  has  been  unpacked  but  not  yet
          configured.  If -a or --pending is given instead of package, all
          unpacked but unconfigured packages are configured.

          To reconfigure a package which has already been configured,  try
          the dpkg-reconfigure(8) command instead.

          Configuring consists of the following steps:

          1.  Unpack  the  conffiles, and at the same time back up the old
          conffiles, so that they can be restored if something goes wrong.

          2. Run postinst script, if provided by the package.

   /var/lib/dpkg/status

          Statuses  of  available packages. This file contains information
          about whether a package is marked for removing or  not,  whether
          it  is  installed  or  not,  etc.  See section INFORMATION ABOUT
          PACKAGES for more info.

매뉴얼 페이지가 tl;dr ->인 경우 설치의 일부로 .deb / dpkg / apt는 사전/사후 설치 스크립트 및 기타 기능을 실행합니다. 다양한 이유로 이러한 설치/제거 스크립트가 실패하는 경우 패키지는 "반 설치됨"(또는 설치되지 않음/설치되지 않은 상태)으로 표시됩니다. 깨끗하지 않은 상태에서는 "Apt/Synaptic이 패키지를 다시 설치해야 하지만 해당 아카이브를 찾을 수 없습니다"라는 오류가 표시될 수도 있습니다. 이 예에서 문제는 아카이브 누락이 아니라 다시 실행해도 해결할 수 없는 사전/사후 설치 스크립트의 문제입니다. 따라서 오류는 때때로 구체적이지 않습니다.


손상된 패키지를 관리하는 방법

  1. 먼저 적절한 ppa / 리포지토리(예: 유니버스 또는 필요한 모든 리포지토리)가 활성화되어 있는지 확인하여 먼저 종속성을 수정해 보십시오.

    그럼 악명 높은

    sudo apt-get install -f
    

    읽다도움이 필요한 경우 모든 출력 및 오류 메시지를 여기에 게시하고 명령 및 출력을 게시하세요.

  2. 재구성해 보세요

    sudo dpkg --configure -a
    

    그러면 구성 스크립트가 실행됩니다. -a 대신 패키지를 지정할 수 있지만 문제가 있을 경우 -a가 더 유용합니다.

    읽다도움이 필요한 경우 모든 출력 및 오류 메시지를 여기에 게시하고 명령 및 출력을 게시하세요.

    실패한 스크립트를 살펴보고 가능하다면 스크립트의 오류/문제를 수정하십시오.

  3. 필요한 경우 강제로 문제가 있는 패키지를 제거해 보십시오. 중요한 패키지나 더 나쁜 패키지 세트를 강제로 제거할 수 있으므로 매우 주의해야 합니다. 다음 명령은 공손한 것부터 덜 정중한 것, 그리고 완전한 강제로 진행됩니다. 순서대로 시도해 보세요.

    sudo dpkg --remove $broken_package
    sudo dpkg --remove --force-remove-reinstreq $broken_package
    sudo dpkg --remove --force-all $broken_package
    

    이들 중 하나라도 작동하면 run 을 실행 하고 및/또는 sudo apt-get update && sudo apt-get upgrade실행해야 할 수도 있습니다 .sudo apt-get -f installsudo dpkg --configure -a

  4. 실패하면 패키지를 수동으로 제거해야 합니다. 여기에는 시스템의 모든 구성 요소를 찾아서 수동으로 삭제하는 작업이 포함될 수 있습니다.

    다음 절차를 사용하십시오.

    dpkg 정보 제거(위 참조)

    cd /var/lib/dpkg/info
    sudo rm -i package_name*
    

    여기서는 필요 이상으로 제거하지 않도록 주의하십시오.

    마지막으로 문제가 있는 패키지를 제거합니다.

    sudo dpkg --remove --force-remove-reinstreq package_name
    

    그런 다음 apt를 사용할 수 있어야합니다

    sudo apt-get update
    sudo apt-get install -f
    sudo apt-get upgrade
    
  5. 필요한 경우에만 시스템에 남아 있는 파일을 찾아 수동으로 제거하십시오. 이는 수동 절차이며 /etc매뉴얼 페이지 또는 공유 데이터의 구성 파일을 포함할 수 있습니다. 찾기 또는 찾기를 사용하여 잠재적으로 남아 있는 파일을 식별합니다.

    당연히 시스템 파일을 삭제할 때는 각별히 주의해야 합니다. rm -Rf해당 명령이 수행하는 작업을 이해 하지 못한 채 이해하지 못하고 사용하지 않는 항목을 삭제하지 마십시오 . 옵션에서 확인을 요청 rm -i하므로 더 나을 것입니다 .-i


이 문제를 재현해 보세요

/var/lib/dpkg/info패키지의 dpkg 상태 파일을 수동으로 편집 하고 상태를 절반 설치로 변경하면 이 오류 메시지를 재현할 수 있습니다.

sudo nano /var/lib/dpkg/info/some_package

상태 줄을 편집하여 읽습니다.

상태: 제거 재설치가 절반만 설치됨

그런 다음 실행해 보십시오 apt-get.

그래도 작동하지 않으면 ppa에서 패키지를 설치하고 apt-get clean을 실행하고 ppa를 제거한 다음 패키지를 다시 설치하거나 재구성해 보십시오.

긴 게시물을 올려서 죄송합니다. "Apt/Synaptic에서 패키지를 다시 설치해야 하지만 이에 대한 아카이브를 찾을 수 없습니다."라는 복잡한 오류 메시지의 원인과 해결 방법에 대한 통찰력을 얻을 수 있기를 바랍니다.

관련 정보