GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar Fedora/RHEL/CentOS mediante kickstart en un dispositivo LUKS existente

Las instalaciones de Kickstart nos permiten crear secuencias de comandos y replicar fácilmente instalaciones desatendidas o semidesatendidas de Fedora, Red Hat Enterprise Linux o CentOS. Las instrucciones necesarias para instalar el sistema operativo se especifican, con una sintaxis dedicada, dentro de un archivo Kickstart que se pasa al instalador de Anaconda. En este tutorial veremos cómo reutilizar un LUKS ya existente (Configuración de claves unificadas de Linux) al realizar una instalación Kickstart:esto es algo que no se puede lograr solo con las instrucciones de Kickstart y requiere algunos pasos adicionales.

En este tutorial aprenderás:

  • Cómo utilizar un contenedor LUKS existente al realizar una instalación Kickstart de Fedora, RHEL o CentOS
  • Cómo crear y usar un archivo de actualizaciones.img para usar con el instalador de Anaconda.

Cómo instalar Fedora/RHEL/CentOS mediante kickstart en un dispositivo LUKS existente

Requisitos de software y convenciones utilizadas

Introducción

Kickstart nos permite replicar y personalizar fácilmente las instalaciones del sistema operativo de formas que son simplemente imposibles de lograr desde el instalador gráfico de Anaconda. Podemos, por ejemplo, declarar qué paquetes o grupos de paquetes deben instalarse en el sistema y cuáles deben excluirse en su lugar.

También tenemos la posibilidad de ejecutar comandos personalizados antes o después de que se realice la instalación, especificándolos dentro del %pre dedicado y %post secciones del archivo Kickstart respectivamente. Aprovecharemos esta última característica mencionada para usar un LUKS ya existente dispositivo durante el proceso de instalación.

Cifrado con sintaxis Kickstart nativa

Crear contenedores LUKS es bastante fácil y se puede hacer simplemente usando las instrucciones nativas de kickstart. Aquí hay un ejemplo:

part pv.01 --ondisk=sda --encrypted --luks-type=luks1 --cipher=aes-xts-plain64 --pbkdf-time=5000 --passphrase=secretpassphrase

En el ejemplo anterior, usando la part instrucción, creamos un lvm encriptado volumen físico en el /dev/sda disco. Especificamos el LUKS versión a utilizar (luks1 en este caso – al menos en versiones recientes de Fedora luks2 se ha convertido en la predeterminada), el cipher y el tiempo, expresado en milisegundos, para gastar en PBKDF (Función de derivación de clave basada en contraseña) procesamiento de frase de contraseña (es el equivalente a usar --iter-time opción de cryptsetup ).

Incluso si no es un hábito seguro, también usamos la --passphrase para proporcionar la frase de contraseña de cifrado:sin esta opción, el proceso de instalación se interrumpiría y se nos pediría que proporcionemos una de forma interactiva.

Podemos ver claramente cómo, usando Kickstart, obtenemos mucha más flexibilidad en comparación con una instalación tradicional; ¿Por qué tendríamos que realizar pasos adicionales, entonces? Todavía hay algunas tareas que no podemos lograr usando solo la sintaxis estándar de Kickstart. Entre otras cosas, no podemos crear LUKS contenedores en dispositivos sin procesar (solo en particiones) o especificar el algoritmo hash que se usará para el LUKS configuración de teclas, que por defecto está establecida en sha256 (no tiene nada de malo).

Por estas razones, es posible que deseemos crear nuestra configuración de partición antes de realizar la instalación, ya sea manualmente o utilizando herramientas como parted inside the %pre sección del propio archivo kickstart. También es posible que solo tengamos un LUKS existente configuración que no queremos destruir. En todos estos casos debemos realizar los pasos extra que veremos en un momento.

La sección kickstart %pre

El %pre La sección de un archivo kickstart es la primera que se analiza cuando se recupera el archivo. Se utiliza para ejecutar comandos personalizados antes de que comience la instalación y debe cerrarse explícitamente con %end instrucción.

En %pre , el intérprete de shell bash se usa de forma predeterminada, pero se pueden especificar otros a través del --interpreter opción (para usar python escribiríamos %pre --interpreter /usr/bin/python ). Podemos usar esta sección para ejecutar los comandos necesarios para abrir el LUKS existente envase. Esto es lo que podemos escribir:

%pre
iotty="$(tty)"
exec > "${iotty}" 2> "${iotty}"

while true; do
  cryptsetup luksOpen /dev/sda1 cryptroot - && break
done
%end

Echemos un vistazo al código de arriba. En primer lugar, almacenamos el resultado del tty comando, que imprime el nombre de archivo del terminal conectado a la entrada estándar, en el iotty variables.

Con el exec> "${iotty}" 2> "${iotty}" redirijimos la salida estándar y el error estándar al mismo terminal:
de esta manera podremos ingresar la contraseña del contenedor cuando crytpsetup luksOpen se ejecutará el comando y se mostrará el aviso en la pantalla. El comando se inicia en un bucle infinito que se interrumpe solo si LUKS el contenedor se abrió con éxito.

Si queremos ejecutar una instalación completamente desatendida, debemos pasar la frase de contraseña directamente a cryptsetup (nuevamente, esto no se recomienda). Escribiríamos:

%pre
echo -n "ourverysecretpassphrase" | cryptsetup luksOpen /dev/sda1 cryptroot -
%end

En el ejemplo anterior, pasamos la frase de contraseña a la entrada estándar del comando cryptsetup a través de una tubería | :usamos el echo comando con -n opción para evitar que se agregue un carácter de nueva línea al final de la frase de contraseña.

Parcheando el instalador anaconda de Fedora 31

Si intentamos usar un contenedor LUKS desbloqueado al instalar Fedora 31 a través de Kickstart, recibiremos el siguiente
mensaje y el proceso se cancelará:

El dispositivo LUKS desbloqueado existente no se puede usar para la instalación sin una clave de cifrado especificada para este
dispositivo. Por favor, vuelva a escanear el almacenamiento.

Esto sucede debido a este compromiso introducido en la versión Fedora 31 del instalador de Anaconda. El código básicamente verifica que un dispositivo LUKS existente tenga una clave registrada, si no la tiene, la instalación se cancela. El problema es que blivet , la biblioteca de python utilizada por Anaconda para administrar la partición adquiere la clave solo si abre el contenedor:esto se puede hacer desde el instalador gráfico pero no hay, en el momento de escribir, una instrucción de Kickstart para desbloquear un LUCAS envase. Comenté personalmente el compromiso explicando la situación, y se ha abierto un error en red hat bugzilla.

Crear un archivo de actualizaciones.img

Por el momento, la única solución (que yo sepa) es parchear el código fuente de Anaconda, comentando la línea que ejecuta el control introducido con el compromiso que mencionamos anteriormente. La buena noticia es que es muy simple de operar.

Como primera cosa, necesitamos clonar el repositorio git de Anaconda, específicamente el f31-release rama:

$ git clone https://github.com/rhinstaller/anaconda -b f31-release

Una vez clonado el repositorio, ingresamos el anaconda directorio y modifique el pyanaconda/storage/checker.py archivo:todo lo que tenemos que hacer es comentar la línea 619 :

def set_default_checks(self):
        """Set the default checks."""
        self.checks = list()
        self.add_check(verify_root)
        self.add_check(verify_s390_constraints)
        self.add_check(verify_partition_formatting)
        self.add_check(verify_partition_sizes)
        self.add_check(verify_partition_format_sizes)
        self.add_check(verify_bootloader)
        self.add_check(verify_gpt_biosboot)
        self.add_check(verify_swap)
        self.add_check(verify_swap_uuid)
        self.add_check(verify_mountpoints_on_linuxfs)
        self.add_check(verify_mountpoints_on_root)
       #self.add_check(verify_unlocked_devices_have_key)
        self.add_check(verify_luks_devices_have_key)
        self.add_check(verify_luks2_memory_requirements)
        self.add_check(verify_mounted_partitions)

Guardamos la modificación y, desde la raíz del repositorio, lanzamos el makeupdates script que se encuentra en los scripts directorio. Para que se ejecute el script debemos tener python2 instalado:

$ ./scripts/makeupdates

El script generará el updates.img archivo que contendrá nuestras modificaciones. Para comprobar su contenido podemos utilizar el lsinitrd comando:

$ lsinitrd updates.img
Image: updates.img: 8.0K
========================================================================
Version:

Arguments:
dracut modules:
========================================================================
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 .
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install/updates
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install/updates/pyanaconda
drwxr-xr-x   2 egdoc    egdoc           0 Jan 30 09:29 run/install/updates/pyanaconda/storage
-rw-r--r--   1 egdoc    egdoc       25443 Jan 30 09:29 run/install/updates/pyanaconda/storage/checker.py
========================================================================

Usaremos este archivo para "parchar" el instalador de Fedora 31.

Aplicación del parche

Para aplicar las modificaciones contenidas en el archivo que acabamos de generar, debemos ubicarlo en algún lugar al que podamos acceder fácilmente, tal vez a través de ftp o http, o incluso en un dispositivo de bloqueo local, y usar inst.updates para referenciarlo desde la imagen del instalador de Fedora. Desde el menú de grub, destacamos la entrada de menú "Instalar Fedora":



Menú de instalación de Fedora 31

Una vez que se selecciona la línea de menú, presionamos la tecla Tab:la línea de comando del kernel asociada con la entrada se muestra en la parte inferior de la pantalla:



La línea de comando del kernel utilizada por la entrada "Instalar Fedora". Todo lo que tenemos que hacer ahora es agregar inst.updates instrucción y proporcione la ruta a updates.img archivo que creamos. Suponiendo que tanto el archivo Kickstart como el archivo upgrades.img sean accesibles a través de http en un servidor local con IP 192.168.0.37, escribiríamos:
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Fedora-S-dvd-x86_31-31 quiet
inst.updates=http://192.168.0.37/updates.img inst.ks=http://192.168.0.37/ks.cfg

En este punto podemos presionar enter para iniciar. Con la modificación anterior, el instalador ya no se quejará de
el LUKS desbloqueado dispositivo, y la instalación continuará sin problemas.

Conclusiones

En este artículo vimos cómo ajustar una instalación kickstart para reutilizar un LUKS ya existente dispositivo, desbloqueándolo en el %pre sección del archivo kickstart, y cómo aplicar una pequeña solución al instalador de Fedora 31 Anaconda que, de lo contrario, fallaría cuando se intentara este tipo de instalación. Si tiene curiosidad acerca de la sintaxis de Kickstart, consulte la documentación en línea.


Cent OS
  1. Cómo instalar un archivo RPM en el sistema operativo Linux (CentOS, RHEL y Fedora)

  2. Cómo instalar Google Chrome 17 en Fedora 16, CentOS 6 / RHEL 6

  3. Cómo instalar Python 3.5 en CentOS/RHEL y Fedora

  4. ¿Cómo extraer el paquete 7z en CentOS/RHEL/Fedora?

  5. Cómo instalar docker en CentOS/RHEL/Fedora

Cómo instalar los editores de escritorio ONLYOFFICE en RHEL/CentOS/Fedora

Cómo instalar Opera 11.61 en Fedora 15/16, CentOS 6 / RHEL 6

Cómo instalar Cockpit en CentOS 7/RHEL 7 y Fedora 28

Cómo instalar pgAdmin 4 en CentOS 7 / RHEL 7 y Fedora 29 / Fedora 28

Cómo instalar paquetes RPM en CentOS, RHEL y Fedora

Cómo instalar Wine 5.0 en CentOS, RHEL y Fedora

    Requisitos de software y convenciones de la línea de comandos de Linux
    Categoría Requisitos, convenciones o versión de software utilizada
    Sistema Fedora/Rhel/CentOS
    Software No se necesita ningún software específico para seguir este tutorial.
    Otro
    • Conocimiento de la sintaxis Kickstart
    • Conocimiento de LUKS (Linux Unified Key Setup) y el comando cryptsetup.
    Convenciones # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando
    $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios