Job / Praca

    Update NetBSD do wersji 4.0_STABLE

    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 ;)



    Related Posts with Thumbnails
    Add your widget here