Dne 16.2.2011 17:47, Dan Lukes napsal(a):
...
Vychazim z i386 systemu stejne verze jaky bude mit AMD64 na jaky hodlam
prejit. rec je o normalne bezicim systemu kam se pristupuje na dalku po
siti, v /usr/src jsou zdrojaky, v /usr/obj je jsou relozene veci PRO
AMD64 (jak se tam dostali ? odjinud, respektive, je to sitove
primoutovany vzdaleny disk). Takze:

Tak jo, mel jsme cas a napadlo me to zkusit...

Verze 8.1. Udelal jsem 2 virtualy, jeden s i386, druhy s adm64.
Na druhem jsem zbuildoval a nainstaloval world a kernel a pak
zkopiroval /usr/obj na stroj s i386.


1) nainstalovat LIB32 set.
to by jeste nemelo mit na bezici system naprosto zadny vliv

Zkousel jsem "make install32", coz nefungovalo. Cteni make
souboru jsem po case vzdal a ten set jsem proste nainstaloval
cestou nejmensiho odporu - z ftp .../amd64/8.1-RELEASE/lib32

2) nakopirovat na stroj AMD64 kernel obsahujici COMPAT32

Tady jsem soubojem s make stravil jen par desitek vterin a pak
jsem proste nakopiroval /boot/kernel ze stroje adm64. Stary i386
kernel jsem si samozrejme schoval.

(Pro presnost zaznamu, ta option se jmenuje COMPAT_FREEBSD32.)

3) do rc.conf dat
ldconfig32_paths="$ldconfig32_paths $ldconfig_paths"
ldconfig_local32_dirs="ldconfig_local32_dirs ldconfig_local_dirs"

(V tom druhem radku jsem si doplnil dolary)

Pred rebootem asi budeme potrebovat jeste nejaky trik, protoze...

3) reboot

nyni mame amd64-kerne/i386 world system - mel by byt ovsem normalne
funkcni (vcetne portu) - kernel je 64, world je kompletne 32 bitu a 32
bitu kernel podporuje, ma tam i potrebne knihovny, vcetne
/libexec/ld-elf32.so.1

... po rebootu je problem s dynamickym linkovanim:

Trying to mount root from ufs:/dev/ad0s1a
/libexec/ld-elf.so.1: Shared object "libedit.so.7" not found, required by "sh"

Jen tak z legrace jsem se z toho zkusil vyhrabat pomoci rescue:

Enter full pathname of shell or RETURN for /bin/sh: /rescue/sh
# mount -a
/libexec/ld-elf.so.1: Shared object "libutil.so.8" not found, required by "mount"
# /rescue/mount -a
# /etc/rc.d/ldconfig start
ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib
32-bit compatibility ldconfig path: /usr/lib32 /usr/lib/compat /usr/local/lib

Ted uz bylo zdanlive dobre, sel spustit /bin/sh i /usr/local/bin/bash.
Opustil jsem single- a normalne nabehl skoro normalni multi-user.
Jediny na prvni podhled viditelny zadrhel byla routovaci tabulka:

# netstat -rn
netstat: no namelist
# /etc/rc.d/routing restart
route: writing to routing socket: Invalid argument
add net default: gateway 192.168.235.1: Invalid argument

I tak jsem cekal, ze ted - s novou databazi ldconfig - to dalsi
reboot uz muze jenom spravit, ale skoncil jsem zase u /bin/sh,
ktery nesel spustit:
...
/libexec/ld-elf.so.1: Shared object "libedit.so.7" not found, required by "sh"
Enter full pathname of shell or RETURN for /bin/sh:


Zkratka, misto abych prinesl neco uzitecneho, mam spis otazky:
- Neznamena ten problem s routovanim, ze nektere "systemove"
  32bit programy nad 64bit kernelem prece jenom nepojedou?
- Jak to, ze ten ldconfig zafunguje jenom "jednorazove"? Jak
  dosahnout preziti rebootu?
- Nebude kvuli tomu linkovani prece jenom nutne hrabnout
  na zdrojaky, jak jsi puvodne zamyslel?
- Jako workaround me napadlo pouzit staticke programy - do /bin
  a /sbin jsem z /rescue nakopiroval sh, mount a ldconfig. To
  bylo na start systemu prece jen dost malo :-) Muzu pokracovat
  dal a asi bych se dostal k nejake minimalne sade potrebnych
  statickych programu, ale ma tahle cesta smysl?

4) nyni je treba nainstalovat spravny /libexec/ld-elf.so.1

stavajici /libexec/ld-elf.so.1 pochazejici pro i386 byl pro 64bit kernel
zcela nepouzitelna, ale dokud neni na disku jediny 64 bitovy binar, tak
by to melo byt fuk protoze se nepouzival.


5) na rade jsou systemove dynamicke knihovny (/lib, /usr/lib)

6) regenerovat databazi pro ldconfig

7) preinstalovat programy make a install

8) ted uz by to melo unest klasicky 'installworld'

9) restart

mame konzistentni amd64-kernel/amd64-world system. Porty jsou stale
i386, ale mely by bezet, protoze kompatibilita je pritomna

10) kompletni reinstalace portu na jejich amd64 varianty

11) odstranit upravy rc.conf

12) hotovo, restart

==================

nesnazim se nekoho presvedcit at to jde zkouset - spis kdyby to nekoho
zajimalo nebo to potreboval, nebo tam na prvni pohled videl nejaky zadrhel.

Nutne to nepotrebuju, je to jenom takove hrani...

Ja sam se ted nebudu pokouset to zkouset a doladit do finalne
pouziteneho stavu ...

... ale jsem ochoten se tomu jeste venovat a jestli me Ty nebo
nekdo dalsi popostrci, pokusim se k tomu pouzitelnemu stavu
dostat.


Dan

Oli
--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem