Làm cách nào để khắc phục sự cố về lỗi với tệp trạng thái MergeList hay hoặc không thể được phân tích cú pháp lỗi khi cố gắng thực hiện cập nhật?


355

Máy tính đã cho tôi đầu ra này trong một cửa sổ:

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.

Làm thế nào tôi có thể sửa lỗi này?


7
Nó gây khó khăn cho tôi về việc hệ điều hành này xử lý các bản cập nhật của nó một cách khó xử như thế nào, ngay cả bây giờ, rằng điều này và những thứ tương tự được yêu cầu sau khi người dùng không sử dụng sai mục đích đặc biệt.
matt

Câu trả lời:


485

Các lệnh đầu cuối này sẽ giải quyết vấn đề của bạn:

Trước tiên, xóa Danh sách Hợp nhất bằng cách mở một thiết bị đầu cuối (Nhấn Ctrl+ Alt+ Tđể khởi chạy) và chạy lệnh này *:

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

Tiếp theo, tạo một cái mới bằng cách chạy một bản cập nhật đơn giản:

sudo apt-get update

Đây là báo cáo lỗi (và một báo cáo khác ) cho vấn đề này, hiện đã được sửa nên không nên tạo các tệp không đúng định dạng mới, tuy nhiên nếu bạn đã có các tệp không đúng định dạng, bạn cần xóa chúng như được giải thích trong bài đăng này.


* Các tùy chọn được sử dụng cho rm là -vdài dòng

-v, --verbose giải thích những gì đang được thực hiện

-flực lượng

-f, - Force bỏ qua các tệp và đối số không tồn tại, không bao giờ nhắc

Nếu bạn không chắc chắn về một dòng lệnh hoặc các tùy chọn đang được sử dụng luôn tham khảo trang thủ công cho lệnh. Chúng có thể được truy cập trên internet bằng cách tìm kiếm man và lệnh ví dụ man rm hoặc bạn có thể truy cập cùng thông tin bằng cách nhập chính xác cùng một lệnh trong thiết bị đầu cuối, ví dụ như man rmhướng dẫn thoát khỏi trang sẽ ở cuối thiết bị như thế nào điều này

hình ảnh của các tùy chọn trang người đàn ông


8
Một cá nhân nhận thấy anh ta phải thực hiện hai bước này nhiều lần, nhưng cuối cùng nó đã hoạt động.
John S Gruber

5
Thật kỳ quặc khi đặt -vfphần cuối của rmlệnh.
Keith Thompson

6
Nó không giải quyết được vấn đề cho tôi. cập nhật vẫn cho tôi thấy lỗi đó.
thủy quân lục chiến

1
Đây là một vấn đề định kỳ. Nó cứ xảy ra một lần trong một thời gian. Có ai biết nguyên nhân của vấn đề này?
Rushil Paul

1
Tôi đã chỉnh sửa câu trả lời để hiểu khả năng @jasser
Allan

82

Mở Terminal và chạy từng lệnh sau:

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

Xem thêm:


1
-vf làm gì?
speedox

5
@speedox, theo man rm, -vcó nghĩa là 'dài dòng', và -fcó nghĩa là 'lực lượng'. Nói cách khác, xóa tất cả các tệp được chỉ định mà không nhắc nhở và cho người dùng biết nó đang làm gì.
Fouric

Trong trường hợp của tôi, chỉ cần làm sudo apt-get updatecác vấn đề cố định. Tôi nghĩ Allan đã đề cập các phiên bản mới hơn của apt tự động sửa lỗi này, vì vậy có thể thử cập nhật trước.
ThorSummoner

23

Bạn vặn vít khi bạn chỉnh sửa /var/lib/dpkg/status. Khôi phục nó từ bản sao lưu mà bạn đã thực hiện trước khi chỉnh sửa nó. Tất nhiên, bạn đã tạo một bản sao lưu, phải không?

Vì bạn không tạo bản sao lưu, hãy chỉnh sửa lại một cách cẩn thận . Cố gắng không gây ra thiệt hại nhiều hơn.

Bạn có thể sử dụng /var/lib/dpkg/status.oldnhư một điểm tham chiếu. Đây là bản sao lưu của statustập tin từ trước khi lần cuối dpkgđược chạy. Chạy

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

để thấy sự khác biệt Hoàn tác các thay đổi mà bạn đã thực hiện thủ công và giữ các thay đổi được thực hiện trong lần dpkgchạy trước.

Nếu bạn thực sự không thể quản lý để sửa chữa tệp, sao chép /var/lib/dpkg/status.oldlại /var/lib/dpkg/status. Bạn sẽ có được một cơ sở dữ liệu gói được hình thành tốt, nhưng lỗi thời.

Bạn không bao giờ cần phải chỉnh sửa /var/lib/dpkg/statustrong hoạt động bình thường. Ngay cả những điều sai lầm nghiêm trọng, /var/lib/dpkg/statuskhông phải là điều có xu hướng yêu cầu sự can thiệp của quản trị viên. Dù vấn đề của bạn crossplatformuilà gì, có lẽ có một cách tốt hơn để giải quyết chúng. Lần duy nhất tôi cần chỉnh sửa /var/lib/dpkg/statuslà khi một Packagestệp ngược dòng bị hỏng.


Tôi cũng muốn biết cách tốt hơn mà bạn đã đề cập để loại bỏ crosspl platformui nếu bạn có thể giúp vì tôi đã thử mọi cách có thể để xóa nó và thử tìm nhiều giải pháp nhưng chỉ có một giải pháp tôi đã đề cập ...
Nirmik

1
@Nirmik Không có ý tưởng về crossplatformui. Hỏi đó như một câu hỏi riêng biệt. Tôi có thể nói với bạn rằng trong hơn một thập kỷ sử dụng dpkg, bao gồm nhiều nguồn không chính thức, tôi rất hiếm khi cần chỉnh sửa statustệp và chỉ khi có kho lưu trữ của bên thứ ba bị hỏng.
Gilles

Được rồi ... Thanx rất nhiều lần nữa .... như bạn đề nghị tôi sẽ đăng nó như một câu hỏi mới :) cũng như bạn có vẻ là một người dùng rất cao cấp, tôi muốn hỏi bạn nếu bạn biết bất cứ điều gì về việc làm cho NÓNG không hoạt động -KTEYS làm việc ?? (khóa không dây của tôi không hoạt động)
Nirmik

Đã thử đặt cái cũ thay cho cái mới, không sửa chữa cho tôi. :-(
Stéphane Gourichon

1
re: {Bạn đã làm rối khi bạn chỉnh sửa / var / lib / dpkg / status} như đối với tôi - không, tôi không, tôi chưa chạm vào tệp này :) Tuy nhiên đây chỉ là giải pháp giải quyết vấn đề trong tôi trường hợp Cảm ơn bạn.
ruslo


16

Thực hiện theo các bước 2-5 trong Quy trình khắc phục sự cố Trình quản lý gói thường giải quyết vấn đề này.

Đối với bước 2 , vô hiệu hóa tất cả các PPA của bạn. Bạn có thể bỏ chọn tất cả chúng trong Nguồn phần mềm giống như cách bạn bỏ chọn chỉ một; xem Làm thế nào để vô hiệu hóa một PPA cụ thể? . Bạn có thể kích hoạt lại chúng sau.

Đối với bước 3 , đóng bất kỳ chương trình mở nào bạn có thể. Có thể an toàn để giữ trình duyệt web của bạn mở để bạn có hướng dẫn trước mặt. Nhưng điều đặc biệt quan trọng là đảm bảo mọi trình quản lý gói không chạy . Điều này bao gồm Trung tâm phần mềm, Trình cập nhật phần mềm (Trình quản lý cập nhật trong các phiên bản cũ hơn của Ubuntu), Synaptic và Gdebi. Nó cũng bao gồm các tiện ích dòng lệnh quản lý gói như apt-get, dpkg, và aptitude.

Lưu ý rằng nếu người dùng khác đăng nhập cùng một lúc, họ nên đăng xuất nếu có thể.

Đối với bước 4 , mở một cửa sổ đầu cuối. Một cách để làm điều này hoạt động bất kể bạn sử dụng môi trường máy tính để bàn nào, là nhấn Ctrl+ Alt+ T.

Đối với bước 5 , hãy chạy các lệnh này trong cửa sổ terminal:

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"' _ '{}' \;

Tôi đã sao chép nguyên văn đó từ GóiQuản lýTroubledhoooteProcedure vào ngày 2 tháng 3 năm 2014. Những lệnh đó đã phát triển trong quá khứ và các lệnh được đề xuất trong bài viết đó có thể được thay đổi hoặc mở rộng trở lại trong tương lai . Vì vậy, bạn có thể muốn làm việc từ bước 5 đó . (Điều đó, tạo / chỉnh sửa bằng cách "đóng góp cho wiki tài liệu Ubuntu" - đặc biệt là Đánh dấu Rijckenberg --is cấp phép CC-BY-SA 3.0 ., Cho phép đưa vào ở đây với ghi công thích hợp)

Một số lệnh đó cố gắng khắc phục sự cố (và cũng có thể hiển thị thông tin chẩn đoán); những người khác hiển thị thông tin có giá trị về vấn đề mà bạn có thể đưa vào câu hỏi của mình hoặc cung cấp cho ai đó giúp bạn. (Hoặc, tùy thuộc vào kỹ năng của bạn, có thể cho phép bạn chẩn đoán và giải quyết nó.)

Thường thì cái này sửa nó nhưng khi nó không cung cấp đủ thông tin để sửa nó.

Bạn không cần phải tự nhập các lệnh đó; bạn có thể sao chép và dán chúng. Tôi khuyên bạn nên dán và chạy từng cái riêng biệt, mặc dù. Điều này làm cho nó rõ ràng hơn đầu ra từ lệnh nào.


Tôi đã sao chép toàn bộ khối và dán thay vì chạy từng cái một. Mặc dù một số lệnh trong này là vô ích và một số thất bại, nhưng cuối cùng nó cũng có ích trong trường hợp của tôi
phuclv

11

Tôi cũng đã thấy vấn đề này xảy ra khi bạn có quá nhiều nguồn trong kho của bạn.

Hãy thử giải pháp được đăng ở trên và / hoặc có lẽ đây là giải pháp đôi khi được khuyến nghị trên launchpad:

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

Hãy cho chúng tôi biết bạn lấy như thế nào.


Cảm ơn bạn! Điều này cũng không hoạt động với DSL mà không có makenir.
Doug

4

Tôi đã gặp phải một lỗi tương tự:

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.

Tôi đã làm theo đề xuất tương tự để sao chép status-old.

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

Tất cả các tệp trạng thái của tôi đều trống vì một số lý do. May mắn thay, tôi phát hiện ra có bản sao lưu của các tệp này:

$ 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

Tôi đã kiểm tra bản sao lưu mới nhất ...

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

... nhưng nó vẫn trống. Vì vậy, tôi đã giải nén một cái cũ hơn ...

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

Lần này đã có nội dung. Vì vậy, tôi đã sao chép nó ...

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

Sau đó apt-get updatechạy mà không gặp vấn đề gì.

Tín dụng đi đến bài này.


3

Tôi đã có cùng một vấn đề và đã thử tất cả các khắc phục sự cố được đề cập trong các câu trả lời khác. Điều kỳ lạ là cách khắc phục duy nhất là một bước khác:

  • Chuyển đến Phần mềm & cập nhật -> Phần mềm Ubuntu -> Tải xuống từ -> Khác-> Chọn Máy chủ tốt nhất

  • Chờ các bài kiểm tra. Vào cuối các bài kiểm tra, máy chủ tốt nhất sẽ được chọn, không nhất thiết phải là máy chủ gần nhất cũng như máy chủ chính cũng như máy chủ cho miền địa phương của bạn.

  • Bây giờ Tải lại dữ liệu Repo, Nó sẽ hoàn thành đúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.