Cintillo Institucional

Arranque por red sin disco mediante iSCSI - Red Local: VLAN - Sistema Operativo: Debian Wheezy

El objetivo principal es instalar el sistema operativo Debian Wheezy mediante el arranque por red en un servidor sin disco, conectando un dispositivo SCSI (target) utilizando el protocolo iSCSI, la configuración de red se encuentra segmentada mediante VLAN's.

Requerimientos:

  1. Servidor con servicio iSCSI target (Maquina Virtual Xen 1).
  2. Servidor con servicio TFTP y DHCP (Maquina Virtual Xen 2).
  3. Servidor sin disco.
  4. Dispositivo USB conectado al servidor sin disco, con los firmware necesarios para la tarjeta de red del mismo.

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.).
    1. Crea un volumen lógico y sus particiones (Dependiendo de los requerimientos):
      • lvcreate --name [LogicalVolumeName] --size [LogicalVolumeSize] [VolumeGroupName]
        lvcreate --name lvm3 --size 3G vg1
        parted [device] mklabel [label-type] >> parted /dev/vg1/lvm3 mklabel msdos
                    
        #Se crean dos particiones para /boot y para el grupo de volúmenes lógicos (/home, /, /swap..)
        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:
    1. linux-headers-uname -r

    2. iscsitarget

    3. iscsitarget-dkms

  3. Establecer la IP en la que escuchará el target (IP del servidor) y habilitar el inicio del duende en el archivo /etc/default/iscsitarget:

    • ISCSITARGET_ENABLE=true
      
      # ietd options
      # See ietd(8) for details
      ISCSITARGET_OPTIONS="--address 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. Iniciar/Reiniciar el servicio:
    • /etc/init.d/iscsitarget start

Preparación de arranque por red (iPXE Booting)

Preparación del servidor TFTP

TFTP son las siglas de Trivial file transfer Protocol (Protocolo de transferencia de archivos trivial). Es un protocolo de transferencia muy simple semejante a una versión básica de FTP. TFTP a menudo se utiliza para transferir pequeños archivos entre ordenadores en una red [6]. Existen varios servidores TFTP como atftpd y tftpd-hpa, se recomienda trabajar con el primero, ya que el segundo presentó problemas de estabilidad. El directorio de trabajo predeterminado para ambos duendes es: /var/lib/tftpboot, este se puede cambiar.

El servicio TFTP se encargará de exportar la imagen de arranque PXE, en este caso pxelinux.0 como se define en la configuración del DCHP.

  1. Instalar el paquete atftpd

  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-wheezy

      mkdir -P /srv/tftp/iPXE

      chmod -R 777 /srv/tftp

  3. Editar el archivo /etc/default/atftpd y especificar las opciones para el arranque del servicio, como: directorio, dirección IP, etc.:

    • USE_INETD=false
      OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 --bind-address [x.x.x.x] /srv/tftp"
    • En dicho archivo de configuración se ha desactivado el uso por inetd; se ha activado el servicio atftpd con su propio guión de inicio donde se definió la subred de trabajo, la dirección IP donde escuchará las peticiones y finalmente el directorio de trabajo del servidor TFPT.
  4. Descargar el paquete debian installer-amd64 que proporciona los archivos necesarios para la instalación del sistema operativo por Red:
    1. Desde el repositorio:
      • aptitude search debian-installer

        aptitude install debian-installer-7.0-netboot-amd64

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

    3. 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-wheezy/

  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. Activar el soporte a VLAN en el código fuente de iPXE (ipxe/src/config/genaral.h):

    • #define VLAN_CMD                /* VLAN commands */ 
  7. Crear el script con la configuración de la vlan que se activará, llamado vlan:

    • prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && shell || 
      vcreate --tag 0220 eth0 
      autoboot eth0-0220 
      prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && shell
  8. Compilar el código undionly.kpxe incluyendo el script "vlan" creado en el paso anterior:
    • make bin/undionly.kpxe  EMBED=vlan 

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

  10. Reiniciar el servicio atftpd:
    • /etc/init.d/atftpd restart

Preparación del servidor DHCP

DHCP (siglas en inglés de Dynamic Host Configuration Protocol, en español «protocolo de configuración dinámica de host») es un protocolo de red que permite a los clientes de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van quedando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después. [7]

El servidor DHCP se encargará de asignar una dirección IP estática correspondiente a la MAC de servidor, por la cual se exportará el archivo necesario para cargar el instalador del sistema operativo Debian.

  1. Instalar el paquete isc-dhcp-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-wheezy/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):
    1. Iniciar el servidor.
    2. 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. Al cargar el instalador de Debian se presenta un menú de instalación, donde se despliega las diferentes forma de realizar la misma: En modo gráfico (Graphical Install) que es realizar una instalación de la manera más vistosa, en modo texto (Install) que es realizar la instalación utilizando menos recursos y de la manera mas simple. Para este caso se utilizará el modo experto (Expert Install) ya que permite realizar más configuraciones durante la instalación:
    1. Seleccionar "opciones avanzadas" (Advanced options). Se puede observar diferentes opciones entre ellas el modo de rescate (Rescue mode) que será de mucha ayuda en el caso el sistema generé un error grave y poder recuperarlo.
    2. Seleccionar la opción "Instalación experta" (Expert install), y comenzará a cargar el instalador, al finalizar la carga de este, nos presentará el menú principal.
  4. Cambiar lenguaje del instalador (Choose language):
    1. Seleccionar "Spanish"
  5. Seleccionar su ubicación geográfica:
    1. Seleccionar Venezuela (Opcional)
  6. Configurar la localización:
    1. Seleccionar "Venezuela es_VE.UTF-8"
  7. Localizaciones adicionales:
    1. Seleccionar ninguna (Opcional).
  8. Configurar el teclado (Mapa de teclado a usar):
    1. Seleccionar "Español"
  9. Detección del hardware de red:
    1. 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 (debian)
    2. Si falta algún firmware, el instalador le preguntará 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, se debe montar desde la consola de BusyBox:

         mount /dev/sda1 /media  Nota: El dispositivo USB fue reconocido por el sistema como SDA.

      • 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. Paso previo a configurar la red, debemos crear la VLAN, para que sea detectada como una interfaz en el paso siguiente:
    1. Desde la consola de BusyBox crear la VLAN:

      •  vconfig add eth0 220 

  11. Configurar la red
    1. Tiempo de espera (en segundos) para la detección de enlace:
      • Dejar el tiempo por defecto (3 segundos).
    2. Interfaz de red primaria:
      • En nuestro caso la conexión es por VLAN, la interfaz eth0.220:
      • Previamente a seleccionar la interfaz, debemos activar los dispositivos eth0 y eth0.220, para ello debemos ir a la consola de BusyBox:

        •  ip link set eth0 up 

           ip link set eth0.220 up 

    3. Desea configurar automáticamente la red:
      • Seleccionar "Si"
    4. Tiempo de espera (en segundos) para la detección de enlace:
      • Dejar el tiempo por defecto (3 segundos).
    5. Nombre de la maquina:
      •  cenditel-prueba00 

    6. Nombre de dominio:
      •  cenditel 

  12. Escoja una réplica de Debian:
    1. Protocolo para descargar ficheros:
      • Seleccionar "http"
    2. País de la réplica de Debian:
      • En nuestro caso, seleccionar "Introducir información manualmente"
    3. 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 "Wheezy (estable)"
  13. Descargar componentos del instalador (Para particiones de disco y LVM):
    1. Crypt-dm-modules
    2. Lvmcfg: Configure the Local Volumen Manager
    3. Parted- udeb: Manually partition a hard drive
    4. Partman-reiserfs: Add to partman support for reiserfs
  14. Instalar el paquete udeb de Open-iscsi para la detección del disco por red con el comando anna-install:

    1. Ir a la consola de BusyBox:

    2. Instalar el paquete:
      • anna-install open-iscsi-udeb

  15. Configuración del Open-iscsi en la consola de BusyBox:

    1. Crear un enlace simbólico del daemon de Open-iscsi (iscsid):
      • ln -s /sbin/iscsid /usr/sbin/

    2. Crear el directorio de cerrojos utilizado por Open-iscsi;
      • mkdir /var/lock

    3. Instalar los siguientes módulos necesario para el funcionamiento de Open-iscsi:
      • Cambiar al directorio donde se encuentran los módulos compilados (archivos .ko):
        • cd /lib/modules/3.2.0-4-amd64/kernel/drivers/scsi

      • Instalar el módulo de transporte para iSCSI:
        • insmod scsi_transport_iscsi.ko

      • Instalar los módulos de las librerías para iSCSI:
        • insmod libiscsi.ko

          insmod libiscsi_tcp.ko

      • Instalar el módulo del protocolo TCP para iSCSI:
        • insmod iscsi_tcp.ko

      • Listar los módulos para iscsi, debe aparecer los siguientes:
        • lsmod | grep iscsi

          iscsi_tcp                 17580    0 
          libiscsi_tcp              21554    1    iscsi_tcp
          libiscsi                  48051    3    libiscsi_tcp,iscsi_tcp,ib_iser
          scsi_transport_iscsi      77475    4    iscsi_tcp,ib_iser,libiscsi
          scsi_mod                  186757   8    sg,scsi_transport_iscsi,libata,sd_mod,sr_mod,iscsi_tcp,ib_iser,libiscsi
    4. 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] 
    5. Agregar el nombre del iniciador en /etc/iscsi/initiatiorname.iscsi

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

    6. Detección del Target (disco duro por red):
      • Discovery: En este modo se pueden descubrir targets y agregarlos a la base de datos.
        • iscsiadm -m discovery -t sendtargets -p [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 -m node -T [TargetName] -p [IP del Target] -l

      • Comprobar la conexión al dispositivo:
        • ls /dev/s* parted /dev/sdb unit s print. Nota: En este caso el dispositivo fue nombrado SDB, debido a que se encuentra conectado el dispositivo USB usado en pasos anteriores.

  16. Configurar usuarios y contraseñas:
    1. ¿Habilito las contraseñas ocultas (shadow)?
      • Seleccionar "Si"
    2. ¿Permitir acceso como superusuario (root)?:
      • Seleccionar "Si"
    3. Clave de superusuario:
      • Escribir la contraseña: xxxxxx
    4. ¿Crear una cuenta de usuario normal?:
      • Seleccionar "Si"
    5. Nombre completo para el nuevo usuario:
      • Escribir el nombre: prueba
    6. Nombre de usuario para la cuenta
      • Escribir el nombre: prueba
    7. Elija una contraseña para el nuevo usuario:
      • Escribir la contraseña: xxxxxx

  17. Configurar el reloj:
    1. Fijar la hora con NTP:
      • Seleccionar "Si"
    2. Servidor NTP a usar:
      • Escribir el dominio del servidor ntp a usar, ejemplo: ntp.cenditel
    3. Seleccione su zona horaria:
      • Seleccionar "America/Caracas"
  18. Detectar discos.
  19. Particiones de discos:
    1. Seleccionar particionado "Manual".
    2. Se listaran los discos detectados, en este caso el disco detectado mediante iSCSI en el paso 15.
    3. Crear las particiones y volúmenes lógicos necesarios, en este ejemplo se crearán dos particiones:
      • Crear la primera partición para el cargador de arranque (boot):
        • Seleccionar el dispositivo detectado.
        • Se despliegue un submenú donde se seleccionará "Crear una nueva partición"
        • Especificar el tamaño máximo de esta partición: 128MB

        • Seleccionar el tipo de la nueva partición: Primaria

        • Seleccionar la ubicación de la nueva partición: Principio

        • Configuración de la nueva partición:
          • Utilizar como: Sistema de fichero ext4

          • Punto de montaje: /boot

          • Finalizar la configuración seleccionando: Se ha terminado de definir la partición

      • Crear la segunda partición para un grupo de volúmenes que contendrá los volúmenes lógicos para el sistema raíz, área de intercambio y home:
        • Seleccionar el dispositivo detectado.
        • Se despliegue un submenú donde se seleccionará "Crear una nueva partición"
        • Especificar el tamaño máximo de esta partición: 7.4GB el resto del espacio libre del disco.

        • Seleccionar el tipo de la nueva partición: Primaria

        • Configuración de la nueva partición:
          • Utilizar como: Volumen físico para LVM

          • Finalizar la configuración seleccionando: Se ha terminado de definir la partición

      • Configurar los volúmenes lógico, seleccionando en el menú: Configurar el Gestor de Volúmenes Lógicos(LVM):

        • ¿Desea guardar los cambios a los discos y configurar LVM?: Si.
        • Seleccionar Crear grupo de volúmenes

        • Introducir el nombre del grupo de volúmenes: VG
        • Seleccionar el dispositivo (partición) para el grupo de volúmenes: /dev/sda2
        • Crear los tres volúmenes lógicos para raíz, swap y home, ejemplo para el sistema raíz:
          • Seleccionar Crear un volumen lógico

          • Seleccionar el Grupo de Volúmenes: VG
          • Introducir el nombre del volúmenes lógico: raiz
          • Introducir el tamaño de volumen lógico: 5839MB
          • Luego de repetir los pasos anteriores para swap y home seleccionar: Terminar para terminar la configuración de LVM.

      • Montar cada uno de los LVM en sus sistemas de fichero:
        • Seleccionar LVM de raíz:
          • Utilizar como: Sistema de fichero ext4

          • Punto de montaje: /raiz

          • Finalizar la configuración seleccionando: Se ha terminado de definir la partición

        • Seleccionar LVM de home:
          • Utilizar como: área de intercambio

          • Finalizar la configuración seleccionando: Se ha terminado de definir la partición

        • Seleccionar LVM de swap:
          • Utilizar como: Sistema de fichero ext4

          • Punto de montaje: /home

          • Finalizar la configuración seleccionando: Se ha terminado de definir la partición

    4. Se ha finalizado el particionado seleccionar: Finalizar el particionado y escribir los cambios en el disco.

    5. ¿Desea escribir los cambios en los disco?: Si.
  20. Instalar el sistema base.
  21. Elegir el núcleo a instalar:
    1. Seleccionar linux-image-3.6-amd64
  22. Controladores a incluir en initrd:
    1. Seleccionar Genérico: incluir todo los controladores disponibles

  23. Configurar el gestor de paquetes.
    1. ¿Usar software no libre?: No
    2. Servicios a utilizar: Por defecto están todos seleccionados, continuar.
  24. Seleccionar e instalar programas.
    1. ¿Desea participar en la encuesta sobre el uso de los paquetes?: No.
    2. ¿Quiere que man y man-db se instalen 'setuid man'?: No.
    3. Elegir los programas a instalar: SSH server y utilidades estándar del sistema.
  25. Instalar el cargador de arranque GRUB.
    1. ¿Desea instalar el cargador de arranque GRUB en el registro principal de arranque?: Si. Nota: Tener en cuenta que el dispositivo fue reconocido como sdb, por lo tanto la ruta para instalar el GRUB es /dev/sdb
  26. NO TERMINAR LA INSTALACIÓN, se tiene que configurar el proceso de la conexión al dispositivo mediante iSCSI con vlan en el initrd:
    1. Ir a la consola de comandos de BusyBox.

    2. Revisar que todos el dispositivo este montado con:
      • df

    3. Crear el entorno virtual con la llamada al sistema "chroot":
      •  mount --bind /dev /target/dev 

         mount --bind /proc /target/proc 

         mount --bind /sys /target/sys 

        chroot /target /bin/bash

    4. Instalar los siguientes paquetes:
      • aptitude install vlan
        aptitude install open-iscsi
    5. Verificar que el paquete initramfs-tools se encuentre instalado.

    6. Agregar los módulos de ISCSI y VLAN de initramfs:
      • echo bnx2 >> /etc/initramfs-tools/modules

        echo 8021q >> /etc/initramfs-tools/modules

        echo garp >> /etc/initramfs-tools/modules

        echo stp >> /etc/initramfs-tools/modules

        echo iscsi_tcp >> /etc/initramfs-tools/modules

    7. Agregar el binario de vlan para obtener los comando de configuración de vconfig, creando el siguiente archivo en /etc/initramfs-tools/hooks/vconfig

      • PREREQ="" 
        prereqs() 
        { 
             echo "$PREREQ" 
        } 
        
        case $1 in 
        # get pre-requisites 
        prereqs) 
             prereqs 
             exit 0 
             ;; 
        esac 
        
        # vconfig 
        . /usr/share/initramfs-tools/hook-functions 
        rm -f ${DESTDIR}/sbin/vconfig 
        copy_exec /sbin/vconfig /sbin/vconfig 
    8. Colocar permisos de ejecución al archivo vconfig

      •  chmod 755 /etc/initramfs/hooks/vconfig

    9. Agregar el script que ejecutará los comando para la conexión de la red mediante vlan, en /etc/initramfs-tools/scripts/init-top/vlan

      • PREREQ="" 
        prereqs() 
        { 
             echo "$PREREQ" 
        } 
                             
        case $1 in 
        # get pre-requisites 
        prereqs) 
             prereqs 
             exit 0 
             ;; 
        esac 
        
        vconfig set_name_type DEV_PLUS_VID 
        vconfig add eth0 220 
        vconfig add eth1 220 
        ip link set eth0 up 
        ip link set eth1 up 
        ip link set eth0.220 up 
        ip link set eth1.220 up 
    10. Colocar permisos de ejecución al archivo vlan

      •  chmod 755 /etc/initramfs/scripts/init-top/vlan

    11. Activar y definir el dispositivo de red en /etc/initramfs-tools/initramfs.conf, con la siguiente variable:

      •  DEVICE=eth0.220 

    12. Agregar o verificar el nombre del iniciador en /etc/iscsi/initiatiorname.iscsi

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

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

    14. Agregar los datos del Target en /etc/iscsi/iscsi.initramfs (Usuarios y contraseñas para modo nodo):

      • ISCSI_TARGET_NAME=XXXXXXXXXX
        ISCSI_TARGET_IP=X.X.X.X
        ISCSI_USERNAME=XXXX
        ISCSI_PASSWORD=XXXXX
        ISCSI_IN_USERNAME=XXXX
        ISCSI_IN_PASSWORD=XXXXX
    15. Copiar los firmware necesarios para la tarjeta de red del servidor en el initramfs:
      • Montar el dispositivo USB con los archivos del firmware (en nuestro caso bnx2):
        • mount /dev/sda1  /media/

      • Copiar la carpeta bnx2 con los firmware a /lib/firmware/

        • cp -r /media/bnx2 /lib/firmware/

      • Crear el script en /etc/initramfs-tools/hooks/firmware, el cual copiará los archivos firmware en el initramfs:

        • PREREQ="" 
          prereqs() 
          { 
               echo "$PREREQ" 
          } 
                               
          case $1 in 
          # get pre-requisites 
          prereqs) 
               prereqs 
               exit 0 
               ;; 
          esac 
          
          . /usr/share/initramfs-tools/hook-functions 
          cp -r /lib/firmware/bnx2 $DESTDIR/lib/firmware/
      • Colocar permisos de ejecución al archivo firmware

        •  chmod 755 /etc/initramfs/hooks/firmware

      • Verificación y modificación del gestor de arranque (grub):
        • Agregar al archivo /etc/default/grub en la siguiente linea la opción de DHCP:

          • GRUB_CMDLINE_LINUX_DEFAULT="quiet ip=dhcp"
        • Verificar que el mapa de dispositivo del grub, donde hd0 debe ser el disco duro y no el dispositivo USB.
          • vim boot/grub/device.map Se debe reflejar algo similar a lo siguiente:

            (hd0)   /dev/disk/by-id/scsi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            (hd1)   /dev/disk/by-id/usb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    16. Actualizar el initramfs y el GRUB
      • update-initramfs -u

        update-grub

    17. 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

  27. Terminar la instalación
  28. Modificar el servidor DHCP con iPXE:
    1. Modficar los que se publica por DHCP a la maquina cliente:
      • 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";
                        }
                        }
        ##Esta configuración del servidor DHCP será permanente para la conexión del dispositivo iSCSI y la maquina sin disco.
  29. Iniciar la maquina cliente:
    1. Recibe la IP mediante dhcp.
    2. Recibe en el archivo de iPXE y los datos correspondiente del dispositivo iSCSI.
  30. Agregar parámetro para la generación automática del nombre del iniciador para open-iscsi en /etc/iscsi/initiatorname.iscsi:

    • GenerateName=yes
  31. Actualizar el initramfs:
    • update-initramfs -u

  32. Revisar si el nombre del iniciador esta en initrd:
    • mkdir initnew

      cd initnew

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

      cat etc/iscsi.initramfs

      cat etc/initiatorname.iscsi

  33. Ya tienes el dispositivo con el sistema operativo debian squeeze publicado mediante el protocolo iSCSI y DHCP a una maquina cliente sin disco.

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

[6] http://es.wikipedia.org/wiki/TFTP

[7] http://es.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol

infra_red/iscsi_vlan_wheezy (última edición 2015-08-17 15:47:07 efectuada por ddiaz)