Една от най-критичните операции за FreeBSD - make installworld и съответно - една от най-сигурните и въпреки това, ако не спазим някои елементарни условия, може да завърши с неуспех.
Как се възстановява системата след подобен случай? Естествено форматират се дисковете и се преинсталира. Затова не бива да допускаме да се случва. Нека си повторим правилата за лек и безавариен update на системата:
1. sync на source (cvs/cvsup)
2. конфигурация на кернел
3. cd /usr/src, make buildkernel KERNCONF=<IDENT>
4. cd /usr/src, make buildworld
5. mergemaster -p
6. make installkernel KERNCONF=<IDENT>
7. restart, boot -s
8. mount -a
9. cd /usr/src, make installworld
10. mergemaster
11. reboot
Ако спазим тази процедура, имаме гаранцията, че всичко ще мине безпроблемно - до там, докъдето изобщо е възможно да бъде гарантирано (тоест не се гарантира, че ще успее make installworld ако спре тока по средата ..)
Когато обаче работата опре до remote машина, нещата стават меко казано сложни. Например доста пъти досега съм успявал да направя make installkernel и make installworld без рестарт на машина, която обслужва клиенти през това време. Само че снощи не успях. И досега си мисля, че ако бях рестартирал след make installkernel в multiuser mode и бях направил make installworld с новия кернел, нямаше да се счупи. Но не го направих и си представете емоцията да видиш лаконичния надпис Error в този момент.
Защо грешка при make installworld е толкова фатална и отделен въпрос, но както казах - лекарството е да се форматират дисковете и да се преинсталира BSD-то.
Е какво ако не можеш да си го позволиш?
Аз например нямаше как да направя това.
Пиша цялото въведение до тук, за да споделя извода, до който стигнах на края - ако смятате да нарушите която и да е точка от последователността по update на системата (причините да се прави сигурно ще да са сериозни и включват и неприятни ограничения за downtime на машината), не го правете без да имате CD с последния release под ръка.
Това, което също може да се приложи като лекарство, е да се инсталира base дистрибуцията от CD-то (на label от инсталационната програма трябва да се посочи кой partition къде се mount-ва, но без да се форматира), да се зачистят поразиите из source - тоест rm -rf /usr/obj/*, cd /usr/src, make clean, и да се започне отново, този път по-внимателно.
Да, ама ..
1. Имах стар release на CD (5.0) - когато го инсталирах, make buildkernel директно плюеше грешка още в Makefile-a. Наложи се да свалям 5.2.1.iso по спешност. (лирично отклонение: Абе, DarkStar, какво е това шантавото NT ftp дето си пуснал там?? :) Не разбира PASV - трябва да му кажеш PASSIVE и съответно забрави wget да свали нещо оттам .. свалял съм на ръка с ftp клиента и разбира се - свалях два пъти, щото отдавна съм забравил как се прави и го свалих веднъж в text mode)
2. Виждали ли сте ifconfig да dump-ва core? Имам предвид без опции - просто исках да погледна config-а на картата. След като бях инсталирал base дистрибуцията по този начин, тя меко казано се държеше странно и това не е чудно :) Добре поне, че компилираше като хората.
3. Минава се на GENERIC кернел, което в моя случай значеше, че няма MASQUERADE, което пък от своя страна напълно елиминира firewall-а, който ползва divert, който връща пакета обратно след като го divert-не и на това се разчита. Тоест останах без DNS (което беше най-осезаемо) и дълго време се чудех що не работи.
Някой друг да сподели опит в областта? :)
______________
Ако искаш изненада, защо просто не се влюбиш?
|