Segfault của ứng dụng VPN trên Pi? Hãy ghi lại tiến trình trước
Shell in ra segmentation fault và thẻ bị ghi lại. Ghi lại tệp thực thi, phiên bản và bản ghi sự cố trước khi thay bất kỳ phần cứng nào.
Bạn khởi động ứng dụng khách, terminal in ra Segmentation fault (core dumped), và giờ tiếp theo trôi vào việc ghi lại thẻ. Thông báo đó mô tả một tiến trình đã chết tại một thời điểm như thế nào. Nó không nói bo mạch bị hỏng, và cũng không miễn trừ nguồn điện, bộ lưu trữ hay image.
Hãy làm việc từ dòng mà shell đã in ngược về tiến trình đứng sau nó. Những dữ kiện hữu ích là tệp thực thi nào đã thất bại, trong môi trường nào và ở giai đoạn nào của kết nối.
Bắt đầu từ dòng mà shell đã in
Tên trong lệnh của bạn thường là một lớp bọc hoặc trình khởi chạy khởi động một tệp nhị phân khác, nên hãy xác nhận kernel thực sự đã kết thúc tệp thực thi nào. Ghi lại đường dẫn đầy đủ, phiên bản gói và ứng dụng, kiến trúc, phiên bản hệ điều hành và kernel, tài khoản đã khởi chạy nó và thời điểm chính xác. Một lệnh shell mang tên VPN có thể dễ dàng khởi động một tiến trình phụ, và bản ghi sẽ nêu tên tiến trình phụ đó. Sao chép chuỗi phiên bản từ một gói đã cài tháng trước không cho biết gì về thứ đã chạy.
Ghi lại điều gì xảy ra ngay trước sự cố: khởi động, phân tích hồ sơ, xác thực hay một phiên đã truyền lưu lượng. Bốn giai đoạn đó thu hẹp tìm kiếm nhiều hơn hẳn từ segfault. Giữ cửa sổ nhật ký ngắn quanh sự kiện đó, và gác lại các phỏng đoán về thay đổi gần đây nào đã gây ra nó cho đến khi bản ghi nói rõ.
Tìm hiểu xem có image bộ nhớ hay không
Tài liệu tham chiếu tệp core mô tả dump là image bộ nhớ của tiến trình được ghi khi kết thúc, và cũng liệt kê các điều kiện ngăn việc ghi đó. Những điều kiện đó bao gồm giới hạn tài nguyên bằng không và mẫu core định tuyến dump ra nơi khác ngoài thư mục làm việc. Vì vậy, việc thiếu một tệp tên core không chứng minh gì về việc có xảy ra sự cố hay không. Kiểm tra mẫu và giới hạn đã cấu hình trước khi kết luận rằng hệ thống không tạo ra bằng chứng.
Trên hệ thống dùng bộ thu thập của systemd, chế độ xem được hỗ trợ liên kết một bản ghi đã lưu với tệp thực thi và thời điểm. Một mục nhật ký và một image bộ nhớ đọc được là hai hiện vật khác nhau: chính sách lưu giữ và quyền có thể để bạn có cái này mà không có cái kia. Hãy hỏi bản phân phối hoặc người bảo trì ứng dụng về quy trình chẩn đoán mà họ hỗ trợ, vì một trace tạo từ bản dựng khác hoặc bộ thư viện khác thường làm họ mất thời gian.
sysctl kernel.core_pattern
ulimit -c
coredumpctl list --since "1 hour ago" --no-pager
coredumpctl info /usr/sbin/openvpn
Lặp lại những lần đọc đó trên chính máy đã gặp sự cố. Làm chúng trên một bản cài mới là trả lời một câu hỏi không ai đặt ra.
Coi dump là tài liệu mang bí mật
Bộ nhớ tiến trình có thể chứa thông tin xác thực, khóa phiên và nội dung hồ sơ, khiến dump nhạy cảm hơn nhật ký văn bản bên cạnh. Việc che nhật ký không có tác dụng gì với một image bộ nhớ không trong suốt, và các trình theo dõi sự cố thông thường giữ tệp đính kèm lâu hơn nhiều so với tuổi thọ của một luồng hỗ trợ. Hãy chuyển tệp qua kênh riêng tư mà nhà cung cấp hoặc người bảo trì cung cấp. Đăng một dump thô trong sự cố công khai sẽ phơi bày mọi thứ nằm trong bộ nhớ khi tiến trình chết, và bạn không thể biết đó là gì cho đến khi ai đó kiểm tra.
Nếu người bảo trì yêu cầu trace, hãy hỏi họ muốn từ tệp thực thi nào và thư viện nào. Một backtrace có các khung không khớp với bản dựng được báo cáo thì khó tin và dễ đọc sai.
Kiểm tra nguồn gốc trước khi thay bất cứ thứ gì
Xác minh nguồn gốc gói và tính toàn vẹn tệp thông qua người sở hữu bản cài, và bảo toàn cấu hình cùng tài liệu nhận dạng trước mọi lần sửa chữa có kiểm soát. Đừng ghi đè bản sao bằng chứng duy nhất chỉ để xem một bản cài sạch có khởi động được không. Một image mới khởi động được cho biết image mới khởi động được. Nó không cho biết image cũ có chứa gói hỏng, thẻ đang lỗi hay tệp nhị phân vốn sẽ luôn lỗi trên kiến trúc này hay không.
Nếu các chương trình không liên quan cũng thất bại, hoặc hệ thống ghi nhật ký lỗi lưu trữ, nguồn điện hay kernel, hãy giữ những quan sát đó cho cuộc điều tra nền tảng. Chúng mở rộng phạm vi; chúng không chứng minh mọi segfault đều đến từ RAM hỏng hay image hỏng.
Sau một bản sửa có mục tiêu, lặp lại đúng lần khởi chạy được cấp phép và đúng thao tác VPN trên cùng phần cứng. Nói rõ lỗi nào đã dừng và ở phiên bản nào. Một lần khởi động sạch tự nó không xác định được linh kiện lỗi và cũng không dự đoán được hỏng hóc phần cứng tiếp theo.