Simplificamos la construcción de Linux desde el código fuente con el sitio UmVirt LFS Packages

Es posible que muchos usuarios de GNU/Linux, a la luz de las recientes iniciativas gubernamentales para crear un Internet "soberano", se hayan preguntado cómo protegerse en caso de que los repositorios de las distribuciones populares de GNU/Linux se vuelvan inaccesibles.

Algunos descargan los repositorios de CentOS, Ubuntu, Debian, otros construyen sus propias distribuciones sobre la base de distribuciones existentes, y algunos, armados con libros de LFS (Linux From Scratch) y BLFS (Beyond Linux From Scratch), ya han comenzado a compilar sus propias distribuciones a partir del código fuente, ya que creen que en un entorno de "Internet soberano" seguramente ocurrirán ataques de hackers, epidemias de virus, filtraciones de datos, y los binarios simplemente se volverán obsoletos con el tiempo.

Recientemente me tomé el tiempo para compilar completamente una máquina virtual a partir del código fuente siguiendo las instrucciones del libro Linux From Scratch Systemd Edition v.8.3. Estoy ansioso por compartir los resultados con ustedes.

El Proceso de Construcción de Linux

El proceso de construir Linux a partir del código fuente se puede dividir en tres etapas:

  1. Se configura un entorno de construcción LFS basado en el sistema operativo existente.
  2. En el entorno de construcción se crea una imagen de la máquina virtual LFS.
  3. En la máquina virtual se instalan paquetes adicionales del libro BLFS que no están en el libro LFS.

Archivos de scripts estáticos

Al trabajar con el entorno de construcción, es conveniente usar el portapapeles y SSH: copias los comandos del libro y los pegas en la consola del entorno de construcción.

Después de iniciar la máquina virtual creada, surgieron problemas serios. A diferencia de la ventana del terminal, no se puede pegar código en la ventana del cliente de la máquina virtual. Es incómodo escribir comandos en el teclado y hay un gran riesgo de errores tipográficos. El peligro de los errores tipográficos radica en que pueden manifestarse no de inmediato, sino después de un tiempo, y llevar a problemas graves.

Se sabe que los comandos se pueden ingresar no solo desde el teclado, sino también desde el flujo estándar (STDIN). Para el flujo estándar se puede utilizar un puerto serie, así como el resultado de la salida de una programa de script, el llamado estándar de salida (STDOUT).

Muchos saben que el comando wget puede enviar el contenido de un archivo descargado a la salida estándar (STDOUT):

wget http://example.com -O -

Si se dirige la salida del comando wget a un intérprete, se puede ejecutar código arbitrario. El código se ejecutará como si se hubiera escrito en el teclado o copiado del portapapeles:

wget http://umvirt.com/linux/helloworld.sh -O - | bash

De este modo, se pueden alojar en algún servidor web archivos con comandos y enviar su contenido al intérprete.

Archivos de scripts dinámicos

Los archivos estáticos, sin duda, son buenos si sabes exactamente lo que debe ejecutarse, pero si se trata de la instalación de un paquete, si no está claro si las dependencias están instaladas o no, ¿qué se debe hacer entonces?

Aquí es donde entra en juego un sitio web dinámico que se basa en un servidor web LAMP (Linux-Apache-MySQL-PHP). Si el sitio puede generar páginas (archivos HTML) y gráficos de manera dinámica, debería poder manejar archivos de texto comunes sin problemas.

Así fue como sucedió. Creé un sitio UmVirt LFS Packages que genera scripts para el intérprete Bash. La base de datos del sitio contiene información sobre paquetes, dependencias, parches, complementos y comandos de compilación.

Ahora, para instalar el paquete mc (midnight commander) se puede utilizar el comando:

wget --no-check-certificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bash

El script del sitio obtendrá automáticamente los datos de la base de datos y generará el código para verificar las dependencias y el código del script para instalar el paquete. El intérprete procesará las instrucciones del script.

Para que esto sea posible, en el disco de la máquina virtual se guarda información sobre los paquetes instalados en una base de datos.

La base de datos de paquetes instalados se encuentra en el directorio /var/cache/ulfs-packages que consiste en una lista de archivos vacíos cuyos nombres corresponden a los nombres de los paquetes.

Si un paquete no se encuentra en la base de datos, se realiza una instalación recursiva de las dependencias.

Comodidades

Para que la instalación de paquetes sea más conveniente, escribí el script chimp, otro sitio UmVirt LFS Assistant, que utiliza la base de datos. UmVirt LFS PackagesLa tarea principal UmVirt LFS Assistant es ejecutar otros comandos.

Con chimp, la instalación de paquetes se vuelve aún más sencilla:

chimp install mc

Demostración

Para familiarizarse con el funcionamiento de los servicios, UmVirt LFS Packages y UmVirt LFS Assistant se puede descargar la imagen base Initial UmVirt LFS v.0.1 Update 1. Realiza la instalación de Xorg ejecutando un solo comando:

chimp install X

Durante la ejecución del script, se instalarán 141 paquetes automáticamente. Para ahorrar tiempo en la compilación, se puede cambiar el valor de la variable MAKEFLAGS en el archivo /etc/profile de «-j1» (un hilo) a, por ejemplo, «-j6» (seis hilos).

Descentralización y personalización

Para garantizar la seguridad, autonomía y personalización, el código fuente de los servicios UmVirt LFS Packages y UmVirt LFS Assistant se ha publicado en acceso público. Cualquiera puede descargarlo, implementarlo y ajustar los servicios dentro de su infraestructura.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster