Cintillo Institucional

Arranque por red sin disco mediante el protocolo iSCSI - Red Local: VLAN - Sistema Operativo: Debian Squeeze

El objetivo principal es instalar el sistema operativo Debian Squeeze 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. Se presenta un inconveniente en cuanto a la configuración de VLAN con el instalador de Squeeze, el cual no soporta dicha configuración, por lo cual se tendrá que cambiar la configuración de la red en el momento de la instalación del sistema operativo. Nota: Esto fue probado entre el año 2012-2013.

Requerimientos:

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]

El procedimiento a seguir se encuentra en la siguiente pagina en la sección "Instalación del software de soporte de iSCSI para el Target (Servidor)": http://wiki.cenditel.gob.ve/wiki/infra_red/iscsi_squeeze_arranque#Instalaci.2BAPM-n_del_software_de_soporte_de_iSCSI_para_el_Target_.28Servidor.29

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. 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 0200 eth0 
      autoboot eth0-0200 
      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

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. Paso previo a configurar la red, se debe cambiar la configuración de la red en el switch con vlan sin etiqueta, esto se debe a que el instalador de squeeze no tiene soporte la configuración de VLAN's
  11. 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 

  12. 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)"
  13. 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
  14. 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
  15. 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"
  16. 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.

  17. Detectar discos:
  18. 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.
  19. Configurar el gestor de paquetes.
  20. Seleccionar e instalar programas.
  21. Instalar el cargador de arranque GRUB en un disco duro.
  22. 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 y VLAN de initramfs:
        • echo iscsi >> /etc/initramfs-tools/modules

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

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

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

      • Agregar el binario de vlan para obtener el comando "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 
      • 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 0200 
           vconfig add eth1 0200 
           ip link set eth0 up 
           ip link set eth1 up 
           ip link set eth0.0200 up 
           ip link set eth1.0200 up 
      • Activar y definir el dispositivo de red en /etc/initramfs-tools/initramfs.conf, con la siguiente variable:

        •  DEVICE=eth0.0200 

      • 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

  23. Antes de reiniciar el servidor, se debe reconfigurar el switch con VLAN con etiqueta.
  24. Terminar la instalación.
  25. 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";
                        }
                        }
  26. Iniciar el servidor cliente.
    • Recibe la IP mediante dhcp.
    • Recibe en el archivo de iPXE y los datos correspondiente del dispositivo iSCSI.
  27. Ya se tiene el servidor cliente con Debian Squeeze.
  28. Revisar el nombre del iniciador creado por open-iscsi en /etc/iscsi/initiatorname.iscsi:

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

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

  31. 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, servidor conectado a una Red Local segmentada por VLAN's.

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_vlan_squeeze (última edición 2014-07-10 19:25:15 efectuada por lcolina)