Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
sanboot:debian_etch_iscsi [2007/10/25 10:06]
gervystar
sanboot:debian_etch_iscsi [2007/11/06 08:25]
gervystar
Line 10: Line 10:
  
 This howto is based on the following assumptions:​ This howto is based on the following assumptions:​
-   * a base debian ​>= etch with all the security updates+   * a base debian etch with all the security updates
    * the system is installed on a single partition "/"​ on /dev/sda1    * the system is installed on a single partition "/"​ on /dev/sda1
    * there is an already done iscsi target on an iscsi server    * there is an already done iscsi target on an iscsi server
    * there is a working dhcp server    * there is a working dhcp server
  
-Install the ''​open-iscsi''​ package. +==== Compile iscsistart and fwparam_ibft ====
- +
-   ​apt-get install open-iscsi+
  
 Since two fundamental tools from open-iscsi are not included in the debian package, they have to be compiled from the sources with the following steps (i have used a different machine for all the compilation stuff). Since two fundamental tools from open-iscsi are not included in the debian package, they have to be compiled from the sources with the following steps (i have used a different machine for all the compilation stuff).
Line 35: Line 33:
  
 The two files needed are ''​usr/​iscsistart''​ and ''​utils/​fwparam_ibft/​fwparam_ibft''​ so they have to be copied in ''/​usr/​sbin''​. The two files needed are ''​usr/​iscsistart''​ and ''​utils/​fwparam_ibft/​fwparam_ibft''​ so they have to be copied in ''/​usr/​sbin''​.
 +
 +==== Install the needed packages ====
 +
 +   ​apt-get install iproute
 +
 +==== Disable networking scripts ====
 +
 +The file ''/​etc/​network/​interfaces''​ must contain only the information needed to setup the loopback adapter or some additional network cards not used in the iSCSI boot process.
 +If you have only one interface (in example eth0), be sure to have a stanza like this in ''/​etc/​network/​interfaces''​
 +
 +<​code>​
 +auto eth0
 +iface eth0 inet manual
 +</​code>​
 +
 +So ifupdown will report the network card as "​up",​ otherwise some script will not work well (in exemple the nfs mount).
 +
 +==== Create the initramfs scripts ====
  
 Create two scripts shown below. These scripts have to be executable. Create two scripts shown below. These scripts have to be executable.
Line 45: Line 61:
 you can update the initial ramdisk: you can update the initial ramdisk:
    ​dpkg-reconfigure linux-image-$(uname -r)    ​dpkg-reconfigure linux-image-$(uname -r)
 +
 +If the modifications were applied to a physical disk on the client
 +machine, you can now [[sanboot:​transfer|transfer the contents of your
 +physical disk to the SAN target]].
 +
 +If the image you wish to export to client systems was modified directly,,
 +you can now [[sanboot:​iscsitarget|make the contents of that image available
 +via iSCSI]].
 +
 +==== Hint ====
 +   * If the system hangs before the root device has been mounted, passing ''​break=mount''​ on the command line will spawn a shell before ''​scripts/​local-top/​iscsi_tcp''​ is run. This should allow for further debugging.
 +
 +==== Scripts ====
 +=== /​etc/​initramfs-tools/​hooks/​iscsi_tcp ===
 +<code bash>
 +#!/bin/sh
 + 
 +set  -e
 + 
 +PREREQ=""​
 + 
 +prereqs()
 +{
 +        echo "​$PREREQ"​
 +}
 + 
 +case $1 in
 +prereqs)
 +        prereqs
 +        exit 0
 +        ;;
 +esac
 + 
 +. /​usr/​share/​initramfs-tools/​hook-functions
 +
 +[ -x /​usr/​sbin/​iscsistart ] && copy_exec /​usr/​sbin/​iscsistart /sbin
 +[ -x /​usr/​sbin/​fwparam_ibft ] && copy_exec /​usr/​sbin/​fwparam_ibft /sbin
 +[ -x /sbin/ip ] && copy_exec /sbin/ip /sbin
 +manual_add_modules iscsi_tcp
 +manual_add_modules ib_iser
 +</​code>​
 +
 +=== /​etc/​initramfs-tools/​scripts/​local-top/​iscsi_tcp ===
 +<code bash>
 +#!/bin/sh
 + 
 +set -e
 + 
 +PREREQ="​udev"​
 + 
 +prereqs()
 +{
 +        echo "​$PREREQ"​
 +}
 + 
 +case $1 in
 +prereqs)
 +        prereqs
 +        exit 0
 +        ;;
 +esac
 + 
 +case $ROOT in
 +/dev/sd*)
 +        # Evaluate IBFT parameters
 +        for i in $(fwparam_ibft -b); do export $i; done
 +
 +        #Bring up the interface used to boot
 +        for i in $(ls /​sys/​class/​net);​ do
 +                IFADDR=$(cat /​sys/​class/​net/​$i/​address)
 +                if [ $IFADDR = $iSCSI_INITIATOR_HWADDR ]; then
 +                        echo "Using $i with MAC $IFADDR"​
 +                        export iSCSI_INITIATOR_IF=$i
 +                fi
 +        done
 +
 +        modprobe -q iscsi_tcp
 +        modprobe -q ib_iser
 +
 +        echo "​Bringing up $iSCSI_INITIATOR_IF for iSCSI..."​
 +        ip link set $iSCSI_INITIATOR_IF up
 +        echo "​Setting up networking on $iSCSI_INITIATOR_IF..."​
 +        ip addr add $iSCSI_INITIATOR_IPADDR/​$iSCSI_INITIATOR_MASK brd + dev $iSCSI_INITIATOR_IF
 +        ip route add default via $iSCSI_INITIATOR_GATEWAY
 +
 +        echo "​Connecting to iSCSI target $iSCSI_TARGET_NAME on $iSCSI_TARGET_IPADDR..."​
 +        iscsistart -i $iSCSI_INITIATOR_NAME -t $iSCSI_TARGET_NAME -g 1 -a $iSCSI_TARGET_IPADDR
 +        sleep 5
 +        ;;
 +esac
 +</​code>​
 +
 +
 +===== Using gPXE to boot over iSCSI =====
 +Since my network cards don't support booting via iSCSI, I've used the great gPXE, loading it after a "​standard"​ PXE request.
 +This is called [[:​pxechaining|PXE Chainloading]]
 +
 +A separate stanza containing the right ''​root-path''​ option should be created for each host in ''/​etc/​dhcp3/​dhcpd.conf'',​ like in the example.
 +
 +<​code>​
 +host iscsi-test {
 +                hardware ethernet 00:​0C:​29:​5C:​53:​C2;​
 +                fixed-address 192.168.23.195;​
 +                filename "";​
 +                option root-path "​iscsi:​192.168.23.2::::​iqn.2007-10.org.appliedgenomics:​test.disk1";​
 +}
 +</​code>​
  

QR Code
QR Code sanboot:debian_etch_iscsi (generated for current page)