[offtopic] Veni, vidi ... break it, fix it

Razvan Deaconescu razvan at rosedu.org
Tue Jun 21 10:34:22 EEST 2011


Salut!

Întrucât nu am depășit vârsta la care faci greșeli pe bandă ca să înveți
din ele (how long is this going to last?), îmi face deosebită plăcere să
vă povestesc din pățaniile mele legate de upgrade-ul serverul mamba (da,
sistemul fizic). Upgrade-ul a însemnat trecerea de la Debian 5.0 Lenny
la Debian 6.0 Squeeze, lucru care a impus și un upgrade de kernel.

Here we go!

= Expozițiunea =

Serverul koala a fost accesat de cineva care a obținut drepturi
privilegiate. Se pare că a fost folosit un exploit al unei
vulnerabilități în cadrul nucleelor pre-2.6.32. Soluția este upgrade-ul
kernel-ului pe sistemul de bază (mamba), koala fiind un container OpenVZ
peste acesta (operație care oricum trebuia făcută).

= Intriga =

Întrucât nu-mi puteam stăpâni degetele și profitând de plecarea lui
George și Mircea în excursia catedrei (nu aveam cine să mă bată la cap
că o dau în bară -- pe Răzvan Rughiniș "îl țin sub control"), am făcut
ceea ce orice om normal cu mult alcool la bord ar face: am început să
fac upgrade de la Debian 5.0 Lenny la Debian 6.0 Squeeze pe mamba.

Am făcut inclusiv upgrade la pachetele kernel, dar nu am dat restart. De
obicei, upgrade-ul la kernel poate cauza probleme pe care, vă vine sau
nu să credeți, am încercat să le evit.

Needless to say, în jur de ora 18:00, nu m-am putut abține. Am purces la
EF303, am luat cheia de la bunker și am intrat în "playground". Scopul
era să dau restart la mamba. Am intrat în prealabil pe diversele
containere, am văzut că nu era nimeni autentificat, am presupus că
vineri seara nu este critic un restart și că un anunț în acest sens nu
ar fi avut o relevanță.

= Desfășurarea acțiunii =

Am instalat GRUB2 (pachetul grub-pc). S-a făcut chainloading cu GRUB.
Acum era acum. Să dau sau nu restart? Ce putea să se întâmple? (don't
answer that). Cu emoție evidentă, am dat restart.

Sistemul a bootat, a intrat în grub1, am făcut chainloading în GRUB2, am
ales nucleul nou (2.6.32-5) și totul a mers OK. Au pornit containerele,
a fost bine.

Plin de surprindere că totul a mers bine, am zis să activez noul grub.
Există un script/comandă care se cheamă update-grub-legacy. Aceasta
dezactivează vechiul GRUB și activează GRUB2. Zis și făcut. La un moment
dat, apare un ecran în care spune unde vrei să instalezi bootloader-ul.
Nu îl văzusem până atunci. Am zis "hai să nu stric nimic" și nu am
selectat nimic. Am stat puțin pe gânduri, m-am întrebat dacă are sens să
instalez GRUB2 folosind grub-install. Până la urmă, ținând cont de
faptul că îmi mersese în primă fază, am zis că nu e nevoie. Mai târziu,
am căutat pe Google că acel pas trebuie neapărat urmat. Aveam să aflu
"the hard way".

== The GRUB2 Menace ==

Am dat restart și când să booteze a apărut o frumusețe eroare 15[1] -
"dacă m-a mâncat ..." mi-am zis.

În mod evident, trebuia să bootez cu un CD de boot. Caută prin jur,
găsesc un CD zgâriat ca toate alea cu un Ubuntu pe el. Mă duc la server
și ia de unde nu-i CD-ROM-ul. OK, am nevoie de CD-ROM drive-ul pe USB de
la Fănel.

Mă duc la ED011, dau de Fănel, iau CD-ROM drive-ul și un calup de
CD-uri. Conectez CD-ROM-ul, configurez BIOS-ul (era deja configurat),
introduc un CD. Nu boot-ează. Dau restart, intru iar în BIOS. Nu merge.
Pun alt CD, dau restart, intru iar în BIOS. Nu merge. Încerc pe
laptop-ul meu. Nu merge. CD-ROM drive-ul pe USB era bușit. Se vedea și
pe el că trecuse prin câteva meciuri de fotbal.

Ce-i de făcut, Răzvane? Opresc serverul, demontez tot, scot carcasa, mă
pregătesc să-i adaug un CD-ROM drive fizic. Era un server pe acolo care
avea un CD-ROM drive "demontabil". Încerc cu un cutter pe post de
șurubelniță să-l desfac. Nu merge. Vine Fănel în trecere. Îl întreb de
șurubelniță cap cruce, îmi indică ED011, mă întreabă de ce am nevoie.
După ce îi povestesc, îmi spune că mai e un CD-ROM drive pe USB. Merg cu
el la EF008, găsim CD-ROM drive-ul.

Verific CD-ROM drive-ul cel nou pe laptop. Reasamblez mamba, o mut la
locul ei, o alimentez și fac celelate conectări. O pornesc. Văd că merge
CD-ROM drive-ul, îi mulțumesc lui Fănel și mă apuc din nou de treabă.

Bootez într-un XUbuntu. După ceva vreme, bootează. Buuun, instalez GRUB2
și încerc să rulez grub-install pe /dev/sda. Îmi dă o eroare legată de
grub-probe. Caut circa juma de oră pe Google și pe IRC ceva legat de
eroare plus software RAID (asta este pe mamba). Secetă.

== Software RAID și GRUB ==

După chinuială în zadar, singura soluție este să capitulez și să întreb
pe cineva care știe. Dau un telefon lui Petre Rațiu și îi explic situația.

Îmi dă indicații. Aflu de comanda mdadm --assemble. Aflu că există mdadm
--assemble --scan. O rulez și îmi reconstruiește RAID-ul în /dev/md0. Îi
mulțumesc lui Petre și mă apuc de treabă.

Montez /dev/md0, totul e OK. Trebuie să rulez chroot la observația lui
Petre. Rulez chroot și observ incompatibilitatea între x86 (32 de biți)
- pe CD-ROM-ul boot-abil și x86_64 de pe mamba. Morți și morminte, am
nevoie de un CD cu x86_64. Mai târziu aveam să văd că, undeva în fundul
teancului cu CD-uri exista un astfel de CD - dar unde mai era farmecul?
Scopul meu era să creez un CD bootabil cu suport x86_64.

== Goana după x86_64 ==

În drum spre EF303 îl întâlnesc pe Răzvan Rughiniș. Îmi spune că sunt
CD-uri în EF303 și purced plin de speranță. În EF303 erau doar DVD-uri
blank. Nu reținusem dacă CD-ROM drive-ul merge și cu DVD-uri.

Intru pe site-ul Ubuntu, aleg o imagine x86_64, o descarc. Văd că sunt
indicații pentru a face un stick bootabil. Am zis "Asta e!". Încerc un
stick din EF303, nu merge. Am eu un stick meseriaș, plat, de la EUROCON
2011. Scriu pe acela și mă întorc în bunker.

Configurez mamba să booteze pe de USB disk. Dau reboot, nu bootează de
pe stick. Schimb porturi, dau reboot. Verific că merge pe laptop.
Concluzia: mamba nu bootează de pe stick USB, poate doar de pe HDD USB
(opțiunea de BIOS era USB Disk). Observ că CD-ROM drive-ul pe USB merge
și pe DVD-uri.

= Punctul culminant =

Mă întorc în EF303. Scriu un DVD cu Ubuntu 11.04 x86_64. După ce îl
scrie, merg în EF007 (bunker). Repornesc pentru a N-a oară mamba și merge.

După ce pornește noul Ubuntu (destul de greu de pe CD-ROM drive-ul de
USB), instalez grub-pc, mdadm etc. Reconfigurez RAID-ul (mdadm
--assemble --scan), montez /dev/md0 și dau chroot.

Dupa chroot dau grub-install /dev/md0. Nu merge. Nu vede dispozitivele.
Nu are montant /dev/. Ce să fac. Ies din chroot. Pe sistemul de bază
/dev/-ul este montat cum trebuie. Ce-i de făcut? Aveam o idee, caut și
pe Google și se pare că soluția este mount -o bind. Dau mount cu bind:
montez /dev/-ul din sistemul de pe bază (sistemul de fișiere al CD-ul
bootabil) peste /dev/-ul din sistemul de fișiere de pe mamba (montat din
/dev/md0).

Dau, din nou, chroot. În /dev/ apar acum toate fișierele. Dau
grub-install /dev/md0 și pare să funcționeze. Folosesc hexdump -n 512 -C
/dev/sda înainte și după și văd o mică schimbare. Schimbarea se propagă
și peste /dev/sdb și /dev/sdc (componente din RAID).

OK. Acu-i acu. Dau restart. În mod surprinzător totul merge.

= Deznodământul =

Sistemul folosește GRUB2, bootează în prima opțiune de kernel
(2.6.32-5). Containerele pornesc, totul e bine și frumos. Mă uit la
ceasul laptop-ului. Era 22:00. Totul a durat "doar" 4 ore. Mă gândesc că
este posibil ca unele servicii să nu meargă pe containere dar că o să
aflu asta în week-end. Îmi amintesc că pe Emil a spus că pe Valea
Doftanei (unde are loc excursia catedrei) nu există semnal. Asta e, aflu
mai multe duminică seara sau luni.

Pe momentul totul e OK. Nu există pângeri de funcționare a serviciilor,
mamba este upgradat și toate containerele văd un kernel nou. Mai trebuie
doar ca toate containerele să fie upgradate de la Debian 5.0 Lenny la
Debian 6.0 Squeeze

~~ The End ~~

Răzvan

[1]
http://stringofthoughts.wordpress.com/2009/05/25/grub-error-15-debianubuntu/


More information about the offtopic mailing list