Điều chỉnh Debian để sử dụng triển khai Rust của coreutils

Sylvestre Ledru, được biết đến với công trình xây dựng Debian GNU/Linux bằng trình biên dịch Clang, đã báo cáo một thử nghiệm thành công khi sử dụng một bộ tiện ích thay thế, coreutils, được viết lại bằng ngôn ngữ Rust. Coreutils bao gồm các tiện ích như sắp xếp, cat, chmod, chown, chroot, cp, date, dd, echo, tên máy chủ, id, ln và ls. Đối với giai đoạn tích hợp đầu tiên vào Debian của phiên bản Rust của coreutils, các mục tiêu sau đã được đặt ra:

  • Đóng gói một giải pháp thay thế Rust cho coreutils cho Debian và Ubuntu.
  • Khởi động Debian bằng máy tính để bàn Gnome bằng cách sử dụng Rust-coreutils.
  • Cài đặt 1000 gói phổ biến nhất từ ​​kho lưu trữ.
  • Xây dựng từ các nguồn nhân Firefox, LLVM/Clang và Linux trong môi trường có Rust-coreutils.

Sau khi tạo hơn 100 bản vá cho Rust/coreutils, chúng tôi đã có thể đạt được tất cả các mục tiêu đã định một cách thành công. Công việc đang diễn ra bao gồm việc triển khai các tiện ích và tùy chọn còn thiếu, cải thiện chất lượng và tính đồng nhất của mã, phát triển bộ thử nghiệm và loại bỏ các sự cố xảy ra khi chạy bộ thử nghiệm từ GNU Coreutils (cho đến nay, 141 thử nghiệm trong số 613 thử nghiệm đang chạy thành công). ).

Khi tạo gói Rust-coreutils, người ta quyết định không thay thế gói coreutils mà để cung cấp khả năng cho chúng hoạt động song song. Các tùy chọn tiện ích trong ngôn ngữ Rust được cài đặt trong /usr/lib/cargo/bin/ và được kích hoạt bằng cách thêm thư mục này vào biến môi trường PATH. Việc tạo gói Rust-coreutils rất phức tạp do phải tải tất cả các phần phụ thuộc của bản dựng vào kho lưu trữ, bao gồm Rust và các gói thùng nhỏ khác nhau.

Việc tạo hình ảnh khởi động không phải là vấn đề, nhưng việc điều chỉnh các gói cho phù hợp với môi trường có Rust-coreutils đòi hỏi rất nhiều công sức, vì nhiều tập lệnh sau cài đặt gọi các tiện ích từ bộ coreutils. Phần lớn vấn đề xảy ra là do thiếu các tùy chọn cần thiết, ví dụ như tiện ích “cp” không có tùy chọn “--archive” và “--no-dereference”, “ln” không hỗ trợ “- tùy chọn tương đối”, mktemp không hỗ trợ “-t”, đồng bộ hóa "-fs", trong cài đặt - "--owner" và "-group". Các vấn đề khác phát sinh do sự khác biệt trong hành vi, ví dụ: tiện ích cài đặt không hỗ trợ chỉ định /dev/null làm tệp đầu vào, mkdir có tùy chọn “--parents” thay vì “-parent”, v.v.

Khi kiểm tra việc lắp ráp các cơ sở mã lớn, không có vấn đề lớn nào phát sinh. Khi xây dựng Firefox và LLVM/Clang, các tập lệnh python và cmake được sử dụng nên việc thay thế coreutils không ảnh hưởng đến chúng. Quá trình xây dựng nhân Linux diễn ra tương đối suôn sẻ, chỉ có hai vấn đề nảy sinh: lỗi xuất ra khi sử dụng chown với liên kết tượng trưng và thiếu tùy chọn “-n” trong tiện ích ln.

Nguồn: opennet.ru

Thêm một lời nhận xét