W ko?cu przyszed? czas aby si? ustabilizowa?. W tym krótkim howto postaram si? do?? szczegó?owo opisa? jak to wykona? i nie strzeli? sobie w stop? a jak ju? si? strzeli jak si? po?ata?.
W moim przypadku upgrade by? przeprowadzony z systemu z ga??zi -current do -stable a konkretnie z 4.99.32 do 4.0_STABLE.
Zaczynamy od ?ci?gni?cia ?róde? systemu odpowiedniej ga??zi.
Wchodzimy do /usr
cd /usr/
Ustawiamy w jaki sposób b?dziemy ??czy? si? z serwerem cvs
setenv CVS_RSH ssh
setenv CVSROOT :ext:anoncvs@anoncvs.NetBSD.org:/cvsroot
I ?ci?gamy (w katalogu /usr!) ?ród?a
cvs checkout -r netbsd-4 -P src
je?li pominiemy -r netbsd-4 ?ci?gniemy ga??? -current, mo?emy si? tak?e cofn?? do netbsd-3 (nie polecane :). Po ca?ej operacji mniej lub bardziej czasoch?onnej w katalogu /usr/src b?dziemy mieli wszystkie ?ród?a potrzebne do budowy systemu. Je?li masz kiepskie po??czenie z Internetem mo?emy doda? po cvs flag? -zx gdzie x to liczba od 1 do 9 okre?laj?ca stopie? kompresji. Pami?ta? nale?y jednak, ?e kompresja po stronie serwera do?? powa?nie go obci??a.
Mo?emy sprawdzi? czy ?ci?gn?li?my dobr? wersj? wykonuj?c skrypt osrelease.sh w katalogu /usr/src/sys/conf/
cd /usr/src/sys/conf/
sh osrelease.sh
4.0_STABLE
Wszystko gra.
Teraz musimy przygotowa? katalogi do budowy systemu, /usr/tools i /usr/obj s? obligatoryjne i kiedy ich nie ma budowa systemu nie zostanie przeprowadzona, build.sh powinien je stworzy? ale dla pewno?ci lepiej zadba? aby by?y dost?pne dla systemu. katalog gdzie faktycznie b?d? przechowywane setsy po budowie jest dowolny w moim przypadku nazywa si? tak jak wersja NetBSD – /usr/4.0_STABLE
mkdir /usr/tools /usr/obj /usr/4.0_STABLE
Teraz zbudujemy sobie toolsy czyli narz?dzia do budowy NetBSD. build.sh jest oczywi?cie na tyle sprytny, ?e sprawdza czy w systemie s? odpowiednie narz?dzia i je?li ich nie ma to je buduje i korzysta z nowych, ale oczywi?cie na tym etapie mog? tak?e pojawi? si? nieprzewidywane trudno?ci wi?c dla pewno?ci wska?emy konkretny katalog i powiemy co build.sh ma budowa?:
cd /usr/src/
./build.sh -T /usr/tools/ tools
Zale?nie od szybko?ci naszej maszyny, mo?e to potrwa? od kilku minut to kilku godzin.
U mnie na p3 500 Mhz i 256 Mb ram toolsy jak wida? budowa?y si? godzin? z kilkoma minutami.
===> Tools built to /usr/tools
===> build.sh ended: Fri Dec 21 15:04:39 CET 2007
===> Summary of results:
build.sh command: ./build.sh -T /usr/tools/ tools
build.sh started: Fri Dec 21 13:58:46 CET 2007
NetBSD version: 4.0_STABLE
MACHINE: i386
MACHINE_ARCH: i386
Build platform: NetBSD 4.99.32 i386
HOST_SH: /bin/sh
No /usr/tools/bin/nbmake, needs building.
Bootstrapping nbmake
TOOLDIR path: /usr/tools
DESTDIR path: /usr/src/destdir.i386
RELEASEDIR path: /usr/src/releasedir
Created /usr/tools/bin/nbmake
makewrapper: /usr/tools/bin/nbmake-i386
Updated /usr/tools/bin/nbmake-i386
Tools built to /usr/tools
build.sh ended: Fri Dec 21 15:04:39 CET 2007
===> .
Po wybudowaniu toolsów mo?emy zbudowa? sobie system:
./build.sh -D /usr/4.0_STABLE -O /usr/obj -T /usr/tools -u build
===> Successful make build
===> build.sh ended: Fri Dec 21 21:53:03 CET 2007
===> Summary of results:
build.sh command: ./build.sh -D /usr/4.0_STABLE -O /usr/obj -T /usr/tools -u build
build.sh started: Fri Dec 21 15:07:38 CET 2007
NetBSD version: 4.0_STABLE
MACHINE: i386
MACHINE_ARCH: i386
Build platform: NetBSD 4.99.32 i386
HOST_SH: /bin/sh
TOOLDIR path: /usr/tools
DESTDIR path: /usr/4.0_STABLE
RELEASEDIR path: /usr/obj/releasedir
makewrapper: /usr/tools/bin/nbmake-i386
Updated /usr/tools/bin/nbmake-i386
Successful make build
build.sh ended: Fri Dec 21 21:53:03 CET 2007
===> .
A po wybudowaniu systemu potrzebujemy jeszcze kernel zgodny z wersj? naszego NetBSD który b?dziemy instalowa?. Najlepiej jest zbudowa? oczywi?cie GENERIC, ale mo?emy oczywi?cie go troch? zmodyfikowa? (np. poprzez dodanie PF który nie jest domy?lnie kompilowany)
vim sys/arch/i386/conf/GENERIC
(oczywi?cie dla innych architektur trzeba zmieni? katalog okre?laj?cy architektur? np amd64, sparc, sparc64 itp.)
Kernel mo?emy wybudowa? nast?pnie tak jak stara szko?a karze, poprzez config, make depend, make, make install, ale build.sh równie? pozwala nam go budowa? wi?c u?yj? w?a?nie tego narz?dzia:
./build.sh -O /usr/obj -T /usr/tools -u kernel=GENERIC
===> Kernels built from GENERIC:
/usr/obj/sys/arch/i386/compile/GENERIC/netbsd
===> build.sh ended: Fri Dec 21 23:00:27 CET 2007
===> Summary of results:
build.sh command: ./build.sh -O /usr/obj -T /usr/tools -u kernel=GENERIC
build.sh started: Fri Dec 21 21:58:15 CET 2007
NetBSD version: 4.0_STABLE
MACHINE: i386
MACHINE_ARCH: i386
Build platform: NetBSD 4.99.32 i386
HOST_SH: /bin/sh
TOOLDIR path: /usr/tools
DESTDIR path: /usr/obj/destdir.i386
RELEASEDIR path: /usr/obj/releasedir
makewrapper: /usr/tools/bin/nbmake-i386
Updated /usr/tools/bin/nbmake-i386
Building kernel without building new tools
Building kernel: GENERIC
Build directory: /usr/obj/sys/arch/i386/compile/GENERIC
Kernels built from GENERIC:
/usr/obj/sys/arch/i386/compile/GENERIC/netbsd
build.sh ended: Fri Dec 21 23:00:27 CET 2007
===> .
Po wybudowaniu kernela musimy jeszcze tylko go podmieni? backupuj?c nasz stary (i dzia?aj?cy ! ;) kernel.
mv /netbsd /onetbsd3
mv /usr/obj/sys/arch/i386/compile/GENERIC/netbsd /
Teraz jeste?my gotowi na reboot i sprawdzenie czy nowy kernel podniesie nam system (b??dami przy starcie us?ug na razie si? nie przejmujemy)
Pami?taj, rebootuj system poprzez shutdown -r now a nie reboot, poniewa? shutdown prawid?owo stopuje us?ugi z /etc/rc.conf
System wsta? (mam nadziej?, ?e u Ciebie te? :). Wi?kszo?? us?ug u mnie nie odpali?o si?, ale np NAT z PF dzia?a?. Mo?emy wi?c zainstalowa? nowy system:
./build.sh -D /usr/4.0_STABLE -O /usr/obj -T /usr/tools -u install=/
make installworld started at: Fri Dec 28 10:12:33 CET 2007
make installworld finished at: Fri Dec 28 10:17:43 CET 2007
===> Successful installworld to /
===> build.sh ended: Fri Dec 28 10:17:44 CET 2007
===> Summary of results:
build.sh command: ./build.sh -D /usr/4.0_STABLE/ -O /usr/obj -T /usr/tools -u install=/
build.sh started: Fri Dec 28 10:12:29 CET 2007
NetBSD version: 4.0_STABLE
MACHINE: i386
MACHINE_ARCH: i386
Build platform: NetBSD 4.0_STABLE i386
HOST_SH: /bin/sh
TOOLDIR path: /usr/tools
DESTDIR path: /usr/4.0_STABLE
RELEASEDIR path: /usr/obj/releasedir
makewrapper: /usr/tools/bin/nbmake-i386
Updated /usr/tools/bin/nbmake-i386
Successful installworld to /
build.sh ended: Fri Dec 28 10:17:44 CET 2007
===> .
Zosta?a jeszcze jedna rzecz, nale?y przeprowadzi? update plików konfiguracyjnych, wydajemy polecenie etcupdate i uwa?nie (bardzo!) sprawdzamy o co nas pyta system. Polecam przekopiowanie /etc w bezpieczne miejsce! Mamy do wyboru kilka opcji przy ka?dym pliku. Najwazniejsze do i – install i d – don’t install. Wszystkie pliki, w których nie przeprwadzali?my zmian mo?emy ?mia?o zainstalowa?, tak samo wszystkie pliki które oznaczone s? jako missing. Nale?y zwróci? szczególn? uwag? na pliki z uzytkownikami i grupami, poniewa? je?li nie opacznie damy install to zostan? zainstalowane czyste pliki tak jak po ?wie?ej instalacji i nie b?dziemy mogli si? zalogowa? poniewa? nasz uzytkownik nie b?dzie istnia?.
etcupdate
Po etc update przeleci postinstall i powie co si? uda?o a co nie i podpowie jakie komendy nale?y uruchomi? aby pozby? si? niepotzrebnych rzeczy typu obsolete.
Po zako?czonej operacji dajemy shutdown -r now i teoretycznie wszystko powinno dzia?a?. Teoria jednak mija si? z praktyk? i np u mnie wymagane by?o przeinstalowanie niektórych aplikacji (perl, mysql). To jest jednak dosy? proste do wykonania gorzej kiedy po etcupdate dostajemy b??d, ?e nie odnaleziono libc.so.12 co skutkuje brakiem mo?liwo?ci zrobienia czegokolwiek ??cznie z zalogowaniem si? lub chocia?by ls. A po restarcie dostajemy kernel pannic z powodu init died…
man init nie podaje nam weso?ych wiadomo?ci:
The role of init is so critical that if it dies, the system will reboot
itself automatically. If, at bootstrap time, the init process cannot be
located, the system will panic with the message ``panic: init died
(signal %d, exit %d)''.
Powodem tego jest to, ?e kernel przy starcie zna jedynie partycj? / i w pierwszej kolejno?ci odpala init który dalej inicjuje pozosta?e partycje, i odpala skrytpty rc.d. Z koleii init do dzia?ania potzrebule /lib/lib.co.12 oraz /libexec/ld.elf_so. Je?li z jakich? powodów nie mo?e ich zlokalizowa? dostejemy init died. Plik /lib/lib.co.12 jest linkiem do innego pliku:
lrwxr-xr-x 1 root wheel 14 Dec 21 15:53 libc.so.12 -> libc.so.12.149
Ja upgreaduj?c z ga??zi -current mia?em zamiast libc.so.12.149 plik libc.so.12.150, a libc.so.12 nie zlinkowa? si? prawid?owo z plikiem od 4.0 st?d problem.
Najprostrzym rozwi?zaniem tego problemu jest wybootowanie z p?yty instalacyjnej NetBSD i z menu narz?dziowego uruchomienie /bin/sh, nastepnie podmontowanie / i stworzenie w?a?ciwego linku, lub te? oprócz podmontowania / podmontowanie /usr (je?li jest na innej partycji) i przekopiowanie ca?ego /usr/4.0_STABLE/lib na miejsce /lib. Po takim zabiegu system wsta? bez ?adnego problemu.
Koniec stabilizacji, all done, bye bye ;)