    Instalacion remota del sistema operativo FreeBSD sin una consola remota

  Daniel Gerzo

     <danger@FreeBSD.org>

   Revision: 74683b1030

   Copyright (c) 2008 The FreeBSD Documentation Project

   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 "(TM)" or the "(R)"
   symbol.

   Last modified on 2019-06-16 22:20:04 +0000 by Sergio Carlavilla Delgado.
   Resumen

   Este articulo documenta la instalacion remota del sistema operativo
   FreeBSD cuando la consola del sistema remoto no esta disponible. La idea
   principal detras de este articulo es el resultado de la colaboracion con
   Martin Matuska <mm@FreeBSD.org> y con informacion valiosa proporcionada
   por Pawel Jakub Dawidek <pjd@FreeBSD.org>.

   [ Split HTML / Single HTML ]

     ----------------------------------------------------------------------

   Tabla de contenidos

   1. Antecedentes

   2. Introduccion

   3. Preparacion - mfsBSD

   4. Instalacion del sistema operativo FreeBSD

   5. ZFS

1. Antecedentes

   Hay muchos proveedores de hosting en el mundo, pero muy pocos soportan
   oficialmente FreeBSD. Por lo general, dan soporte para instalar una
   distribucion de Linux(R) en los servidores que ofrecen.

   En algunos casos, estas companias instalaran su distribucion favorita de
   Linux(R) si lo solicita. Utilizando esta opcion, intentaremos instalar
   FreeBSD. En otros casos, pueden ofrecer un sistema de rescate que se
   podria usar en caso de emergencia. Tambien es posible usar esta opcion
   para nuestros propositos.

   Este articulo cubre los pasos basicos de instalacion y configuracion
   necesarios para iniciar una instalacion remota de FreeBSD con RAID-1 y
   ZFS.

2. Introduccion

   Esta seccion resumira el proposito del articulo y explicara mejor lo que
   se trata en este documento. Las instrucciones incluidas beneficiaran a
   quienes utilicen los servicios proporcionados por las instalaciones de
   colocacion de servidores que no admiten FreeBSD.

    1. Como hemos mencionado en la seccion de Antecedentes, muchas de las
       empresas mas respetadas de hosting ofrecen algun 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 danados. Como se explicara en este articulo, es
       posible instalar FreeBSD con la ayuda de estos sistemas de rescate.

    2. La siguiente seccion del articulo describira como configurar y
       compilar una version minimalista de FreeBSD en la maquina local. Esa
       version finalmente se ejecutara en la maquina remota desde ramdisk, lo
       que nos permitira instalar un sistema operativo FreeBSD completo desde
       un mirror FTP usando la utilidad sysinstall.

    3. El resto del articulo describira el proceso de instalacion, asi como
       la configuracion del sistema de archivos ZFS.

  2.1. Requisitos

   Para continuar con exito, debe:

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

     * Entender el proceso de instalacion de FreeBSD

     * Estar familiarizado con la utilidad sysinstall(8)

     * Tener a mano la imagen ISO o el CD de instalacion de FreeBSD

3. Preparacion - mfsBSD

   Antes de poder instalar FreeBSD en el sistema de destino, es necesario
   crear la imagen minima de FreeBSD que se iniciara desde el disco duro. De
   esta manera, se puede acceder al nuevo sistema desde la red, y el resto de
   la instalacion se puede hacer sin acceso remoto a la consola del sistema.

   El conjunto de herramientas mfsBSD se puede usar para construir una imagen
   pequena 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 caracteristica, la
   manipulacion de los discos duros no estara limitada, por lo que sera
   posible instalar un sistema operativo completo FreeBSD. La pagina web de
   mfsBSD incluye indicaciones a la ultima version del conjunto de
   herramientas.

   Tenga en cuenta que los aspectos internos de mfsBSD estan fuera del
   alcance de este articulo. El lector interesado debe consultar la
   documentacion oficial de mfsBSD para obtener mas detalles.

   Descargue y extraiga la ultima version 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. Configuracion de mfsBSD

   Antes de iniciar mfsBSD, deben establecerse algunas opciones de
   configuracion importantes. Lo mas importante que tenemos que configurar
   bien es, naturalmente, la configuracion de red. El metodo mas adecuado
   para configurar las opciones de red dependera de si conocemos previamente
   el tipo de interfaz de red que usaremos, y el controlador de red que se
   cargara para nuestro hardware. Veremos como se puede configurar mfsBSD en
   cualquier caso.

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

    3.1.1. El metodo conf/interfaces.conf

   Cuando se desconoce la tarjeta de red instalada, es posible utilizar las
   funciones de deteccion automatica de mfsBSD. Los scripts de inicio de
   mfsBSD pueden detectar el controlador correcto, segun la direccion 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 metodo conf/rc.conf

   Cuando se conoce el controlador de la interfaz de red, es mas 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) estara 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 creacion de una imagen de mfsBSD es bastante sencillo.

   El primer paso es montar el CD de instalacion de FreeBSD, o la imagen ISO
   de instalacion en /cdrom. Por ejemplo, en este articulo asumiremos que ha
   descargado la ISO FreeBSD 10.1-RELEASE. Montar esta imagen ISO en el
   directorio /cdrom es facil 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 distribucion, 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 continuacion, genere la imagen mfsBSD de arranque:

 # make BASE=DIST

  Nota:

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

  3.3. Iniciando mfsBSD

   Ahora que la imagen mfsBSD esta lista, se debe cargar en el sistema remoto
   ejecutando el sistema de recuperacion o una distribucion de Linux(R)
   preinstalada. La herramienta mas 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 maquina en cuestion. 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 maquina se puede reiniciar. Observe que la maquina se inicializa
   correctamente con la herramienta ping(8). Una vez que este en linea,
   deberia ser posible acceder a ella con ssh(1) como usuario root con la
   contrasena configurada.

4. Instalacion del sistema operativo FreeBSD

   mfsBSD se ha iniciado correctamente y deberia ser posible iniciar sesion a
   traves de ssh(1). En esta seccion se describe como crear y etiquetar
   slices, configurar gmirror para RAID-1 y como utilizar sysinstall para
   instalar una distribucion minima de FreeBSD.

  4.1. Preparacion de los discos duros

   La primera tarea es asignar espacio en disco para FreeBSD, es decir: crear
   slices y particiones. Obviamente, el sistema que esta actualmente en
   ejecucion se encuentra completamente cargado en la memoria del sistema y,
   por lo tanto, no habra 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 vacios. Repita el
   siguiente comando para cada disco duro:

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

   A continuacion, cree las slices y etiquetelas con su herramienta
   preferida. A pesar de que se considera mas facil usar sysinstall, un
   metodo potente y probablemente menos defectuoso sera usar herramientas
   estandar de UNIX(R) basadas en texto, como fdisk(8) y bsdlabel(8), tambien
   tratadas en esta seccion. La primera opcion esta bien documentada en el
   capitulo de Instalacion de FreeBSD del Manual de FreeBSD. Como se menciono
   en la introduccion, este articulo explicara como configurar un sistema con
   RAID-1 y ZFS. Nuestra configuracion consistira en una pequena particion /
   (raiz), 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 configurara despues de que el sistema
   operativo FreeBSD se instale y se inicie correctamente.

   El siguiente ejemplo describira como crear slices y etiquetas, inicializar
   gmirror(8) en cada particion y como crear un sistema de archivos UFS2 en
   cada particion 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

   1 Cree 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.                                              
   2 Escriba una etiqueta estandar para cada disco, incluido el codigo de     
     arranque.                                                                
   3 Ahora, manualmente edite la etiqueta del disco. Consulte la pagina de    
     manual bsdlabel(8) para saber como crear particiones. Cree las           
     particiones siguientes: a para el sistema de archivos / (raiz), b para   
     swap, d para /var, e para /usr y finalmente f, que luego sera utilizada  
     para ZFS.                                                                
   4 Importe la etiqueta creada recientemente para el segundo disco duro, de  
     modo que ambos discos esten etiquetados de la misma manera.              
   5 Inicialice gmirror(8) en cada particion.                                 
   6 Tenga en cuenta que -F se utiliza para la particion swap. Esto le indica 
     a gmirror(8) que asuma que el dispositivo esta consistente despues de un 
     fallo de alimentacion/sistema.                                           
   7 Cree un sistema de archivos UFS2 en cada particion duplicada.            

  4.2. Instalacion del sistema

   Esta es la parte mas importante. Esta seccion describira como instalar la
   distribucion minima de FreeBSD en los discos duros que hemos preparado en
   la seccion 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 instalacion
   Custom en el menu principal. Seleccione Options y presione Enter. Con la
   ayuda de las teclas de direccion, mueva el cursor sobre el elemento
   Install Root, presione Space y cambielo a /mnt. Presione Enter para
   aceptar sus cambios y salga del menu Options presionando q.

  Aviso:

   Tenga en cuenta que este paso es muy importante y, si se omite, sysinstall
   no podra instalar FreeBSD.

   Vaya al menu Distributions, mueva el cursor con las teclas de direccion a
   Minimal y compruebelo presionando la tecla Espacio. Este articulo utiliza
   la distribucion minima para ahorrar trafico de red, ya que el sistema se
   instalara por ftp. Salga de este menu seleccionando Exit.

  Nota:

   Los menus Partition y Label se omitiran, ya que son inutiles ahora.

   En el menu Media, seleccione FTP. Seleccione el mirror mas cercano y deje
   que sysinstall asuma que la red ya esta configurada. Volvera al menu
   Custom.

   Finalmente, realice la instalacion del sistema seleccionando la ultima
   opcion, Commit. Salga de sysinstall cuando finalice la instalacion.

  4.3. Pasos posteriores a la instalacion

   El sistema operativo FreBSD ya deberia estar instalado; sin embargo, el
   proceso aun no ha terminado. Es necesario realizar algunos pasos
   posteriores a la instalacion para permitir que FreeBSD se inicie en el
   futuro y pueda iniciar sesion en el sistema.

   Ahora debe usar el comando chroot(8) en el sistema recien 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 informacion de red y habilitar sshd
       en /etc/rc.conf. El contenido de /etc/fstab sera 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, hara 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 despues del reinicio.

     * Vuelva a comprobar todas sus configuraciones.

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

5. ZFS

   Si su sistema sobrevivio al reinicio, ahora deberia poder iniciar sesion.
   !Bienvenido a la nueva instalacion de FreeBSD, realizada de forma remota
   sin el uso de una consola remota!

   El unico 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 continuacion, 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 esta interesado en obtener mas informacion sobre ZFS en
   FreeBSD, consulte la seccion ZFS de la wiki de FreeBSD.
