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
hello,
olyan kerdes hogy, nalunk nem a server mudodik dhcpkent, hanem egy router adja az ip cimet, akkor hogyan tudom beallitani a RIS servert ?
Valószínűleg sehogy, mivel a routerekben nem lehet a DHCP beállításokat módosítani.
Milyen router?
ööö, valamilyen d-link, de akkor ha jol ertem, az lenne a lenyeg hogy a linux servernek kell osztani az ipt es csak akkor mukodik a dolog
ez esetben igen.
amúúgy oszthatja más gép vagy router az ip-t, csak az a feltétel, hogy be lehessen állítani a dhcp szervert.
ugyanis ezek az adatok (melyik gépről és mit töltsön be) sima paraméterek a DHCP-ben, ezért olyan DHCP szerver kell, ahol lehet ezt állítani.
igen, max akkor azt tudom csinalni, hogy teljesen kulon rakok egy gépet ket halokartyaval, errol a meglevo halozatrol kap ipt, ahogy a tobbi, es netet is , a masik halokartyara pedig nyomok egy switchet es kulon halozatot hozok letre ahova kotom a szervizes gepeket, es itt mar mehet a dhcp linux serverrol
akár az is jó.
csak majd állítsd be jól, hogy melyik hálókártyán fusson a dhcp szolgáltatás.
Üdv!
Az a gondom, hogy TFTP fail-ed el elszáll.
Hol kell lenni a fileknak?
-winxp.0
-XPLDR
-ntdetect.wxp
-winxp.sif
,ha az útvonalam:
/tftpboot/winxp/I386
samba megosztás [wininstall]
/tftpboot
ez van a winxp.sif-be:
[data]
floppyless = „1”
msdosinitiated = „1”
OriSrc = „\pxelinux2wininstallwinxpI386”
OriTyp = „4”
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1
[SetupData]
OsLoadOptions = „/fastdetect”
SetupSourceDevice = „DeviceLanmanRedirectorpxelinux2wininstallwinxp”
[RemoteInstall]
Repartition = No
UseWholeDisk = No
[UserData]
ComputerName = *
valami ötlet?
Köszi Csaba
Szia!
Sajnos nem elérhető egyik fájl sem, amit a hivatkozásokban említesz, fel tudnád tenni valahova máshova is?
Köszi!
Szia,
Kipróbáltam a pxe xp telepitődet, debian lenny alatt. Odáig jól müködik hogy elkezdi a telepitést betölti a háló drivert, és kb 1 perc után kék halál „PROCESS1_INITIALIZATION_FAILTED” hiba.
Próbáltam más gépen más hálódriverrel, de nem ez akasztja meg a telepitést. Kérlek ha van valami ötleted ird meg.
Csaba!
nálam így működött, de megáll, lentebb leírom miért.
/tftpboot/
-XPLDR
-ntdetect.wxp
-winxp.sif
nálam:
/tftpboot/win/i386 (i386 slink a smb share-ból)
/tftpboot/win/winxp.0 meg az előbb sorolt fileok
/tftpboot/win/INF ahova a hálókártya drivereket raktam, innen futtatom az infparsert is meg a binlsrvt is.
„A számítógép vizsgálata…” majd megáll, hogy idézem:
Az INF file hiányzik vagy hibás.
és akkor ide rakja a szekciót:
[SetupData]
SetupSourceDevice
a winnt.sif (winxp.sif) file-ban benne van, bár itt a weboldalon hiányoznak a backslash-ek a paraméterekből.
ezt a két file-t átmásoltam az i386-ba is, de semmi változás…
tfpd ‘-m’ -el tamogat remap file-t:
rg \\ /
r ^[^/] /win/
#r ^[^/] /srv/tftpboot/win/
rg A a # lower case
rg B b # lower case
rg C c # lower case
rg D d # lower case
rg E e # lower case
rg F f # lower case
rg G g # lower case
rg H h # lower case
rg I i # lower case
rg J j # lower case
rg K k # lower case
rg L l # lower case
rg M m # lower case
rg N n # lower case
rg O o # lower case
rg P p # lower case
rg Q q # lower case
rg R r # lower case
rg S s # lower case
rg T t # lower case
rg U u # lower case
rg V v # lower case
rg W w # lower case
rg X x # lower case
rg Y y # lower case
rg Z z # lower case
feltetelezve /tftboot/win/xp_eng_sp2 structurat, es a fenti remap mukodeset az alabbi makefile legyartja az eredeti telepito xp cd-bol a halozatrol bootolo valtozatot, viszont az inf fajlra szuksege van
all: .rename
cabextract i386/startrom.n1_
cabextract i386/setupldr.ex_
sed -i -e ‘s/NTLDR/ntxe2/gi’ startrom.n12
sed -i -e ‘s/winnt.sif/winnt.xe2/gi’ setupldr.exe
sed -i -e ‘s/ntdetect.com/ntdetect.xe2/gi’ setupldr.exe
mv startrom.n12 winxp.0
mv setupldr.exe ntxe2
cp `pwd`/ntxe2 ..
cp i386/ntdetect.com ../ntdetect.xe2
cp winnt.sif ../winnt.xe2
.rename:
echo „*** it may fail, don’t worry re-run a few times ***”
echo „*** after done .rename is created”
find . -mindepth 1 -maxdepth 1 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 2 -maxdepth 2 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 3 -maxdepth 3 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 4 -maxdepth 4 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 5 -maxdepth 5 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 6 -maxdepth 6 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 7 -maxdepth 7 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 8 -maxdepth 8 -type d -name ‘*[A-Z]*’ -exec rename ‘y/A-Z/a-z/’ „{}” \;
find . -mindepth 1 -type f -name ‘*[A-Z]*’ ! -name Makefile -exec rename ‘y/A-Z/a-z/’ „{}” \;
touch .rename