Gentoo Logo

Disclaimer : Dit document is niet juist en is niet meer onderhouden.


De CHOST variable aanpassen

Inhoud:

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!



Print

Upgedate op 9 oktober 2006

De originele versie van dit document wordt niet meer onderhouden

Korte inhoud: Dit document legt uit hoe je de CHOST variabele van een bestaand systeem kunt veranderen.

Wernfried Haas
Auteur

Mike Frysinger
Redacteur

Chris White
"GuideXMLifier"

Alexander Zuliani
Vertaler

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.