El futuro ya está aquí o codifica directamente en el navegador

Te contaré una situación divertida que me pasó y cómo convertirme en colaborador de un proyecto famoso.

No hace mucho estaba dándole vueltas a una idea: arrancar Linux directamente desde UEFI...
La idea no es nueva y existen varios manuales sobre este tema. Puedes ver uno de ellos. aquí

En realidad, mis intentos de larga data por resolver este problema dieron como resultado un acuerdo completamente formalizado. decisión. La solución funciona bastante y la uso en algunas de las máquinas de mi hogar. Esta solución se describe con un poco más de detalle. aquí.

La esencia de UEFI-Boot es que la partición ESP (EFI System Partition) se combina con el directorio /boot. Aquellos. Todos los núcleos y las imágenes de arranque (initrd) se encuentran en la misma partición desde la cual UEFI puede iniciar archivos ejecutables y, en particular, iniciar cargadores de arranque del sistema. Pero el propio kernel de Linux en muchas distribuciones ya está ensamblado 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 físicos (que el sistema crea regularmente cuando actualiza el initrd). Y no hay nada particularmente criminal en esto, pero ver advertencias del sistema al actualizar los componentes del kernel no es muy agradable...

Hay otra manera.

El administrador de arranque UEFI (el mismo donde necesita registrar el cargador de arranque del sistema operativo) puede, además de los cargadores de arranque/kernels de Linux, también cargar controladores. Entonces puede cargar el controlador para el sistema de archivos donde tiene /boot y cargar el kernel directamente desde allí usando UEFI. El conductor, por supuesto, debe colocarse en la partición ESP. Esto es más o menos lo que hacen los gestores de arranque como GRUB. Pero lo más destacado es que todas las funciones de GRUB utilizadas con frecuencia ya están en UEFI. Más precisamente en su gestor de descargas. Y para ser aún más aburrido, el administrador de arranque UEFI tiene aún más capacidades en algunos asuntos.

Parece una solución hermosa, pero hay un "PERO" (o mejor dicho, lo era, pero hablaremos de eso más adelante). El caso es que el sistema de controladores 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 convencional Map, que toma a cada conductor por turno e intenta asociarlo con todos, al menos los dispositivos adecuados. Y si el conductor pudo recoger el dispositivo, se crea un mapeo: un registro de conexión. Así es exactamente como se debe inicializar el controlador recién cargado en un montón común con todos los demás. Y todo lo que necesita es establecer un bit (LOAD_OPTION_FORCE_RECONNECT) en 1 en el registro de inicio del controlador y UEFI realizará esta reasignación global después de cargarlo.

Pero esto no es tan fácil de hacer. La utilidad estándar efibootmgr (que se utiliza para configurar el administrador de descarga UEFI) no sabe (o mejor dicho, no sabía cómo) configurar este bit. Tuve que instalarlo manualmente mediante un procedimiento bastante complicado y peligroso.

Y una vez más, habiendo intentado hacerlo con las manos, no pude soportarlo y formalizaré problema en GitHub pidiendo a los desarrolladores que agreguen esta característica.

Pasaron varios días, pero nadie prestó atención a mi pedido. Y por curiosidad, miré el código fuente... lo bifurqué y descubrí de rodillas cómo agregar esta característica... "De rodillas" porque no instalé nada de eso y edité el código fuente. código directamente en el navegador.

Conozco C (el lenguaje de programación) muy superficialmente, pero esbocé una solución aproximada (principalmente copiar y pegar)... y luego pensé: al menos probablemente tengo muchos errores allí (mis intentos anteriores de editar el archivo de otra persona El código C se completó aproximadamente la décima vez). Emitiré una solicitud de extracción. Bien diseñado.

Y allí resultó que Travis CI estaba adjunto para verificar las solicitudes de extracción. Y él diligentemente me contó todos mis errores. Bueno, si hay errores conocidos, no hace falta arreglarlo: de nuevo, directamente en el navegador, y al cuarto intento el código funcionó (un logro para mí).

Y así, sin salir del navegador, formateé 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 conocer realmente el idioma, sin configurar nada (las dependencias requieren bastantes bibliotecas para el ensamblaje) y sin siquiera ejecutar el compilador, simplemente "codifiqué" una característica completamente funcional y útil en el navegador .

Sin embargo, mi solicitud seguía sin respuesta desde el 19 de marzo de 2019 y ya había comenzado a olvidarme de ella.

Pero ayer se añadió esta solicitud al master.

Entonces, ¿de qué se trata mi historia? Y se refiere al hecho de que, en el marco de las tecnologías modernas, resultó que el código real ya se puede escribir en el navegador, sin implementar ninguna herramienta de desarrollo ni dependencias localmente.

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

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿Debería escribir más o no?

  • no vale la pena

294 usuarios votaron. 138 usuarios se abstuvieron.

Fuente: habr.com

Añadir un comentario