nordvpn báo không tới được daemon: socket, nhóm hay unit?
Đường hầm có thể vẫn tốt; CLI chỉ mất socket tới nordvpnd. Đi từ câu lệnh đến unit, rồi đến quyền của socket, và dừng ở lỗi đầu tiên.
Chạy nordvpn và nhận được thông báo về một daemon không thể tiếp cận là một lời phàn nàn hẹp, thường đến khi bạn đã trễ. Nó không nói gì về việc đường hầm có hoạt động hay không, bởi CLI chỉ là phần giao diện phía trước: nó nói chuyện với một tiến trình nền qua socket Unix, và thông báo nghĩa là cuộc trò chuyện đó đã không diễn ra. Hãy đi từ câu lệnh ra ngoài và dừng ở điều đầu tiên hóa ra là sai.
Bắt đầu từ nơi lỗi xuất hiện
Có hai tiến trình liên quan, và chính việc nhầm lẫn chúng khiến việc này trở nên bí ẩn. Daemon sở hữu đường hầm và lắng nghe trên một socket dưới /run/nordvpn/. Câu lệnh bạn gõ kết nối tới socket đó thay vì tự mình chạm vào các giao diện.
Khi socket thiếu hoặc từ chối kết nối, CLI không có ai để hỏi, nên nó báo biến thể «daemon người dùng» hoặc «daemon hệ thống» của cùng lời phàn nàn. Một trong hai biến thể đó nêu trực tiếp đường dẫn, và đó là câu hữu ích nhất trong toàn bộ cuộc trao đổi.
Kiểm tra unit trước mọi thứ khác
Hỏi trình quản lý dịch vụ xem daemon có đang chạy không, rồi khởi động và kích hoạt nó trong một bước nếu không:
systemctl status nordvpnd
sudo systemctl enable --now nordvpnd
nordvpn version
Nếu unit tồn tại nhưng không hoạt động, enable --now vừa khởi động nó vừa sắp xếp lần khởi động kế tiếp. Nếu unit không tồn tại, gói không phải là gói bạn giả định, và tên đã cài đặt quan trọng hơn tên trong ghi chú của bạn. Điều đó nghe như một khác biệt vụn vặt cho tới khi bạn dành hai mươi phút bật một dịch vụ chưa bao giờ được cài dưới nhãn đó. Hãy đọc những gì đang có và hành động theo đó.
Liệt kê các tệp unit giải quyết điều đó bằng một lệnh, và đáng làm trước khi bạn kết luận bất cứ điều gì về việc cài đặt:
systemctl list-unit-files 'nordvpn*'
service --status-all
Các bản phát hành đã gửi dịch vụ dưới nhiều hơn một tên unit, nên một bản build dùng nordvpn thay vì nordvpnd sẽ tạo ra một bản sao hoàn hảo của lỗi này trong khi một dịch vụ khỏe mạnh chạy ngay bên cạnh.
Socket và nhóm của nó quyết định quyền truy cập
Ngay cả khi daemon đang chạy, kết nối vẫn có thể bị từ chối vì quyền. Trình cài đặt tạo một nhóm nordvpn, và socket được sở hữu tương ứng, nên người dùng ngoài nhóm đó bị từ chối trong khi dịch vụ hoàn toàn khỏe mạnh.
sudo usermod -aG nordvpn "$USER"
newgrp nordvpn
Tư cách thành viên nhóm được đọc khi một phiên bắt đầu, đó là lý do thay đổi dường như không hoạt động trong terminal bạn đã làm. Cần một shell đăng nhập mới hoặc newgrp trước khi phiên đang chạy thấy nhóm mới. Hãy thử trong shell mới, không phải shell vừa chạy lệnh. Nếu không, bạn sẽ kết luận bản sửa đã thất bại khi nó chỉ đơn giản là chưa được áp dụng.
Quyền sở hữu chính socket là nửa còn lại của việc kiểm tra đó. So sánh nhóm trên socket với các nhóm mà shell đang chạy CLI báo cáo, và câu hỏi về quyền được trả lời trong một bước thay vì cài lại:
ls -l /run/nordvpn
id
Một tiến trình đang sống không phải bằng chứng về socket đúng. Một daemon do trình quản lý khác khởi động, hoặc một gói cũ đã gắn socket với tên khác, báo cáo giống hệt. Danh sách thư mục phân biệt những trường hợp đó trong một dòng, vì thế nó tốt hơn việc cài lại.
Tiến trình theo từng người dùng trên gói cài cũ
Một số gói cài chạy tiến trình thứ hai trong ngữ cảnh người dùng đã đăng nhập, mà tích hợp màn hình chờ đợi tìm thấy. Nếu một script init của hệ thống khởi động nó mà không chuyển xuống tài khoản đó, CLI sẽ tìm một daemon mà không phiên nào sở hữu.
Trên một init không phải systemd, cách bố trí được ghi chép chia vai trò: dịch vụ hệ thống chạy dưới một tên và tiến trình phía người dùng chạy dưới tài khoản đích với chpst -u <user>. Hãy kiểm tra cách bố trí mà bản cài của bạn thực sự dùng trước khi thêm một script khởi động giả định cách còn lại.
Làm sao biết bạn đã xong
Bản nâng cấp là tác nhân kích hoạt thường gặp, vì tệp nhị phân mới mong đợi một trạng thái dịch vụ mà bản cũ chưa bao giờ để lại. Dừng, bật lại và khởi động theo thứ tự đó sẽ dọn sạch điều ấy:
sudo systemctl stop nordvpnd
sudo systemctl enable --now nordvpnd
sudo systemctl start nordvpnd
nordvpn version
Câu lệnh cuối cùng là bài kiểm tra chấp nhận. Một phiên bản được in ra nghĩa là socket đang trả lời, điều này chuyển mọi lỗi còn lại sang địa hạt đăng nhập, gói dịch vụ hoặc kết nối và đưa chúng ra khỏi bài viết này. Nếu nó trả lời, hãy ngừng đọc ở đây và đi xem tài khoản.
Nếu socket vẫn thiếu, hãy đọc nhật ký của unit để xem vì sao nó dừng, sau đó kiểm tra rằng /run/nordvpn tồn tại và tài khoản dịch vụ có thể ghi ở đó. Một tiến trình trỗi dậy rồi chết ngay sẽ ghi lý do của nó vào nhật ký đó, và đọc một dòng nhanh hơn là thực hiện một lần cài lại.