vzdaleny upgrade i386->amd64 [Re: rtld i386 versus amd64]

kron24 kron24 at gmail.com
Thu Feb 24 21:26:07 CET 2011


Dne 22.2.2011 22:21, Dan Lukes napsal(a):
...
> Ale v pohode - i ja to zatim beru jako hracku. Az to budu potrebovat
> nutne, tak to tim ci onim smerem nakonec nejak uchodim ;-)

Tak jsem zkusil i tu tvoji ideu a s nekolika drobnymi upravami
to taky slo. Shrnu je tady obe, i kdyz pochybuju, ze to nekdy
nekdo pouzije...

Vzdaleny upgrade 32->64 - varianta A - "Danovo hybrid"
------------------------------------------------------

1. Do /rescue64 nainstalujeme rescue 64bit
2. Nainstalujeme lib32 set
3. Nainstalujeme 64bit kernel s COMPAT_FREEBSD32
4. Do rc.conf:
      ldconfig32_paths="$ldconfig32_paths $ldconfig_paths"
      ldconfig_local32_dirs="$ldconfig_local32_dirs $ldconfig_local_dirs"
5. Tento system by zatim nenastartoval, nesly by poustet dynamicky
    linkovane programy. Prijdou dve upravy, ktere do uvodni faze startu
    vnuti staticke programy:
    - v /etc/rc prenastavime PATH na
      /rescue64:/sbin:/bin:/usr/sbin:/usr/bin
      (na zacatek pribylo "/rescue64")
    - nekolik programu primo "prerazime" jejich rescue variantou:
      /sbin/ldconfig
      /bin/sh
      /sbin/mount
      /sbin/sysctl
      /bin/ps
      /sbin/md5
      (ldconfig musi byt 64bit, ty ostatni asi mohou byt libovolne,
       ja je mel 32bit)
6. Reboot. Nabehne 64bit kernel a (prevazne) 32bit world.
7. Vratime /etc/rc do puvodniho stavu.
8. Nachystame ld-elf*.so, jak by mely vypadat v 64bit systemu:
      mkdir /libexec.new
      cp /libexec/ld-elf32.so.1 /libexec.new/
      cp /usr/obj/usr/src/libexec/rtld-elf/ld-elf.so.1 /libexec.new/
      mv /libexec /libexec.orig && /rescue/mv /libexec.new /libexec
9. Nahrajeme 64bit knihovny (/lib, /usr/lib). (Tady nevim, jak to
    udelat "ciste", z nedostatku lepsiho napadu jsem si zadouci
    lib a usr/lib uz predtim nachystal do tarballu)
      cd / \
        && /rescue/mv /usr/lib /usr/lib.orig \
        && /rescue/mv /lib /lib.orig \
        && /rescue/tar xf /tmp/lib_usrlib_64.tar
10. Prekonfigurujeme ldconfig:
       /etc/rc.d/ldconfig restart
11. Doplnime programy pro installworld:
       cp /usr/obj/usr/src/usr.bin/make/make /usr/bin/make
       cp /usr/obj/usr/src/usr.bin/xinstall/xinstall /usr/bin/install
       cp /usr/obj/usr/src/tmp/usr/src/gnu/usr.bin/binutils/strip/strip 
/usr/bin/strip
       cd /usr/src/usr.bin/ldd && make install
12. cd /usr/src && make installworld
13. Reboot, docistit - smazat /rescue64 atd.


Vzdaleny upgrade 32->64 - varianta B - "pomocny system"
-------------------------------------------------------

1. Uvolnime nejaky slice nebo partition, treba swap
2. Nainstalujeme do toho minimalni 64bit system (nebo mfsBSD)
3. Zkopirujeme do nej konfiguraci (/etc) z dosavadniho systemu
4. V pomocnem systemu upravime jeho
    - rc.conf - vyhodit to, co nebudeme potrebovat
    - fstab
5. Zajistime boot do pomocneho systemu. Zalezi, kam jsme
    instalovali, napr. pokud to bylo do partition, necha se to
    udelat pres loader.conf.
6. Reboot. Nabehne pomocny system.
7. Preinstalujeme puvodni system na 64bit (vc. lib32)
8. Do rc.conf preinstalovaneho systremu pridame
    ldconfig32_paths a ldconfig_local32_dirs (jako ve variante A)
9. Vratime boot do puvodniho stavu (tj. vratime krok 5)
10. Reboot, docistit - vratit pomocnou slice/partition atd.


Po obou variantach by asi mela nasledovat vymena portu na 64bit
a nakonec odbourani ldconfig32_paths a ldconfig_local32_dirs.

Nevyhody obou variant tu uz zaznely. Tu treti a uplne nejlepsi
(Danuv navrh na kernelovy modul) uz necham pro nehoko mladsiho.

Oli


More information about the Users-l mailing list