Saya akan memberi tahu Anda tentang situasi aneh yang terjadi pada saya, dan bagaimana menjadi kontributor proyek terkenal.
Belum lama ini saya sibuk dengan satu ide: mem-boot Linux langsung dari UEFI ...
Idenya bukan hal baru dan ada sejumlah manual tentang topik ini. Salah satunya bisa dilihat di
sini.Sebenarnya, upaya lama saya untuk menyelesaikan masalah ini menghasilkan
solusi yang baik . Solusinya cukup bekerja dan saya menggunakannya di bagian-bagian mesin rumah saya. Solusi ini dijelaskan secara lebih rinci di
sini .
Inti dari UEFI-Boot adalah bahwa partisi ESP (EFI System Partition) dikombinasikan dengan direktori / boot. Yaitu semua kernel, dan boot image (initrd) terletak di bagian yang sama dari mana UEFI dapat menjalankan file yang dapat dieksekusi dan, khususnya, menjalankan boot sistem boot. Tetapi kernel Linux sendiri sudah dibangun di banyak distribusi dengan opsi UEFISTUB, yang memungkinkan kernel untuk diluncurkan dari UEFI.
Solusi ini memiliki satu momen yang tidak menyenangkan - partisi ESP diformat dalam FAT32, yang tidak memungkinkan untuk membuat tautan keras (yang dibuat oleh sistem secara teratur saat memperbarui initrd). Dan tidak ada yang khususnya kriminal tentang ini, tetapi tidak terlalu baik untuk melihat peringatan sistem ketika memperbarui komponen kernel ...
Ada cara lain.
Boot manager UEFI (yang mana Anda perlu mendaftarkan OS loader) dapat memuat driver selain Linux loader / kernel. Jadi Anda dapat memuat driver sistem file di mana Anda memiliki / boot dan langsung dari sana memuat kernel menggunakan UEFI. Pengemudi, tentu saja, harus diletakkan di bagian ESP. Inilah yang dilakukan loader GRUB. Tetapi yang terpenting adalah bahwa semua fungsi GRUB yang sering digunakan sudah ada di UEFI. Lebih tepatnya di pengelola unduhannya. Dan agar lebih membosankan, manajer boot UEFI bahkan memiliki lebih banyak opsi di beberapa area.
Tampaknya menjadi solusi yang indah, tetapi ada satu "TETAPI" (atau lebih tepatnya itu, tetapi lebih pada itu nanti). Faktanya adalah bahwa sistem driver UEFI cukup mudah. Tidak ada yang namanya memasang sistem file atau menghubungkan driver dengan perangkat tertentu. Ada panggilan sistem dengan nama bersyarat Map (Bahasa Indonesia). Yang mengambil masing-masing driver pada gilirannya dan mencoba untuk menghubungkannya dengan semua, setidaknya perangkat yang sesuai. Dan jika perangkat bisa mengambil driver, maka pemetaan dibuat - catatan yang mengikat. Ini persis bagaimana driver yang baru dimuat harus diinisialisasi dalam tumpukan bersama dengan yang lain. Dan semua yang diperlukan adalah memasukkan 1 bit (LOAD_OPTION_FORCE_RECONNECT) ke 1 dalam catatan booting driver dan UEFI akan melakukan remap global yang sama setelah memuatnya.
Tapi ini tidak mudah dilakukan. Utilitas efibootmgr standar (yang digunakan UEFI unload manager dikonfigurasi) tidak tahu bagaimana (atau lebih tepatnya tidak tahu bagaimana) mengatur bit ini. Saya harus meletakkannya dengan tangan saya melalui prosedur yang agak rumit dan berbahaya.
Dan sekali lagi, setelah mencoba melakukan ini dengan tangan saya, saya tidak tahan dan menulis
masalah pada GitHub meminta pengembang untuk menambahkan fitur ini.
Beberapa hari berlalu, tetapi tidak ada yang memperhatikan permintaan saya. Dan karena penasaran saya melihat sumbernya ... bercabang, dan membayangkan "berlutut" bagaimana cara menambahkan fitur ini ... "Berlutut" karena saya tidak mengatur apa pun seperti itu dan mengedit sumbernya langsung di peramban.
C (bahasa pemrograman) Saya tahu dengan sangat dangkal, tapi saya melempar solusi (terutama copy-paste) ... well, kemudian saya berpikir - dan setidaknya saya mungkin memiliki banyak kesalahan di sana (upaya saya sebelumnya untuk mengedit kode-C orang lain dikumpulkan dari tanggal 10) Saya akan mengeluarkan Permintaan Tarik.
Didesain dengan baik .
Dan ada Travis CI kacau untuk memeriksa permintaan tarik. Dan dia dengan hati-hati memberi saya semua kesalahan saya. Nah, jika kesalahan diketahui - apa pun yang akan dikoreksi: lagi tepat di browser, dan dari upaya keempat kode dikumpulkan (sebuah prestasi bagi saya).
Jadi, tanpa merangkak keluar dari browser, saya mendesain Pull Request yang sangat nyata menjadi sebuah utilitas yang digunakan di hampir semua distribusi Linux modern.
Saya terkejut oleh kenyataan bahwa saya, tanpa benar-benar mengetahui bahasa, dan tidak mengatur apa pun sendiri (tergantung pada dependensi, saya memerlukan kumpulan kecil perpustakaan untuk dirakit), dan bahkan tanpa memulai kompiler, saya hanya "membuka" fitur yang berfungsi dan berguna di browser. .
Namun, permintaan saya telah digantung tanpa reaksi sejak 19 Maret 2019, dan saya sudah mulai melupakannya.
Tapi kemarin, permintaan ini ditambahkan ke master.
Jadi tentang apa ceritaku? Dan itu adalah tentang fakta bahwa dalam kerangka teknologi modern ternyata kode nyata sudah dapat ditulis dalam browser tanpa harus menggunakan alat pengembangan dan dependensi secara lokal.
Selain itu, saya harus mengakui, ini adalah permintaan tarikan kedua saya untuk utilitas terkenal (setidaknya dalam lingkaran sempit). Terakhir kali, permintaan saya untuk memperbaiki tampilan beberapa bidang di antarmuka web SyncThing mengakibatkan saya mengedit satu baris dalam lingkungan yang saya tidak tahu sama sekali.