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 ;)
Nie żebym sie czepiał, a może jednak się czepiam ;), w końcu jestem początkujący użyszkodnik ;p
1)Czy 4.99.32 do 4.0_STABLE to nie jest czasem raczej downgrade ?
2)Z jakiego usera jest robiony upgrade, z roota czy 'normalnego’ usera ; wiadomo że od mv /netbsd /onetbsd3 itd z roota, ale wczeÅ›niej ?
3)Czy nie można z tego wybudowanego systemu i jądra zrobić paczek, nagrać na cd i mieć na przyszłe instalacje ? ;D
ps.
Już ostrze kły na kolejne arty o NetBSD
1. W/g mnie nie ponieważ 4.0 zostało zrebranchowane z currenta, a ostatni current to był bodajże 4.99.34, poza tym upgarde w sensie uaktualnienie systemu, po to sie czeka tyle czasu na stable, korzystajac z currenta (dla PF, którego w 3.0 nie było w moim przypadku), zeby miec stabilna maszynę ;)
2. Ja caÅ‚ość robiÅ‚em z root’a, chociaż nie ma chyba problemu zrobienia go ze zwykÅ‚ego usera, pamiÄ™tajÄ…c o prawach do katalogów tools obj i 4.0_Stable. Sprawdź i napisz jak poszÅ‚o ;)
3. Można, help od build.sh podaje:
iso-image – Create CD-ROM image in RELEASEDIR/iso.
iso-image-source – Create CD-ROM image with source in RELEASEDIR/iso.
Można też sobie sciÄ…gnąć iso z http://ftp.netbsd.org ale móimy o dziaÅ‚aniu na „żyjÄ…cym” systemie :)
i jeszcze jedno pytanie, z jakimi flagami był budowany system ?
chodzi mi o zawartość mk.conf
z defaultowymi czyli mk.conf czysty :)
Chwiluuunia. Nie tylko przeczytanie tego artykuÅ‚u mi nie rozjaÅ›niÅ‚o, ale i pokrÄ™ciÅ‚o. „Make world”, to jak we FreeBSD, ale wÄ…tpliwość mam odnoÅ›nie RELEASE/STABLE:
JakieÅ› 2-3 tygodnie temu, jak nie dawniej, wyszÅ‚y *.iso dla wszystkich wspieranych architektur. — http://ftp.netbsd.org/pub/NetBSD/iso/4.0/
I co to było? RELEASE? Zainstalowałem, dostaję:
sparc# uname -mrs
NetBSD 4.0 sparc64
Zmyliliście mnie. Co ja mam? 4.0_RELEASE, tak?
sparc# sh /usr/src/sys/conf/osrelease.sh
4.0
Co mi daje przejście na 4.0_STABLE? I to tylko ręcznie się da zrobić? (Budowanie na UltraSPARC-IIi@270 MHz z 64M ramu? Nein, danke.)
I czym to siÄ™ róźni? — w Handbooku F-BSD jest rozdziaÅ‚ dot. RELEASE i STABLE. A w NetBSD Guide gdzie to jest opisane?
A jak nie przejdÄ™? Co mi to daje?
Pytam, dotąd tylko we FreeBSD robiłem make buildworld, iz 5.2.1 na 5.5, i tam to w supfile wpisywało się, którą gałąź się chce.
No to kiepsko szukałeś w The Guide ;)
http://www.netbsd.org/releases/release-map.html
;-)
Ja wkoło dostaje tylko
# cd /usr/src/
# ./build.sh -T /usr/tools/ tools
ERROR: build.sh must be run from the top source level
*** BUILD ABORTED ***
O co biega?
O to o czym mówi błąd, czyli musisz odpalać go z najwyższego poziomu źródeł. Sprawdź czy nie masz np /usr/src/src lub czegoś podobnego. Prawidłowy układ katalogów powinien wyglądać mniej więcej tak:
ll /usr/src/
total 348
-rw-r–r– 1 root wheel 38799 Sep 29 2007 BUILDING
drwxr-xr-x 2 root wheel 512 Sep 30 03:01 CVS
-rw-r–r– 1 root wheel 12822 Oct 26 2007 Makefile
-rw-r–r– 1 root wheel 352 Apr 10 2002 Makefile.inc
-rw-r–r– 1 root wheel 33170 Nov 9 2006 UPDATING
drwxr-xr-x 36 root wheel 1024 Sep 30 03:04 bin
-rwxr-xr-x 1 root wheel 31040 Nov 26 2007 build.sh
drwxr-xr-x 6 root wheel 512 Mar 14 2008 common
drwxr-xr-x 4 root wheel 512 Mar 14 2008 crypto
drwxr-xr-x 21 root wheel 512 Sep 30 03:04 dist
drwxr-xr-x 54 root wheel 1536 Sep 30 03:04 distrib
drwxr-xr-x 3 root wheel 512 Sep 30 03:04 doc
drwxr-xr-x 69 root wheel 3072 Sep 30 03:04 etc
drwxr-xr-x 49 root wheel 1024 Sep 30 03:04 games
drwxr-xr-x 7 root wheel 512 Sep 30 03:04 gnu
drwxr-xr-x 9 root wheel 2048 Mar 14 2008 include
drwxr-xr-x 67 root wheel 2048 Sep 30 03:04 lib
drwxr-xr-x 31 root wheel 1024 Sep 30 03:04 libexec
drwxr-xr-x 9 root wheel 512 Sep 30 03:04 regress
drwxr-xr-x 3 root wheel 512 Mar 14 2008 rescue
drwxr-xr-x 94 root wheel 2560 Sep 30 03:04 sbin
drwxr-xr-x 19 root wheel 512 Sep 30 03:04 share
drwxr-xr-x 39 root wheel 1024 Sep 30 03:04 sys
drwxr-xr-x 75 root wheel 2048 Sep 30 03:04 tools
drwxr-xr-x 242 root wheel 4608 Sep 30 03:04 usr.bin
drwxr-xr-x 163 root wheel 4096 Sep 30 03:04 usr.sbin
drwxr-xr-x 9 root wheel 512 Mar 14 2008 x11