Diskless vékonykliensek bootolása iSCSI targetről, konfiguráció

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(Diskless vékonykliensek bootolása iSCSI targetről, konfiguráció)
(nyelvészkedés, formázás)
 
(2 szerkesztő 26 közbeeső változata nincs mutatva)
1. sor: 1. sor:
= Diskless vékonykliensek bootolása iSCSI targetről, konfiguráció =
+
Ebben a szócikkben egy olyan környezetet kívánok bemutatni, amely kliens számítógépekből, egy boot szerverből (TFTP és DHCP szerver) és egy iSCSI adattárból áll. Ez a környezet a Preboot Execution Environment, mely segítségével a kliens számítógépek operációs rendszerek telepítő image-eit, vagy akár telepített operációs rendszert tudnak bootolni hálózaton keresztül az iSCSI adattárról. A szócikkben először a fent említett technológiákat kívánom bemutatni, majd a rendszer felkonfigurálásának lépéseit és az azokhoz kapcsolódó információkat írom le.
   
== iSCSI ==
+
== iSCSI: Internet Small Computer System Interface ==
   
  +
Az iSCSI egy IP-alapú hálózati kommunikációs szabvány adattárak (storage-ok) összeköttetésére. Lehetővé teszi, hogy különböző számítógépek hálózaton keresztül elérhessék és kezeljék a fizikailag más helyen lévő központosított adattárakat. Adattár alatt fizikai merevlemezek csoportját értem, például van valakinek a szerverszobájában egy Sun J4400-as storage tömbje, ami 24 db SATA II-es merevlemezt tartalmaz. Ez a SCSI '''target'''.
   
=== Internet Small Computer System Interface ===
+
'''A kliens''' (initiator) SCSI parancsokat (CDB) küld IP-hálózaton keresztül a SCSI storage-nak (targetnek). A CDB (Command Descriptor Block), a kliens által küldött parancs, mely tartalmazza a Logical Unit Number-t (LUN), a logikai egység számát. Ez jelöli a külön címezhető logikai SCSI eszközt, amely a targetnek (fizikai SCSI eszköznek) a része.
* IP alapú hálózati kommunikációs szabvány adattárak (storage-ok) összeköttetésére
+
* Létezik szoftveres initiator, amely az őt futtató kernel és hálózati kártya támogatásával SCSI eszközt emulál a számítógép számára
* A kliens (initiator) SCSI parancsokat küld (CDB) a SCSI storage-nak (targetek)
+
* Létezik hardveres initiator, amely egy külön hardver a számítógépben, mely az azon futó firmware segítségével tehermentesíti a szervert a TCP-kommunikációból származó overhead alól.
** CDB: Command Descriptor Block
+
* Tulajdonképpen az iSCSI külön SCSI merevlemezekhez való kapcsolódást emulál
+
'''Előnyök:'''
* Logical Unit Number (LUN)
+
* adattár-centralizáció: a háttértárak központosítva egy helyen vannak, nem pedig szétszórva a munkaállomásokon.
** A logikai egység száma jelenti a külön címezhető logikai SCSI eszközt, amely a targetnek (fizikai SCSI eszköznek) a része.
+
* a hálózaton keresztül könnyen kioszthatók a merevlemezek, új hardverkötet kiosztása hardverváltoztatás és kábelezés nélkül
* Előnyök:
+
* Létezik olyan megoldás, hogy az egész adattárból van még egy, egy félreeső helyen, amely melegtartalékként üzemelhet, ha az egyik adattár felé valamilyen katasztrófa miatt nem sikerülne kapcsolatot létesíteni.
** adattár centralizáció
+
* Hálózati bootolás (pl.: diskless kliensek számára, lásd alább)
** a hálózaton keresztül könnyen kioszthatók a merevlemezek, hibaelhárítás
+
* olcsó megoldás: nem kell dedikált optikai szálas (Fibre Channel) hálózat, standard hálózaton működik
** Hálózati bootolás (pl.: diskless kliensek számára)
+
* távoli elérhetőség…
** olcsó megoldás: nem kell dedikált optikai szálas (Fibre Channel) hálózat, standard hálózaton működik
 
** távoli elérhetőség…
 
   
 
=== iSCSI target létrehozása Solarison ===
 
=== iSCSI target létrehozása Solarison ===
A szerveren futó targetmenedzselő program (daemon) számára létre kell hozni egy könyvtárat. Minden target és logikai egységhez kapcsolódó információt itt tárol majd a daemon.
+
  +
A szerveren futó targetmenedzselő program (daemon) számára meg kell adni egy könyvtárat, melyben a daemon a targethez kapcsolódó információkat tárolja. Ha létrehozunk egy logikai kötetet, akkor a daemon létrehozza a logikai kötethez tartozó metaadatokat tároló LUN fájlt az alábbi parancsban megadott könyvtárban.
 
<pre>
 
<pre>
 
iscsitadm modify admin -d <directory>
 
iscsitadm modify admin -d <directory>
26. sor: 27. sor:
 
</pre>
 
</pre>
 
Az első logikai egység (LU) után a többi is ugyanígy létrehozgató megadva az egység sorszámát: <tt>--lun <number></tt>. <br />
 
Az első logikai egység (LU) után a többi is ugyanígy létrehozgató megadva az egység sorszámát: <tt>--lun <number></tt>. <br />
Ha az egység létrejött, akkor a Solaris küld egy „Inventory Change” értesítést, és az egység offline-ról online-ra vált.
+
A logikai egység elkészültéig az egység az operációs rendszer számára offline állapotban van. Ha az egység létrejött, akkor a daemon küld egy Inventory Change üzenetet a Solaris initiatornak, mely az egységet offline-ról online állapotra állítja, és megkezdheti a SCSI kérések küldését a target felé.
  +
  +
=== Információ lekérése az elkészült targetről: ===
  +
  +
Az alábbi kimenetben a <tt>vol0</tt> targethez kapcsolódó adatokat láthatjuk:
  +
* Target neve
  +
* Target Portal Group Tags (TPGT): külön specifikálni lehet, hogy a target mely intefészekről legyen elérhető. Például külön lehet választani a publikus és privát hálózat által elérhető targeteket.
  +
* Logikai egység száma (LUN): több logikai egysége is lehet a targetnek. Jelen esetben csak egy van, a 0-s számú.
  +
* Global Unique ID (GUID): A Target Portalhoz (IP cím+port, amiről a target elérhető) tartozó MAC címből és timestampből előállított egyedi azonosítója a targetnek. A GUID az initiator oldalon a target azonosítója.
  +
* Gyártó neve (VID).
  +
* Termék neve (PID).
  +
* Type: a Solaris iSCSI Target implementáció szerint 4 típus állítható be: disk, tape, osd, raw ([http://www.cuddletech.com/blog/pivot/entry.php?id=779 bővebben]).
  +
* Méret
  +
* Állapot
   
Információ lekérése az elkészült targetről:
 
 
<pre>
 
<pre>
 
# iscsitadm list target -v vol0
 
# iscsitadm list target -v vol0
41. sor: 41. sor:
 
PID: SOLARIS
 
PID: SOLARIS
 
Type: raw
 
Type: raw
Size: 0x1400000 blocks
+
Size: 2.0G
  +
Status: online
   
 
</pre>
 
</pre>
  +
  +
=== ZFS-kötet megosztása iSCSI targetként ===
  +
  +
ZFS-kötet létrehozása:
  +
<pre>
  +
zfs create -s -V 50gb testpool/iscsivol
  +
</pre>
  +
A létező ZFS-kötet iSCSI targetként való megosztásához mindössze ennyit kell tenni:
  +
<pre>
  +
zfs set shareiscsi=on testpool/iscsivol
  +
</pre>
  +
  +
== TFTP ==
  +
* Trivial File Transfer Protocol
  +
* egyszerű megoldás
  +
* UDP-t használ, 69-es porton
  +
** kliens küld egy RRQ vagy WRQ parancsot (read/write request) a szervernek a 69-es porton, ez tartalmazza a fájlnevet és az átviteli módot
  +
** a szerver ACK-kal válaszol a WRQ-ra vagy ha RRQ érkezett, akkor küld egy adatcsomagot (DATA) a kliensnek
  +
** a kliens minden teljes méretű (512 byte) adatcsomagra ACK-kal válaszol
  +
** az utolsó adatcsomagnak a maximális csomagméretnél kisebbnek kell lennie; ez jelzi, hogy ez a csomag volt az utolsó. Ha az átvivendő fájl mérete éppen a blokkméret egész számú többszöröse, akkor egy 0 byte-os csomagot küld a szerver.
  +
** Ha az ACK nem érkezik meg, akkor az adatot újraküldik.
  +
  +
== PXE: Preboot Execution Environment ==
  +
  +
A PXE olyan környezet, amelynek segítségével a kliensek operációs rendszerek telepítő image-eit, vagy akár telepített operációs rendszert tudnak bootolni hálózaton keresztül, adattárakról. A kliens számítógépekben lévő hálózati kártyákban be lehet kapcsolni a pxe boot optiont, mely annyit tesz, hogy még mielőtt a '''kliens számítógép''' operációs rendszerének bootolása jönne, a hálózati kártya biosa küld egy DHCP kérést a hálózatra. A '''DHCP szerver''' úgy van beállítva, hogy a válaszban az IP beállításokon kívül azt is megmondja, hogy a hálózatban hol van egy '''TFTP szerver''', és hogy arról a TFTP szerverről melyik Network Bootstrap Programot (NBP)-t töltse le a hálózati kártya a boot ramjába. Ezután a hálózati kártya az NBP-t futtatva kiolvassa a TFTP szerver pxelinux.cfg könyvtárából a konfigurációs fájlokat. Ebben a konfigurációs könyvtárban található olyan fájl, amely tartalmazza a kliens számítógépén felsorolandó operációs rendszerek listáját, és az azok kernelét betöltő Initial Ramdisk image-ek (initrd) elérhetőségeit. Ha a kliens számítógépe egy olyan initrd-t indít el, amely egy linux telepítő kernelét indítja el, akkor lehetővé válik, hogy a kliensre hálózaton keresztül operációs rendszert telepítsünk. De a telepítés megkezdése előtt kiválasztható az is, hogy ne a kliensre, hanem iSCSI targetre telepítsünk. Ekkor ha legközelebb a kliens egy módosított, iSCSI targetre telepített Linux initrd-jét tölti le és indítja el, lehetővé válik, hogy a kliens iSCSI targetre telepített operációs rendszert futtasson.
  +
  +
Tehát szükség van egy bootszerverre, ami DHCP és TFTP segítségével a kezdeti bootstrap-program és további fájlok letöltését teszi lehetővé. Szükség van egy iSCSI targetre, melyre fel van telepítve az operációs rendszer, illetve a kliensre, ami el akarja indítani az operációs rendszert.
  +
  +
=== A PXE-s bootfolyamat ===
  +
  +
'''A proxy DHCP''' megkapja a kliens DHCPDISCOVER kérését, és erre egy broadcast DHCPOFFER-rel válaszol PXE-specifikus adatokkal kiegészítve (68-as UDP portra) a hálózaton belülre. Broadcast, mert nem tudja a kliens IP-címét.
  +
  +
DHCPOFFER tartalma:
  +
* PXE Discovery Control mező
  +
* PXE Boot Server Type-ok IP címei
  +
* PXE Bootmenü
  +
* PXE Bootprompt (felhasználót értesíti, hogy nyomjon F8-at a bootmenühöz)
  +
* timeout
  +
  +
'''A Boot Server''' megkapja a kiválasztott PXE Boot Server Type-ot és a PXE Boot Server Layert a klienstől DHCPREQUEST formájában (a szerver daemonja több boot server type-ot is futtathat). A Boot Server Layer a kliens által kért boot image száma. A "Layer 0" jelenti az első boot fájlját a Boot Server Type-nak.
  +
  +
A Boot server DHCPACK csomaggal válaszol, amely tartalmazza:
  +
* a NBP (Network Bootstrap Program) elérési útját (TFTP)
  +
* PXE Boot Server Type-ot, PXE Boot Layert
  +
* multicast TFTP beállításait, ha ezt a megoldást alkalmazzák
  +
  +
'''Network bootstrap program:'''
  +
  +
A kliens (ha kell, ellenőrzést követően)a DHCPACK-ban megkapott elérési útról letölti a Network Bootstrap Programot a RAM-jába, és végrehajtja azt.
  +
  +
=== PXE konfigurálása ===
  +
'''DHCP szerver beállítása'''
  +
  +
Telepítés:
  +
<pre>
  +
sudo aptitude install dhcp3-server
  +
</pre>
  +
A DHCP szerver fogja kiosztani az IP-címet a klienseknek, és a tftp szerver elérhetőségét. Ezért módosítani kell a DHCP szerver konfigurációját:
  +
<pre>
  +
sudo vim /etc/dhcp.conf
  +
</pre>
  +
Adjuk meg a TFTP szerver címét (ugyanaz a gép is lehet) és a <tt>pxelinux.0</tt> fájl elérhetőségét, amit el akarunk küldeni a klienseknek
  +
<pre>
  +
next-server 192.168.0.254
  +
filename "/tftpboot/pxelinux.0";
  +
</pre>
  +
Ezután újra kell indítani a DHCP szervert:
  +
<pre>
  +
sudo /etc/init.d/dhcpd restart
  +
</pre>
  +
'''TFTP boot image elhelyezése a TFTP szerveren'''<br />
  +
  +
A hálózati telepítő kernelt és az azt indító initrd.gz-t elhelyezzük a TFTP szerveren:
  +
<pre>
  +
sudo mkdir /tftpboot/ubuntu9.10
  +
sudo mount –o loop CD.iso /mnt
  +
sudo cp /mnt/install/netboot/ubuntu-installer/i386/linux /tftpboot/ubuntu9.10/
  +
sudo cp /mnt/install/netboot/ubuntu-installer/i386/initrd.gz /tftpboot/ubuntu9.10/
  +
</pre>
  +
'''pxelinux.cfg/default konfigurálása'''
  +
<pre>
  +
sudo vim /tftpboot/pxelinux.cfg/default
  +
</pre>
  +
Ebbe a fájlba írhatjuk bele, hogy a user amikor a boot.msg fájl alapján látott boot menüből kiválasztja a telepítendő operációs rendszert, hol találja meg a hozzá tartozó initrd-t, amit a kliensnek le kell töltenie az initial ram diskjére. A <tt>label</tt> kulcsszóval lehet megadni az operációs rendszer azonosítóját, ami jelen esetben ubuntu9.10. A <tt>kernel</tt> kulcsszóval lehet megadni az operációs rendszer kernelének elérhetőségét. Az <tt>append initrd=</tt>kulcsszóval lehet megadni az operációs rendszer kernelét elindító initrd elérhetőségét.
  +
<pre>
  +
default 0
  +
prompt 1
  +
display msgs/boot.msg
  +
# begin list of available boot options
  +
label ubuntu9.10
  +
kernel ubuntu9.10/linux
  +
append initrd=ubuntu9.10/initrd.gz
  +
</pre>
  +
'''pxelinux.cfg/msgs/boot.msg konfigurálás'''<br />
  +
Ebben a fájlban lehet megadni, hogy a kliens számítógépen milyen boot menü jelenjen meg. Itt kell felsorolni a TFTP szerveren elérhető operációs rendszereket. A pxelinux.cfg/default fájlban is megadott <tt>label</tt> után, ami jelen esetben az ubuntu9.10 megadhatjuk, hogy a boot menüben milyen szöveg jelenjen meg abban a sorban, amit kiválasztva a kliens számítógépen jelen esetben az ubuntu9.10 azonosítójú operációs rendszer initrd-jét tölthetjük le.
  +
<pre>
  +
ubuntu9.10 - Select this to install Ubuntu 9.10 over network
  +
</pre>
  +
'''TFTP server engedélyezése'''<br />
  +
A TFTP server szolgáltatás bekapcsolását az inetd.conf fájlban tehetjük meg. Az inetd egy super-server program, amely különböző hálózati szolgáltatások által használt portokon figyel (pl.: FTP, POP3, telnet). Ha egy TCP vagy UDP csomag érkezik az adott porthoz, akkor az inetd megnyitja a <tt>/etc/services</tt> fájlt, ami az adott porthoz rendelt szolgáltatás nevét tartalmazza (port->szolgáltatás név feloldás), majd megnyitja a <tt>/etc/inetd.conf</tt> fájlt ami tartalmazza a szolgáltatáshoz tartozó szerver program indítási paramétereit (szolgáltatás név->szerver program feloldás), és elindítja a szolgáltatást.
  +
A TFTP szerver engedélyezéséhez a következő sornak kell lennie a <tt>/etc/inetd.conf</tt> fájlban
  +
<pre>
  +
tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot
  +
</pre>
  +
Ez arra utasítja az inetd-t, hogy indítsa el a <tt>/usr/sbin/tcpd</tt> programot az <tt>in.tftpd /tftpboot</tt> argumentumokkal.
  +
  +
'''Telepítés'''<br />
  +
Ezután az egyik klienst elindítjuk, megjelenik a boot menü, kiválasztjuk, hogy telepíteni akarjuk a Ubuntu9.10-et. Az Ubuntu9.10 telepítője felajánlja, hogy iSCSI targetre akarjuk-e telepíteni, válasszuk ki azt. A rendszer így feltelepül az iSCSI targetre.
  +
Azonban mi nem azt akarjuk elérni, hogy hálózaton keresztül fel tudjuk telepíteni a operációs rendszert a kliensekre, hanem azt, hogy a diskless kliensek a tftp szerveren keresztül az iSCSI targetre feltelepített rendszert indítsák el.<br />
  +
Ezért a iSCSI targetre települt kliens initrd-jét (initrd-ng3.img) és kernelét kell elindítani. Ehhez módosítani kell a pxelinux.cfg/default fájlt az alábbi kódrészlethez hasonlóan. Így tartalmazni fogja a iSCSI targeten lévő kernel és initrd elérhetőségeit:
  +
<pre>
  +
DEFAULT vesamenu.c32
  +
PROMPT 0
  +
MENU TITLE PXE Network boot
  +
TIMEOUT 30
  +
  +
LABEL 1
  +
MENU LABEL ^Ubuntu Linux 9.10
  +
MENU DEFAULT
  +
KERNEL 10.10.0.23::/vmlinuz-2.6.31-14-server
  +
APPEND ip=bootp root=/dev/sda1 iscsi_initiator=iqn.ubuntu.istgt iscsi_target_name=iqn.2007-09.jp.ne.peach.istgt:disk0 iscsi_target_ip=10.10.0.23 iscsi_target_group=1 iscsi_target_port=3260 initrd=initrd-ng3.img
  +
</pre>
  +
  +
E szerint a kliens DHCP-n keresztül lekéri az IP-jét, a 10.10.0.23-mon éri el az iSCSI targetet, és betölti az initrd-ng3.img fájlt az initial ram diskjébe.
  +
  +
== Felhasznált irodalom ==
  +
  +
[http://docs.sun.com/app/docs/doc/816-5166/iscsitadm-1m?a=view iscsitadm man page]<br />
  +
[https://help.ubuntu.com/9.10/installation-guide/hppa/install-tftp.html Ubuntu documentation]<br />
  +
[http://ubuntuforums.org/index.php Ubuntu forums]

A lap jelenlegi, 2009. december 17., 00:56-kori változata

Ebben a szócikkben egy olyan környezetet kívánok bemutatni, amely kliens számítógépekből, egy boot szerverből (TFTP és DHCP szerver) és egy iSCSI adattárból áll. Ez a környezet a Preboot Execution Environment, mely segítségével a kliens számítógépek operációs rendszerek telepítő image-eit, vagy akár telepített operációs rendszert tudnak bootolni hálózaton keresztül az iSCSI adattárról. A szócikkben először a fent említett technológiákat kívánom bemutatni, majd a rendszer felkonfigurálásának lépéseit és az azokhoz kapcsolódó információkat írom le.

Tartalomjegyzék

[szerkesztés] 1 iSCSI: Internet Small Computer System Interface

Az iSCSI egy IP-alapú hálózati kommunikációs szabvány adattárak (storage-ok) összeköttetésére. Lehetővé teszi, hogy különböző számítógépek hálózaton keresztül elérhessék és kezeljék a fizikailag más helyen lévő központosított adattárakat. Adattár alatt fizikai merevlemezek csoportját értem, például van valakinek a szerverszobájában egy Sun J4400-as storage tömbje, ami 24 db SATA II-es merevlemezt tartalmaz. Ez a SCSI target.

A kliens (initiator) SCSI parancsokat (CDB) küld IP-hálózaton keresztül a SCSI storage-nak (targetnek). A CDB (Command Descriptor Block), a kliens által küldött parancs, mely tartalmazza a Logical Unit Number-t (LUN), a logikai egység számát. Ez jelöli a külön címezhető logikai SCSI eszközt, amely a targetnek (fizikai SCSI eszköznek) a része.

  • Létezik szoftveres initiator, amely az őt futtató kernel és hálózati kártya támogatásával SCSI eszközt emulál a számítógép számára
  • Létezik hardveres initiator, amely egy külön hardver a számítógépben, mely az azon futó firmware segítségével tehermentesíti a szervert a TCP-kommunikációból származó overhead alól.

Előnyök:

  • adattár-centralizáció: a háttértárak központosítva egy helyen vannak, nem pedig szétszórva a munkaállomásokon.
  • a hálózaton keresztül könnyen kioszthatók a merevlemezek, új hardverkötet kiosztása hardverváltoztatás és kábelezés nélkül
  • Létezik olyan megoldás, hogy az egész adattárból van még egy, egy félreeső helyen, amely melegtartalékként üzemelhet, ha az egyik adattár felé valamilyen katasztrófa miatt nem sikerülne kapcsolatot létesíteni.
  • Hálózati bootolás (pl.: diskless kliensek számára, lásd alább)
  • olcsó megoldás: nem kell dedikált optikai szálas (Fibre Channel) hálózat, standard hálózaton működik
  • távoli elérhetőség…

[szerkesztés] 1.1 iSCSI target létrehozása Solarison

A szerveren futó targetmenedzselő program (daemon) számára meg kell adni egy könyvtárat, melyben a daemon a targethez kapcsolódó információkat tárolja. Ha létrehozunk egy logikai kötetet, akkor a daemon létrehozza a logikai kötethez tartozó metaadatokat tároló LUN fájlt az alábbi parancsban megadott könyvtárban.

iscsitadm modify admin -d <directory>

Target létrehozása:

iscsitadm create target ~--size 2g vol10

Az első logikai egység (LU) után a többi is ugyanígy létrehozgató megadva az egység sorszámát: --lun <number>.
A logikai egység elkészültéig az egység az operációs rendszer számára offline állapotban van. Ha az egység létrejött, akkor a daemon küld egy Inventory Change üzenetet a Solaris initiatornak, mely az egységet offline-ról online állapotra állítja, és megkezdheti a SCSI kérések küldését a target felé.

[szerkesztés] 1.2 Információ lekérése az elkészült targetről:

Az alábbi kimenetben a vol0 targethez kapcsolódó adatokat láthatjuk:

  • Target neve
  • Target Portal Group Tags (TPGT): külön specifikálni lehet, hogy a target mely intefészekről legyen elérhető. Például külön lehet választani a publikus és privát hálózat által elérhető targeteket.
  • Logikai egység száma (LUN): több logikai egysége is lehet a targetnek. Jelen esetben csak egy van, a 0-s számú.
  • Global Unique ID (GUID): A Target Portalhoz (IP cím+port, amiről a target elérhető) tartozó MAC címből és timestampből előállított egyedi azonosítója a targetnek. A GUID az initiator oldalon a target azonosítója.
  • Gyártó neve (VID).
  • Termék neve (PID).
  • Type: a Solaris iSCSI Target implementáció szerint 4 típus állítható be: disk, tape, osd, raw (bővebben).
  • Méret
  • Állapot
# iscsitadm list target -v vol0
Target: vol0
         iSCSI Name: iqn.1986-03.com.sun:01:00093d12170c.434c5250.vol0
         ACL list:
         TPGT list:
         LUN information:
                 LUN: 0
                         GUID: 010000093d12170c00002a00434c5251
                         VID: SUN
                         PID: SOLARIS
                         Type: raw
                         Size: 2.0G
                         Status: online

[szerkesztés] 1.3 ZFS-kötet megosztása iSCSI targetként

ZFS-kötet létrehozása:

zfs create -s -V 50gb testpool/iscsivol

A létező ZFS-kötet iSCSI targetként való megosztásához mindössze ennyit kell tenni:

zfs set shareiscsi=on testpool/iscsivol

[szerkesztés] 2 TFTP

  • Trivial File Transfer Protocol
  • egyszerű megoldás
  • UDP-t használ, 69-es porton
    • kliens küld egy RRQ vagy WRQ parancsot (read/write request) a szervernek a 69-es porton, ez tartalmazza a fájlnevet és az átviteli módot
    • a szerver ACK-kal válaszol a WRQ-ra vagy ha RRQ érkezett, akkor küld egy adatcsomagot (DATA) a kliensnek
    • a kliens minden teljes méretű (512 byte) adatcsomagra ACK-kal válaszol
    • az utolsó adatcsomagnak a maximális csomagméretnél kisebbnek kell lennie; ez jelzi, hogy ez a csomag volt az utolsó. Ha az átvivendő fájl mérete éppen a blokkméret egész számú többszöröse, akkor egy 0 byte-os csomagot küld a szerver.
    • Ha az ACK nem érkezik meg, akkor az adatot újraküldik.

[szerkesztés] 3 PXE: Preboot Execution Environment

A PXE olyan környezet, amelynek segítségével a kliensek operációs rendszerek telepítő image-eit, vagy akár telepített operációs rendszert tudnak bootolni hálózaton keresztül, adattárakról. A kliens számítógépekben lévő hálózati kártyákban be lehet kapcsolni a pxe boot optiont, mely annyit tesz, hogy még mielőtt a kliens számítógép operációs rendszerének bootolása jönne, a hálózati kártya biosa küld egy DHCP kérést a hálózatra. A DHCP szerver úgy van beállítva, hogy a válaszban az IP beállításokon kívül azt is megmondja, hogy a hálózatban hol van egy TFTP szerver, és hogy arról a TFTP szerverről melyik Network Bootstrap Programot (NBP)-t töltse le a hálózati kártya a boot ramjába. Ezután a hálózati kártya az NBP-t futtatva kiolvassa a TFTP szerver pxelinux.cfg könyvtárából a konfigurációs fájlokat. Ebben a konfigurációs könyvtárban található olyan fájl, amely tartalmazza a kliens számítógépén felsorolandó operációs rendszerek listáját, és az azok kernelét betöltő Initial Ramdisk image-ek (initrd) elérhetőségeit. Ha a kliens számítógépe egy olyan initrd-t indít el, amely egy linux telepítő kernelét indítja el, akkor lehetővé válik, hogy a kliensre hálózaton keresztül operációs rendszert telepítsünk. De a telepítés megkezdése előtt kiválasztható az is, hogy ne a kliensre, hanem iSCSI targetre telepítsünk. Ekkor ha legközelebb a kliens egy módosított, iSCSI targetre telepített Linux initrd-jét tölti le és indítja el, lehetővé válik, hogy a kliens iSCSI targetre telepített operációs rendszert futtasson.

Tehát szükség van egy bootszerverre, ami DHCP és TFTP segítségével a kezdeti bootstrap-program és további fájlok letöltését teszi lehetővé. Szükség van egy iSCSI targetre, melyre fel van telepítve az operációs rendszer, illetve a kliensre, ami el akarja indítani az operációs rendszert.

[szerkesztés] 3.1 A PXE-s bootfolyamat

A proxy DHCP megkapja a kliens DHCPDISCOVER kérését, és erre egy broadcast DHCPOFFER-rel válaszol PXE-specifikus adatokkal kiegészítve (68-as UDP portra) a hálózaton belülre. Broadcast, mert nem tudja a kliens IP-címét.

DHCPOFFER tartalma:

  • PXE Discovery Control mező
  • PXE Boot Server Type-ok IP címei
  • PXE Bootmenü
  • PXE Bootprompt (felhasználót értesíti, hogy nyomjon F8-at a bootmenühöz)
  • timeout

A Boot Server megkapja a kiválasztott PXE Boot Server Type-ot és a PXE Boot Server Layert a klienstől DHCPREQUEST formájában (a szerver daemonja több boot server type-ot is futtathat). A Boot Server Layer a kliens által kért boot image száma. A "Layer 0" jelenti az első boot fájlját a Boot Server Type-nak.

A Boot server DHCPACK csomaggal válaszol, amely tartalmazza:

  • a NBP (Network Bootstrap Program) elérési útját (TFTP)
  • PXE Boot Server Type-ot, PXE Boot Layert
  • multicast TFTP beállításait, ha ezt a megoldást alkalmazzák

Network bootstrap program:

A kliens (ha kell, ellenőrzést követően)a DHCPACK-ban megkapott elérési útról letölti a Network Bootstrap Programot a RAM-jába, és végrehajtja azt.

[szerkesztés] 3.2 PXE konfigurálása

DHCP szerver beállítása

Telepítés:

sudo aptitude install dhcp3-server

A DHCP szerver fogja kiosztani az IP-címet a klienseknek, és a tftp szerver elérhetőségét. Ezért módosítani kell a DHCP szerver konfigurációját:

sudo vim /etc/dhcp.conf

Adjuk meg a TFTP szerver címét (ugyanaz a gép is lehet) és a pxelinux.0 fájl elérhetőségét, amit el akarunk küldeni a klienseknek

    next-server 192.168.0.254
    filename "/tftpboot/pxelinux.0";

Ezután újra kell indítani a DHCP szervert:

sudo /etc/init.d/dhcpd restart

TFTP boot image elhelyezése a TFTP szerveren

A hálózati telepítő kernelt és az azt indító initrd.gz-t elhelyezzük a TFTP szerveren:

sudo mkdir /tftpboot/ubuntu9.10
sudo mount –o loop CD.iso /mnt
sudo cp /mnt/install/netboot/ubuntu-installer/i386/linux /tftpboot/ubuntu9.10/
sudo cp /mnt/install/netboot/ubuntu-installer/i386/initrd.gz /tftpboot/ubuntu9.10/

pxelinux.cfg/default konfigurálása

sudo vim /tftpboot/pxelinux.cfg/default

Ebbe a fájlba írhatjuk bele, hogy a user amikor a boot.msg fájl alapján látott boot menüből kiválasztja a telepítendő operációs rendszert, hol találja meg a hozzá tartozó initrd-t, amit a kliensnek le kell töltenie az initial ram diskjére. A label kulcsszóval lehet megadni az operációs rendszer azonosítóját, ami jelen esetben ubuntu9.10. A kernel kulcsszóval lehet megadni az operációs rendszer kernelének elérhetőségét. Az append initrd=kulcsszóval lehet megadni az operációs rendszer kernelét elindító initrd elérhetőségét.

    default 0
    prompt 1
    display msgs/boot.msg
    # begin list of available boot options
    label ubuntu9.10
    kernel ubuntu9.10/linux
    append initrd=ubuntu9.10/initrd.gz

pxelinux.cfg/msgs/boot.msg konfigurálás
Ebben a fájlban lehet megadni, hogy a kliens számítógépen milyen boot menü jelenjen meg. Itt kell felsorolni a TFTP szerveren elérhető operációs rendszereket. A pxelinux.cfg/default fájlban is megadott label után, ami jelen esetben az ubuntu9.10 megadhatjuk, hogy a boot menüben milyen szöveg jelenjen meg abban a sorban, amit kiválasztva a kliens számítógépen jelen esetben az ubuntu9.10 azonosítójú operációs rendszer initrd-jét tölthetjük le.

ubuntu9.10 - Select this to install Ubuntu 9.10 over network

TFTP server engedélyezése
A TFTP server szolgáltatás bekapcsolását az inetd.conf fájlban tehetjük meg. Az inetd egy super-server program, amely különböző hálózati szolgáltatások által használt portokon figyel (pl.: FTP, POP3, telnet). Ha egy TCP vagy UDP csomag érkezik az adott porthoz, akkor az inetd megnyitja a /etc/services fájlt, ami az adott porthoz rendelt szolgáltatás nevét tartalmazza (port->szolgáltatás név feloldás), majd megnyitja a /etc/inetd.conf fájlt ami tartalmazza a szolgáltatáshoz tartozó szerver program indítási paramétereit (szolgáltatás név->szerver program feloldás), és elindítja a szolgáltatást. A TFTP szerver engedélyezéséhez a következő sornak kell lennie a /etc/inetd.conf fájlban

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

Ez arra utasítja az inetd-t, hogy indítsa el a /usr/sbin/tcpd programot az in.tftpd /tftpboot argumentumokkal.

Telepítés
Ezután az egyik klienst elindítjuk, megjelenik a boot menü, kiválasztjuk, hogy telepíteni akarjuk a Ubuntu9.10-et. Az Ubuntu9.10 telepítője felajánlja, hogy iSCSI targetre akarjuk-e telepíteni, válasszuk ki azt. A rendszer így feltelepül az iSCSI targetre. Azonban mi nem azt akarjuk elérni, hogy hálózaton keresztül fel tudjuk telepíteni a operációs rendszert a kliensekre, hanem azt, hogy a diskless kliensek a tftp szerveren keresztül az iSCSI targetre feltelepített rendszert indítsák el.
Ezért a iSCSI targetre települt kliens initrd-jét (initrd-ng3.img) és kernelét kell elindítani. Ehhez módosítani kell a pxelinux.cfg/default fájlt az alábbi kódrészlethez hasonlóan. Így tartalmazni fogja a iSCSI targeten lévő kernel és initrd elérhetőségeit:

DEFAULT vesamenu.c32
PROMPT 0
MENU TITLE PXE Network boot
TIMEOUT 30

LABEL 1
  MENU LABEL ^Ubuntu Linux 9.10
  MENU DEFAULT
  KERNEL 10.10.0.23::/vmlinuz-2.6.31-14-server
  APPEND ip=bootp root=/dev/sda1 iscsi_initiator=iqn.ubuntu.istgt iscsi_target_name=iqn.2007-09.jp.ne.peach.istgt:disk0 iscsi_target_ip=10.10.0.23 iscsi_target_group=1 iscsi_target_port=3260 initrd=initrd-ng3.img

E szerint a kliens DHCP-n keresztül lekéri az IP-jét, a 10.10.0.23-mon éri el az iSCSI targetet, és betölti az initrd-ng3.img fájlt az initial ram diskjébe.

[szerkesztés] 4 Felhasznált irodalom

iscsitadm man page
Ubuntu documentation
Ubuntu forums

Személyes eszközök