Cintillo Institucional

Arranque por red sin disco mediante el protocolo iSCSI - Sistema Operativo: Debian Squeeze o Wheezy

El objetivo principal es emplear el arranque por red (network booting) en una maquina sin disco para instalar el sistema operativo en un disco duro publicado mendiante el protocolo iSCSI.

Requerimientos:

El arranque por red es el proceso de arranque de la maquina desde una red en vez de un disco local, las maquinas por lo general proporcionan una opción en sus firmware para arrancar desde la red (Preboot Execution Environment - PXE); con el objetivo principal de conectarse a un disco de red vía NetBoot. El software inicial se carga desde un servidor en la red, generalmente hecho usando TFTP. El servidor del cual se carga el software inicial es generalmente encontrado por una solicitud DHCP. [1] [2] [3]

Preparación del servidor con servicio iSCSI target

iSCSI es un protocolo de la capa de transporte. iSCSI permite a un computador utilizar un iniciador iSCSI (initiator) para conectar a un dispositivo SCSI (target) como puede ser un disco duro en una red. [4] [5]

  1. Preparar los dispositivos de almacenamiento que constituirán los LUN (volúmenes lógicos, particiones, etc.).
    • Crea un volumen lógico, que será publicado mediante iSCSI como el disco duro del servidor cliente sin disco:
      • lvcreate --name [LogicalVolumeName] --size [LogicalVolumeSize] [VolumeGroupName]

        lvcreate --name lvm3 --size 3G vg1

    • Crear las particiones pertinente al LVM, ejemplo la primera partición para /boot y la segunda para crear un LVM que contedrá /home, /raiz y /swap:
      • parted [device] mklabel [label-type]

        parted /dev/vg1/lvm3 mklabel msdos

        parted [device] mkpart [part-type] [start] [end]

        parted /dev/vg1/lvm3 mkpart primary 63s 262143s

        parted /dev/vg1/lvm3 mkpart primary 262144s 6291455s

        parted /dev/vg1/lvm3 set 2 lvm on

  2. Instalar los siguientes paquetes:
    • linux-headers-uname -r

    • iscsitarget

    • iscsi-dkms

  3. Establecer la IP en la que escuchará el target (IP del servidor):
    • ietd -a X.X.X.X

  4. Editar el archivo de configuración /etc/iet/ietd.conf (Descomentar las siguientes lineas y agregar la informacón correspondiente):

    • # Authentication for discovery sessions.
      IncomingUser [username] [password]
      OutgoingUser [username] [password]
      
      # Targets definitions start with "Target" and the target name.
      Target iqn.2012-07.com.prueba:disk1                #Referencia http://www.ietf.org/rfc/rfc3720.txt 
      
      # Authentication for Target.
      IncomingUser [username] [password]
      OutgoingUser [username] [password]
      
      # Logical Unit definition.
      Lun 0 Path=/dev/vg1/lvm3,Type=fileio
  5. Establecer la configuración para el control de acceso al Target en los archivos /etc/iet/initiators.allow /etc/iet/targets.allow

    • iqn.2012-07.com.prueba:disk1 [Direccion de red / Mascara]

  6. Habilitar el inicio del duende en el archivo /etc/default/iscsitarget:
    • ISCSITARGET_ENABLE=true

  7. Iniciar/Reiniciar el servicio:
    • /etc/init.d/iscsitarget start

Preparación de arranque por red (iPXE Booting)

Preparación del servidor TFTP

  1. Instalar el paquete tftpd ó tftp-hpa

  2. Crear el directorio que contendrá los archivos a transferir para la instalación y darle los permisos, usuarios y grupos oportunos:
    • mkdir -P /srv/tftp/installer-squeeze

      mkdir -P /srv/tftp/iPXE

      chmod -R 777 /srv/tftp

  3. Descomentar la siguiente linea en el archivo de configuración (etc/inetd.conf) y agregar el directorio creado:
    • tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

  4. Descargar el paquete debian installer-amd64 que proporciona los archivos necesarios para la instalación del sistema operativo por Red:
    • Desde el repositorio:
      • aptitude search debian-installer

        aptitude install debian-installer-6.0-netboot-amd64

    • Los archivos están en /usr/lib/debian-installer/images/7.0/amd64/text/debian-installer

    • Crear un enlace simbólico desde el directorio creado para tftp para los archivos de instalación hacia /usr/lib/debian-installer/images/7.0/amd64/text/debian-installer:

      • ln -s /usr/lib/debian-installer/images/7.0/amd64/text/*  /srv/tftp/installer-squeeze

  5. Clonar el repositorio el código fuente de iPXE (Es un gestor de arranque que puede ser utilizado para permitir que los equipos puedan arrancar desde la red, o extender una aplicación PXE existente con soporte para protocolos adicionales):
    • git clone git://git.ipxe.org/ipxe.git cd ipxe/src

  6. Compilar el código undionly.kpxe incluyendo el script "vlan" creado en el paso anterior:
    • make bin/undionly.kpxe

  7. Mover el archivo compilado al directorio de publicación del servidor TFTP:
    • mv undionly.kpxe /srv/tftp/iPXE

Preparación del servidor DHCP

  1. Instalar el paquete dhcp3-server

  2. Modificar el archivo de configuración /etc/dhcp/dhcpd.conf descomentando y agregando las siguientes lineas:

    • #Opciones para ipxe
      
        option space ipxe;
        option ipxe-encap-opts code 175 = encapsulate ipxe;
        option ipxe.priority code 1 = signed integer 8;
        option ipxe.keep-san code 8 = unsigned integer 8;
        option ipxe.skip-san-boot code 9 = unsigned integer 8;
        option ipxe.scriptlet code 81 = string;
        option ipxe.syslogs code 85 = string;
        option ipxe.cert code 91 = string;
        option ipxe.privkey code 92 = string;
        option ipxe.crosscert code 93 = string;
        option ipxe.no-pxedhcp code 176 = unsigned integer 8;
        option ipxe.bus-id code 177 = string;
        option ipxe.bios-drive code 189 = unsigned integer 8;
        option ipxe.username code 190 = string;
        option ipxe.password code 191 = string;
        option ipxe.reverse-username code 192 = string;
        option ipxe.reverse-password code 193 = string;
        option ipxe.version code 235 = string;
        option iscsi-initiator-iqn code 203 = string;
        # Feature indicators
        option ipxe.pxeext code 16 = unsigned integer 8;
        option ipxe.iscsi code 17 = unsigned integer 8;
        option ipxe.aoe code 18 = unsigned integer 8;
        option ipxe.http code 19 = unsigned integer 8;
        option ipxe.https code 20 = unsigned integer 8;
        option ipxe.tftp code 21 = unsigned integer 8;
        option ipxe.ftp code 22 = unsigned integer 8;
        option ipxe.dns code 23 = unsigned integer 8;
        option ipxe.bzimage code 24 = unsigned integer 8;
        option ipxe.multiboot code 25 = unsigned integer 8;
        option ipxe.slam code 26 = unsigned integer 8;
        option ipxe.srp code 27 = unsigned integer 8;
        option ipxe.nbi code 32 = unsigned integer 8;
        option ipxe.pxe code 33 = unsigned integer 8;
        option ipxe.elf code 34 = unsigned integer 8;
        option ipxe.comboot code 35 = unsigned integer 8;
        option ipxe.efi code 36 = unsigned integer 8;
        option ipxe.fcoe code 37 = unsigned integer 8;
        option ipxe.vlan code 38 = unsigned integer 8;
        option ipxe.menu code 39 = unsigned integer 8;
        option ipxe.sdi  code 40 = unsigned integer 8;
       
      
      # option definitions common to all supported networks...
      option domain-name "nombre_server";
      option domain-name-servers x.x.x.x;
      
      default-lease-time 600;
      max-lease-time 7200;
      
      log-facility local7;
      
      subnet x.x.x.0 netmask 255.255.255.0 {
      }
      
      host cenditel-prueba {
              hardware ethernet 00:00:00:00:00:00;
              fixed-address x.x.x.x;
              option routers x.x.x.x;
              if exists user-class and option user-class = "iPXE" {
                      next-server x.x.x.x;
                      filename "/srv/tftp/installer-squeeze/pxelinux.0";
              } else {
                      filename "/srv/tftp/iPXE/undionly.kpxe";
      
              }
      }
  3. Reiniciar el servicio DHCP:
    • /etc/init.d/isc-dhcp-server restart

Instalación del sistema operativo en el servidor sin disco

  1. Configurar el servidor sin disco para que arranque por red (PXE):
    • Iniciar el servidor.
    • Presionar F12 para "PXE Boot":
      • Seleccionar la tarjeta de red deseada para el arranque por red.
  2. En virtualbox es necesario instalar el siguiente paquete para el PXE:
    • wget http://download.virtualbox.org/virtualbox/4.1.18/Oracle_VM_VirtualBox_Extension_Pack-4.1.18-78361.vbox-extpack

  3. Luego de cargar el instalador, se presenta el menú del mismo, en este caso se trabajará la instalación en "modo experto":
    • Seleccionar la opción "Advanced options"
    • Luego seleccionar la opción "Expert Install"
  4. Cambiar lenguaje:
    • Seleccionar "Spanish"
  5. Seleccione su ubicación:
    • Seleccionar Venezuela (Opcional)
  6. Configurar la localización:
    • Seleccionar "Venezuela es_VE.UTF-8"
  7. Localizaciones adicionales:
    • Seleccionar ninguna (Opcional).
  8. Configure el teclado (Mapa de teclado a usar):
    • Seleccionar "Español"
  9. Detección del hardware de red:
    • Previamente a este paso se debe preparar un dispositivo USB con los firmware necesarios para la tarjeta de red del servidor, ejemplo: firmware bnx2, desde repositorio firmware-nonfree
    • Si falta algún firmware, le preguntara si desea cargar los controladores que faltan de un medio extraíble:
      • Seleccionar la opción "Si".
      • En caso de que el instalador no pueda montar el dispositivo USB, montarlo desde la consola de BusyBox:

         mount /dev/sda /media 

      • Regresar a la instalación y seleccionar la opción "Si". Nota: Repetir el montaje del dispositivo cada vez que solicite un firmware hasta finalizar.
  10. Configurar la red
    • Tiempo de espera (en segundos) para la detección de enlace:
      • Dejar el tiempo por defecto (3 segundos).
    • Interfaz de red primaria:
      • Seleccionar la interfaz a utilizar: eth0
    • Desea configurar automáticamente la red (DHCP):
      • Seleccionar "Si"
    • Nombre de la maquina:
      •  cenditel-prueba00 

    • Nombre de dominio:
      •  cenditel 

  11. Escoja una réplica de Debian:
    • Protocolo para descargar ficheros:
      • Seleccionar "http"
    • País de la réplica de Debian:
      • En nuestro caso, seleccionar "Introducir información manualmente"
    • Nombre del servidor de la réplica de Debian:
      • Escribir "debian.cenditel"
    • Directorio de réplica:
      • Escribir "/debian/"
    • Información de proxy HTTP:
      • Dejar en blanco.
    • Versión de Debian a instalar
      • Seleccionar "Squeeze (estable)"
  12. Descargar componentes del instalador (Para particiones de disco y LVM):
    • Crypt-dm-modules
    • Crypto-modules
    • Lvmcfg: Configure the Local Volumen Manager
    • Parted- udeb
    • Partman-reiserfs
  13. Configurar usuarios y contraseñas:
    • Habilito las contraseñas ocultas-shadow
      • Seleccionar "No"
    • Permitir acceso como superusuario -root-:
      • Seleccionar "Si"
    • Clave de superusuario:
      • Escribir la contraseña: xxxxxx
    • Crear una cuenta de usuario normal:
      • Seleccionar "Si"
    • Nombre completo para el nuevo usuario:
      • Escribir el nombre: prueba
    • Nombre de usuario para la cuenta
      • Escribir el nombre: prueba
    • Contraseña para el nuevo usuario:
      • Escribir la contraseña: xxxxxx
  14. Configurar el reloj:
    • Fijar la hora con NTP:
      • Seleccionar "Si"
    • Servidor NTP a usar:
      • Escribir el dominio del servidor ntp a usar, ejemplo: ntp.cenditel
    • Seleccione su zona horaria:
      • Seleccionar "America/Caracas"
  15. Antes de seleccionar la opción "Detectar disco", se debe hacer la conexión al dispositivo mediante iSCSI:
    • Ir a la opción "Ejecutar intérprete de órdenes" o la consola de comando de BusyBox:

    • Se debe instalar el sistema base con debootstrap:
      • Crear un directorio donde se instalará el sistema base:
        • mkdir /destino

          debootstrap [suite] [directorio] [mirror]

          debootstrap squeeze  /destino  http://debian.cenditel/debian/ 

      • Montar el nuevo sistema instalado:
        • mount --bind /dev /destino/dev

          mount --bind /proc /destino/proc

          mount --bind /sys /destino/sys

      • Crear el entorno virtual con la llamada al sistema "chroot":
        • chroot /destino  /bin/bash

      • Instalar open-iscsi para la conexión al dispositivo iSCSI
        • aptitude install open-iscsi

      • Configurar las siguientes directivas en /etc/iscsi/iscsid.conf:

        • # To request that the iscsi initd scripts startup a session set to "automatic".
            node.startup = automatic
           
          # To enable CHAP authentication set node.session.auth.authmethod
            node.session.auth.authmethod = CHAP
          
          # Authentication by the target(s)
            node.session.auth.username = [username]
            node.session.auth.password = [password]
          
          # Authentication by the initiator
            node.session.auth.username_in = [username]
            node.session.auth.password_in = [password]
          
          # To enable CHAP authentication for a discovery session to the target
            discovery.sendtargets.auth.authmethod = CHAP
          
          # Authentication by the target(s)
            discovery.sendtargets.auth.username = [username]
            discovery.sendtargets.auth.password = [password]
          
          # Authentication by the initiator
            discovery.sendtargets.auth.username_in = [username]
            discovery.sendtargets.auth.password_in = [password] 
      • Instalar el kernel y agregar el modulo de iscsi:
        • aptitude search linux-image
          aptitude install linux-image-2.6.32-5-adm64  #El kernel depende del modulo ISCSI
          modprobe scsi_transport_iscsi
      • Reiniciar el open-iscsi y realizar la conexión con el target.
        • /etc/init.d/open-iscsi start

      • Detección del Target
        • Discovery: En este modo se pueden descubrir targets y agregarlos a la base de datos.
          • iscsiadm --mode discovery --type sendtargets --portal [IP del Target]

        • Node: En este modo se administran los targets ya descubiertos y se pueden visualizar datos acerca de estos nodos, así como conectarse a ellos.
          • iscsiadm --mode node --targetname [TargetName] --portal [IP del Target] --login

        • Comprobar la conexión dispositivo:
          • parted /dev/sda unit s print ls /dev/s*

      • Liberar memoria RAM al menos 250MB
      • Salir de la linea de comandos BusyBox para regresar al menú de instalación.

  16. Detectar discos:
  17. Instalar el sistema base:
    • Elija el núcleo a instalar:
      • Seleccionar "linux-image-2.6-amd64"
    • Controladores a incluir en initrd:
      • Seleccionar la opción de incluir todo los controladores disponibles.
  18. Configurar el gestor de paquetes.
  19. Seleccionar e instalar programas.
  20. Instalar el cargador de arranque GRUB en un disco duro.
  21. Antes de finalizar la instalación se debe configurar el initrd para la conexión del dispositivo iSCSI con VLAN:
    • Ir a la consola de comandos de BusyBox.

    • Revisar que todos el dispositivo esten montado con:
      • df

    • Crear el entorno virtual con la llamada al sistema "chroot":
      • chroot /target /bin/bash

    • Instalar los siguientes paquetes: initramfs-tools y open-iscsi

      • Agregar los módulos de ISCSI:
        • echo iscsi >> /etc/initramfs-tools/modules

      • Agregar el nombre del iniciador en /etc/iscsi/initiatiorname.iscsi:

        • echo InitiatorName=iqn.2012-08.com.laurac:01:712b532ec15a >> /etc/iscsi/initiatorname.iscsi

      • Crear el siguiente archivo para que se incluya el nuevo initrd:
        • touch /etc/iscsi/iscsi.initramfs

      • Agregar al archivo /etc/default/grub en la siguiente linea la opción de DHCP:

        • GRUB_CMDLINE_LINUX_DEFAULT="quiet ip=dhcp"
      • Agregar los datos del Target en /etc/iscsi/iscsi.initramfs

        • ISCSI_TARGET_NAME=iqn.2012-08.com.laura:mydisk
          ISCSI_TARGET_IP=X.X.X.X
          ISCSI_USERNAME=XXXX
          ISCSI_PASSWORD=XXXXX
          ISCSI_IN_USERNAME=XXXX
          ISCSI_IN_PASSWORD=XXXXX
      • Actualizar el initramfs y el GRUB
        • update-initramfs -u

          update-grub

      • Si se desea revisar la nueva configuración de initrd, realizar lo siguiente:
        • cd root

          mkdir initnew

          cd initnew

          zcat /boot/initrd.img-2.6.32-5-amd64 | cpio -idv

          cat etc/iscsi.initramfs

          cat etc/initiatorname.iscsi

  22. Antes de reiniciar el servidor, se debe reconfigurar el switch con VLAN con etiqueta.
  23. Terminar la instalación.
  24. Modificar el servidor DHCP con iPXE:
    • Modificar los archivos que se transmite por TFTP y DHCP hacia el servidor, debido a que ya se ha instalado el sistema operativo, ahora se necesita el arranque del servidor por red con el disco duro publicado mediante el protocolo iSCSI:
      • group {
                next-server X.X.X.X;
                host  [HostName] {
                        hardware ethernet 00:00:00:00:00:00;
                        fixed-address X.X.X.X;
                        if exists user-class and option user-class = "iPXE" {
                        filename "";
                        option root-path "iscsi:X.X.X.X::::iqn.2012-07.com.prueba:disk1";  #X.X.X.X es IP del servidor que publica el Target
                        option ipxe.username "[username]";
                        option ipxe.password "[password]";
                        option ipxe.reverse-username "[username]";
                        option ipxe.reverse-password "[password]";
                        } else {
                        filename "/srv/tftp/ipxe/undionly.kpxe";
                        }
                        }
  25. Iniciar el servidor cliente.
    • Recibe la IP mediante dhcp.
    • Recibe en el archivo de iPXE y los datos correspondiente del dispositivo iSCSI.
  26. Ya se tiene el servidor cliente con Debian Squeeze.
  27. Revisar el nombre del iniciador creado por open-iscsi en /etc/iscsi/initiatorname.iscsi:

  28. Actualizar el initramfs:
    • update-initramfs -u

  29. Revisar si el nombre del iniciador esta en el initrd que se modifico:
    • mkdir initnew

      cd initnew

      zcat /boot/initrd.img-2.6.32-5-amd64 | cpio -idv

      cat etc/iscsi.initramfs

      cat etc/initiatorname.iscsi

  30. Ha finalizado el proceso, con ello se tiene el servidor sin disco, pero con un disco duro publicado mediante el protocolo iSCSI con sistema operativo Debian Squeeze.

Referencias Bibliograficas

[1] http://www.debian.org/distrib/netinst

[2] http://wiki.debian.org/PXEBootInstall

[3] http://www.syslinux.org/wiki/index.php/PXELINUX

[4] http://sys-admin.wikidot.com/iscsi-on-linux-system

[5] http://www.ietf.org/rfc/rfc3720.txt

infra_red/boot_iscsi_squeeze_arranque (última edición 2014-07-10 20:02:23 efectuada por lcolina)