El futuro está aquí o codificado directamente en el navegador

Te contaré sobre la curiosa situación que me sucedió y cómo ser colaborador de un proyecto famoso.

No hace mucho tiempo estaba ocupado con una idea: arrancar Linux directamente desde UEFI ...
La idea no es nueva y hay varios manuales sobre este tema. Uno de ellos se puede ver aquí.

En realidad, mis intentos de larga data para resolver este problema resultaron en una solución bien formada. La solución funciona bastante y la uso en partes de las máquinas de mi hogar. Esta solución se describe con más detalle aquí .

La esencia de UEFI-Boot es que la partición ESP (EFI System Partition) se combina con el directorio / boot. Es decir todos los núcleos y las imágenes de arranque (initrd) se encuentran en la misma sección desde la cual UEFI puede ejecutar archivos ejecutables y, en particular, ejecutar cargadores de arranque del sistema. Pero el kernel de Linux ya está construido en muchas distribuciones con la opción UEFISTUB, que permite que el kernel se inicie desde UEFI.

Esta solución tiene un momento desagradable: la partición ESP está formateada en FAT32, en la que es imposible crear enlaces duros (que el sistema crea regularmente al actualizar initrd). Y no hay nada particularmente criminal en esto, pero no es muy agradable ver advertencias del sistema al actualizar los componentes del kernel ...

Hay otra manera

El administrador de arranque UEFI (el que necesita para registrar el cargador del sistema operativo) puede cargar controladores además de los cargadores / núcleos de Linux. Por lo tanto, puede cargar el controlador del sistema de archivos donde tiene / boot y directamente desde allí cargar el kernel utilizando UEFI. El conductor, por supuesto, necesita ser puesto en la sección ESP. Esto es lo que hacen los cargadores GRUB. Pero lo más destacado es que todas las funciones GRUB de uso frecuente ya están en UEFI. Más precisamente en su gestor de descargas. Y para ser aún más aburrido, el gestor de arranque UEFI tiene aún más opciones en algunas áreas.

Parece ser una solución hermosa, pero hay una "PERO" (o más bien lo fue, pero más sobre eso más adelante). El hecho es que el sistema de controlador UEFI es bastante sencillo. No existe tal cosa como montar un sistema de archivos o asociar un controlador con un dispositivo específico. Hay una llamada al sistema con el nombre condicional Map (Eng.) Que toma a cada controlador por turno e intenta conectarlo con todos, al menos, los dispositivos adecuados. Y si el dispositivo puede recoger el controlador, se crea la asignación, un registro vinculante. Así es exactamente cómo se debe inicializar el controlador recién cargado en el montón común con todos los demás. Y todo lo que es necesario es poner un bit (LOAD_OPTION_FORCE_RECONNECT) en 1 en el registro de arranque del controlador y UEFI hará esta misma reasignación global después de cargarlo.

Pero esto no es tan fácil de hacer. La utilidad efibootmgr estándar (mediante la cual se configura el gestor de descarga UEFI) no sabe cómo (o más bien no sabía) cómo establecer este bit. Tuve que pasarlo con las manos por un procedimiento bastante complicado y peligroso.

Y una vez más, después de haber tratado de hacer esto con mis manos, no pude soportarlo y escribí un problema en GitHub pidiéndole a los desarrolladores que agreguen esta característica.

Pasaron varios días, pero nadie prestó atención a mi solicitud. Y por curiosidad miré la fuente ... bifurqué, y pensé "de rodillas" cómo agregar esta función ... "De rodillas" porque no configuré nada de eso y edité la fuente directamente en el navegador.

C (lenguaje de programación) Lo sé muy superficialmente, pero lancé una solución (principalmente copiar y pegar) ... bueno, luego pensé, y al menos probablemente tenga muchos errores allí (mis intentos anteriores de editar el código C de otra persona se recopilaron del 10) Emitiré una solicitud de extracción. Bien diseñado

Y allí se atornilló a Travis CI para verificar las solicitudes de extracción. Y con cuidado me dio todos mis errores. Bueno, si se conocen errores, lo que sea que se corrija: nuevamente en el navegador, y desde el cuarto intento se recopiló el código (un logro para mí).

Y así, sin salir del navegador, diseñé una solicitud de extracción muy real en una utilidad que se utiliza en casi todas las distribuciones modernas de Linux.

Me sorprendió el hecho de que, sin saber realmente el idioma, y ​​sin configurar nada yo mismo (dependiendo de las dependencias, necesito un pequeño paquete de bibliotecas para ensamblar) e incluso sin siquiera iniciar el compilador, simplemente "desplegué" una función funcional y útil en el navegador .

Sin embargo, mi solicitud ha estado pendiente sin reacción desde el 19 de marzo de 2019, y ya he comenzado a olvidarlo.

Pero ayer, esta solicitud se agregó a master.



Entonces, ¿de qué trata mi historia? Y se trata del hecho de que, en el marco de las tecnologías modernas, resultó que el código real ya se puede escribir en un navegador sin tener que implementar herramientas de desarrollo y dependencias localmente.

Además, debo admitir que esta es mi segunda solicitud de extracción para servicios públicos conocidos (al menos en círculos estrechos). La última vez, mi solicitud para corregir la visualización de algunos campos en la interfaz web de SyncThing resultó en mi edición literal de una línea en un entorno que no conozco en absoluto.

Source: https://habr.com/ru/post/471266/


All Articles