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
Next revision Both sides next revision
sanboot:debian_lenny_iscsi [2009/11/21 17:43]
garlopf
sanboot:debian_lenny_iscsi [2009/11/23 17:13]
garlopf
Line 11: Line 11:
 Install open-iscsi Install open-iscsi
 <code bash>​aptitude install open-iscsi</​code>​ <code bash>​aptitude install open-iscsi</​code>​
-touch the indicatorfile,​ which is queried to determine whether the iscsi tools and scripts are to be copied into the new initrd ​+ 
 +Touch the indicatorfile,​ which is queried to determine whether the iscsi tools and scripts are to be copied into the new initrd ​
 <code bash>​touch /​etc/​iscsi/​iscsi.initramfs</​code>​ <code bash>​touch /​etc/​iscsi/​iscsi.initramfs</​code>​
 +
 Rebuild your initrd. Rebuild your initrd.
-<code bash>​update-initramfs -u</​code>​+<code bash> 
 +aptitude install initramfs-tools 
 +update-initramfs -u 
 +</​code>​ 
 + 
 +Configure the parameters to your kernel with the following goals in mind: 
 +  * The initiator and other iSCSI related parameter should be specified so that the open-iscsi boot scripts can get going with setting up iSCSI 
 +  * The kernel should find the correct disk once iSCSI is online. The safest way is to use a ''​LABEL=''​ or ''​UUID=''​ identification. 
 +Example: 
 +<code grub> 
 +title           ​Debian Lenny iSCSI 
 +   ​kernel ​      /​vmlinuz-2.6.28-11-generic ISCSI_INITIATOR=iqn.2009-04.mynet:​general iSCSI_TARGET_NAME=iqn.2009-04.mynet.node1:​general.vol1 iSCSI_TARGET_IP=192.168.1.1 ISCSI_TARGET_PORT=3260 root=UUID=021ebcfc-188a-41ba-9864-ee18cbf7af9f ro 
 +   ​initrd ​      /​initrd.img-2.6.28-11-generic 
 +</​code>​ 
 + 
 Try to boot! Try to boot!
  
 ==== Lenny doesnt fetch from iBFT ==== ==== Lenny doesnt fetch from iBFT ====
-Now if Open-iSCSI is in the repositories then why did I bother to write this howto? Good question! The answer is simply that you don't get the same result with the iSCSI + Etch howto as you get when instlling open-iscsi from the lenny repositories. While the "etch solution"​ fetches iscsi parameters from the [[iBFT]], the "​built-in lenny solution"​ fetches the parameters from configuration file(s) under ''/​etc/''​ in the initramfs image itself. ​+Now if Open-iSCSI is in the repositories then why did I bother to write this howto? Good question! The answer is simply that you don't get the same result with the iSCSI + Etch howto as you get when instlling open-iscsi from the lenny repositories. While the "etch solution"​ fetches iscsi parameters from the [[iBFT]], the "​built-in lenny solution"​ fetches the parameters from configuration file(s) under ''/​etc/''​ in the initramfs image itself ​and/or settings passed as kernel parameters from the bootloader.
  
-While this simple distinction might seem innocent enough, it really isn't. In many cases it is impracticalt to create a new initrd or root image to change the iscsi parameters. Luckily, for most people there is a more elegant way to get the parameters. The latest lenny kernel (as of 4. November 2009) has an [[iBFT]] function compiled in that makes fetching the iSCSI parameters from [[iBFT]] really easy. From your initrd script, simply traverse the directory ​<pre>/​sys/​firmware/​ibft</​pre> ​The files in there contain all the ibft information you could ever want.+While this simple distinction might seem innocent enough, it really isn't. In many cases it is impracticalt to create a new initrd or root image to change the iscsi parameters. Luckily, for most people there is a more elegant way to get the parameters. The latest lenny kernel (as of 4. November 2009) has an [[iBFT]] function compiled in that makes fetching the iSCSI parameters from [[iBFT]] really easy. From your initrd script, simply traverse the directory ​''​/​sys/​firmware/​ibft'' ​The files in there contain all the ibft information you could ever want.
  
 +**FIXME I didn't follow this route, but if you do, please put the initramfs script you created here. You can get access to this wiki by asking in the #etherboot IRC channel at irc.freenode.org. Se below for the route I took, and consequently the script i made instead**
 +
 +==== Extras: XEN + iSCSI + Lenny + iBFT ====
 +
 +I decided to share my experience with iSCSI + [[http://​xen.org/​|Xen]] on Debian Lenny because that is a very important part of my setup. If you don't know or don't care about Xen you can simply skip this section. In short, I want to configure all my webserver farm nodes to boot xen dom0 kernels over iSCSI for my little [[http://​colobg.net/​|webhost company]]. The problem arises since the xen kernels prior to 2.6.32 does not populate ''/​sys/​firmware/​ibft''​ directory.
 +
 +==== Solutions to XEN + iSCSI + Lenny + iBFT ====
 +There are 3 solutions to the problem of aquiering iSCSI data from the iBFT with a lenny XEN kernel in initrd:
 +  * Fall back to the default behaviour in Lenny, namely to read the settings from configurations in ''/​etc/''​ and/or settings passed as kernel parameters.
 +  * Patch the kernel or use an alternate kernle (newer than 2.6.32 or patched) to fix the iBFT + XEN problem. This patch looks promising: http://​patchwork.kernel.org/​patch/​50838/​ . Documentation for how to proceed with that is available here: http://​wiki.debian.org/​DebianKernelCustomCompilation and you might also want to read this: http://​packages.debian.org/​lenny/​kernel-package and this: http://​www.debian.org/​doc/​FAQ/​ch-kernel.en.html
 +  * My favourite: Use an utility that gets hold of the iBFT data without depending on the kernel sysfs directory ''/​sys/​firmware/​ibft''​. I did this by fetching an older version of the Open-iSCSI sourcecode from here: http://​www.open-iscsi.org/​bits/​. I have confirmed that the version mentioned in the Etch howto works flawlessly: http://​www.open-iscsi.org/​bits/​open-iscsi-2.0-865.13.tar.gz. I used the Etch howto  as a reference when building. You only need to compile the tool called ''​fwparam_ibft''​ as the rest is allready installed in Lenny. This tool gets its iBFT data directly from memory without asking the kernel at all. After compiling the ''​fwparam_ibft''​ tool and copying it to ''/​usr/​sbin'',​ make sure to creating these two initramfs hook script which will be executed automatically to include the fwparam_ibft binary in the ramdisk image when initramfs is updated, and to put it to good use at boot time respectively.
 +=== /​etc/​initramfs-tools/​hooks/​iscsi_tcp ===
 <code bash> <code bash>
-TODO: post an initrd ​hook/script that does exactly that+#!/bin/sh 
 +set  -e 
 +PREREQ=""​ 
 +prereqs() 
 +
 +        echo "​$PREREQ"​ 
 +
 +case $1 in 
 +prereqs) 
 +        prereqs 
 +        exit 0 
 +        ;; 
 +esac 
 +. /​usr/​share/​initramfs-tools/​hook-functions 
 +# NOTE THIS WILL BE INCLUDED BY DEFAULT, SO ITS DISABLED HERE: [ -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>​ </​code>​
 +=== /​etc/​initramfs-tools/​scripts/​local-top/​iscsi_tcp ===
 +This script will run at the correct time during boot to bring up iSCSI. It has been verified to work in a XEN-Dom0 node.
 +<code bash>
 +#!/bin/sh
 +set -e
 +PREREQ="​udev"​
 +prereqs()
 +{
 +        echo "​$PREREQ"​
 +}
 +case $1 in
 +prereqs)
 +        prereqs
 +        exit 0
 +        ;;
 +esac
  
-==== XEN Troubles ====+echo ""​ 
 +echo "​Custom iSCSI Boot script for Debian Lenny starting..."​ 
 +echo ""​
  
-There is a catch though. The /​sys/​firmware/​ibft directory is empty if you boot with a xen kernel. This is due to a bug that makes the kernel unable to map memory below 1mb correctly. http://​colobg.net/​+modprobe -q iscsi_tcp 
 +modprobe -q ib_iser
  
 +echo "​Evaluating IBFT parameters"​
 +for i in $(fwparam_ibft);​
 +do
 + #Strip of namespace
 + V=$(echo $i | sed '​s|network\([0-9]*\):​|iSCSI_INITIATOR_\1_|'​ | sed '​s|target\([0-9]*\):​|iSCSI_TARGET_\1_|'​ | sed '​s|iscsi-initiator\([0-9]*\):​|iSCSI_INITIATOR_\1_|'​)
 + echo " ​  ​Exporting $V"
 + export $V;
 +done
  
 +echo "​Bringing 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_0_HWADDR ]; then
 +               echo " ​  Using $i with MAC $IFADDR"​
 +               ​export iSCSI_INITIATOR_0_IF=$i
 +       fi
 +done
  
-==== Solutions to XEN + iSCSI + Lenny + iBFT ==== +echo " ​  ​Bringing up $iSCSI_INITIATOR_0_IF for iSCSI...
-There are 3 solutions to the problem of aquiering iSCSI data from the iBFT with a lenny XEN kernel in initrd: +ip link set $iSCSI_INITIATOR_0_IF up 
-  * Patch the kernel or use an alternate kernel to fix the iBFT + XEN problemThis patch looks promising: http://​patchwork.kernel.org/​patch/​50838/ ​Documentation for how to proceed with that is available here: http://wiki.debian.org/DebianKernelCustomCompilation and you might also want to read this: http://​packages.debian.org/​lenny/​kernel-package and this: http://​www.debian.org/​doc/​FAQ/​ch-kernel.en.html + 
-  * Use an utility that get hold of the iBFT data without depending on the kernel sysfs directory ''/​sys/​firmware/​ibft''​. One way to do that is to fetch an older version of the Open-iSCSI sourcecode from here: http://​www.open-iscsi.org/bits/ and compiling the old fwparam_ibft tool that is mentioned in the etch howto. This tool seemingly gets its iBFT data directly from memory without asking the kernel at all. +echo " ​  ​Setting up networking on $iSCSI_INITIATOR_0_IF...
-  Fall back to the default behaviour in Lenny, namely to read the settings from configurations in ''​/etc/''​.+ip addr add $iSCSI_INITIATOR_0_IPADDR/$iSCSI_INITIATOR_0_MASK brd + dev $iSCSI_INITIATOR_0_IF 
 +ip route add default via $iSCSI_INITIATOR_0_GATEWAY 
 + 
 +echo "​Connecting ​to iSCSI target $iSCSI_TARGET_0_NAME on $iSCSI_TARGET_0_IPADDR..." 
 +iscsistart ​-i $iSCSI_INITIATOR_0_NAME ​-t $iSCSI_TARGET_0_NAME -g 1 -a $iSCSI_TARGET_0_IPADDR 
 +sleep 5 
 + 
 +</code> 
 +**Important: remember ​to ''​chmod +x'' ​both these scripts so that the are executable before updating your initrd**
  

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