Cả hai tệp đều là 32-bit và chỉ một trong số chúng chạy trên bảng mạch của bạn. Bản dựng ELF32 cho Intel và bản dựng ELF32 cho ARM đồng ý về trường lớp và bất đồng về mọi thứ quan trọng. Một trang tải xuống cung cấp tùy chọn 32-bit gần như không cho bạn biết gì cho đến khi bạn đọc tiêu đề của tệp mà bạn thực sự đã tải xuống. Đổi tên nó không thay đổi một lệnh nào.

Lớp và máy trả lời các câu hỏi khác nhau

Trường lớp cho biết tệp dùng cấu trúc 32-bit hay 64-bit. Trường máy đặt tên cho tập lệnh mà tệp được biên dịch cho. Chỉ đọc trường đầu tiên là cách một bản dựng x86 rơi vào bảng mạch ARM với tên tệp trông hoàn toàn hợp lý. Cả hai giá trị đều đến từ cùng một lệnh, vì vậy rất dễ bỏ qua một trường.

Sự nhầm lẫn tương tự áp dụng cho nhãn 64-bit, nơi aarch64 và x86-64 chia sẻ kích thước từ và không chia sẻ lệnh nào. Một trang nhà cung cấp liệt kê một bản tải xuống 64-bit đang mô tả bản dựng của chính họ, không phải máy của bạn. Kiểm tra tiêu đề của tệp thay vì tiêu đề cột trên trang.

readelf -h ./vendor-vpn
readelf -l ./vendor-vpn | head -20
file ./vendor-vpn

Lệnh đầu tiên in tiêu đề, bao gồm lớp và máy. Lệnh thứ hai hiển thị tiêu đề chương trình, nơi chứa yêu cầu trình thông dịch. Lệnh thứ ba cho bạn một dòng khi một bảng nhiều hơn mức bạn cần.

Thêm quyền thực thi hoặc vá kiểm tra phân phối không dịch được gì. Giả lập, ở nơi nền tảng hỗ trợ, là một quyết định triển khai với chi phí hiệu năng và phụ thuộc riêng.

Đọc tiêu đề trước khi chạy trình cài đặt

Kiểm tra một artefact đáng tin cậy trước khi thực thi bất cứ thứ gì từ nó. Một trình cài đặt thất bại giữa chừng có thể để lại các thư viện bị thay thế và không có gì hoạt động, đó là điểm khởi đầu tồi tệ hơn kho lưu trữ bạn bắt đầu. Việc kiểm tra tiêu đề chỉ là đọc và có thể đảo ngược theo nghĩa không có gì trên hệ thống thay đổi.

So sánh trường máy với kiến trúc gói của hệ thống đang chạy, không phải với tên tiếp thị của bảng mạch. Một CPU 64-bit chạy không gian người dùng 32-bit cần bản dựng 32-bit, và chi tiết đó quyết định bản tải xuống nào là gốc. Khả năng của bảng mạch không phải là giới hạn; không gian người dùng đã cài đặt mới là giới hạn.

dpkg --print-architecture
uname -m
getconf LONG_BIT

Lệnh đầu tiên báo cáo kiến trúc mà hệ thống cài đặt gói cho, và đó là giá trị phải khớp. Hai lệnh còn lại mô tả nhân và kích thước từ, và chúng có thể khác với không gian người dùng trong một bản cài đặt đa kiến trúc.

Khi các câu trả lời đó khác nhau, hãy quyết định nhà cung cấp hỗ trợ cái nào trước khi tải xuống kho lưu trữ khác. Đoán mò tạo ra một vòng lặp cài đặt mà mỗi lần thất bại ở một điểm khác nhau, và mỗi thất bại trông như một vấn đề mới.

Kiểm tra trình thông dịch, không chỉ kiến trúc

Một tệp thực thi động ghi lại trình nạp mà nó mong đợi trong tiêu đề chương trình. Trên một hệ thống có đường dẫn trình nạp khác, nhân từ chối khởi động tệp ngay cả khi trường máy khớp chính xác. Đó là thất bại khiến mọi người đi tìm các thư viện còn thiếu.

Thông báo lỗi cho bạn biết bạn đang ở trường hợp nào, và hai trường hợp rất dễ nhầm lẫn. Việc từ chối định dạng hoặc kiến trúc khác với một tệp hoặc trình thông dịch bị thiếu, và chỉ một trong số chúng được sửa bằng cách cài đặt gói khác.

readelf -l ./vendor-vpn | grep -A1 INTERP
ls -l /lib64/ld-linux-x86-64.so.2

Lệnh đầu tiên hiển thị đường dẫn trình thông dịch mà tệp nhị phân yêu cầu. Lệnh thứ hai kiểm tra xem đường dẫn đó có tồn tại không, điều này tách một bản dựng sai khỏi một trình nạp bị thiếu.

Không chạy công cụ liệt kê phụ thuộc trên một tệp nhị phân không đáng tin cậy, vì một số triển khai có thể thực thi tệp mà chúng kiểm tra. Giữ việc kiểm tra chỉ đọc và chống lại sự cám dỗ thêm liên kết tượng trưng của trình nạp để khởi động một bản dựng không được hỗ trợ.

Yêu cầu một bản dựng với các sự kiện trong tay

Gửi cho nhà cung cấp bản phát hành hệ điều hành, kiến trúc gói, giá trị lớp và máy, và thông báo lỗi đầu tiên. Sự kết hợp đó giành được một câu trả lời hữu ích, trong khi ảnh chụp màn hình của một lỗi chung chỉ giành được một mẫu hỗ trợ.

Giữ câu hỏi về tệp nhị phân tách biệt khỏi câu hỏi về cấu hình. Khi bản dựng đúng khởi động, các hồ sơ, thông tin đăng nhập và tuyến vẫn là vấn đề của riêng chúng, và không lượng chỉnh sửa hồ sơ nào khiến một tệp nhị phân sai kiến trúc chạy được.

Bài viết liên quan