Instalación remota del sistema operativo FreeBSD sin una consola remota

Daniel Gerzo

Aviso Legal

FreeBSD is a registered trademark of the FreeBSD Foundation.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.

Resumen

Este artículo documenta la instalación remota del sistema operativo FreeBSD cuando la consola del sistema remoto no está disponible. La idea principal detrás de este artículo es el resultado de la colaboración con Martin Matuska mm@FreeBSD.org y con información valiosa proporcionada por Paweł Jakub Dawidek pjd@FreeBSD.org.


1. Antecedentes

Hay muchos proveedores de hosting en el mundo, pero muy pocos soportan oficialmente FreeBSD. Por lo general, dan soporte para instalar una distribución de Linux® en los servidores que ofrecen.

En algunos casos, estas compañías instalarán su distribución favorita de Linux® si lo solicita. Utilizando esta opción, intentaremos instalar FreeBSD. En otros casos, pueden ofrecer un sistema de rescate que se podría usar en caso de emergencia. También es posible usar esta opción para nuestros propósitos.

Este artículo cubre los pasos básicos de instalación y configuración necesarios para iniciar una instalación remota de FreeBSD con RAID-1 y ZFS.

2. Introducción

Esta sección resumirá el propósito del artículo y explicará mejor lo que se trata en este documento. Las instrucciones incluidas beneficiarán a quienes utilicen los servicios proporcionados por las instalaciones de colocación de servidores que no admiten FreeBSD.

  1. Como hemos mencionado en la sección de Antecedentes, muchas de las empresas más respetadas de hosting ofrecen algún tipo de sistema de rescate, que se inicia desde su LAN y es accesible por SSH. Por lo general, dan este soporte para ayudar a sus clientes a reparar sistemas operativos dañados. Como se explicará en este artículo, es posible instalar FreeBSD con la ayuda de estos sistemas de rescate.

  2. La siguiente sección del artículo describirá cómo configurar y compilar una versión minimalista de FreeBSD en la máquina local. Esa versión finalmente se ejecutará en la máquina remota desde ramdisk, lo que nos permitirá instalar un sistema operativo FreeBSD completo desde un mirror FTP usando la utilidad Sysinstall.

  3. El resto del artículo describirá el proceso de instalación, así como la configuración del sistema de archivos ZFS.

2.1. Requisitos

Para continuar con éxito, debe:

  • Tener un sistema operativo accesible por la red con acceso SSH

  • Entender el proceso de instalación de FreeBSD

  • Estar familiarizado con la utilidad sysinstall(8)

  • Tener a mano la imagen ISO o el CD de instalación de FreeBSD

3. Preparación - mfsBSD

Antes de poder instalar FreeBSD en el sistema de destino, es necesario crear la imagen mínima de FreeBSD que se iniciará desde el disco duro. De esta manera, se puede acceder al nuevo sistema desde la red, y el resto de la instalación se puede hacer sin acceso remoto a la consola del sistema.

El conjunto de herramientas mfsBSD se puede usar para construir una imagen pequeña de FreeBSD. Como sugiere el nombre de mfsBSD ("mfs" significa "sistema de archivos en memoria"), la imagen resultante se ejecuta completamente desde ramdisk. Gracias a esta característica, la manipulación de los discos duros no estará limitada, por lo que será posible instalar un sistema operativo completo FreeBSD. La página web de mfsBSD incluye indicaciones a la última versión del conjunto de herramientas.

Tenga en cuenta que los aspectos internos de mfsBSD están fuera del alcance de este artículo. El lector interesado debe consultar la documentación oficial de mfsBSD para obtener más detalles.

Descargue y extraiga la última versión de mfsBSD y cambie su directorio de trabajo al directorio donde se encuentren los scripts de mfsBSD:

# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
# tar xvzf mfsbsd-2.1.tar.gz
# cd mfsbsd-2.1/

3.1. Configuración de mfsBSD

Antes de iniciar mfsBSD, deben establecerse algunas opciones de configuración importantes. Lo más importante que tenemos que configurar bien es, naturalmente, la configuración de red. El método más adecuado para configurar las opciones de red dependerá de si conocemos previamente el tipo de interfaz de red que usaremos, y el controlador de red que se cargará para nuestro hardware. Veremos cómo se puede configurar mfsBSD en cualquier caso.

Otra cosa importante es establecer la contraseña del usuario root. Esto se puede hacer editando conf/loader.conf. Por favor lea los comentarios incluidos.

3.1.1. El método conf/interfaces.conf

Cuando se desconoce la tarjeta de red instalada, es posible utilizar las funciones de detección automática de mfsBSD. Los scripts de inicio de mfsBSD pueden detectar el controlador correcto, según la dirección MAC de la interfaz, si configuramos las siguientes opciones en conf/interfaces.conf:

mac_interfaces="ext1"
ifconfig_ext1_mac="00:00:00:00:00:00"
ifconfig_ext1="inet 192.168.0.2/24"

No olvide agregar defaultrouter a conf/rc.conf:

defaultrouter="192.168.0.1"

3.1.2. El método conf/rc.conf

Cuando se conoce el controlador de la interfaz de red, es más conveniente utilizar conf/rc.conf para las opciones de red. La sintaxis de este fichero es la misma que la utilizada en el fichero rc.conf(5) de FreeBSD.

Por ejemplo, si sabe que una interfaz de red re(4) estará disponible, puede configurar las siguientes opciones en conf/rc.conf:

defaultrouter="192.168.0.1"
ifconfig_re0="inet 192.168.0.2/24"

3.2. Creando una imagen de mfsBSD

El proceso de creación de una imagen de mfsBSD es bastante sencillo.

El primer paso es montar el CD de instalación de FreeBSD, o la imagen ISO de instalación en /cdrom. Por ejemplo, en este artículo asumiremos que ha descargado la ISO FreeBSD 10.1-RELEASE. Montar esta imagen ISO en el directorio /cdrom es fácil con la utilidad mdconfig(8):

# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso
# mount_cd9660 /dev/md10 /cdrom

Como las versiones recientes de FreeBSD no contienen los sets regulares de la distribución, es necesario extraerlos de la imagen ISO:

# mkdir DIST
# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST
# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST

A continuación, genere la imagen mfsBSD de arranque:

# make BASE=DIST

El comando make anterior debe ejecutarse desde el nivel superior del árbol de directorios de mfsBSD, por ejemplo ~/mfsbsd-2.1/.

3.3. Iniciando mfsBSD

Ahora que la imagen mfsBSD está lista, se debe cargar en el sistema remoto ejecutando el sistema de recuperación o una distribución de Linux® preinstalada. La herramienta más adecuada para esta tarea es scp:

# scp disk.img root@192.168.0.2:.

Para iniciar correctamente la imagen mfsBSD, debe colocarse en el primer dispositivo (bootable) de la máquina en cuestión. Se puede hacer utilizando este ejemplo, siempre que sda sea el primer dispositivo de arranque:

# dd if=/root/disk.img of=/dev/sda bs=1m

Si todo ha ido bien, la imagen debe estar en el MBR del primer dispositivo y la máquina se puede reiniciar. Observe que la máquina se inicializa correctamente con la herramienta ping(8). Una vez que esté en línea, debería ser posible acceder a ella con ssh(1) como usuario root con la contraseña configurada.

4. Instalación del sistema operativo FreeBSD

mfsBSD se ha iniciado correctamente y debería ser posible iniciar sesión a través de ssh(1). En esta sección se describe cómo crear y etiquetar slices, configurar gmirror para RAID-1 y cómo utilizar Sysinstall para instalar una distribución mínima de FreeBSD.

4.1. Preparación de los discos duros

La primera tarea es asignar espacio en disco para FreeBSD, es decir: crear slices y particiones. Obviamente, el sistema que está actualmente en ejecución se encuentra completamente cargado en la memoria del sistema y, por lo tanto, no habrá problemas al manipular los discos duros. Para completar esta tarea, es posible usar Sysinstall o fdisk(8) en conjunto con bsdlabel(8).

Al principio, marque todos los discos del sistema como vacíos. Repita el siguiente comando para cada disco duro:

# dd if=/dev/zero of=/dev/ad0 count=2

A continuación, cree las slices y etiquételas con su herramienta preferida. A pesar de que se considera más fácil usar Sysinstall, un método potente y probablemente menos defectuoso será usar herramientas estándar de UNIX® basadas en texto, como fdisk(8) y bsdlabel(8), también tratadas en esta sección. La primera opción está bien documentada en el capítulo de Instalación de FreeBSD del Manual de FreeBSD. Como se mencionó en la introducción, este artículo explicará cómo configurar un sistema con RAID-1 y ZFS. Nuestra configuración consistirá en una pequeña partición / (raíz), con un conjunto de datos compuesto por /usr y /var, todos en mirror con gmirror(8) y el resto del espacio en disco asignado a un sistema de archivos ZFS en mirror con zpool(8). Por favor, tenga en cuenta que el sistema de archivos ZFS se configurará después de que el sistema operativo FreeBSD se instale y se inicie correctamente.

El siguiente ejemplo describirá cómo crear slices y etiquetas, inicializar gmirror(8) en cada partición y cómo crear un sistema de archivos UFS2 en cada partición en mirror:

# fdisk -BI /dev/ad0 (1)
# fdisk -BI /dev/ad1
# bsdlabel -wB /dev/ad0s1 (2)
# bsdlabel -wB /dev/ad1s1
# bsdlabel -e /dev/ad0s1 (3)
# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt (4)
# gmirror label root /dev/ad[01]s1a (5)
# gmirror label var /dev/ad[01]s1d
# gmirror label usr /dev/ad[01]s1e
# gmirror label -F swap /dev/ad[01]s1b (6)
# newfs /dev/mirror/root (7)
# newfs /dev/mirror/var
# newfs /dev/mirror/usr
1Cree una slice que use todo el disco e inicialice el boot code del sector 0 del disco seleccionado. Repita este comando para todos los discos duros en el sistema.
2Escriba una etiqueta estándar para cada disco, incluido el código de arranque.
3Ahora, manualmente edite la etiqueta del disco. Consulte la página de manual bsdlabel(8) para saber cómo crear particiones. Cree las particiones siguientes: a para el sistema de archivos / (raíz), b para swap, d para /var, e para /usr y finalmente f, que luego será utilizada para ZFS.
4Importe la etiqueta creada recientemente para el segundo disco duro, de modo que ambos discos estén etiquetados de la misma manera.
5Inicialice gmirror(8) en cada partición.
6Tenga en cuenta que -F se utiliza para la partición swap. Esto le indica a gmirror(8) que asuma que el dispositivo está consistente después de un fallo de alimentación/sistema.
7Cree un sistema de archivos UFS2 en cada partición duplicada.

4.2. Instalación del sistema

Esta es la parte más importante. Esta sección describirá cómo instalar la distribución mínima de FreeBSD en los discos duros que hemos preparado en la sección anterior. Para lograr este objetivo, todos los sistemas de archivos deben montarse, para que Sysinstall pueda escribir el contenido de FreeBSD en los discos duros:

# mount /dev/mirror/root /mnt
# mkdir /mnt/var /mnt/usr
# mount /dev/mirror/var /mnt/var
# mount /dev/mirror/usr /mnt/usr

Cuando haya terminado, inicie sysinstall(8). Seleccione la instalación Custom en el menú principal. Seleccione Options y presione Enter. Con la ayuda de las teclas de dirección, mueva el cursor sobre el elemento Install Root, presione Space y cámbielo a /mnt. Presione Enter para aceptar sus cambios y salga del menú Options presionando q.

Tenga en cuenta que este paso es muy importante y, si se omite, Sysinstall no podrá instalar FreeBSD.

Vaya al menú Distributions, mueva el cursor con las teclas de dirección a Minimal y compruébelo presionando la tecla Espacio. Este artículo utiliza la distribución mínima para ahorrar tráfico de red, ya que el sistema se instalará por ftp. Salga de este menú seleccionando Exit.

Los menús Partition y Label se omitirán, ya que son inútiles ahora.

En el menú Media, seleccione FTP. Seleccione el mirror más cercano y deje que Sysinstall asuma que la red ya está configurada. Volverá al menú Custom.

Finalmente, realice la instalación del sistema seleccionando la última opción, Commit. Salga de Sysinstall cuando finalice la instalación.

4.3. Pasos posteriores a la instalación

El sistema operativo FreBSD ya debería estar instalado; sin embargo, el proceso aún no ha terminado. Es necesario realizar algunos pasos posteriores a la instalación para permitir que FreeBSD se inicie en el futuro y pueda iniciar sesión en el sistema.

Ahora debe usar el comando chroot(8) en el sistema recién instalado. Use el siguiente comando:

# chroot /mnt

Para completar nuestro objetivo, siga estos pasos:

  • Copie el kernel GENERIC al directorio /boot/kernel:

    # cp -Rp /boot/GENERIC/* /boot/kernel
  • Cree los ficheros /etc/rc.conf, /etc/resolv.conf y /etc/fstab. No olvide configurar correctamente la información de red y habilitar sshd en /etc/rc.conf. El contenido de /etc/fstab será similar al siguiente:

    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/mirror/swap        none            swap    sw              0       0
    /dev/mirror/root        /               ufs     rw              1       1
    /dev/mirror/usr         /usr            ufs     rw              2       2
    /dev/mirror/var         /var            ufs     rw              2       2
    /dev/cd0                /cdrom          cd9660  ro,noauto       0       0
  • Cree /boot/loader.conf con el siguiente contenido:

    geom_mirror_load="YES"
    zfs_load="YES"
  • Ejecute el siguiente comando, hará que ZFS se encuentre disponible en el siguiente arranque:

    # echo 'zfs_enable="YES"' >> /etc/rc.conf
  • Agregue usuarios adicionales al sistema usando la herramienta adduser(8). No olvide agregar un usuario al grupo wheel para que pueda obtener acceso al usuario root después del reinicio.

  • Vuelva a comprobar todas sus configuraciones.

El sistema debería estar listo para el siguiente arranque. Use el comando reboot(8) para reiniciar su sistema.

5. ZFS

Si su sistema sobrevivió al reinicio, ahora debería poder iniciar sesión. ¡Bienvenido a la nueva instalación de FreeBSD, realizada de forma remota sin el uso de una consola remota!

El único paso que queda es configurar zpool(8) y crear algunos sistemas de archivos zfs(8). Crear y administrar ZFS es muy sencillo. Primero, cree un pool reflejado:

# zpool create tank mirror /dev/ad[01]s1f

A continuación, cree algunos sistemas de archivos:

# zfs create tank/ports
# zfs create tank/src
# zfs set compression=gzip tank/ports
# zfs set compression=on tank/src
# zfs set mountpoint=/usr/ports tank/ports
# zfs set mountpoint=/usr/src tank/src

Eso es todo. Si está interesado en obtener más información sobre ZFS en FreeBSD, consulte la sección ZFS de la wiki de FreeBSD.