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