RIS szerver linuxon
Ezt a rövid leírást azon célból készítettem, mert nem nagyon találtam a témához anyagot, angolul se sokat, magyarul meg abszolút nem. A következő lépésekben leírom, hogyan lehet RIS-t (Remote Installation System) beállítani egy linux kiszolgálón Windows (jelen esetben XP) telepítéséhez. (az alapértelmezett fájlnevek módosítása azt a célt szolgálja, hogy egy szerver nem csak egy rendszer RIS szervere lehet, hanem a jelenlegi konfiguráció pici módosításával akárhány)
Amire szükségünk van első lépésben: egy telepített linux, hálózat, és egy PXE bootolásra képes kliens. Gyakorlatilag bármilyen disztribúció megfelel, én OpenSuSE 10.3-on telepítettem.
Készítsük elő a telepítőt:
Az egyszerűség kedvéért most a tűzfalat kapcsoljuk ki, ha van:
# rcSuSEfirewall2 stop Shutting down the Firewall done
Hozzuk létre a gyökérkönyvtárban egy tftpboot könyvtárat, majd másoljuk egy winxp könyvtárba ide az XP telepítő cdről az i386 könyvtárat. Ezután állítsuk be rá rekurzívan a 777 jogot, majd menjünk be a könyvtárba:
chmod -R 777 /tftpboot
cd /tftpboot
A cabextract alapból nem része a rendszernek. Amennyiben nincs telepítve, egyszerűen felrakhatjuk:
zypper install cabextract
Csomagoljuk ki a tömörített pxe betöltőt a cabextract segítségével:
cabextract i386/STARTROM.N1_
A kicsomagolt fájlban módosítsuk az NTLDR fájlnevet XPLDR-re:
sed -i -e 's/NTLDR/XPLDR/gi' startrom.n12
Nevezzük át a fájlt winxp.0 névre:
mv startrom.n12 winxp.0
Tömörítsük ki a telepítés-betöltőt:
cabextract i386/SETUPLDR.EX_
A kitömörített telepítésbetöltőben módosítsuk az információs fájl nevét winxp.sif-re:
sed -i -e 's/winnt.sif/winxp.sif/gi' setupldr.exe
Szintén a telepítésbetöltőben módosítsuk az ntdetect.com nevét ntdetect.wxp-re:
sed -i -e 's/ntdetect.com/ntdetect.wxp/gi' setupldr.exe
Nevezzük át a fájlt XPLDR névre:
mv setupldr.exe XPLDR
Másoljuk át az ntdetect.com-ot az i386 könyvtárból a tftp gyökérbe ntdetect.wxp néven:
cp i386/NTDETECT.COM ntdetect.wxp
Hozzuk létre a winxp.sif fájlt, és írjuk bele a tartalmat:
# cat >> winxp.sif << EOF [data] floppyless = "1" msdosinitiated = "1" OriSrc = "\xenaxpinstallwinxpi386" OriTyp = "4" LocalSourceOnCD = 1 DisableAdminAccountOnDomainJoin = 1 [SetupData] OsLoadOptions = "/fastdetect" SetupSourceDevice = "DeviceLanmanRedirectorxenaxpinstallwinxp" [RemoteInstall] Repartition = No UseWholeDisk = No [UserData] ComputerName = * EOF
A xena az a név, amellyel a samba szerver elérhető (lásd később), az xpinstall pedig a tftpboot megosztása (szintén később), szintén módosítható.
Már majdnem készen vagyunk, egy dolog hiányzik még: a kliens gépben lévő hálózati kártya drivere. Én a gépbe egy klasszikus Realtek 8139C kártyát tettem, ennek a gyártó honlapján lévő zipfájlba a WINXP mappában ott van az INF és SYS fájl, több nem is kell. (feltöltöttem ide is azért: http://www.2shared.com/file/4969216/f91cb0cc/relatek-002.html) A SYS fájlt másoljuk be az i386 mappába, az INF fájlt érdemes külön könytárban gyűjteni, pl. i386/inf (több hálózati kártya driverét is berakhatjuk természetesen, nem biztos hogy homogén a kliens környezet). Tegyük be ide az INF fájlt.
Ezzel a résszel megvagyunk.
Következik a DHCP szerver beállítása.
Először is telepítsük fel, ha még nem lenne fent:
zypper install dhcp-server
Szerkesszük a /etc/dhcpd.conf fájlt. Minden jelenleg benne lévő subnet bejegyzést kommenteljünk ki, majd írjuk be az alábbiakat:
subnet 192.168.33.0 netmask 255.255.255.0 {
range 192.168.33.10 192.168.33.30;
option domain-name-servers 192.168.33.4;
option domain-name "hnsz";
option routers 192.168.33.4;
option broadcast-address 192.168.33.255;
default-lease-time 43200;
max-lease-time 86400;
filename "winxp.0";
server-name "xena";
next-server xena;
}
A subnetet, dns szervert, gatewayt persze mindenki igazítsa a saját hálózatához. A server-name és next-server résznél a xena nevet a ris szerver ip címére kell cserélni abban az esetben, ha nincs dns, vagy ezt nem oldja fel. Ha van belső dns, akkor megadható a ris szerver dns neve is. (Nálam a bind a xena nevet is a 192.168.33.4 ip címre oldja fel)
Mentsük el a fájlt, majd indítsuk újra a dhcp szervert:
# rcdhcpd restart Shutting down DHCP server done Starting DHCP server [chroot] done
Ezzel beállítottuk a dhcp-t is.
Következik a samba beállítása.
Telepítsük ezt is, ha nem lenne fent:
zypper install samba
A jelenlegi konfigot mentsük el valami más néven, majd az smb.conf-ba írjuk bele a következőket:
# cd /etc/samba
# mv smb.conf smb.conf.orig
# cat >> smb.conf << EOF
[global]
workgroup = HNSZ
netbios name = Xena
server string = Xena
security = share
interfaces = 192.168.33.4/255.255.255.0
bind interfaces only = yes
case sensitive = no
[xpinstall]
browsable = true
path = /tftpboot
read only = no
guest ok = yes
null passwords = true
EOF
Ezzel beállítottuk a munkacsoportot, a gép netbios nevét, mellyel elérhető, illetve csináltunk egy xpinstall megosztás, ami a /tftpboot könyvtárat osztja meg, ahol a telepítő található. (az itt megadott nevet és elérést kell a winxp.sif fájlban megadni, lásd fentebb)
Indítsuk újra a netbios és a samba szervert:
# rcnmb restart && rcsmb restart Shutting down Samba NMB daemon done Starting Samba NMB daemon done Shutting down Samba SMB daemon done Starting Samba SMB daemon done
Ezzel kész a samba beállítása is.
Most jön a tftp szerver beállítása.
Ez az a pont, amivel a legtöbbet küzdöttem, mire rájöttem a titok nyitjára. A probléma alapvetően az (logfájlból egyébként látszik), hogy a windows a saját kis backslash-es elérésével kéri le a fájlokat a tftp-ről (pl. winxpi386txtsetup.sif). Erre ugyebár a szerver válasza a not found. Probléma szintén, hogy kis- és nagybetűs fájlnevek közt a windows nem tesz különbséget (NTFS tárolja, de a rendszer nem tesz különbséget), de a linux igen. Ennél fogva ha a kérés a tftp-nek i386txtsetup.sif akkor nem I386txtsetup.sif és nem I386TXTSETUP.SIF. Ebből érezheti mindenki, hogy egy kis trükközésre van szükség a tftp szervernél. A trükk egy patch alkalmazása.
Tftp szerverünk a tftp-hpa 0.48-as verziója lesz (ehhez találtam patchet; letölthető innen: http://www.2shared.com/file/4969233/bb4026c1/tftp-hpa_048origtar.html). Töltsük le, és mentsük a /usr/src könyvtárba, majd tömörítsük ki:
# cd /usr/src # tar xzvf tftp-hpa_0.48.orig.tar.gz
Tölsük le hozzá a patchet innen: http://www.2shared.com/file/4969264/58534727/tftp-hpa-filecase.html. Mentsük szintén a /usr/src könyvtárba, majd alkalmazzuk a forrásra:
patch -p1 < tftp-hpa-filecase.diff
Ezután semmi nem tart vissza minket, hogy lefordítsuk kicsiny tftp szerverünket. A fordításhoz szükség van a header fájlokra, a fordítóra, és pár egyéb dologra, tegyük fel ezeket, ha nem lennének fent:
zypper install gcc gcc-c++ make automake autoconf kernel-headers
És akkor a fordítás:
# cd tftp-hpa-0.48 # ./configure && make && make install
Nálam hiba és warning nélkül pöccre lefordult.
A tftp szervert most xinetd-n állítjuk be. Ezt is telepítsük, ha nem lenne fent:
zypper install xinetd
Menjünk a /etc/xinetd.d könyvtárba, és hozzunk létre egy tftp fájlt a következő tartalommal:
# cd /etc/xinetd.d
# cat >> tftp << EOF
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -v
disable = no
}
EOF
Az argumentumokba a -s kapcsolóval adjuk meg a tftp root könyvtárát. Amennyiben máshova tettük a telepítőt, ezt is a megfelelőre kell módosítanunk. A -v kapcsoló verbose mode… Ami ahogy én láttam nem verbose, úgy fogalmaznék, hogy normális loggolás. Így írja (alapból a /var/log/messages fájlba), hogy ki milyen fájlt kért. Enélkül semmi nincs, csak az xinetd logjában hogy connect, meg majd a végén disconnect.
Akkor indítsuk újra az xinetd szolgáltatást is, hogy mostmár a tftp démonunk is fusson:
# rcxinetd restart Shutting down xinetd: done Starting INET services. (xinetd) done
Ezzel kész a tftp beállítása.
És az utolsó lépés: a hálózati kártya driverének kiszolgálása a kliensgépnek.
Ehhez szükséges az alábbi kis csomag letöltése: http://www.2shared.com/file/4969465/2bd90b03/ris-toolstar.html
A letöltött csomagot tömörítsük ki tetszőleges helyre, lépjünk be ebbe a könyvtárba, majd futtassuk le az inf parsert, amely összegyűjti egy inf fájlba a telepítő számára az összes elérhető drivert:
# ./infparser.py /tftpboot/winxp/i386/inf Compiled 7 drivers generated devlist.cache generated nics.txt
Amennyiben az inf fájlokat ide tettük. Értelemszerűen módosítandó az elérési út.
Ezután indítsuk el a kiszolgáló scriptet, amely kommunikál a telepítővel, és átadja az információt a hálózati driverekről:
./binlsrv.py
Ezzel is megvagyunk.
Kész. :) És az eremény:
Ahhoz, hogy valamilyen módon választani tudjunk az indítandó rendszerek közül, egy segédprogramra van szükség, ez most a pxelinux lesz, amely a syslinuxnak a része, letölthető innen: http://www.2shared.com/file/4973148/33481e03/pxelinux.html. Töltsük le, és másoljuk a /tftpboot könyvtárba.
Ezután módosítsuk a dhcp szerver beállításait, a
filename "winxp.0";
részt módosítsuk erre
filename "pxelinux.0";
Mentsük a fájlt, majd indítsuk újra a dhcp szervert.
Az újonnan hozzáadott rendszer most egy Windows 2000 lesz, de akár egy Windows 2003 Servert vagy egy Vistát is hasonlóan kell elvégezni. Ennek is hozzunk létre egy külön könyvtárat, pl. /tftpboot/win2k, és másoljuk ide a telepítő cdről az i386 mappát, majd ahogyan azt az XP telepítőnél, készítsük elő a fájlokat:
# cd /tftpboot # cabextract win2k/I386/startrom.n1_ # sed -i -e 's/NTLDR/2KLDR/gi' startrom.n12 # mv startrom.n12 win2k.0 # cabextract win2k/I386/setupldr.ex_ # sed -i -e 's/winnt.sif/win2k.sif/gi' setupldr.exe # sed -i -e 's/ntdetect.com/ntdetect.w2k/gi' setupldr.exe # mv setupldr.exe 2KLDR # cp win2k/I386/ntdetect.com pxelinux.0ntdetect.w2k # cat >> pxelinux.0win2k.sif << EOF [data] floppyless = "1" msdosinitiated = "1" OriSrc = "\xenaxpinstallwin2kI386" OriTyp = "4" LocalSourceOnCD = 1 DisableAdminAccountOnDomainJoin = 1 [SetupData] OsLoadOptions = "/fastdetect" SetupSourceDevice = "DeviceLanmanRedirectorxenaxpinstallwin2k" [RemoteInstall] Repartition = No UseWholeDisk = No [UserData] ComputerName = * EOF
(Az előző howtoban kicsit következetlen voltam, hogy a tftpboot-ot xpinstall néven osztottam meg. Szebb, módosítható más névre a megosztás az smb.conf-ban (pl. risinstall), de akkor minden sif fájlban is javítanunk kell!)
Megjegyzés: A windows 2000 pxe betöltője bugos. Az ntdetect.com (~ntdetect.w2k) és a winnt.sif (~win2k.sif) fájlnév elé hozzáfűzi a dhcp szervertől kapott pxe bootfájl nevét, ezért (jelen esetben) pxelinux.0ntdetect.w2k és pxelinux.0win2k.sif fájlokat fog kérni a tftp szervertől. Ezért van szükség a fájlnevek módosítására (más rendszerrel nincs ilyen bug).
A hálózati kártya drivereket és inf fájlokat ugyanúgy kell hozzáadni, majd futtatni az infparsert és a binlsrv-t.
Azonban mivel ugyanazok a driverek többnyire működnek mind windows 2000 mind windows xp alatt, az inf fájlokat lehet egy közös helyre rakni, pl. /tftpboot/inf, erre futtatni az infparsert, majd a binlsrv-t. Viszont ekkor a SYS fájlokat minden i386 könyvtárba be kell másolnunk.
Kész :). Kliensünket PXE boot-tal indítva a pxelinux fogad minket. Mivel nem adtunk meg semmilyen konfigájlt, nem rendelkezik semmilyen beállítással. A neten rengeteg howtot lehet találni ehhez, hogy hogyan lehet menüt (akár grafikusat) csinálni ehhez. De azt hiszem nekünk ez most elég :).
A kapott promptba a
win2k.0
fájlnevet megadva a windows 2000 telepítője, a winxp.0
beírva pedig az XP telepítője indul.
Linuxot is lehet? Persze! :)
Ismét pár egyszerű lépésben, hogy hogyan lehet linuxokkal is kibővíteni a skálát. Sokkal egyszerűbben, mint windows esetén :). A példa most egy openSuSE 11.0 x64 és egy CentOS 5.2 x86 lesz.
openSuSE 11.0:
Töltsük le a netinstall imaget: http://download.opensuse.org/distribution/11.0/iso/cd/openSUSE-11.0-NET-x86_64.iso. Mountoljuk a letöltött iso fájlt tetszőleges helyre:
mount -o loop openSUSE-11.0-NET-x86_64.iso /mnt
Csináljunk egy külön könyvtárat, pl. /tftpboot/suse11.0_x64. Másoljuk ide a /mnt/boot/x86_64/loader könyvtárból a linux és initrd fájlokat.
A pxelinux promtjába suse11.0_x64/linux initrd=suse11.0_x64/initrd
lehet indítani.
Memtest:
Aki szeretné, egy memtestet is berakhat… Mindkét cdn megtalálható, a susen pl. /mnt/boot/x86_64/loader/memtest, másoljuk ezt a /tftpboot-ba.
Indítást: memtest
CentOS 5.2:
Töltsük le a netinstall cd imaget: mirror.chpc.utah.edu/pub/centos/5.4/isos/i386/CentOS-5.4-i386-netinstall.iso. Mountoljuk hasonlóképpen, mint a suset.
Hozzunk létre neki is egy külön könyvtárat, pl. /tftpboot/centos5.2. Másoljuk ide a /mnt/isolinux/ könyvtárból a vmlinuz és initrd.img fájlokat.
A pxelinux promtjába centos5.2/vmlinuz initrd=centos5.2/initrd.img
lehet indítani.
És akkor kérésre egy példa pxelinux config:
# cat /tftpboot/pxelinux.cfg/default default suse11.0_x64 prompt 1 timeout 600 display pxelinux.cfg/boot.msg label winxp kernel winxp.0 label win2k kernel win2k.0 label centos5.2 kernel centos5.2/vmlinuz append initrd=centos5.2/initrd.img label suse11.0_x64 kernel suse11.0_x64/linux append initrd=suse11.0_x64/initrd label memtest kernel memtest append - # cat /tftpboot/pxelinux.cfgboot.msg ? 0b winxp - Windows XP Professional win2k - Windows 2000 Professional centos5.2 - CentOS 5.2 x86 suse11.0_x64 - openSuSE 11.0 x64 memtest - Memtest86 07 0f A telepiteni kivant rendszer azonositojat ird be, majd nyomd meg az ENTER-t. 10 perc elteltevel automatikusan a suse11.0_x64 lesz kivalasztva. 07
A két fájl letölthető innen: http://www.2shared.com/file/4975240/1abe77b4/pxelinuxcfgtar.html


