qubes-installer-qubes-os/anaconda/docs/html/iscsi.html

536 lines
32 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>iSCSI and Anaconda &mdash; Anaconda 23.15 documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="top" title="Anaconda 23.15 documentation" href="index.html"/>
<link rel="next" title="Multipath and Anaconda" href="multipath.html"/>
<link rel="prev" title="Brief description of DriverDisc version 3" href="driverdisc.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="index.html" class="icon icon-home"> Anaconda
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction to Anaconda</a></li>
<li class="toctree-l1"><a class="reference internal" href="boot-options.html">Anaconda Boot Options</a><ul>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#installation-source">Installation Source</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-repo">inst.repo</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-stage2">inst.stage2</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-dd">inst.dd</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-multilib">inst.multilib</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#kickstart">Kickstart</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-ks">inst.ks</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-ks-sendmac">inst.ks.sendmac</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-ks-sendsn">inst.ks.sendsn</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#network-options">Network Options</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ip">ip</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#nameserver">nameserver</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#bootdev">bootdev</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ifname">ifname</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-dhcpclass">inst.dhcpclass</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#console-display-options">Console / Display Options</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#console">console</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-lang">inst.lang</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-geoloc">inst.geoloc</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-keymap">inst.keymap</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-cmdline">inst.cmdline</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-graphical">inst.graphical</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-text">inst.text</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-resolution">inst.resolution</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-vnc">inst.vnc</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-vncpassword">inst.vncpassword</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-vncconnect">inst.vncconnect</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-headless">inst.headless</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-xdriver">inst.xdriver</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-usefbx">inst.usefbx</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-sshd">inst.sshd</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#debugging-and-troubleshooting">Debugging and Troubleshooting</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-rescue">inst.rescue</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-updates">inst.updates</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-loglevel">inst.loglevel</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-syslog">inst.syslog</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-virtiolog">inst.virtiolog</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-zram">inst.zram</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#deprecated-options">Deprecated Options</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#method">method</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#repo-nfsiso">repo=nfsiso:...</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#dns">dns</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#netmask-gateway-hostname">netmask, gateway, hostname</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ip-bootif">ip=bootif</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ksdevice">ksdevice</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#blacklist-nofirewire">blacklist, nofirewire</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="boot-options.html#removed-options">Removed Options</a><ul>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#askmethod-asknetwork">askmethod, asknetwork</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#id5">serial</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#updates">updates</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#essid-wepkey-wpakey">essid, wepkey, wpakey</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ethtool">ethtool</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#gdb">gdb</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#inst-mediacheck">inst.mediacheck</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#ks-floppy">ks=floppy</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#display">display</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#utf8">utf8</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#noipv6">noipv6</a></li>
<li class="toctree-l3"><a class="reference internal" href="boot-options.html#upgradeany">upgradeany</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="kickstart.html">Anaconda Kickstart Documentation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="kickstart.html#pwpolicy">pwpolicy</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="commit-log.html">Rules for commit messages</a></li>
<li class="toctree-l1"><a class="reference internal" href="driverdisc.html">Brief description of DriverDisc version 3</a><ul>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#devices-which-can-contain-dds">Devices which can contain DDs</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#what-can-be-updated-using-dds">What can be updated using DDs?</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#selecting-dd-manually">Selecting DD manually</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#automatic-driverdisc-detection">Automatic DriverDisc detection</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#ddv3-structure">DDv3 structure</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#initrd-overlay-driverdisc-image">Initrd overlay driverdisc image</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#firmware-and-module-update">Firmware and module update</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#package-installation">Package installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="driverdisc.html#summary">Summary</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="">iSCSI and Anaconda</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="#what-is-expected-from-anaconda">What is expected from Anaconda</a></li>
<li class="toctree-l2"><a class="reference internal" href="#how-anaconda-handles-iscsi">How Anaconda handles iscsi</a></li>
<li class="toctree-l2"><a class="reference internal" href="#libiscsi">Libiscsi</a></li>
<li class="toctree-l2"><a class="reference internal" href="#debugging-iscsi-bugs">Debugging iSCSI bugs</a></li>
<li class="toctree-l2"><a class="reference internal" href="#future-of-iscsi-in-anaconda">Future of iSCSI in Anaconda</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="multipath.html">Multipath and Anaconda</a><ul>
<li class="toctree-l2"><a class="reference internal" href="multipath.html#introduction">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="multipath.html#what-is-expected-from-anaconda">What is expected from Anaconda</a></li>
<li class="toctree-l2"><a class="reference internal" href="multipath.html#how-anaconda-handles-multipath">How Anaconda handles multipath</a></li>
<li class="toctree-l2"><a class="reference internal" href="multipath.html#debugging-multipath-bugs">Debugging multipath bugs</a></li>
<li class="toctree-l2"><a class="reference internal" href="multipath.html#future-of-multipath-in-anaconda">Future of multipath in Anaconda</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyanaconda</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pyanaconda.html">pyanaconda package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#subpackages">Subpackages</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.installclasses.html">pyanaconda.installclasses package</a></li>
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.isys.html">pyanaconda.isys package</a></li>
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.packaging.html">pyanaconda.packaging package</a></li>
<li class="toctree-l4"><a class="reference internal" href="pyanaconda.ui.html">pyanaconda.ui package</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.addons">pyanaconda.addons module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.anaconda">pyanaconda.anaconda module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.anaconda_argparse">pyanaconda.anaconda_argparse module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.anaconda_log">pyanaconda.anaconda_log module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.bootloader">pyanaconda.bootloader module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.constants">pyanaconda.constants module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.constants_text">pyanaconda.constants_text module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.desktop">pyanaconda.desktop module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.errors">pyanaconda.errors module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.exception">pyanaconda.exception module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.flags">pyanaconda.flags module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.geoloc">pyanaconda.geoloc module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.i18n">pyanaconda.i18n module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.ihelp">pyanaconda.ihelp module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.image">pyanaconda.image module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.install">pyanaconda.install module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.installclass">pyanaconda.installclass module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.installinterfacebase">pyanaconda.installinterfacebase module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.iutil">pyanaconda.iutil module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.kexec">pyanaconda.kexec module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.keyboard">pyanaconda.keyboard module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.kickstart">pyanaconda.kickstart module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.localization">pyanaconda.localization module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.network">pyanaconda.network module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.nm">pyanaconda.nm module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.ntp">pyanaconda.ntp module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.orderedset">pyanaconda.orderedset module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.product">pyanaconda.product module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.progress">pyanaconda.progress module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.pwpolicy">pyanaconda.pwpolicy module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.queuefactory">pyanaconda.queuefactory module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.regexes">pyanaconda.regexes module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.rescue">pyanaconda.rescue module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.safe_dbus">pyanaconda.safe_dbus module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.screensaver">pyanaconda.screensaver module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.simpleconfig">pyanaconda.simpleconfig module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.startup_utils">pyanaconda.startup_utils module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.storage_utils">pyanaconda.storage_utils module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.text">pyanaconda.text module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.threads">pyanaconda.threads module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.timezone">pyanaconda.timezone module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.users">pyanaconda.users module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.version">pyanaconda.version module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda.vnc">pyanaconda.vnc module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyanaconda.html#module-pyanaconda">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Anaconda</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>iSCSI and Anaconda</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/iscsi.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<div class="section" id="iscsi-and-anaconda">
<h1>iSCSI and Anaconda<a class="headerlink" href="#iscsi-and-anaconda" title="Permalink to this headline"></a></h1>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Authors:</th><td class="field-body">Ales Kozumplik &lt;<a class="reference external" href="mailto:akozumpl&#37;&#52;&#48;redhat&#46;com">akozumpl<span>&#64;</span>redhat<span>&#46;</span>com</a>&gt;</td>
</tr>
</tbody>
</table>
<div class="section" id="introduction">
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p>iSCSI device is a SCSI device connected to your computer via a TCP/IP
network. The communication can be handled either in hardware or in software, or
as a hybrid &#8212; part software, part hardware.</p>
<p>The terminology:</p>
<ul class="simple">
<li>&#8216;initiator&#8217;, the client in the iscsi connection. The computer we are running
Anaconda on is typically an initiator.</li>
<li>&#8216;target&#8217;, the storage device behind the Network. This is where the data is
physically stored and read from. You can turn any Fedora/RHEL machine to a
target (or several) via scsi-target-utils.</li>
<li>&#8216;HBA&#8217; or Host Bus Adapter. A device (PCI card typically) you connect to a
computer. It acts as a NIC and if you configure it properly it transparently
connects to the target when started and all you can see is a block device on
your system.</li>
<li>&#8216;software initiator&#8217; is what you end up with if you emulate most of what HBA is
doing and just use a regular NIC for the iscsi communication. The modern Linux
kernel has a software initiator. To use it, you need the Open-ISCSI software
stack [1, 2] installed. It is known as iscsi-initiator-utils in Fedora/RHEL.</li>
<li>&#8216;partial offload card&#8217;. Similar to HBA but needs some support from kernel and
iscsi-initiator-utils. The least pleasant to work with, particularly because
there is no standardized amount of the manual setting that needs to be done
(some connect to the target just like HBAs, some need you to bring their NIC
part up manually etc.). Partial offload cards exist to get better performing
I/O with less processor load than with software initiator.</li>
<li>&#8216;iBFT&#8217; as in &#8216;Iscsi Boot Firmware Table&#8217;. A table in the card&#8217;s bios that
contains its network and target settings. This allows the card to configure
itself, connect to a target and boot from it before any operating system or a
bootloader has the chance. We can also read this information from
/sys/firmware/ibft after the system starts and then use it to bring the card
up (again) in Linux.</li>
<li>&#8216;CHAP&#8217; is the authentication used for iSCSI connections. The authentication
can happen during target discovery or target login or both. It can happen in
both directions too: the initiator authenticates itself to the target and the
target is sometimes required to authenticate itself to the initiator.</li>
</ul>
</div>
<div class="section" id="what-is-expected-from-anaconda">
<h2>What is expected from Anaconda<a class="headerlink" href="#what-is-expected-from-anaconda" title="Permalink to this headline"></a></h2>
<p>We are expected to:</p>
<ul class="simple">
<li>use an HBA like an ordinary disk. It is usually smart enough to bring itself
up during boot, connect to the target and just act as an ordinary disk.</li>
<li>allow creating new software initiator connections in the UI, both IPv4 and IPv6.</li>
<li>facilitate bringing up iBFT connections for partial offload cards.</li>
<li>install the root and/or /boot filesystems on any iSCSI initiator known to us</li>
<li>remember to install dracut-network if we are booting from an iSCSI initiator that
requires iscsi-initiator-utils in the ramdisk (most of them do)</li>
<li>boot from an iSCSI initiator using dracut, this requires generating an
appropriate set of kernel boot arguments for it [3].</li>
</ul>
</div>
<div class="section" id="how-anaconda-handles-iscsi">
<h2>How Anaconda handles iscsi<a class="headerlink" href="#how-anaconda-handles-iscsi" title="Permalink to this headline"></a></h2>
<p>iSCSI comes into play several times while Anaconda does its thing:</p>
<p>In loader, when deciding what NIC we should setup, we check if we have iBFT
information from one of the cards. If we do we set that card up with what we
found in the table, it usually boils down to an IPv4 static or IPv4
DHCP-obtained address. [4][5]</p>
<p>Next, after the main UI startup during filtering (or storage scan, whatever
comes first) we startup the iscsi support code in Anaconda [6]. This currently
involves:
- manually modprobing related kernel modules
- starting the iscsiuio daemon (required by some partial offload cards)
- most importantly, starting the iscsid daemon</p>
<p>All iBFT connections are brought up next by looking at the cards&#8217; iBFT data, if
any. The filtering screen has a feature to add advanced storage devices,
including iSCSI. Both connection types are handled by libiscsi (see below). The
brought up iSCSI devices appear as /dev/sdX and are treated as ordinary block
devices.</p>
<p>When DeviceTree scans all the block devices it uses the udev data (particularly
the ID_BUS and ID_PATH keys) to decide if the device is an iscsi disk. If it is,
it is represented with an iScsiDiskDevice class instance. This helps Anaconda
remember that:</p>
<ul class="simple">
<li>we need to install dracut-network so the generated dracut image is able to
bring up the underlying NIC and establish the iscsi connection.</li>
<li>if we are booting from the device we need to pass dracut a proper set of
arguments that will allow it to do so.</li>
</ul>
</div>
<div class="section" id="libiscsi">
<h2>Libiscsi<a class="headerlink" href="#libiscsi" title="Permalink to this headline"></a></h2>
<p>How are iSCSI targets found and logged into? Originally Anaconda was just
running iscsiadm as an external program through execWithRedirect(). This
ultimately proved awkward especially due to the difficulties of handling the
CHAP passphrases this way. That is why Hans de Goede &lt;<a class="reference external" href="mailto:hdegoede&#37;&#52;&#48;redhat&#46;com">hdegoede<span>&#64;</span>redhat<span>&#46;</span>com</a>&gt;, the
previous maintainer of the Anaconda iscsi subsystem decided to write a better
interface and created libiscsi (do not confuse this with the libiscsi.c in
kernel). Currently libiscsi lives as a couple of patches in the RHEL6
iscsi-initiator-utils CVS (and in Fedora package git, in somewhat outdated
version). Since Anaconda is libiscsi&#8217;s only client at the moment it is
maintained by the Anaconda team.</p>
<p>The promise of libiscsi is to provide a simple C/Python API to handle iSCSI
connections while being somewhat stable and independent of the changes in the
underlying initiator-utils (while otherwise being tied to it on the
implementation level).</p>
<p>And at the moment libiscsi does just that. It has a set of functions to discover
and login to targets software targets. It supports making connections through
partial offload interfaces, but the only discovery method supported at this
moment is through firmware (iBFT). Its public data structures are independent of
iscsi-initiator-utils. And there is some python boilerplate that wraps the core
functions so we can easily call those from Anaconda.</p>
<p>To start nontrivial hacking on libiscsi prepare to spend some time familiarizing
yourself with the iscsi-initiator-utils internals (it is complex but quite
nice).</p>
</div>
<div class="section" id="debugging-iscsi-bugs">
<h2>Debugging iSCSI bugs<a class="headerlink" href="#debugging-iscsi-bugs" title="Permalink to this headline"></a></h2>
<p>There is some information in anaconda.log and storage.log but libiscsi itself is
quite bad at logging. Most times useful information can be found by sshing onto
the machine and inspecting the output of different iscsiadm commands [2][7],
especially querying the existing sessions and known interfaces.</p>
<p>If for some reason the DeviceTree fails at recognizing iscsi devices as such,
&#8216;udevadm info &#8211;exportdb&#8217; is of interest.</p>
<p>The booting problems are either due to incorrectly generated dracut boot
arguments or they are simply dracut bugs.</p>
<p>Note that many of the iscsi adapters are installed in different Red Hat machines
and so the issues can often be reproduced and debugged.</p>
</div>
<div class="section" id="future-of-iscsi-in-anaconda">
<h2>Future of iSCSI in Anaconda<a class="headerlink" href="#future-of-iscsi-in-anaconda" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li>extend libiscsi to allow initializing arbitrary connections from a partial
offload card. Implement the Anaconda UI to utilize this. Difficulty hard.</li>
<li>extend libiscsi with device binding support. Difficulty hard.</li>
<li>work with iscsi-initiator-utils maintainer to get libiscsi.c upstream and then
to rawhide Fedora. Then the partial offload patches in the RHEL6 Anaconda can
be migrated there too and partial offload can be tested. This is something
that needs to be done before RHEL7. Difficulty medium.</li>
<li>improve libiscsi&#8217;s logging capabilities. Difficulty easy.</li>
</ul>
<table class="docutils footnote" frame="void" id="id1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[1]</td><td><a class="reference external" href="http://www.open-iscsi.org/">http://www.open-iscsi.org/</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[2]</td><td>/usr/share/doc/iscsi-initiator-utils-6.*/README</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[3]</td><td>man 7 dracut.kernel</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[4]</td><td>Anaconda git repository, anaconda/loader/ibft.c</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[5]</td><td>Anaconda git repository, anaconda/loader/net.c, chooseNetworkInterface()</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id6" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[6]</td><td>Anaconda git repository, anaconda/storage/iscsi.py</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id7" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[7]</td><td>&#8216;man 8 iscsiadm&#8217;</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="multipath.html" class="btn btn-neutral float-right" title="Multipath and Anaconda" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="driverdisc.html" class="btn btn-neutral" title="Brief description of DriverDisc version 3" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2015, Red Hat, Inc..
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'23.15',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>