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

    Comments

    1. 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

    2. 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 :)

    3. i jeszcze jedno pytanie, z jakimi flagami był budowany system ?
      chodzi mi o zawartość mk.conf

    4. 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.

    5. 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?

    6. 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

    Leave a Reply

    Add your widget here