<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/nl/change-chost.xml,v 1.3 2012/06/30 18:42:54 swift Exp $ -->

<guide disclaimer="obsolete" lang="nl">

<title>De CHOST variable aanpassen</title>

<author title="Auteur">
  <mail link="amne@gentoo.org">Wernfried Haas</mail>
</author>
<author title="Redacteur">
  <mail link="vapier@gentoo.org">Mike Frysinger</mail>
</author>
<author title='"GuideXMLifier"'>
  <mail link="chriswhite@gentoo.org">Chris White</mail>
</author>
<author title="Vertaler">
  <mail link="alexander_zuliani@telenet.be">Alexander Zuliani</mail>
</author>

<abstract>
Dit document legt uit hoe je de CHOST variabele van een bestaand systeem kunt
veranderen.
</abstract>

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
<license/>

<version>1</version>
<date>2006-10-09</date>

<chapter>
<title>Introductie</title>
<section>
<body>

<p>
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.
</p>

<p>
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.
</p>

<p>
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.
</p>

</body>
</section>
</chapter>

<chapter>
<title>De CHOST variable aanpassen</title>
<section>
<title>De packages compilen</title>
<body>

<p>
Om te beginnen met het veranderen, pas je <path>/etc/make.conf</path> aan en
verander je de waarde voor <b>CHOST</b> aan aan je noden. Hercompile dat de
volgende pakketten, in deze volgorde:
</p>

<pre caption="Belangerijke systeem tools updaten">
# <i>emerge -av1 binutils gcc glibc</i>
</pre>

<impo>
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 <uri
link="/doc/en/gcc-upgrading.xml">gcc upgrade gids</uri> 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.
</impo>

</body>
</section>
<section>
<title>Controleren of alles werkt</title>
<body>

<p>
Het is tijd om te controleren of je <c>gcc-config</c> en <c>binutils-config</c>
instellingen goed zijn, en je geen overblijfsels hebt in
<path>/etc/env.d/</path>.
</p>

<p>
De output van <c>gcc-config</c> en <c>binutils-config</c> zouden er zo moeten
uitzien (Dit kan veranderen naargelang je gcc versie en CHOST, gcc 4.1.1 en i686
hier):
</p>

<pre caption="Een goede setup controleren">
# <i>gcc-config -l</i>
 [1] i686-pc-linux-gnu-4.1.1 *
# <i>gcc-config -c</i>
i686-pc-linux-gnu-4.1.1

# <i>binutils-config -l</i>
 [1] i686-pc-linux-gnu-2.16.1 *
# <i>binutils-config -c</i>
i686-pc-linux-gnu-2.16.1
</pre>

<p>
Vervolgens controleer je of er verwijzingen zijn naar de oude CHOST in
<path>/etc/env.d/</path>:
</p>

<pre caption="Oude CHOST verwijzingen controleren">
# <i>cd /etc/env.d/</i>
# <i>grep 386 *</i>
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"
</pre>

<note>
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.
</note>

<p>
Alvorens je het bestand verwijderd, zoeken we bestanden met de upgedate CHOST:
</p>

<pre caption="Bestanden met de nieuwe CHOST zoeken.">
# <i>grep 686 *</i>
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"
</pre>

<p>
Deze ziet er goed uit aangezien er telkens slechts ĂĂŠn bestand voor <c>gcc</c>
in <path>/etc/env.d/</path> man zijn (05gcc hier), dus verwijderen we diegene
met verkeerde verwijzingen:
</p>

<pre caption="Bestanden met foute verwijzingen verwijderen">
# <i>rm 05gcc-i386-pc-linux-gnu</i>
</pre>

<p>
Hetzelfde gaat ook op voor <c>binutils</c>. Als er een extra is, zoek dan de
oude en verwijder hem. Controleer dan je <path>/etc/env.d/binutils/</path>
</p>

<pre caption="Binutils controleren">
# <i>cd /etc/env.d/binutils/</i>
# <i>ls -la</i>
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

# <i>cat config-i686-pc-linux-gnu</i>
CURRENT=2.16.1
# <i>cat i686-pc-linux-gnu-2.16.1</i>
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"
</pre>

<p>
Deze ziet er goed uit, die bestanden moeten er zijn. Tijd om verder te gaan naar
de gcc map.
</p>

<pre caption="Gcc controleren">
# <i>cd /etc/env.d/gcc</i>
# <i>ls -la</i>
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

# <i>cat config</i>
CURRENT=i686-pc-linux-gnu-4.1.1

# <i>cat config-i386-pc-linux-gnu</i>
CURRENT=i386-pc-linux-gnu-4.1.1

# <i>cat i686-pc-linux-gnu-4.1.1</i>
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"
</pre>

<p>
<path>config</path> en <path>i686-pc-linux-gnu-4.1.1</path> zijn in orde, maar
<path>config-i386-pc-linux-gnu</path> is ook een overblijfsel die verwijderd
moet worden.
</p>

<note>
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.
</note>

<pre caption="Het foute gcc configuratiebestand verwijderen">
# <i>rm config-i386-pc-linux-gnu</i>
</pre>

<p>
Draai nu de volgende commandos om je omgeving up te daten:
</p>

<pre caption="De omgeving updaten">
# <i>env-update &amp;&amp; source /etc/profile</i>
</pre>

<p>
Controleer dan of alles gefixed is:
</p>

<pre caption="Kijken of alles in orde is">
# <i>grep -r 386 /etc/env.d/</i>
</pre>

<p>
Als je nog steeds iets vindt, moet je een bestand gemist hebben. Probeer het te
vinden alvorens verder te gaan.
</p>

</body>
</section>
<section>
<title>De wijziging afwerken</title>
<body>

<p>
Nu is het nodig om <c>libtool</c> te hermergen en <c>fix_libtool_files.sh</c> 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).
</p>

<pre caption="Verzeker dat je juiste libraries hebt">
# <i>emerge -av1 libtool</i>
# <i>fix_libtool_files.sh 4.1.1 --oldarch i386-pc-linux-gnu</i>
</pre>

<p>
Het is misschien aan te raden elk pakket te hercompilen:
</p>

<pre caption="world recompilen">
# <i>emerge -e world</i>
</pre>

<p>
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:
</p>

<pre caption="Python remergen">
# <i>emerge -av1 python</i>
</pre>

<p>
Alle paketten die perl gebruiken installeren zich in de CHOST direcotry en
moeten dus geremerged worden. In dit geval heb je <c>qfile</c> niet
geïnstalleerd, en moet je dus eerst <c>app-portage/portage-utils</c>
installeren.
</p>

<pre caption="Perl pakketen hermergen">
# <i>emerge -av portage-utils</i>
# <i>emerge -av1 `qfile /usr/lib/perl* -Cq | sort -u`</i>
</pre>

<p>
Als je nog pakketen ontdejt die gehercompiled moeten worden, laat de auteur van
dit document het dan weten.
</p>

</body>
</section>
<section>
<title>Veelvoorkomende problemen</title>
<body>

<p>
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:
</p>

<pre caption="Error bericht">
error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
</pre>

<p>
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 <path>ld.so.conf</path>, wat resulteert in een error.
</p>

<p>
Zie de <uri link="/dec/en/gcc-upgrading.xml">gcc upgrade gids</uri> om te zien
wat gerecompiled moet worden na een gcc upgrade.
</p>

<p>
In zeldzame gevallen kan dit ook oude versies van pyton laten crashen. Dit kan
opgelost worden door <path>/usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.6</path> (Pas
aan aan je oude chost en gcc versie) aan <path>/etc/ld.so.conf</path>. Draai dan
<c>ldconfig</c> en <c>emerge libstdc++-v3</c>. Zoals je ziet is het dus beter
dit probleem te ontwijken. Verander CHOST en je gcc versie niet tegelijkertijd.
</p>

</body>
</section>
<section>
<title>Feedback</title>
<body>

<p>
Dit zou het moeten zijn. feedback (Al dan niet positief) is welkom. Stuur een
email naar <mail>amnde@gentoo.org</mail> (Engels) Of post op <uri
link="http://forums.gentoo.org/viewtopic-t-494147.html">Dit topic in het
forum</uri>. Veel in deze howto komt van vapier, bedankt voor je hulp!
</p>

</body>
</section>
</chapter>
</guide>
