Masa depan sudah ada di sini atau kod terus dalam penyemak imbas

Saya akan memberitahu anda tentang situasi lucu yang berlaku kepada saya, dan cara menjadi penyumbang kepada projek terkenal.

Tidak lama dahulu saya sedang bermain-main dengan satu idea: memuatkan Linux terus dari UEFI…
Idea ini bukan baru dan terdapat beberapa manual mengenai topik ini. Anda boleh melihat salah seorang daripada mereka di sini

Sebenarnya, percubaan lama saya untuk menyelesaikan isu ini menghasilkan penyelesaian yang diformalkan sepenuhnya keputusan. Penyelesaiannya agak berkesan dan saya menggunakannya pada beberapa mesin rumah saya. Penyelesaian ini diterangkan dengan lebih terperinci. di sini.

Intipati UEFI-Boot ialah partition ESP (EFI System Partition) digabungkan dengan direktori /boot. Ini bermakna semua kernel dan imej but (initrd) terletak pada partition yang sama dari mana UEFI boleh melancarkan fail boleh laku dan, khususnya, pemuat but. Tetapi kernel itu sendiri Linux Banyak pengedaran telah dikompilasi dengan pilihan UEFISTUB, yang membolehkan kernel itu sendiri dilancarkan dari UEFI.

Penyelesaian ini mempunyai satu momen yang tidak menyenangkan - partition ESP diformatkan dalam FAT32, di mana mustahil untuk membuat pautan keras (yang sistem selalu buat semasa mengemas kini initrd). Dan tidak ada apa-apa jenayah yang khusus tentang ini, tetapi melihat amaran sistem apabila mengemas kini komponen kernel tidak begitu menyenangkan...

Ada cara lain.

Pengurus but UEFI (yang mana anda perlu mendaftarkan bootloader OS) boleh melakukan perkara lain selain bootloader/kernel Linux Muatkan pemacu juga. Jadi, anda boleh memuatkan pemacu untuk sistem fail tempat /boot anda berada dan memuatkan kernel terus dari sana menggunakan UEFI. Pemacu, sudah tentu, perlu diletakkan pada ESP. Ini secara kasarnya dilakukan oleh pemuat but seperti GRUB. Tetapi rahsianya ialah semua fungsi GRUB yang kerap digunakan sudah tersedia dalam UEFI. Lebih tepat lagi, dalam pengurus butnya. Dan untuk menjadi lebih canggih, pengurus but UEFI juga mempunyai lebih banyak keupayaan dalam beberapa bidang.

Nampaknya ia merupakan penyelesaian yang cantik, tetapi terdapat satu "TETAPI" (atau lebih tepat, ia adalah, tetapi lebih lanjut mengenainya kemudian). Hakikatnya ialah sistem pemacu UEFI agak mudah. Tidak ada perkara seperti memasang sistem fail atau mengaitkan pemandu dengan peranti tertentu. Terdapat panggilan sistem dengan nama konvensional Map, yang membawa setiap pemandu secara bergilir-gilir dan cuba mengaitkannya dengan semua, sekurang-kurangnya peranti yang sesuai. Dan jika pemandu dapat mengambil peranti itu, maka pemetaan dibuat - rekod penyambungan. Beginilah cara pemacu yang baru dimuatkan harus dimulakan dalam timbunan biasa dengan semua yang lain. Dan apa yang anda perlukan ialah menetapkan satu bit (LOAD_OPTION_FORCE_RECONNECT) kepada 1 dalam rekod but pemacu dan UEFI akan melakukan pemetaan semula global ini selepas memuatkannya.

Tetapi ini tidak begitu mudah untuk dilakukan. Utiliti efibootmgr standard (yang digunakan untuk mengkonfigurasi pengurus offload UEFI) tidak tahu bagaimana (atau lebih tepatnya, tidak tahu bagaimana) untuk menetapkan bit ini. Saya terpaksa memasangnya secara manual melalui prosedur yang agak rumit dan berbahaya.

Dan sekali lagi, setelah mencuba melakukannya dengan tangan saya, saya tidak tahan dan membuat formal isu di GitHub meminta pembangun menambah ciri ini.

Beberapa hari berlalu, tetapi tiada siapa yang menghiraukan permintaan saya. Dan kerana ingin tahu, saya melihat kod sumber... Saya bercabang, dan memikirkan cara untuk menambah ciri ini... "Pada lutut saya" kerana saya tidak memasang apa-apa seperti itu dan mengedit sumber kod terus dalam penyemak imbas.

Saya tahu C (bahasa pengaturcaraan) secara dangkal, tetapi saya melakarkan penyelesaian anggaran (kebanyakannya salin-tampal)... dan kemudian saya fikir - sekurang-kurangnya saya mungkin mempunyai banyak kesilapan di sana (percubaan masa lalu saya untuk mengedit orang lain Kod C telah selesai kira-kira kali ke-10) Saya akan mengeluarkan Permintaan Tarik. Baiklah dirancang.

Dan di sana Travis CI ternyata dilampirkan untuk menyemak permintaan tarik. Dan dia bersungguh-sungguh memberitahu saya semua kesilapan saya. Nah, jika terdapat ralat yang diketahui, tidak perlu membetulkannya: sekali lagi, betul-betul dalam penyemak imbas, dan pada percubaan keempat kod itu berfungsi (satu pencapaian untuk saya).

Jadi, tanpa meninggalkan pelayar, saya telah menukarkan Permintaan Tarik yang sangat nyata kepada utiliti yang digunakan dalam hampir semua pengedaran moden. Linux.

Saya terkejut dengan hakikat bahawa, tanpa benar-benar mengetahui bahasa, tanpa menyediakan apa-apa (kebergantungan memerlukan beberapa perpustakaan untuk pemasangan), dan tanpa pernah menjalankan pengkompil, saya hanya "mengkodkan" ciri yang berfungsi sepenuhnya dan berguna dalam pelayar .

Walau bagaimanapun, permintaan saya kekal tidak respon sejak 19 Mac 2019, dan saya sudah mula melupakannya.

Tetapi semalam permintaan ini telah ditambah kepada tuan.

Jadi apa cerita saya? Dan dia bercakap tentang fakta bahawa, dalam rangka teknologi moden, ternyata kod sebenar sudah boleh ditulis dalam penyemak imbas, tanpa menggunakan sebarang alat pembangunan dan kebergantungan secara tempatan.

Lebih-lebih lagi, saya mesti mengakui, ini sudah menjadi permintaan tarik kedua saya untuk utiliti yang terkenal (sekurang-kurangnya dalam kalangan sempit). Kali terakhir, permintaan saya untuk membetulkan paparan beberapa medan dalam antara muka web SyncThing menghasilkan pengeditan satu baris saya secara literal dalam persekitaran yang saya tidak tahu sama sekali.

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Perlukah saya menulis lebih banyak atau tidak?

  • ya

  • tidak berbaloi

294 pengguna telah mengundi. 138 pengguna berpantang.

Sumber: www.habr.com

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster