O futuro xa está aquí ou codifica directamente no navegador

Vouvos falar dunha situación divertida que me pasou e de como facerme colaborador dun proxecto famoso.

Non hai moito que estiven xogando cunha idea: arrancar Linux directamente desde UEFI...
A idea non é nova e hai unha serie de manuais sobre este tema. Podes ver un deles aquí

En realidade, os meus intentos de longa data para resolver este problema deron lugar a unha formalización completa decisión. A solución funciona bastante e úsoa nalgunhas das miñas máquinas domésticas. Esta solución descríbese cun pouco máis de detalle. aquí.

A esencia de UEFI-Boot é que a partición ESP (EFI System Partition) combínase co directorio /boot. Eses. todos os núcleos e imaxes de arranque (initrd) están situados na mesma partición desde a que UEFI pode lanzar ficheiros executables e, en particular, iniciar os cargadores de arranque do sistema. Pero o propio núcleo de Linux en moitas distribucións xa está ensamblado coa opción UEFISTUB, que permite que o propio núcleo se lance desde UEFI.

Esta solución ten un momento desagradable: a partición ESP está formateada en FAT32, na que é imposible crear ligazóns duras (que o sistema crea regularmente ao actualizar o initrd). E non hai nada especialmente criminal sobre isto, pero ver os avisos do sistema ao actualizar os compoñentes do núcleo non é moi agradable...

Hai outro xeito.

O xestor de arranque UEFI (o mesmo onde precisa rexistrar o cargador de arranque do SO) pode, ademais dos cargadores de arranque/núcleos de Linux, tamén cargar controladores. Así, pode cargar o controlador para o sistema de ficheiros onde ten /boot e cargar o núcleo directamente desde alí usando UEFI. O controlador, por suposto, debe colocarse na partición ESP. Isto é aproximadamente o que fan os cargadores de arranque como GRUB. Pero o máis destacado é que todas as funcións GRUB de uso frecuente xa están en UEFI. Máis precisamente no seu xestor de descargas. E para ser aínda máis aburrido, o xestor de arranque UEFI ten aínda máis capacidades nalgúns asuntos.

Parece ser unha fermosa solución, pero hai un "PERO" (ou mellor dito, era, pero máis sobre iso máis tarde). O feito é que o sistema de controlador UEFI é bastante sinxelo. Non existe tal cousa como montar un sistema de ficheiros ou asociar un controlador a un dispositivo específico. Hai unha chamada de sistema co nome convencional Map, que leva a cada condutor por quendas e trata de asocialo a todos, polo menos aos dispositivos axeitados. E se o controlador puido recoller o dispositivo, créase un mapeo: un rexistro de conexión. Así é exactamente como debería inicializarse o controlador recentemente cargado nun montón común con todos os demais. E todo o que necesitas é establecer un bit (LOAD_OPTION_FORCE_RECONNECT) en 1 no rexistro de inicio do controlador e UEFI fará esta reasignación global despois de cargalo.

Pero isto non é tan fácil de facer. A utilidade estándar efibootmgr (que se usa para configurar o xestor de descargas UEFI) non sabe como (ou mellor dito, non sabía como) configurar este bit. Tiven que instalalo manualmente a través dun procedemento bastante complicado e perigoso.

E unha vez máis, despois de tentar facelo coas miñas mans, non puiden aguantar e formei problema en GitHub pedindo aos desenvolvedores que engadan esta función.

Pasaron varios días, pero ninguén fixo caso da miña petición. E por curiosidade, mirei o código fonte... bifurqueino, e descubrín de xeonllos como engadir esta función... "De xeonllos" porque non instalei nada así e editei a fonte. código directamente no navegador.

Coñezo C (a linguaxe de programación) moi superficialmente, pero esbocei unha solución aproximada (principalmente copiar e pegar)... e entón pensei: polo menos probablemente teña moitos erros alí (os meus intentos anteriores de editar a doutra persoa). O código C completouse aproximadamente a décima vez) Emitirei unha solicitude de extracción. Ben deseñado.

E alí, Travis CI resultou estar adscrito para comprobar as solicitudes de retirada. E contou con dilixencia todos os meus erros. Ben, se hai erros coñecidos, non hai que corrixilos: de novo, xusto no navegador, e no cuarto intento o código funcionou (un logro para min).

E así, sen saír do navegador, formei un Pull Request moi real nunha utilidade que se usa en case todas as distribucións de Linux modernas.

Sorprendeume o feito de que, sen coñecer realmente o idioma, sen configurar nada (as dependencias requiren bastantes bibliotecas para a montaxe), e sen sequera executar o compilador, simplemente "codifiquei" unha función completamente útil e útil no navegador.

Non obstante, a miña solicitude non respondeu desde o 19 de marzo de 2019 e xa comezara a esquecerme del.

Pero onte engadiuse esta solicitude ao mestre.

Entón, cal é a miña historia? E está a falar de que, no marco das tecnoloxías modernas, resultou que o código real xa se pode escribir no navegador, sen implantar ningunha ferramenta de desenvolvemento e dependencia localmente.

Ademais, debo admitir, esta xa é a miña segunda solicitude de extracción de utilidades coñecidas (polo menos en círculos estreitos). A última vez, a miña solicitude para corrixir a visualización dalgúns campos na interface web de SyncThing resultou na miña edición literalmente dunha liña nun ambiente que non coñezo en absoluto.

Só os usuarios rexistrados poden participar na enquisa. Rexístrate, por favor.

Debo escribir máis ou non?

  • si

  • non paga a pena

Votaron 294 usuarios. 138 usuarios abstivéronse.

Fonte: www.habr.com

Engadir un comentario