Tương lai đã ở đây hoặc viết mã trực tiếp trên trình duyệt

Tôi sẽ kể cho bạn nghe về một tình huống hài hước đã xảy ra với tôi và cách trở thành người đóng góp cho một dự án nổi tiếng.

Cách đây không lâu tôi đã nảy ra một ý tưởng: khởi động Linux trực tiếp từ UEFI...
Ý tưởng này không mới và đã có một số sách hướng dẫn về chủ đề này. Bạn có thể thấy một trong số họ đây

Trên thực tế, những nỗ lực lâu dài của tôi nhằm giải quyết vấn đề này đã dẫn đến một thỏa thuận hoàn toàn chính thức. quyết định. Giải pháp này khá hiệu quả và tôi sử dụng nó trên một số máy ở nhà. Giải pháp này được mô tả chi tiết hơn một chút. đây.

Bản chất của UEFI-Boot là phân vùng ESP (EFI System Phân vùng) được kết hợp với thư mục /boot. Những thứ kia. tất cả các hạt nhân và hình ảnh khởi động (initrd) đều nằm trên cùng một phân vùng mà từ đó UEFI có thể khởi chạy các tệp thực thi và đặc biệt là khởi chạy bộ tải khởi động hệ thống. Nhưng bản thân nhân Linux trong nhiều bản phân phối đã được lắp ráp với tùy chọn UEFISTUB, tùy chọn này cho phép khởi chạy chính hạt nhân từ UEFI.

Giải pháp này có một điểm khó chịu - phân vùng ESP được định dạng ở FAT32, trên đó không thể tạo liên kết cứng (hệ thống tạo thường xuyên khi cập nhật initrd). Và không có gì đặc biệt tội phạm về điều này, nhưng việc nhìn thấy các cảnh báo hệ thống khi cập nhật các thành phần kernel thì không dễ chịu cho lắm...

Có một cách khác.

Trình quản lý khởi động UEFI (chính là trình quản lý mà bạn cần đăng ký bộ tải khởi động hệ điều hành), ngoài bộ tải khởi động/nhân Linux, còn có thể tải trình điều khiển. Vì vậy, bạn có thể tải trình điều khiển cho hệ thống tệp nơi bạn có /boot và tải kernel trực tiếp từ đó bằng UEFI. Tất nhiên, trình điều khiển cần phải được đặt trong phân vùng ESP. Đây đại khái là những gì các bộ tải khởi động như GRUB làm. Nhưng điểm nổi bật là tất cả các hàm GRUB được sử dụng thường xuyên đều đã có trong UEFI. Chính xác hơn là trong trình quản lý tải xuống của nó. Và còn nhàm chán hơn nữa, trình quản lý khởi động UEFI thậm chí còn có nhiều khả năng hơn trong một số vấn đề.

Nó có vẻ là một giải pháp hay, nhưng có một "NHƯNG" (hay đúng hơn là đúng như vậy, nhưng sẽ nói thêm về điều đó sau). Thực tế là hệ thống trình điều khiển UEFI khá đơn giản. Không có những việc như gắn hệ thống tệp hoặc liên kết trình điều khiển với một thiết bị cụ thể. Có một lệnh gọi hệ thống với tên thông thường là Map, gọi lần lượt từng trình điều khiển và cố gắng liên kết nó với tất cả, ít nhất là các thiết bị phù hợp. Và nếu người lái xe có thể nhận thiết bị thì một bản đồ sẽ được tạo - một bản ghi kết nối. Đây chính xác là cách khởi tạo trình điều khiển mới được tải trong một vùng chung với tất cả các trình điều khiển khác. Và tất cả những gì bạn cần là đặt một bit (LOAD_OPTION_FORCE_RECONNECT) thành 1 trong bản ghi khởi động trình điều khiển và UEFI sẽ thực hiện việc ánh xạ lại toàn cục này sau khi tải nó.

Nhưng điều này không dễ thực hiện. Tiện ích efibootmgr tiêu chuẩn (được sử dụng để định cấu hình trình quản lý giảm tải UEFI) không biết cách (hay đúng hơn là không biết cách) để đặt bit này. Tôi đã phải cài đặt thủ công thông qua một thủ tục khá phức tạp và nguy hiểm.

Và một lần nữa, khi đã cố gắng làm điều đó bằng chính đôi tay của mình, tôi không thể chịu đựng được và chính thức hóa vấn đề trên GitHub yêu cầu các nhà phát triển thêm tính năng này.

Đã nhiều ngày trôi qua nhưng không ai để ý đến yêu cầu của tôi. Và vì tò mò, tôi đã xem mã nguồn... Tôi rẽ nhánh nó và quỳ gối tìm cách thêm tính năng này... "Quỳ gối" vì tôi không cài đặt bất cứ thứ gì như vậy và chỉnh sửa nguồn mã trực tiếp trong trình duyệt.

Tôi biết C (ngôn ngữ lập trình) rất sơ sài, nhưng tôi đã phác thảo ra một giải pháp gần đúng (chủ yếu là sao chép-dán)... và sau đó tôi nghĩ - ít nhất tôi có thể mắc rất nhiều lỗi ở đó (những lần tôi cố gắng chỉnh sửa ngôn ngữ của người khác trước đây). Mã C đã được hoàn thành vào khoảng lần thứ 10) Tôi sẽ đưa ra Yêu cầu Kéo. Tốt thiết kế.

Và ở đó Travis CI được gắn vào để kiểm tra các yêu cầu kéo. Và anh ấy đã siêng năng chỉ bảo cho tôi mọi lỗi lầm của tôi. Chà, nếu có lỗi đã biết thì không cần phải sửa: một lần nữa, ngay trong trình duyệt và ở lần thử thứ tư, mã đã hoạt động (một thành tích đối với tôi).

Và cứ như vậy, không cần rời khỏi trình duyệt, tôi đã định dạng Yêu cầu Kéo rất thực tế thành một tiện ích được sử dụng trong hầu hết các bản phân phối Linux hiện đại.

Tôi rất ngạc nhiên bởi thực tế là, không thực sự biết ngôn ngữ, không thiết lập bất cứ thứ gì (các phần phụ thuộc yêu cầu khá nhiều thư viện để lắp ráp) và thậm chí không bao giờ chạy trình biên dịch, tôi chỉ đơn giản là “mã hóa” một tính năng hoàn toàn hoạt động và hữu ích trong trình duyệt .

Tuy nhiên, yêu cầu của tôi vẫn không được phản hồi kể từ ngày 19 tháng 2019 năm XNUMX và tôi đã bắt đầu quên nó đi.

Nhưng ngày hôm qua yêu cầu này đã được thêm vào chủ.

Vậy câu chuyện của tôi là về cái gì? Và anh ấy đang nói về thực tế là, trong khuôn khổ công nghệ hiện đại, hóa ra mã thực đã có thể được viết trong trình duyệt mà không cần triển khai cục bộ bất kỳ công cụ phát triển và phụ thuộc nào.

Hơn nữa, tôi phải thừa nhận, đây đã là yêu cầu kéo thứ hai của tôi đối với các tiện ích nổi tiếng (ít nhất là trong phạm vi hẹp). Lần trước, yêu cầu sửa lỗi hiển thị của một số trường trong giao diện web SyncThing đã dẫn đến việc tôi phải chỉnh sửa một dòng theo đúng nghĩa đen trong một môi trường mà tôi hoàn toàn không biết.

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Có nên viết thêm hay không?

  • vâng

  • không đáng

294 người dùng bình chọn. 138 người dùng bỏ phiếu trắng.

Nguồn: www.habr.com

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