A CHOST változó megváltoztatása

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Changing the CHOST variable and the translation is 100% complete.

Ez a dokumentum elmagyarázza azt, hogy miként lehet megváltoztatni egy meglévő rendszer CHOST változóját.

A CHOST változó megváltoztatása egy nagy probléma, ami komolyan felboríthatja a rendszert. De hát, akkor miért van erre útmutató, ha ekkora pusztítást tud okozni?

Vannak bizonyos helyzetek, amikor a CHOST változó megváltoztatása elkerülhetetlen. Ezek többségére a normál működés során soha nem lenne szükség (például azért, mert egy új architektúra esetén bootstrapping-elést vonnak be). Néha azonban, például a profilváltás a CHOST változó megváltoztatásával járhat. Pl. a MIPS gépek 17.0-ról 23.0-ra való frissítése esetén, mert beállításainkat a közös szabványokhoz igazítjuk.

Az itt található utasítások követése után is előfordulhatnak problémák, ezért kérjük, figyelmesen olvassa el és hajtsa végre azokat. Ebben a példában a CHOST változó mips64-unknown-linux-gnu -ról mips64-unknown-linux-gnuabin32 -re változik. Kérjük, változtassa meg a parancsokat az adott helyzetnek megfelelően.

A make.conf fájl frissítése

A CHOST változó módosításának megkezdéséhez szerkessze az /etc/portage/make.conf fájlt, és adja hozzá/módosítsa a CHOST értéket a követelményeknek megfelelően.

FILE /etc/portage/make.conf
CHOST="mips64-unknown-linux-gnuabin32"

Vegye figyelembe, hogy a profilok alapértelmezett beállítást biztosítanak a CHOST számára. A helyzettől függően előfordulhat, hogy felül kell írni az /etc/portage/make.conf fájlban, vagy el kell távolítani egy felülírást az /etc/portage/make.conf fájlban. Mindenesetre az a fontos, hogy az effektív érték megváltozzon.

Kérjük, vegye figyelembe, hogy ha a profil alapértelmezett értékétől eltérő CHOST-értéket kíván használni, akkor előfordulhat, hogy a CHOST_${ABI} változót is frissíteni kell. Az aktuálisan beállított profil ezen változójának értékét a portageq eszközzel lehet lekérdezni:

user $portageq envvar ABI
n32
user $portageq envvar CHOST_n32
mips64-unknown-linux-gnuabin32

Ha ez az érték egyenlő a CHOST értékkel, akkor jó. Ellenkező esetben írja felül azt is, pl.:

FILE /etc/portage/make.conf
CHOST_n32="mips64-unknown-linux-gnuabin32"

A programcsomagok készítése

Important
Általában célszerű újra ugyanazokra a verziókra felépíteni a programcsomagokat, mint amikor a CHOST váltás előtt voltak, azaz kerülni kell a frissítések kombinálását vele. Ha több bővítőhely (slot) van telepítve, akkor távolítsa el a felesleges bővítőhelyeket (slotokat), vagy építse újra mindegyiket. Ha ez nem lehetséges, akkor kérjük, először frissítse a programcsomagokat (a régi CHOST-szal). Bár nem lehetetlen megtenni, de nehéz megjósolni, hogy mely lehetséges problémák merülhetnek fel, és szinte lehetetlen ezeket ebben az útmutatóban dokumentálni.
Important
Ha a CHOST változtatás más változtatásokkal együtt történik, (pl. a profilfrissítés során kérjük), akkor olvassa el az ott található dokumentációt is, hogy a különböző lépések ne zavarjanak.

Ebben a sorrendben építse újra a következő programcsomagokat:

root #emerge --ask --oneshot sys-devel/binutils
Note
Szükséges lehet a binutils-config futtatása a gcc fordítása előtt.
root #emerge --ask --oneshot sys-devel/gcc

A glibc alapú rendszerekhez:

root #emerge --ask --oneshot sys-libs/glibc

A musl alapú rendszerekhez:

root #emerge --ask --oneshot sys-libs/musl

Dolgok ellenőrzése, hogy működnek-e

Itt az ideje, hogy megbizonyosodjunk arról, hogy a gcc-config és a binutils-config fájlok beállításai észszerűek-e, és vannak-e maradék fájlok az /etc/env.d/ könyvtárban.

A gcc-config és a binutils-config kimenetének a következőképpen kell kinéznie:

Note
A kimenet a gcc verziójától és a CHOST beállításaitól függően változhat, sőt el is eltérhet. Az alábbi példa a gcc 12-ik verzióját használja a mips-en.
root #gcc-config -l
 [1] mips64-unknown-linux-gnuabin32-12 *
root #gcc-config -c
mips64-unknown-linux-gnuabin32-12
root #binutils-config -l
 [1] mips64-unknown-linux-gnuabin32-2.39 *
# binutils-config -c
mips64-unknown-linux-gnuabin32-2.39

Ezután ellenőrizze, hogy vannak-e hivatkozások a régi CHOST változóra a /etc/env.d/ könyvtárban:

root #cd /etc/env.d/
root #grep linux-gnu *
04gcc-mips64-unknown-linux-gnu:MANPATH="/usr/share/gcc-data/mips64-unknown-linux-gnu/12/man"
04gcc-mips64-unknown-linux-gnu:INFOPATH="/usr/share/gcc-data/mips64-unknown-linux-gnu/12/info"
04gcc-mips64-unknown-linux-gnuabin32:MANPATH="/usr/share/gcc-data/mips64-unknown-linux-gnuabin32/12/man"
04gcc-mips64-unknown-linux-gnuabin32:INFOPATH="/usr/share/gcc-data/mips64-unknown-linux-gnuabin32/12/info"
05binutils:MANPATH=/usr/share/binutils-data/mips64-unknown-linux-gnuabin32/2.39/man
05binutils:INFOPATH=/usr/share/binutils-data/mips64-unknown-linux-gnuabin32/2.39/info

Itt a binutils rendben van - egy fájl van, és csak hivatkozásokat tartalmaz az új CHOST-ra. A gcc esetében van egy fájl az új és a régi CHOST értékhez is, ezért törölje a régit:

root #rm 04gcc-mips64-unknown-linux-gnu

Ugyanez vonatkozik a binutils-ra is – ha van még egy, nézze meg, melyik az elavult, és törölje azt. Ezután ellenőrizze az /etc/env.d/binutils/ tartalmát:

root #cd /etc/env.d/binutils/
root #ls -l
total 12
-rw-r--r-- 1 root root  13 Dec  9 22:16 config-mips64-unknown-linux-gnu
-rw-r--r-- 1 root root  13 Dec 31 17:00 config-mips64-unknown-linux-gnuabin32
-rw-r--r-- 1 root root 117 Dec 31 16:59 mips64-unknown-linux-gnuabin32-2.39
root #cat config-mips64-unknown-linux-gnuabin32
CURRENT=2.39
root #cat mips64-unknown-linux-gnuabin32-2.39
TARGET="mips64-unknown-linux-gnuabin32"
VER="2.39"
LIBPATH="/usr/lib32/binutils/mips64-unknown-linux-gnuabin32/2.39"

Van egy elavult fájl a régi CHOST-tal a config-mips64-unknown-linux-gnu néven. Törölje azt.

root #rm config-mips64-unknown-linux-gnu

Ideje továbblépni a gcc/ könyvtárba.

root #cd /etc/env.d/gcc
# ls -l
total 12
-rw-r--r-- 1 root root  36 Dec 30 11:31 config-mips64-unknown-linux-gnu
-rw-r--r-- 1 root root  42 Dec 31 23:54 config-mips64-unknown-linux-gnuabin32
-rw-r--r-- 1 root root 353 Dec 31 23:52 mips64-unknown-linux-gnuabin32-12
root #cat config-mips64-unknown-linux-gnuabin32
CURRENT=mips64-unknown-linux-gnuabin32-12
root #cat config-mips64-unknown-linux-gnu
CURRENT=mips64-unknown-linux-gnu-12
root #cat mips64-unknown-linux-gnuabin32-12
GCC_PATH="/usr/mips64-unknown-linux-gnuabin32/gcc-bin/12"
LDPATH="/usr/lib/gcc/mips64-unknown-linux-gnuabin32/12"
MANPATH="/usr/share/gcc-data/mips64-unknown-linux-gnuabin32/12/man"
INFOPATH="/usr/share/gcc-data/mips64-unknown-linux-gnuabin32/12/info"
STDCXX_INCDIR="g++-v12"
CTARGET="mips64-unknown-linux-gnuabin32"
GCC_SPECS=""
MULTIOSDIRS="../lib32"

A config-mips64-unknown-linux-gnuabin32 és a mips64-unknown-linux-gnuabin32-12 rendben van, de a config-mips64-unknown-linux-gnu egy másik maradék, amelyet el kell távolítani.

Note
Az elavult gcc-verzióra való hivatkozásokat tartalmazó fájl neve is eltérő lehet. Fontos, hogy a fájl tartalmát azonosítsa be, ne csak a névét.
root #rm config-mips64-unknown-linux-gnu

Most futtassa a következő parancsokat a környezet frissítésének érdekében:

root #env-update && source /etc/profile

Ezután ellenőrizze, hogy minden javítva lett-e az /etc/env.d-ben. Ha még mindig találhatóak fájlok, akkor próbálja meg felkutatni őket, mielőtt folytatná.

A változtatás befejezése

Most újra szükséges a sys-devel/libtool programcsomag létrehozása az emerge parancs segítségével:

root #emerge --ask --oneshot libtool

Most már minden programcsomag újraépíthető:

root #emerge --ask --emptytree @world

Elméletileg nem kell erre, de nem lehet 100%-ban garantálni, hogy ez valóban így van. Alternatívaként lehetőség van az összes ismert problémás programcsomag manuális újraépítésére:

  • A multilib programcsomagok CHOST előtaggal vagy fejléc becsomagolással,
  • Perl, Python és egyéb eszközök, amelyek tárolják a konfigurált fordítói útvonalat.
root #emerge --ask --oneshot /usr/bin/mips64-unknown-linux-gnu-* /usr/include/mips64-unknown-linux-gnu /usr/lib/llvm/*/bin/mips64-unknown-linux-gnu-* dev-lang/perl dev-lang/python

Vegye figyelembe, hogy azokat az elérési utakat, amelyek nem vonatkoznak a jelenlegi rendszerre, el kell távolítani a fenti meghívásból.

Ha más programcsomagokkal találkozik, amelyek újrafordításra szorulnak, akkor kérjük, hogy tudassa velünk az útmutató vitalapján.

Gyakori problémák

Már nem olyan sok. Ez általában csak addig működik, amíg nem történik igazán egzotikus változás. Ügyeljen arra, hogy a CHOST váltást ne kombinálja más lépésekkel. Az alábbi jegyzetek némelyike ​​nagyon régi...

Néhány felhasználó hibás programcsomagokról számolt be, amikor a gcc 3.3-ról a 4.1-re frissített a CHOST változó megváltoztatásával egyidejűleg (kérjük, ne tegye ezt), amelyeket újra kell fordítani. Például a sys-apps/groff és a mail-mta/courier :

CODE Error message
error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory

Ez azért történik, mert a frissítés során a CHOST változó nem egyezik pontosan a CTARGET változó értékével, így a fordító azt feltételezi, hogy a rendszer keresztfordítást használ. Ennek következtében az LDPATH nem kerül be az ld.so.conf fájlba, ami ezt a hibát eredményezi.

Tekintse meg a GCC frissítési útmutatóját, annak kiderítésére, hogy pontosan mit kell újjáépíteni egy GCC frissítés után.

Egyes ritka esetekben ez a python régi verzióit is tönkreteheti. Ezt úgy lehet javítani, hogy a /usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.6 fájlt (a régi CHOST és gcc verziónak megfelelően) hozzáadja az /etc/ld.so.conf fájlhoz, futtatva az ldconfig parancsot, és ezt követően a majd előjön a emerge libstdc++-v3 parancsot. Azonban, mint látható, ezt a helyzetet el kell kerülni. Kérjük, ne változtassa meg egyszerre a CHOST változót és a gcc-t.

Visszajelzés

Ez minden. A visszajelzéseket (ha működött, ha meghiúsult vagy ha más problémák merültek fel) szívesen fogadjuk. Kérjük, használja a vitaoldalt, vagy tegye közzé ezt a fórumszálat. Ebben az útmutatóban sok minden a vapier nevű felhasználótól származik. Köszönjük a segítségét!


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Wernfried Haas, Mike Frysinger (vapier) , Chris White
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.