업데이트를 시도 할 때 "MergeList 문제"또는 "상태 파일을 구문 분석 할 수 없습니다"오류를 어떻게 수정합니까?


355

컴퓨터는 나 에게이 출력을 창으로 주었다.

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

이 문제를 어떻게 해결할 수 있습니까?


7
이 운영 체제가 업데이트를 처리하는 방법을 어색하게 당황스럽게합니다. 지금도 사용자가 특별한 오용을하지 않으면이와 비슷한 것들이 필요합니다.
matt

답변:


485

이 터미널 명령은 문제를 해결해야합니다.

먼저 터미널을 열어 병합 목록을 제거하고 ( Ctrl+ Alt+ T를 눌러 실행)이 명령을 실행하십시오 * :

sudo rm -vf /var/lib/apt/lists/*

다음으로 간단한 업데이트를 실행하여 새 업데이트를 생성하십시오.

sudo apt-get update

다음은 이 문제에 대한 버그 보고서 (및 다른 하나 )입니다. 이제 수정되어 새로운 형식의 파일을 만들지 않아야합니다. 그러나 잘못된 형식의 파일이 이미있는 경우이 게시물에 설명 된대로 해당 파일을 제거해야합니다.


* rm에 사용되는 옵션은 -v상세합니다

-v, --verbose는 수행중인 작업을 설명합니다.

그리고 -f

-f, --force는 존재하지 않는 파일과 인수를 무시하고 프롬프트하지 않습니다.

명령 행 또는 사용중인 옵션이 확실하지 않은 경우 항상 해당 명령 의 매뉴얼 페이지 를 참조하십시오 . 이들은 남자와 예제에 대한 명령을 검색하여 인터넷에 액세스 할 수있는 사람 RM 또는 예에 대한 터미널에서 정확히 같은 명령을 입력하여 동일한 정보에 액세스 할 수 있습니다 man rm터미널의 바닥에있을 것입니다 페이지를 종료하기위한 지침 등 이

매뉴얼 페이지 옵션 그림


8
한 개인은이 두 단계를 여러 번 수행해야하지만 결국에는 효과가 있다는 것을 알게되었습니다.
John S Gruber

5
명령 -vf끝에 를 입력하는 것이 이상합니다 rm.
키이스 톰슨

6
그것은 나를 위해 문제를 해결하지 못했습니다. 업데이트는 여전히 그 오류를 보여줍니다.
해병대

1
이것은 반복되는 문제입니다. 가끔씩 계속 발생합니다. 아무도이 문제의 원인을 알고 있습니까?
Rushil Paul

1
나는 이해 능력 @jasser
Allan

82

터미널을 열고 한 번에 하나씩 다음 명령을 실행하십시오.

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

또한보십시오:


1
-vf는 무엇을합니까?
speedox

5
@speedox에있어서 man rm, -v'상세'수단 및 -f방법 "힘". 즉, 프롬프트없이 지정된 모든 파일을 제거하고 사용자에게 수행중인 작업을 알려줍니다.
fouric

제 경우 sudo apt-get update에는 문제를 해결하는 것입니다. Allan이 최신 버전의 apt를 자동으로 수정했다고 언급 했으므로 먼저 업데이트를 시도하십시오.
ThorSummoner

23

편집 할 때 문제가 발생했습니다 /var/lib/dpkg/status. 편집하기 전에 만든 백업에서 복원하십시오. 물론 백업을 했습니까?

백업하지 않았으므로 신중하게 다시 편집하십시오 . 더 많은 손상을 입히지 마십시오.

/var/lib/dpkg/status.old참조 점으로 사용할 수 있습니다 . status마지막 dpkg으로 실행 되기 전의 파일 백업입니다 . 운영

diff /var/lib/dpkg/status.old /var/lib/dpkg/status

차이점을 볼 수 있습니다. 수동으로 변경 한 내용을 취소하고 마지막 dpkg실행 에서 변경 한 내용을 유지하십시오 .

당신이 정말로 파일을 복구 관리 할 수없는 경우, 복사 /var/lib/dpkg/status.old이상 /var/lib/dpkg/status. 올바른 형식이지만 오래된 패키지 데이터베이스가 제공됩니다.

/var/lib/dpkg/status정상적인 작업에서는 편집 할 필요가 없습니다 . 상황이 심각하게 잘못되어도 /var/lib/dpkg/status관리자의 개입이 필요한 것은 아닙니다. 문제가 무엇이든간에 문제를 crossplatformui해결하는 더 좋은 방법이있을 것입니다. 내가 편집해야 할 유일한 시간 /var/lib/dpkg/status은 업스트림 Packages파일이 손상 되었을 때 뿐 이었습니다.


나는 또한 당신이 coz를 도울 수 있다면 crossplatformui를 제거하기 위해 언급 한 더 좋은 방법을 알고 싶습니다. 나는 그것을 제거하는 가능한 모든 방법을 시도하고 많은 해결책을 찾았지만 내가 언급 한
것만

1
@Nirmik에 대해 모른다 crossplatformui. 별도의 질문으로 질문하십시오. dpkg많은 비공식 소스를 포함 하여 10 년 동안을 (를) 사용한 후에는 status파일 을 편집 할 필요가 거의 없었 으며 타사 저장소가 손상된 경우에만 매우 필요했습니다 .
Gilles

알았어 ... 다시 한번 감사드립니다 .... 당신이 새로운 질문으로 게시 할 것을 제안합니다 :) 또한 고급 사용자 인 것처럼 비 기능적 핫 만들기에 대해 알고 싶은지 묻고 싶습니다. -KTEYS 작품 ?? (무선 키가 작동하지 않음)
Nirmik

새로운 것을 대신하여 오래된 것을 넣으려고했지만 나를 고치지 않았습니다. :-(
Stéphane Gourichon

1
re : {/ var / lib / dpkg / status}를 편집 할 때 문제를 일으켰습니다. 아니요, 아니요,이 파일을 건드리지 않았습니다. :) 그러나 이것은 내 문제를 해결하는 유일한 해결책입니다. 케이스. 감사합니다.
ruslo


16

패키지 관리자 문제 해결 절차 의 2-5 단계를 수행하면 대개이 문제가 해결됩니다.

내용은 2 단계 , 사용하지 않도록 모든 당신의있는 PPA를. 하나만 선택 취소하는 것과 같은 방법으로 소프트웨어 소스에서 모든 항목을 선택 취소 할 수 있습니다. 특정 PPA를 비활성화하는 방법을 참조하십시오 . . 나중에 다시 활성화 할 수 있습니다.

내용은 3 단계 , 당신이 할 수있는 모든 프로그램을 닫습니다. 웹 브라우저를 열어 두어 지시 사항을 미리 확인하는 것이 안전 할 것입니다. 그러나 패키지 관리자가 실행되고 있지 않은지 확인하는 것이 특히 중요합니다 . 여기에는 Software Center, Software Updater (이전 버전의 Ubuntu의 Update Manager), Synaptic 및 Gdebi가 포함됩니다. 또한 같은 명령 줄 패키지 관리 유틸리티를 포함하고 apt-get, dpkg하고 aptitude.

경우 참고 다른 사용자가 동시에 로그온 가능한 경우가 로그 오프해야합니다.

들어 단계 4 , 단말기 창을 열고. 사용하는 데스크톱 환경에 관계없이이 작업을 수행하는 한 가지 방법은 Ctrl+ Alt+ 를 누르는 것 T입니다.

의 경우 5 단계 , 터미널 창에서 다음 명령을 실행합니다 :

ubuntu-support-status
sudo grep -R proxy /etc/apt/*
grep proxy  /etc/environment
echo $http_proxy
echo $ftp_proxy
grep proxy /etc/bash.bashrc
grep proxy ~/.bashrc
cat /etc/apt/apt.conf
sudo fuser -vvv /var/lib/dpkg/lock
sudo fuser -vvv /var/cache/apt/archives/lock
cat /etc/lsb-release
uname -a
sudo rm /var/lib/apt/lists/lock 
sudo rm  /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status  ||  sudo cp /var/backups/apt.extended_states.0 /var/lib/dpkg/status
sudo mv /var/lib/dpkg/available /var/lib/dpkg/available-bad
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
sudo dpkg --configure -a
sudo dpkg --clear-avail
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade
find /etc/apt -name '*.list' -exec bash -c 'echo -e "\n$1\n"; cat -n "$1"' _ '{}' \;

나는 2014 년 3 월 2 일에 PackageManagementTroubleshoootingProcedure 에서 그 약어를 복사했습니다 . 이러한 명령은 과거에 발전 했으며이 기사에서 권장되는 명령 은 나중에 다시 변경되거나 확장 될 수 있습니다 . 따라서 5 단계 부터 작업 할 수 있습니다 . (그 기사 작성 / 편집 "우분투 문서 위키 참여자"로 - 특히 마크 Rijckenberg이 --is CC-BY-SA 3.0 라이선스 . 적절한 속성과 여기에 포함 할 수 있습니다)

이러한 명령 중 일부는 문제를 해결하려고 시도하며 진단 정보를 표시 할 수도 있습니다. 다른 사람들은 질문에 포함 시키거나 도움을 줄 수있는 사람에게 제공 할 수있는 문제에 대한 귀중한 정보를 표시합니다. (또는, 당신의 능력에 따라 가능하게 할 수있다 당신을 진단하고이를 해결하기 위해.)

종종이 방법으로 문제를 해결하지만 문제가 해결되지 않는 경우 종종 수정하기에 충분한 정보를 제공합니다.

해당 명령을 수동으로 입력 할 필요는 없습니다. 복사하여 붙여 넣을 수 있습니다. 그래도 각각 붙여 넣어 실행하는 것이 좋습니다. 이것은 어떤 명령에서 어떤 출력이 나오는지 더 명확하게 만듭니다.


하나씩 실행하는 대신 전체 블록을 복사하여 붙여 넣습니다. 이것에 대한 몇 가지 명령은 쓸모없고 일부는 실패했지만 마침내 내 경우에는 도움이됩니다
phuclv

11

또한이 문제는 저장소에 소스가 너무 많을 때 발생합니다.

위에 게시 된 솔루션 및 / 또는 아마도 런치 패드에서 권장되는 솔루션을 사용해보십시오.

sudo mv /var/lib/apt/lists /var/lib/apt/lists-old
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get update

어떻게하는지 알려주십시오.


감사합니다! makedir없이 DSL에서는 작동하지 않았습니다.
Doug

4

비슷한 오류가 발생했습니다.

Reading package lists... Error!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/dpkg/status
E: The package lists or status file could not be parsed or opened.

나는 비슷한 제안을 따라 복사했다 status-old.

$ head /var/lib/dpkg/status
$ head /var/lib/dpkg/status-old

어떤 이유로 내 상태 파일이 모두 비어있었습니다. 운 좋게도이 파일들의 백업이 있다는 것을 알았습니다.

$ ls -l /var/backups/dpkg.status.*
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.0
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.1.gz
-rw-r--r-- 1 root root 128168 Sep 20  2013 /var/backups/dpkg.status.2.gz
-rw-r--r-- 1 root root 112545 Sep 16  2013 /var/backups/dpkg.status.3.gz
-rw-r--r-- 1 root root 107767 Sep 14  2013 /var/backups/dpkg.status.4.gz
-rw-r--r-- 1 root root 107766 Sep 11  2013 /var/backups/dpkg.status.5.gz
-rw-r--r-- 1 root root  94583 Sep 11  2013 /var/backups/dpkg.status.6.gz

최신 백업을 확인했습니다 ...

$ head /var/backups/dpkg.status.0

...하지만 여전히 비어있었습니다. 그래서 나는 오래된 것을 압축 해제했습니다 ...

$ gunzip /var/backups/dpkg.status.1.gz
$ head /var/backups/dpkg.status.1

이번에는 내용이있었습니다. 그래서 나는 그것을 복사했습니다 ...

$ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status

그런 다음 apt-get update문제없이 달렸습니다.

크레딧이이 게시물로 이동합니다.


3

나는 같은 문제가 있었고 다른 답변에서 언급 한 모든 문제 해결을 시도했습니다. 이상하게 유일한 해결책은 다른 단계였습니다.

  • 소프트웨어 및 업데이트-> Ubuntu 소프트웨어-> 다운로드-> 기타-> 최상의 서버 선택으로 이동하십시오.

  • 테스트를 기다리십시오. 테스트가 끝나면 가장 가까운 서버 나 주 서버 또는 해당 지역의 서버 일 필요는 없습니다.

  • 이제 Repo 데이터를 다시로드하면 제대로 완료됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.