Disclaimer :
Dit document is niet juist en is niet meer onderhouden.
|
De CHOST variable aanpassen
1.
Introductie
De CHOST veranderen is een groot probleem en kan je systeem grondig naar de
knoppen helpen. Dus je kan je zelfs afvragen waarom er eigenlijk een gids voor
is.
Er zijn echter bepaalde situaties waar het aanpassen van de CHOST onoverkomelijk
is, als je naar glibc 2.4 die enkel ntpl ondersteund bijvoorbeeld, en ontdekt
dat je CHSOT i386 is, wat het voorgaande onmogelijk maakt. In dit geval heb je
weinig keuze, en de CHOST veranderen is er een van.
Zelfs als je deze gids volgt kunnen er zich problemen voordoen, dus zorg ervoor
dat je alles grondig leest, en alle commandos nauwkeuring uitvoert. In dit geval
gaan we de CHOST aanpassen van i386 naar i686. Als je een andere vervanging
uitvoert, pas de commandos dan aan.
2.
De CHOST variable aanpassen
De packages compilen
Om te beginnen met het veranderen, pas je /etc/make.conf aan en
verander je de waarde voor CHOST aan aan je noden. Hercompile dat de
volgende pakketten, in deze volgorde:
Codevoorbeeld 2.1: Belangerijke systeem tools updaten |
# emerge -av1 binutils gcc glibc
|
Belangrijk:
Merk op dat grote gcc upgrades tegelijkertijd met het aanpassen van de CHOST
waarde (Als je met gcc 3.3, CHOST i386 begint, en naar gcc 4.1, CHOST i386
gaat bijvoorbeeld) voor ernstige gevolgen kan zorgen. Hoewel het niet onmogelijk
is om dit te doen, is het moeilijk te voorspellen welke potentiële problemen
zich kunnen voordoen en deze te vermelden in deze gids. Bijgevolg, moet je alles
stap per stap doen, Upgrade bijvoorbeeld eerst gcc volgens onze gcc upgrade gids en pas je CHOST dan aan.
Als je op een systeem met CHOST=i386 zit, zul je glibc 2.4 eerst moeten masken,
en na de upgrade weer unmasken.
|
Controleren of alles werkt
Het is tijd om te controleren of je gcc-config en binutils-config
instellingen goed zijn, en je geen overblijfsels hebt in
/etc/env.d/.
De output van gcc-config en binutils-config zouden er zo moeten
uitzien (Dit kan veranderen naargelang je gcc versie en CHOST, gcc 4.1.1 en i686
hier):
Codevoorbeeld 2.2: Een goede setup controleren |
# gcc-config -l
[1] i686-pc-linux-gnu-4.1.1 *
# gcc-config -c
i686-pc-linux-gnu-4.1.1
# binutils-config -l
[1] i686-pc-linux-gnu-2.16.1 *
# binutils-config -c
i686-pc-linux-gnu-2.16.1
|
Vervolgens controleer je of er verwijzingen zijn naar de oude CHOST in
/etc/env.d/:
Codevoorbeeld 2.3: Oude CHOST verwijzingen controleren |
# cd /etc/env.d/
# grep 386 *
05gcc-i386-pc-linux-gnu:PATH="/usr/i386-pc-linux-gnu/gcc-bin/4.1.1"
05gcc-i386-pc-linux-gnu:ROOTPATH="/usr/i386-pc-linux-gnu/gcc-bin/4.1.1"
|
Nota:
Het is mogelijk dat dit bij jouw niet gebeurt, maar indit geval bevat
05gcc-i386-pc-linux-gnu verwijzingen naar de oude CHOST. Dit kan er anders
uitzien op je systeem afhankelijk van de CHOST je van/naar veranderd. Of zelfs
gewoon in orde zijn. De naam kan ook 05gcc-uw_nieuwe_CHOST-pc-linux-gnu zijn.
|
Alvorens je het bestand verwijderd, zoeken we bestanden met de upgedate CHOST:
Codevoorbeeld 2.4: Bestanden met de nieuwe CHOST zoeken. |
# grep 686 *
05binutils:MANPATH=/usr/share/binutils-data/i686-pc-linux-gnu/2.16.1/man
05binutils:INFOPATH=/usr/share/binutils-data/i686-pc-linux-gnu/2.16.1/info
05binutils:LDPATH=/usr/i686-pc-linux-gnu/lib
05gcc:PATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
05gcc:ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
05gcc:MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man"
05gcc:INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info"
05gcc:LDPATH="/usr/lib/gcc/i686-pc-linux-gnu/4.1.1"
|
Deze ziet er goed uit aangezien er telkens slechts ĂĂŠn bestand voor gcc
in /etc/env.d/ man zijn (05gcc hier), dus verwijderen we diegene
met verkeerde verwijzingen:
Codevoorbeeld 2.5: Bestanden met foute verwijzingen verwijderen |
# rm 05gcc-i386-pc-linux-gnu
|
Hetzelfde gaat ook op voor binutils. Als er een extra is, zoek dan de
oude en verwijder hem. Controleer dan je /etc/env.d/binutils/
Codevoorbeeld 2.6: Binutils controleren |
# cd /etc/env.d/binutils/
# ls -la
total 8
-rw-r--r-- 1 root root 15 Sep 3 13:48 config-i686-pc-linux-gnu
-rw-r--r-- 1 root root 126 Sep 3 13:48 i686-pc-linux-gnu-2.16.1
# cat config-i686-pc-linux-gnu
CURRENT=2.16.1
# cat i686-pc-linux-gnu-2.16.1
TARGET="i686-pc-linux-gnu"
VER="2.16.1"
LIBPATH="/usr/lib/binutils/i686-pc-linux-gnu/2.16.1"
FAKE_TARGETS="i686-pc-linux-gnu"
|
Deze ziet er goed uit, die bestanden moeten er zijn. Tijd om verder te gaan naar
de gcc map.
Codevoorbeeld 2.7: Gcc controleren |
# cd /etc/env.d/gcc
# ls -la
total 12
-rw-r--r-- 1 root root 32 Sep 3 16:43 config
-rw-r--r-- 1 root root 32 Aug 3 14:25 config-i386-pc-linux-gnu
-rw-r--r-- 1 root root 292 Sep 3 16:43 i686-pc-linux-gnu-4.1.1
# cat config
CURRENT=i686-pc-linux-gnu-4.1.1
# cat config-i386-pc-linux-gnu
CURRENT=i386-pc-linux-gnu-4.1.1
# cat i686-pc-linux-gnu-4.1.1
PATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.1"
LDPATH="/usr/lib/gcc/i686-pc-linux-gnu/4.1.1"
GCCBITS="32"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info"
STDCXX_INCDIR="g++-v4"
|
config en i686-pc-linux-gnu-4.1.1 zijn in orde, maar
config-i386-pc-linux-gnu is ook een overblijfsel die verwijderd
moet worden.
Nota:
Alweer kan de naam die foute verwijzingen bevat een andere naam hebben,
config-i686-pc-linux-gnu bijvoorbeeld, hoewel je upgradet naar i686. Het is
belangerijk dat je het bestand herkent aan de inhoud, niet enkel de naam.
|
Codevoorbeeld 2.8: Het foute gcc configuratiebestand verwijderen |
# rm config-i386-pc-linux-gnu
|
Draai nu de volgende commandos om je omgeving up te daten:
Codevoorbeeld 2.9: De omgeving updaten |
# env-update && source /etc/profile
|
Controleer dan of alles gefixed is:
Codevoorbeeld 2.10: Kijken of alles in orde is |
# grep -r 386 /etc/env.d/
|
Als je nog steeds iets vindt, moet je een bestand gemist hebben. Probeer het te
vinden alvorens verder te gaan.
De wijziging afwerken
Nu is het nodig om libtool te hermergen en fix_libtool_files.sh te
draaien. Zorg ervoor dat je hiervoor zeker de juiste gcc versie gebruikt: (Je
huidige, 4.1.1 hier, en de oude architectuur, i386 hier).
Codevoorbeeld 2.11: Verzeker dat je juiste libraries hebt |
# emerge -av1 libtool
# fix_libtool_files.sh 4.1.1 --oldarch i386-pc-linux-gnu
|
Het is misschien aan te raden elk pakket te hercompilen:
Codevoorbeeld 2.12: world recompilen |
# emerge -e world
|
In theorie is het niet noodzakelijk om dit te doen, maat het is niet 100% zeker
dat dit het geval is. Als je de world niet recompiled , moet je toch minstens de
volgende doen:
Codevoorbeeld 2.13: Python remergen |
# emerge -av1 python
|
Alle paketten die perl gebruiken installeren zich in de CHOST direcotry en
moeten dus geremerged worden. In dit geval heb je qfile niet
geïnstalleerd, en moet je dus eerst app-portage/portage-utils
installeren.
Codevoorbeeld 2.14: Perl pakketen hermergen |
# emerge -av portage-utils
# emerge -av1 `qfile /usr/lib/perl* -Cq | sort -u`
|
Als je nog pakketen ontdejt die gehercompiled moeten worden, laat de auteur van
dit document het dan weten.
Veelvoorkomende problemen
Als je upgrade van gcc 3.3 naar 4.1, en tegelijkertijd de CHOST aanpast (Maar
doe dat best niet), moeten bepaalde packages gerecompiled worden, zoals groff en
courier:
Codevoorbeeld 2.15: Error bericht |
error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
|
Dit gebeurt tijdens de upgrade, als de CHOST niet perfect gelijk is aan XTARGET
en de compiler verondersteld cross-compiling. Bijgevolg is LDPATH niet
toegevoegd aan ld.so.conf, wat resulteert in een error.
Zie de gcc upgrade gids om te zien
wat gerecompiled moet worden na een gcc upgrade.
In zeldzame gevallen kan dit ook oude versies van pyton laten crashen. Dit kan
opgelost worden door /usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.6 (Pas
aan aan je oude chost en gcc versie) aan /etc/ld.so.conf. Draai dan
ldconfig en emerge libstdc++-v3. Zoals je ziet is het dus beter
dit probleem te ontwijken. Verander CHOST en je gcc versie niet tegelijkertijd.
Feedback
Dit zou het moeten zijn. feedback (Al dan niet positief) is welkom. Stuur een
email naar amnde@gentoo.org (Engels) Of post op Dit topic in het
forum. Veel in deze howto komt van vapier, bedankt voor je hulp!
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|