sparc solaris netboot - nehézségek [solved again]

Az elmúlt hónap során szert tettem egy Sun Netra X1-es SPARC vasra.
Eredetileg Debian volt rajta, de Solaris 10-et szeretnék feltenni rá.
Mivel ez egy low-cost Sun szerver, ezért nincs benne VGA-chip, sem CD/DVD olvasó, így jobb híján soros porton, és hálózati telepítéssel tudom megoldani a rendszer telepítését.

A telepítőszerver egy Slackware Linuxot futtató gép, már korábban beüzemeltem Slackware netinstall szervernek, úgyhogy az alapok adottak voltak.
A szükséges beállításokat itt leírta már egy jóember.
A tftpd, az nfs, és a rarpd telepítése nem okozott különösebb gondot, az rpc.bootparamd viszont nem volt elérhető hivatalos Slackware csomagban, így azt a Debian projekt oldaláról töltöttem le, és fordítottam.
A leírásnak megfelelően elvégeztem a beállításokat; az /etc/ethers, a /etc/bootparams, a /etc/hosts, és a /etc/exports fájlok helyes adatokat tartalmaznak, viszont még a bootolás nem sikerül valamiért.

A gép először rarp-pal ip-címet kér, majd tftp-n keresztül behúzza a netboot image-et, aztán a bootparamd lenne hivatott a kezdeti beállításokat eljuttatni az induló gépnek.


root@polaris:~# cat /etc/bootparams
atlantis root=polaris:/solaris/solaris-10.0/Solaris_10/Tools/Boot \
    install=polaris:/solaris/solaris-10.0 rootopts=:rsize=32768 \
    boottype=:in console=:console=ttya
root@polaris:~#

A boot folyamatot rögzítettem wiresharkkal, és a lehallgatott adatok alapján a folyamat egészen a bootparaméterek elkéréséig eljutott, ott viszont elakadt. A wireshark azt írja, hogy "malformed packet", valamint azt, hogy az udp checksum-ok nem stimmelnek valamiért. (Az adott csomagot elnézve az /etc/bootparamd megfelelő sorának pár karaktere megtalálható benne...)
Az nfs verziója elvileg nem kellene, hogy gondot okozzon, hisz a kernel-ben levő nfs támogatás elboldogul mind a v2, v3 és v4-es kérésekkel.
A capture fájl itt érhető el.

Ha valakinek esetleg van ötlete, akkor ne habozzon. A tanácsokat is szívesen fogadom.

Hozzászólások

Én mondjuk az egyik Sunomat DHCP-vel telepítettem (boot net:dhcp), de emlékeim szerint a telepítő a bootparamd-t utána is használja egyszer (és nem jól kéri le a netmaskot, 2008-ban, gratulálok a Sunnak). Viszont a Linux kernel NFS szerverét felejtsd el, Solarist telepíteni nem lehet vele. Csak a userland NFS szerverrel működik. Valami doksit találtam a neten róla, és valóban, nekem Debian alatt csak az volt elég jó. Esetleg próbáld meg, hátha itt akad el.

Mivel az NFS-t ugye a Sun "találta föl", ezért kizárásos alapon kitalálhatod, hogy melyik a sz*r. :)))

--
"- The question is: what is a mahna-mahna?
- The question is: who cares?"

Hát, ha solaris lenne a bootserver, akkor biztosan könnyebb lenne a dolgom, mert a solaris dvd-n van egy csodaszkript (nyomtatva kb. 40 oldal), ami az összes beállítást elvégzi.
Nem tudom, hogy mi a konkrét helyzet, de ez egy elég öregecske gép már, nem tudom, hogy a dhcp-s bootolós dolgot támogatja-e, de igazából nem is lényges, mert az nfs/rpc-s dolognál akad el a dolog. Az pedig mindkét módszerben szükséges.
Az nfs kicsit meglep, mert elvileg a leírás készítője is linuxot használt, és nem említette, hogy csak a külsős nfs szerver lenne a jó.
Bár most nézem, hogy van egy problems bekezdés is a leírásban. :)

Some people have reported problems with interaction between the Linux NFS daemon and Solaris. I didn't have any trouble with the Linux 2.4.18 kernel so this may have been fixed in more recent kernels. You can try changing the rsize option to 8192 if you run into problems.

The first couple of times that I tried booting Solaris, the boot process would hang after loading the kernel but before loading the installer. After some investigation of the scripts in /sbin in the root filesystem, I discovered that the /sbin/get_netmask program was handing. Since it didn't seem to be doing anything important (the interface has already been properly configured), I moved it out the way.

# cd /pub/solaris/Solaris_8/Tools/Boot
# cd sbin
# mv get_netmask get_netmask.boot

A másik furcsaság - mint már mondtam - az, hogy a Slackis gép által küldött udp csomagok checksumai nem stimmelnek, és az rpc-s csomag pedig malformed a wireshark szerint.

__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

A problémás esetekre vonatkozó tanácsokat alkalmaztam, és most a kövezkezőt nyomja ki a bootparamd a konzolra:


root@polaris:~# rpc.bootparamd  -df /etc/bootparams
This is host atlantis
Returning atlantis   (none)    192.168.1.3
getfile got question for "atlantis" and file "root"
returning server:polaris path:/solaris/solaris-10.0/Solaris_10/Tools/Boot address: 127.0.0.1
getfile got question for "atlantis" and file "rootopts"
getfile failed for atlantis
getfile got question for "atlantis" and file "rootopts"
getfile failed for atlantis
getfile got question for "atlantis" and file "rootopts"
getfile failed for atlantis

Ez elég egészségtelennek tűnik. A próbálkozásaimból az derült ki, hogy a fent látható address: 127.0.0.1-et nem tudom befolyásolni, és bárhogy is próbáltam szerkeszteni az /etc/bootparams fájlt, sajnos a "getfile failed..." hibákat sem tudtam kiküszöbölni.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Egy kicsit keresgélve, találtam pár érdekes dolgot:
Re: installing Solaris from a Linux box: /etc/bootparams formátum - első változat
trying to netboot sunfire280r: tehát unfs3

Ezek után kíváncsi lettem a bootparams fájl pontos formátumára:
bootparams - boot parameter database: /etc/bootparams formátum - második változat
19.1.2 /etc/bootparams: szintén a második változat
SUMMARY: /etc/bootparams question: a különböző telepítési módok kódjai

szerk: a google már 2-3. helyen hozza ezt a topicot az adott kulcsszavra.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Röhejes ez a bootparamd. Arra gondoltam, hogy esetleg azért nem találja a rootopts opciót, mert a root az első, és utána valamit elront. De nem, ha a rootopts-ot teszem az első helyre, a root-ot akkor is megtalálja, de a rootopts-ot nem.
Jobb híján bele kell néznem majd a forrásába, mert ez elég vicces.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Nekem a bootparamd azért okozott hibát, mert az A/B/C-osztályú címekhez automatikusan gyárt netmaskot. Itthon a 172.16.0.0/12-es tartományból használok /24-es subneteket, aztán ez nem tetszett neki. :)

Az NFS-hiba meg 2.6-os kernellel is előjön, a telepítőszerver egy Debian Etch/amd64 volt, a standard 2.6.18-as kernellel.

--
"- The question is: what is a mahna-mahna?
- The question is: who cares?"

Az bootparamd.c egy függvénye (jelen esetben ebben van a lényeg) (az eredeti, debian patch nélküli változat):
Nézzük meg hol ugorhat a failed ágra: (a könnyebb észrevehetőség kedvéért CSUPA NAGY BETŰVEL kommentelek)


bp_getfile_res *
bootparamproc_getfile_1_svc(bp_getfile_arg *getfile,struct svc_req *svc_req)
{
    char *where;
    static bp_getfile_res res;
    
    (void)svc_req;
    
    if (debug) 
	fprintf(stderr,"getfile got question for \"%s\" and file \"%s\"\n",
		getfile->client_name, getfile->file_id);
    
    if (dolog) 
	syslog(LOG_NOTICE,"getfile got question for \"%s\" and file \"%s\"\n",
	       getfile->client_name, getfile->file_id);
    
    he = gethostbyname(getfile->client_name);
    if (!he) goto failed; // ITT BIZTOSAN NEM, MERT A KLIENS NEVÉT ÁT TUDJA ALAKÍTANI CÍMMÉ
    
    strncpy(askname, he->h_name, sizeof(askname));
    askname[sizeof(askname)-1] = 0;

    if (getthefile(askname, getfile->file_id, buffer, sizeof(buffer))) {
	if ((where = strchr(buffer,':'))!=NULL) { // HA VAN : A PARAMÉTERBEN
	    /* buffer is re-written to contain the name of the info of file */
	    strncpy(hostname, buffer, where - buffer);
	    hostname[where - buffer] = '\0';
	    where++;
	    strncpy(path, where, sizeof(path));
	    path[sizeof(path)-1] = 0;
	    he = gethostbyname(hostname);
            // A ROOTOPTS ÉS NÉHÁNY MÁS PARAMÉTER ESETÉN A : ELŐTTI RÉSZ ÜRES!
	    if (!he) goto failed;
            // AZ ÜRES SZTRINGET NEM FOGJA TUDNI CÍMMÉ ALAKÍTANI, MEGYÜNK A LEFOLYÓBA
	    bcopy( he->h_addr, &res.server_address.bp_address_u.ip_addr, 4);
	    res.server_name = hostname;
	    res.server_path = path;
	    res.server_address.address_type = IP_ADDR_TYPE;
	}
	else { /* special for dump, answer with null strings */ // HA NINCS : A PARAMÉTERBEN
	    if (!strcmp(getfile->file_id, "dump")) {
		res.server_name[0] = '\0';
		res.server_path[0] = '\0';	
		bzero(&res.server_address.bp_address_u.ip_addr,4);
	    } 
	    else goto failed; // HA NEM DUMP ÉS NINCS : A PARAMÉTERBEN
	}
	if (debug) 
	    fprintf(stderr, 
		    "returning server:%s path:%s address: %s\n",
		    res.server_name, res.server_path,
		    my_ntoa(res.server_address.bp_address_u.ip_addr));
	if (dolog) 
	    syslog(LOG_NOTICE, 
		   "returning server:%s path:%s address: %s\n",
		   res.server_name, res.server_path,
		   my_ntoa(res.server_address.bp_address_u.ip_addr));
	return(&res);
    }
  failed:
    if (debug) fprintf(stderr, 
		       "getfile failed for %s\n", getfile->client_name);
    if (dolog) syslog(LOG_NOTICE, 
		      "getfile failed for %s\n", getfile->client_name);
    return NULL;
}

A kód alapján a bootparamd nem tud mit kezdeni az olyan paraméterekkel, amelyekben a kettőspont előtti rész üres. Például ezekkel: rootopts=:rsize=32768 boottype=:in console=:console=ttya

Nos, kb ennyit a drága bootparamd-ről. Most még megnézem a debian-os patch-et, hátha ott megjavították.

Szerk: a debian-os patch sem foglalkozott a problémával.

Szerk2: Pénteken kipróbálom majd, hogy tényleg így van-e. De nagy valószínűséggel tényleg nem működik megfelelően. Esetleg próbaképp' odabiggyesztek majd egy hosztnevet a kettőspont elé, hogy ahhoz mit szól a drága.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Első körben ennyit változtattam az rpc.bootparam-n:


diff rpc.bootparamd.orig/rpc.bootparamd.c rpc.bootparamd.new/rpc.bootparamd.c
137,143c137,150
<           path[sizeof(path)-1] = 0;
<           he = gethostbyname(hostname);
<           if (!he) goto failed;
<           bcopy( he->h_addr, &res.server_address.bp_address_u.ip_addr, 4);
<           res.server_name = hostname;
<           res.server_path = path;
<           res.server_address.address_type = IP_ADDR_TYPE;
---
>           path[sizeof(path)-1] = '\0';
>           if (hostname[0] != '\0') {
>               he = gethostbyname(hostname);
>               if (!he) goto failed;
>               bcopy( he->h_addr, &res.server_address.bp_address_u.ip_addr, 4);
>               res.server_name = hostname;
>               res.server_path = path;
>               res.server_address.address_type = IP_ADDR_TYPE;
>           }
>           else {
>               res.server_name[0] = '\0';
>               res.server_path = path;
>               bzero(&res.server_address.bp_address_u.ip_addr,4);
>           }

Remélem elég lesz a probléma megoldására.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

HURRÁ!
Még kellett pár átállítás a bootparams fájlban; az nfs megosztások helyét ki kellett javítanom, viszont a javított bootparamdvel, és az alap kernel nfs szerverrel (vanilla 2.6.25.9) szépen elindult a solaris telepítő!
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Öreg, le a kalappal. Tudom, hogy az önszivatás viszi előre a világot, én is rendszeresen űzöm e sportot, de ennyi idő alatt vmware-ben (tetszés szerinti virtuális környezetben) felrántott solaris-ról a "csodaszkript" segítségével rég készen lettél volna.

Üdv,
BaZso

Az mondjuk nem lenne gond, van x86-os Solarisom, az meg vígan kiszolgálná mind az x86, mind a SPARC-os boot klienseket.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

nem, csak a cdrom-os játék is szivatós, mert az eladótól úgy értesültem, hogy a cdrom-okra nézve is meglehetősen kényes a drága. az eladó azt mondta, hogy ő vagy négy olvasóval is megpróbálta, mire egyszer összejött.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Oh, hurrá.
Most nézem csak, hogy a cikkben linkelt leírás nem működik a frissebb Solaris 10 (2009.06) DVD kiadásával.
Hurrá, megint nyálazhatom át a szkripteket, hogy mit is változtattak pontosan. :S
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Erről beszéltem. :)
A korábbi sztori a sniffeléssel, kóddebuggal gyönyörű megodás volt.
Most kérjük a műszeres méréses és forrasztós megoldást. :)

Mindegy, csak dumálok hülyeségeket, e segíteni nem tudok. Jómagam soha nem voltam annyira mazochista, hogy linuxról netbootoljak solarist. (Legextrémebb esetben is megtette egy vmware+x86 solaris install szerver.)

ÁLLJ!!!

Még mielőtt kevernéd a kettőt: a 2009.06 NEM Solaris 10!!!
(nagyon nem!)
Az S10 U(pdate)7 az 5/09 névre hallgat, a 200x.yz pedig az OpenSolaris, ami olyan linuxosított izé...
Ez utóbbit nem nagyon ismerem (és amennyire ismerem, nem annyira szeretem...), de esélyes, hogy éppen ezt nem tudja...
Nézz utána, csak azért szólok, nehogy feleslegesen szívasd magad! :)
<-------
You can't grep on dead trees.

Jó-jó: a Sun pozicionálja linux-ellenfélként.
Egy gépen futik nálam, mert tesztelés miatt (sw fordítás) felraktam, de sokat nem volt bebootolva :)
Sok gnu-s cucc van rajta, meg én úgy tanultam a nagyoktól, hogy a shell az ksh :) - úgyhogy kellett egy pár perc, mire "visszaállítottam" a szokásos környezetemet. De való igaz, ami gyakran kell, az minden rajta van.
Mondom, tényleg nem nagyon ismerem, ha zőccséget mondtam, akkor... zőccséget mondtam :)
<-------
You can't grep on dead trees.

A linuxhoz mondjuk annyiban tényleg "köze" van, hogy pl. Ian Murdock is nyomul az OpenSolarisban.

(A shell egyébként sh. A power shell, az a ksh. :) )
Valóban sok GNU cucc van rajta. Eddig is rá lehet rakni kisebb-nagyobb szívásokkal szinte mindegyiket, most viszont hivatalosan is tolják bele ezeket. Valószínűleg ezért is tartják sokan linux-klónnak. (Nomeg azért, amit te is mondasz.)

Egyébként ha linux klónt akarsz OpenSolaris alapokon, akkor ott a Nexenta OS. Ez egy komplett ubuntu verzió opensolaris kernellel. (+pár egyéb userland cuccal, amik kihasználják azokat a ficsöröket, amik ebben a kernelben pluszban benne vannak.)

Elméletileg eredetileg az OpenSolaris állt a forráskódokból, és a Solaris Express Community Edition nevű bináris telepíthető dologból. (Ezt Nevada néven is emlegetik.). Az volt a mondás, hogy a Nevada az, ami később a Solaris 11 lesz.

Később megjelent a Project Indiana, ami a Sun állítása szerint egy új, OpenSolaris alapú operációs rendszer, amibe a különféle egyéb közösségi projekteket is beleintegrálják. Ez fut most OpenSolaris OS néven.
Hogy ez miképp korrelál a majdani Solaris 11-hez (ha egyáltalán lesz olyan), nem tudom.
Mindenesetre a Sun most azt állítja, hogy a jövőben felhagy a Nevada-val, és az OpenSolaris OS-hez fog supportot adni.

(A shell egyébként sh. A power shell, az a ksh. :) )
Ahmmm... éss igen! :) De a lényeg a bash-(k)sh szembeállítás volt :)

Egyébként ha linux klónt akarsz OpenSolaris alapokon, akkor ott a Nexenta OS (...)
Igen, régóta figyelem a fiú(k) munkáját, ügyesek. Hogy miért nem vágyok rá, azt ld. alább :)
Éppen a múltkor néztem, hogy már egész' szépen állunk Solaris-disztribúciókkal, asszem a genunix.org-on, de lehet, hogy az opensolaris.org-on.

(...) (Ezt Nevada néven is emlegetik.) (...)
Bezonyám, őtet használom, ahol nem _atombiztos_ os kell (desktopon több helyen, meg - hááát - egy Xen-t igénylő feladathoz egy(=1) szerveren).
Bugreportolgatok, meg upgradelgetek, meg használom. Kényelmesebb, mint az S10, de mégis S10, míg az osol - érthető okokból - azért más.

A vicc az, hogy linux-ot sosem használtam, örököltem egy Solarist ~10 éve (SparcStation LX, még Sol 2.5.1 !!), aztán megtetszett. Egy idő után :)
Az gép meghalt, sajnos, majd némi kihagyás után S9 x86-tal folytattam a unixozást, és azóta Solarisozok. Amolyan önképzőkör-jelleggel... Biológusként... De mint tudjuk, van, aki gyógyszerészként csépeli a ugyanezt az OS-t... ;)
Szóval a linux kimaradt. Eligazodok rajta/rajtuk nagyjából, ha muszáj, de kicsit sok a disztró-specifikus mi-hol-van kérdés néha... :)

És igen,
Mindenesetre a Sun most azt állítja, hogy a jövőben felhagy a Nevada-val, és az OpenSolaris OS-hez fog supportot adni.
ettől félek...
_Nekem_ nagyon kézre áll az S10/sxce vonal, sajnálom, ha Sun/Ora kidobja.

ps: Bocs az offért :)

<-------
You can't grep on dead trees.

Nem keverem no.
1 hónap volt a kettő megjelenése között, nem tudtam, hogy májusi, és mondtam, hogy solaris 10-ről van szó.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Szóval most a Solaris 10 5/09-et próbálom majd feltenni, de egyelőre kevés sikerrel.
A telepítéskez elvileg egy user-space nfs server kellene, mert a kerneles nem jó hozzá.
A bajom csak az, hogy csak forrásból tudnám feltenni, de nem fordul le a drága, pedig a configure alatt nem panaszkodik. :S
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

igen, ezt a lehetőséget már korábban is felvázolták.
de a fentebbi hsz-ekből kiderül, hogy a 11/06-os kiadást sikerült már megpatkolnom, hogy működjön.
úgyhogy itt is sikerülnie kellene idővel.
persze lehet, hogy idővel megunom a szenvedést, és megcsinálom solarissal.
de elsősorban magamnak akarom bizonyítani, hogy képes vagyok rá(tm).
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

mit ad Isten.
egy

#include <time.h>

beszúrása a megfelelő helyre megoldotta a problémát, bár nem tudom, hogy más disztróknál ennek a hiánya miért nem okozott (feltűnő) problémát.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

ez az nfs-user-server akkora trágya, hogy csak na.

ugyan beta, de kihagyni a headerből a time.h-t, amikor használja...
a Makefile-ban nincs uninstall bejegyzés.
sebaj, akkor

./configure --prefix=./valami/

aztán

make install

, erre a drágám az /usr alá teszi a cuccokat.
Hurrá!
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

Bakker, ezt nem hiszem el. Az nfs-user-serveren múlott csak a dolog.
Mivel a 11/06-es Solaris 10 kiadás működött a linux kernel nfs szerverével, ezért abból indultam ki, hogy az nem okozhat gondot.
Viszont most, hogy a 05/09-es Solaris 10 (u8) kiadást próbáltam feltenni, nem működött a régi beállításokkal.
Így, hosszas szenvedés után kipróbáltam a user-space nfs serverrel, és lám, most megy...
(Persze kicsit át kellett szabni az /etc/hosts.allow és /etc/exports fájlokat is, hogy tényleg menjen.)

Szerk: Az nfs-user-server tényleg egy rakás szar. Beletellett vagy egy órába, mire kisakkoztam, hogy a kis drágám az /etc/exports fájlban nem eszi meg a 192.168.0.0/24 formájú IP címtartományokat, hanem csak 192.168.0.0/255.255.255.0 formátumban hajlandó elfogadni azokat. Ilyenkor lenne kedvem elbeszélgetni a készítőkkel.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 12.1 | 2.6.26.7-janos

nem tudom, az udp checksum problémád megoldódott-e, de azokon az ethernet kártyákon, ahol a checksumhoz van hw támogatás, normális, hogy a tcpdump vagy a ws hibás udp checksumokat lát. Konkrétan nem lát semmit, mert ami valójában kimegy, azt a kártya teszi hozzá.