Installieren des Linux-iSCSI-Target (LIO) unter openSUSE 12.2

Heute wollte ich mal wieder das Linux-iSCSI-Target (LIO) unter openSUSE 12.2 zum Laufen bringen. Die erforderlichen Module sind seit Version 2.6.38 im Kernel enthalten, allerdings müssen bei openSUSE die Tools zur Konfiguration (lio-utils, targetcli) nachträglich installiert werden. Das letzte Mal, dass ich eine solche Installation vorgenommen habe, liegt schon einige Zeit zurück, und damals habe ich mir dummerweise nicht aufgeschrieben, was dabei zu beachten ist. Außerdem hat sich bei LIO inzwischen einiges getan, einige Pakete sind deprecated, und die Installation hat sich dementsprechend geändert. Die Anleitung, die man im LIO-Wiki findet, funktioniert unter openSUSE leider nicht, da einige Python-Packages nicht verfügbar sind. Man muss daher ein wenig basteln.

Zunächst installiert man git (falls noch nicht vorhanden) sowie ein paar weitere Packages. Diese Aufgabe lässt sich noch bequem mittels zypper erledigen:

zypper in git python-devel python-ipaddr python-netifaces python-configobj \
    net-snmp-devel

Die oben erwähnten Python-Packages, die nicht mittels zypper installierbar sind, lädt man sich einfach aus dem Netz herunter. Da wäre zunächst epydoc, das man nach dem Herunterladen und Entpacken einfach mittels make install kompiliert und installiert. Die ebenfalls benötigten Pakete SimpleParse und urwid müssen im Python-Stil mittels python setup.py install installiert werden.

Als Werkzeug für die Konfiguration des LIO-Targets dient das Tool targetcli. Dieses kann zusammen mit weiteren erforderlichen Bibliotheken mittels git heruntergeladen werden. Wir beginnen zunächst mit der RTSlib, welche die API enthält, sowie configshell, das für die Text-Oberfläche verwendet wird:

git clone git://risingtidesystems.com/rtslib.git
(cd rtslib; ./setup.py install)
git clone git://risingtidesystems.com/configshell.git
(cd configshell; ./setup.py install)

Würde man die RTSlib über eine Paketverwaltung installieren (RPM o.ä.), würden auch noch ein paar Dateien an die richtige Stelle kopiert. (Zu sehen ist das z.B. in der Datei rpm/python-rtslib.spec.tmpl.) Bei einer manuellen Installation muss das Kopieren manuell erledigt werden:

cp -r rtslib/specs /var/target/fabric

Eigentlich sollte es jetzt mit targetcli weitergehen. Die Installation schlägt jedoch mit der Meldung „Module ‘tcm_dump’ not found“ fehl. Lustigerweise benötigt man anscheinend für targetcli die früher verwendeten und heute als deprecated gekennzeichneten lio-utils. Wir installieren selbige mal schnell:

git clone git://risingtidesystems.com/lio-utils.git
cd lio-utils
make
make install

Und schon ist man mit dem nächsten Problem konfrontiert: Die in den lio-utils enthaltenen Python-Module werden in das Verzeichnis /usr/local/lib/python2.7/site-packages installiert. Das scheint eine Besonderheit von OpenSUSE zu sein, denn das Installationsprogramm erwartet die Module in /usr/lib/python2.7/site-packages (ohne „local“) und legt dementsprechend einige symbolische Links falsch an. Zum Glück lässt sich das leicht korrigieren:

ln -sf /usr/local/lib/python2.7/site-packages/tcm_dump.py /usr/sbin/tcm_dump
ln -sf /usr/local/lib/python2.7/site-packages/tcm_fabric.py /usr/sbin/tcm_fabric
ln -sf /usr/local/lib/python2.7/site-packages/tcm_loop.py /usr/sbin/tcm_loop
ln -sf /usr/local/lib/python2.7/site-packages/tcm_node.py /usr/sbin/tcm_node
ln -sf /usr/local/lib/python2.7/site-packages/lio_dump.py /usr/sbin/lio_dump
ln -sf /usr/local/lib/python2.7/site-packages/lio_node.py /usr/sbin/lio_node

Außerdem müssen die frisch verlinkten Programme auch noch ausführbar gemacht werden:

chmod 755 /usr/sbin/tcm_* /usr/sbin/lio_*

Ob man abschließend wirklich noch targetcli installiert, ist Geschmackssache, denn die in den lio-utils enthaltenen Tools genügen eigentlich vollkommen, um das iSCSI-Target zu konfigurieren. (Details dazu findet man im „LIO User’s Reference Manual„.) Wenn man sich für die Installation von targetcli entscheidet, ist das aber auch nicht mehr weiter schwierig:

git clone git://risingtidesystems.com/targetcli.git
cd targetcli
./setup.py install

Bevor man nun wirklich iSCSI-Laufwerke anlegen kann, müssen die entsprechenden Kernel-Module geladen und das config-Dateisystem gemountet werden. Beides erledigt das init-Script /etc/init.d/target. Hat man dieses gestartet, kann über targetcli oder tcm_node / lio_node das iSCSI-Target konfiguriert werden.

Schreibe einen Kommentar