Một gói VPN báo Installed: (none) không hề bị thiếu; nó chỉ đơn giản là chưa được cài. Dòng quyết định bạn có thể cài nó hay không là Candidate, mà APT suy ra từ các chỉ mục, tên suite, kiến trúc và mọi quy tắc ghim đang có hiệu lực. Phần lớn báo cáo về một gói VPN biến mất hóa ra là vấn đề ứng viên chứ không phải vấn đề đóng gói. Hãy đọc cả hai dòng trước khi chạm vào dù chỉ một mục nguồn.

Tôi kiểm tra ứng viên trước vì nó chỉ tốn một lệnh và loại trừ một nửa những phỏng đoán thông thường.

Kết quả của apt-cache policy cho bạn biết điều gì

apt-cache policy đọc bộ nhớ đệm gói cục bộ, không phải mạng. Nó in ra phiên bản đã cài, phiên bản ứng viên và bảng của mọi chỉ mục cung cấp gói cùng với mức ưu tiên gắn với chỉ mục đó.

apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpn

Ứng viên là phiên bản mà APT sẽ chọn ngay lúc này. madison liệt kê những gì mỗi nguồn cung cấp cùng mức ưu tiên của nó, và đó là cách bạn nhận ra một gói tồn tại trong chỉ mục nhưng thua cuộc thi ghim. Hướng dẫn apt-cache ghi cả hai là thao tác đọc bộ nhớ đệm, vì vậy không cái nào chứng minh được rằng máy chủ gương có thể truy cập ngay lúc này.

Nếu dòng ứng viên trống hoặc hiển thị (none), thì không có gì trong các nguồn đã cấu hình là phù hợp cho hệ thống này theo đúng cấu hình hiện tại.

Bốn lý do khiến ứng viên biến mất

Trên thực tế nguyên nhân gần như luôn là một trong bốn điều, và mỗi điều có cách khắc phục khác nhau.

Tên suite trong nguồn của bạn phải khớp với bản phân phối mà gói được biên dịch cho. Một hệ thống Debian bookworm trỏ tới gương trixie, hoặc một bản phát hành Ubuntu bị đổi tên trong tệp sources.list.d khi nâng cấp, không giải quyết gì cho những gói chỉ tồn tại trong suite kia. So sánh lsb_release -cs với trường suite trong từng mục.

APT chỉ thấy những gói được biên dịch cho các kiến trúc mà dpkg biết. Một vùng chứa 32 bit, một ảnh arm64 hoặc một bản cài trên Raspberry Pi yêu cầu gói chỉ được phát hành cho amd64 sẽ nhận được ứng viên trống thay vì thông báo lỗi. dpkg --print-architecture và dpkg --print-foreign-architectures cho bạn biết thực sự bạn đang ở tập nào.

Các thành phần cũng quan trọng. Một gói trong contrib hoặc non-free là vô hình khi chỉ bật main, và universe của Ubuntu cũng hành xử như vậy. Chỉ mục tồn tại và gói nằm trong đó; chỉ là danh sách thành phần được bật của bạn không bao gồm nó.

Ghim là lý do thầm lặng. Một tệp trong /etc/apt/preferences.d có thể giới hạn gói xuống dưới ngưỡng cài đặt, và khi đó một ứng viên hoàn toàn tốt biến mất khỏi kết quả trong khi chỉ mục vẫn liệt kê nó. Vì policy in mức ưu tiên bên cạnh từng nguồn, một gói mà mọi nguồn đều mang số ghim thấp chính là dấu hiệu.

Chỉ mục cũ trông như gói bị thiếu

Bộ nhớ đệm là một ảnh chụp. Nếu apt update lần cuối thất bại ở một chỉ mục, các truy vấn vẫn trả lời từ bản sao cũ hơn, và gói bạn mong đợi có thể không có trong bản sao đó.

apt update in lỗi theo từng chỉ mục, vì vậy hãy đọc chúng thay vì cuộn thẳng tới dòng cuối.

Một lần làm mới thất bại vì lỗi chữ ký, tệp release hết hạn hoặc gương không thể truy cập sẽ để chỉ mục trước đó tại chỗ. Đó là thiết kế hợp lý, vì nó giữ một bộ nhớ đệm hoạt động khi gương tạm thời ngừng hoạt động. Tác dụng phụ là tìm kiếm có thể thành công trong khi kho lưu trữ ngoại tuyến. Điều đó cũng có nghĩa là việc thiếu một gói không chứng minh được gì cho đến khi bạn biết lần cuối chỉ mục được lấy là khi nào. Kiểm tra ngày tháng tệp trong /var/lib/apt/lists trước khi đổ lỗi cho tên gói.

Đặt tên cho gói bạn thực sự cần

OpenVPN là một daemon, và những phần người ta thường muốn là các gói riêng.

Công cụ, plugin NetworkManager và trình chỉnh sửa màn hình là ba gói với ba tên, và plugin có một biến thể GTK mà tên khác nhau giữa các bản phân phối. apt-cache search --names-only openvpn khớp tên và tên được cung cấp thay vì mô tả, và đó là điều bạn muốn khi biết đại khái thứ đó tên là gì.

Nếu tên thực sự chưa biết, hãy tìm trong phần mô tả một lần, rồi quay lại tên chính xác. Đừng thêm hậu tố -gui vay mượn từ bản phân phối khác rồi kết luận rằng gói không còn tồn tại.

Thay đổi nguồn sau cùng, rồi kiểm tra giao dịch

Thêm một kho lưu trữ thay đổi ai cung cấp bản cập nhật của bạn, vì vậy nó thuộc về cuối cuộc điều tra, không phải đầu.

Trước đó, xác nhận bản phát hành, kiến trúc, thành phần và trạng thái ghim. Ghi lại bạn đã kiểm tra mục nào trong bốn mục, để người tiếp theo không phải lặp lại toàn bộ lượt rà. Nếu cả bốn đều đúng mà ứng viên vẫn thiếu, kết luận trung thực là bản phát hành này không phát hành gói đó. Các lựa chọn còn lại là backport, gói của nhà cung cấp hoặc một bản phát hành được hỗ trợ khác, và mỗi lựa chọn là có chủ đích chứ không phải phỏng đoán.

Khi ứng viên xuất hiện, hãy mô phỏng trước khi áp dụng: apt-get install --simulate với tên gói cho thấy những gì sẽ được kéo về và những gì sẽ bị gỡ. Tính khả dụng của gói, việc cài đặt và một đường hầm hoạt động vẫn là ba giai đoạn riêng biệt, và đường hầm vẫn cần hồ sơ, thông tin đăng nhập, tuyến đường và DNS trước khi mang lưu lượng.

Bài viết liên quan