Cập nhật apt thất bại với NO_PUBKEY sau khi thêm kho VPN
NO_PUBKEY và tệp Release bị thiếu là lỗi tin cậy, không phải lỗi mạng. Hãy quyết định ghim khóa của nhà cung cấp bằng signed-by hay xóa nguồn.
Nguồn apt của nhà cung cấp VPN đã làm hỏng trình quản lý gói của bạn, và cách khắc phục là một quyết định, không phải một lệnh. NO_PUBKEY, hoặc phàn nàn rằng kho không có tệp Release, nghĩa là apt đã từ chối tin nguồn đó, nên mọi thao tác gói sau đó tiếp tục in cùng một cảnh báo. Bản thân đường hầm có lẽ vô can. Hãy trả lời ba câu hỏi về việc bạn còn muốn nguồn đó hay không, và cách sửa đúng gần như sẽ đến một cách máy móc.
Đầu tiên, xếp lỗi vào đúng nhóm
Lỗi tin cậy nêu tên tệp nguồn và hoặc khóa bị thiếu hoặc tệp Release không có. Lỗi truyền tải trông khác: lỗi chứng chỉ TLS, kết nối bị từ chối, hết thời gian chờ, hoặc proxy từ chối CONNECT. Sự phân biệt đó quyết định bài viết bạn đang đọc, vì một VPN chặn TLS hoặc khóa máy chủ của nhà cung cấp tạo ra lỗi truyền tải, không phải lỗi chữ ký.
Chạy sudo apt update một mình và đọc phần cuối, bỏ qua các dòng đã lưu trong bộ nhớ đệm phía trên. Dòng quan trọng nêu tên /etc/apt/sources.list.d/ và cho bạn biết cần mở tệp nào.
Nếu lỗi xuất hiện sau khi đường hầm được dựng lên, hãy thử với đường hầm tắt và với DNS được phân giải qua trình phân giải của hệ thống. Một nguồn hoạt động khi không có VPN là vấn đề định tuyến hoặc chặn bắt, và không lượng quản lý khóa nào sửa được điều đó.
Ba câu hỏi chọn con đường
Bạn còn cài đặt hoặc nâng cấp gói từ nguồn này không? Nếu ứng dụng khách đang được dùng thực sự, hãy sửa lại tin cậy. Nếu bạn cài ứng dụng khách một lần và giờ chỉ nhập một hồ sơ thông thường vào NetworkManager, thì nguồn đó là gánh nặng vô ích và xóa nó là cách sửa trung thực.
Thứ hai, nhà cung cấp có công bố khóa và dấu vân tay mà bạn có thể xác minh ngoài kênh không? Thứ ba, ai quản lý khóa trên máy chủ này: bản phân phối hay bạn? Một nguồn được ký bằng khóa bạn không thể xác minh là quyền cập nhật mà bạn không nên cấp.
Trả lời không cho câu hỏi đầu tiên sẽ kết thúc phân tích. Trả lời có cho cả ba điểm dẫn đến cách sửa bằng signed-by, cách sắp xếp duy nhất vừa hoạt động vừa giữ được khả năng kiểm tra. Trộn hai con đường, bằng cách giữ nguồn và ép nó đi qua, là lựa chọn duy nhất đáng bị loại trừ một cách rõ ràng.
Tại sao trusted=yes trông giống cách sửa mà không phải
Trang của hướng dẫn sources.list nói thẳng về điều này. Đặt tùy chọn Trusted thành yes bảo apt chấp nhận nguồn ngay cả khi xác thực thất bại, điều này tắt apt-secure cho kho đó. Trang này dành điều đó cho một bối cảnh cục bộ, nếu có dùng đến.
Đây không phải là phiên bản hẹp hơn của việc tin nhà cung cấp. Nó loại bỏ câu hỏi ai đã ký chỉ mục, nên bất kỳ ai có thể trả lời cho tên máy chủ đó đều có thể đưa cho máy của bạn những gói được cài với quyền root.
Con đường sửa: lấy khóa, rồi ghim nó
Lấy khóa từ vị trí mà nhà cung cấp ghi trong tài liệu và tháo lớp bọc vào một chùm khóa do quản trị viên quản lý, sau đó trỏ dòng kho vào tệp đó để tin cậy không thể trôi đi.
- Đọc dòng thất bại để lấy ID khóa và tên tệp nguồn.
- Tải khóa bọc ASCII của nhà cung cấp và chạy
gpg --dearmorvào/etc/apt/keyrings/vendor-name.gpg. - Thêm
[signed-by=/etc/apt/keyrings/vendor-name.gpg]vào mục trong tệp.listcủa nhà cung cấp đó. - Chạy
sudo apt updatevà xác nhận rằng nguồn lấy được chỉ mục thay vì lặp lại cảnh báo chữ ký.
Ưu tiên /usr/share/keyrings cho các khóa đi kèm một gói và /etc/apt/keyrings cho các khóa bạn tự đặt. Sự phân chia này không phải hình thức: nó nói cho quản trị viên tiếp theo biết khóa nào sẽ sống sót qua một lần nâng cấp gói và khóa nào cần một con người.
Xác minh dấu vân tay với giá trị đã công bố của nhà cung cấp trước khi tin nó. Một ID khóa dán từ bài đăng diễn đàn là cách một cỗ máy bắt đầu tin vào quyền cập nhật mà không ai có thể gọi tên.
Con đường xóa, và tại sao lỗi có thể quay lại
Hãy xem trình cài đặt thực sự đã ghi gì, vì nhiều tệp có thể nhắc đến cùng một nhà cung cấp và một trong số đó thường là bản sao còn sót lại.
grep -r . /etc/apt/sources.list.d/
sudo rm /etc/apt/sources.list.d/vendor.listapt chỉ đọc các tệp .list và .sources từ thư mục đó, nên một bản sao .save hoặc .distUpgrade đã bị bỏ qua; dù vậy xóa nó đi vẫn ngăn một người đọc sau này vô tình khôi phục nó. Xóa nguồn không gỡ cài đặt gì cả, và apt sau đó có thể mô tả gói VPN đã cài là được cài cục bộ hoặc không còn khả dụng, đó là thông báo trạng thái gói chứ không phải lỗi tin cậy quay lại.
Trường hợp lặp lại là hướng dẫn cũ hơn đã cài khóa bằng apt-key vào vòng tin cậy toàn cục. Con đường đó đã lỗi thời, và một lần nâng cấp bản phát hành có thể để khóa bị rơi hoặc đơn giản là không được hỏi đến, và đó chính là lý do một lỗi im lặng suốt một năm lại xuất hiện vào tuần bạn nâng cấp. Kiểm tra /etc/apt/trusted.gpg.d/, rồi chuyển quyết định tin cậy vào dòng kho nơi nó thuộc về. Nếu nhà cung cấp vẫn in hướng dẫn apt-key, hãy cứ dùng signed-by; đó là cách sắp xếp mà hướng dẫn ghi lại, và là cách sống sót qua một lần nâng cấp.