Cintillo Institucional

Inicializacion de maquina sin disco utilizando iscsi en debian squeeze

El objetivo principal es emplear el arranque por red (network booting) en una maquina sin disco para cargar el sistema operativo desde un servidor utilizando el protocolo iSCSI para conectar a un dispositivo SCSI (target).

Para preparar dicho servidor en este caso se utilizará:

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]

Instalación del software de soporte de iSCSI para el Target (Servidor)

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 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:
    • 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

Instalación del software de soporte de iSCSI para el Initiator (Cliente de prueba)

  1. Instalar el paquete open-iscsi

  2. 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]
  3. Iniciar/Reiniciar el servicio:
    • /etc/init.d/open-iscsi start

  4. 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*

    • Establecer la conexión automática con el target (si asi lo requiere):
      • iscsiadm --mode node --targetname [TargetName] --portal [IP del Target] --op=update --name=node.startup --value=automatic

Preperación de arranque por red (iPXE Booting) desde un dispositivo iSCSI

Servidor TFTP

  1. Instalar el paquete tftpd ó tftp-hpa

  2. Crear el directorio que contedrá los archivos para transferir, y cambiar los permisos. Ejemplo:
    • mkdir /srv/tftp

      chmod 777 /srv/tftp

      mkdir /srv/tftp/debianamd64

  3. Descomentar la siguiente linea en el archivo de configuración /etc/inetd.conf y agregar el directorio creado:

    • <service_name>    <sock_type>    <proto>    <flags>    <user>    <server_path>    <args>

      tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp Especificando otros argumentos como una direccion IP especifica por donde escuchara las peticiones:

      tftp           dgram   udp4    wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --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

  4. Descargar el paquete debian installer-amd64 y moverlo al directorio del servidor tftp /srv/tftp:

    • Desde el repositorio:
      • aptitude search debian-installer

        aptitude install debian-installer-6.0-netboot-amd64

    • La imagenes están en /usr/lib/debian-installer/images/amd64/text/.

    • Realizar cambios en los archivos de instalación:
      • Crear un directorio en /usr/lib/debian-installer/images/amd64/text/

        • mkdir -p /usr/lib/debian-installer/images/amd64/text/debian-installer/amd64

      • Crear los siguientes enlaces desde el directorio creado anteriormente:
        • ln -s ../../boot-screens /usr/lib/debian-installer/images/amd64/text/debian-installer/amd64/

          ln -s ../../initrd.gz /usr/lib/debian-installer/images/amd64/text/debian-installer/amd64/

          ln -s ../../linux /usr/lib/debian-installer/images/amd64/text/debian-installer/amd64/

      • Crear un enlace simbólico desde el directorio del servidor tftp hacia el directorio donde se encuentra debian-installer amd64:
        • ln -s /usr/lib/debian-installer/images/amd64/text/ /srv/tftp/debianamd64/

      • La ruta del archivo de arranque pxelinux.0 está:
        • /srv/tftp/debianamd64/text/pxelinux.0

Servidor DHCP

  1. Instalar el paquete dhcp3-server

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

    • allow booting;
      allow bootp;
      
      subnet [Dirección de red] netmask [Mascara de red] {
              range X.X.X.X X.X.X.X ;                                         #Rango de direcciones IP que se publicarán por DHCP
              option domain-name-servers X.X.X.X;
              option routers X.X.X.X;
              default-lease-time 600;
              max-lease-time 7200;
      }
      
      group {
              next-server X.X.X.X;
              host [HostName] {
                      hardware ethernet 00:00:00:00:00:00;
                      fixed-address X.X.X.X;
                      filename "/srv/tftp/debianamd64/text/pxelinux.0";    #Ruta donde se encuentra el archivo para el arranque desde el servidor con el sistema Entorno de ejecución de Pre-arranque
                      }
      }

Maquina cliente sin disco arranque por red

  1. Configurar la maquina cliente sin disco para que 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. En el instalador se seleccionará la instalación mediante modo experto, para realizar otro tipos de configuraciones (como la detección del dispositivo iSCSI)
  4. Pasos para la instalación del S.O:
    • Cambiar lenguaje >> Spanish >> Venezuela (Opcional) >> Configurar la localización >> Venezuela es_VE.UTF-8 >> Localizaciones adiciones >> Niguna (Opcional).

    • Eligir la distribución del teclado >> Teclado de tipo pc >> Español

    • Detección del hardware de red >> Modulos a cargar >> El que esta seleccionado por defecto >> Algún hardware PCMCIA (dejar en blanco) >> Continuar

    • Configurar la red >> Por dhcp (SI) >> Nombre de la maquina (xxxx) >> Nombre de domino (cenditel)

    • Escoja una réplica de debian >> http >> Introducir información manualmente >> Nombre del servidor (debian.cenditel) >> DIrectorio de réplica (/debian/) >> Proxy (dejar en blanco) >> continuar

    • Elegir versión de Debian a instalar >> Squeeze (estable)

    • Descargar componentos del instalador >> Seleccionar para particiones y LVM:

      • Crypt-dm-modules
      • Crypto-modules
      • Lvmcfg: Configure the Local Volumen Manager
      • Parted- udeb
      • Partman-reiserfs
    • Configurar usuarios y contraseñas >> Habilito las contraseñas ocultas-shadow (NO) >> Permitir accesor como superusuario -root- (SI) >> Clave de superusuario [xxxx] >> Crear una cuenta de usuario normal (SI) >> Nombre completo para el usuario [xxxx] >> Nombre de usuario para la cuenta [xxxx] >> Contraseña para el nuevo usuario [xxxx]

    • Configurar el reloj >> Fijar la hora con NTP (SI) >> Servidor NTP a usar [ntp.cenditel] >> Seleccione su zona horaria (America/Caracas)

    • Se debe saltar la opción detectar disco, debido a que la maquina no tiene. Ir a la opción Ejecutar intérprete de órdenes:
      • 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 

      • Abrir el terminal:
        •  chroot /destino  /bin/bash

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

      • Configurar el archivo /etc/iscsi/iscsi.conf como se realizó en la parte de http://wiki.cenditel.gob.ve/wiki/infra_red/iscsi_squeeze_arranque#Instalaci.2BAPM-n_del_software_de_soporte_de_iSCSI_para_el_Initiator_.28Cliente_de_prueba.29

      • 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.
      • Liberar memoria RAM al menos 250MB
      • Salir de la linea de comandos para regresar al menú de instalación
    • Instalar el sistema base >> Elija el núcleo a instalar: Seleccionar >> linux-image-2.6-amd64 >> Controladores a incluir en initrd (opción incluir todo los controladores disponibles)

    • Configurar el gestor de paquetes.
    • Seleccionar e instalar programas
    • Instalar el cargador de arranque GRUB
    • NO TERMINAR LA INSTALACION, Configurar el proceso de initrd para la conexión del dispositivo iSCSI
      • Ir a la consola de comandos
      • Revisar que todos el dispositivo este montado con
        • df

      • Abrir el terminal:
        • chroot /target /bin/bash

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

      • Agregar iSCSI en los modulos de initramfs:
        • 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

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

        • GRUB_CMDLINE_LINUX_DEFAULT="quiet ip=dhcp"
      • Agragar 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

    • Terminar la instalación
  5. Modificar el servidor DHCP con iPXE:
    • Instalar el paquete de iPXE en el servidor:
      • aptitude search ipxe

        aptitude install ipxe

        ls -l /usr/lib/ipxe/undionly.kpxe #Buscar la ruta del archivo undionly.kpxe

        ln -s /usr/lib/ipxe/undionly.kpxe /srv/tftp/ipxe #Realizar un enlace simbolico hacia el directorio donde se va a publicar por el servidor tftp

    • Agragar al arichivo de configuración /etc/dhcp/dhcpd.conf las siguientes opciones (Referencia www.ipxe.org):

      • #Opciones para ipxe
          option space ipxe;
          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 iscsi-initiator-iqn code 203 = string;
    • Modficar los que se publica por DHCP a la maquina cliente:

Antes:

Ahora:

  1. Iniciar la maquina cliente:
    • Recibe la IP mediante dhcp.
    • Recibe en el archivo de iPXE y los datos correspondiente del dispositivo iSCSI.
  2. Revisar el nombre del iniciador creado por open-iscsi en /etc/iscsi/initiatorname.iscsi

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

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

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

infra_red/iscsi_squeeze_arranque (última edición 2014-08-21 15:28:18 efectuada por lcolina)